Простая защита от DDoS-атаки
DDoS (Distributed Denial of Service) — распределённая атака типа «отказ в обслуживании». Сетевой ресурс выходит из строя в результате множества запросов к нему, отправленных из разных точек. Обычно атака организуется при помощи бот-нетов.
Для начала определяем количество соединений с одного IP к примеру на 443 порт
1
2
3
4
5
6
7
8
9
10
11
$ netstat -ntu | grep ":443\ " | awk '{print $5}'| cut -d: -f1 | sort | uniq -c | sort -nr | more
130 185.215.60.212
19 94.140.142.86
19 3.89.157.122
17 62.148.156.22
17 178.210.35.17
16 217.26.165.15
16 188.17.163.148
15 213.5.120.34
14 95.153.129.96
14 94.25.229.95
Как видно из выдачи, с одного IP идет большое количество соединений.
Чтобы вручную не блокировать IP ботов, напишем Bash скрипт
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ nano /home/script/ddos.sh
#!/bin/sh
# Задаем путь к скриптам
mypath=/home/script
# Определяем все соединения на порт 443 и записываем лог find.log
netstat -ntu | grep ":443\ " | awk '{print $5}'| cut -d: -f1 | sort | uniq -c | sort -nr | grep -v "127.0.0.1" | grep -v "8.8.8.8" > $mypath/find.log
# Создаем DROP правила iptables, блокировать IP если количество коннектов 50 и больше. И сохраняем правила в bash-скрипт ban_ip.sh
awk '{if ($1 > 50) {print "/sbin/iptables -A INPUT -p tcp --dport 443 -s " $2 " -j DROP";}}' $mypath/ddos.iplist >> $mypath/ban_ip.sh
# Запускаем только что созданный скрипт блокировки IP атакующих
/bin/bash $mypath/ban_ip.sh
# Очищаем скрипт ban_ip.sh
cat /dev/null > $mypath/ban_ip.sh
Добавляем скрипт ddos.sh
в cron
1
2
3
4
5
6
7
$ sudo crontab -e
...
# запускать скрипт раз в 5 минут
*/5 * * * * /home/script/ddos.sh
# амнистия раз в месяц
@monthly root iptables -F
Авторский пост защищен лицензией CC BY 4.0 .