Боримся с ддос

Намеренно не стал усложнять скрипт условиями и тд.
grep -Ve  -исключение, тут мои  доверительные айпи, синтаксис думаю понятен.
/root/ddos/much_conn.txt - создайте не стал усложнять скрипт проверкой наличия каталога.

 
#!/bin/bash
#Смотрм количество подключений и разных айи
netstat -ntu | awk '{print $5}' | grep -vE "(Address|servers|77.37.156.60|79.137.175.245|192.168.5.201|95.163.251.234|127.0.0.1|8.8.8.8|8.8.4.4)" | cut -d: -f1 | sort | uniq -c | sort -n| sed 's/^[ \t]*//'
netstat -ntu | awk '{print $5}' | grep -vE "(Address|servers|77.37.156.60|79.137.175.245|192.168.5.201|95.163.251.234|127.0.0.1|8.8.8.8|8.8.4.4)" | cut -d: -f1 | sort | uniq -c | sort -n| sed 's/^[ \t]*//' | awk '{if ($1 > 20) print$2}' > /root/ddos/much_conn.txt
 sleep 3
#сохраняем список в файл, файл предварительно создайте!
 list=$(sort -u /root/ddos/much_conn.txt)
 
# Создаем группу если ее нет? а так же добавляем дроп для этой группы
ipset -L much_conn > /dev/null
if [ $? -eq 0 ]
then
  echo "Группа much_conn существует"
else
  echo "Создаем  much_conn создана" >&2
        ipset -N much_conn iphash timeout 8640
        # добавляем из файла в
        echo "Добавляем правило в iptables банить  группу much_conn" >&2
        iptables -A INPUT -m set --match-set much_conn src -j DROP
 fi
 
echo "Подгружаем список из файла  и баним "
 
for ipnet in $list
    do
        ipset -A much_conn $ipnet
        echo "ipset -A much_conn" $ipnet
    done
# ПОСМОТРЕТь
echo "Забанено " $(cat /root/ddos/much_conn.txt |wc -l)
echo "Забанено всего:"  $(ipset -L much_conn | wc -l)


link=$(netstat -ntu | awk '{print $5}' | grep -vE "(Address|servers|77.37.156.60|79.137.175.245|192.168.5.201|95.163.251.234|127.0.0.1|8.8.8.8|8.8.4.4)" | cut -d: -f1 | wc -l)
 
if [ "1000" -le "$link" ]
then
  echo "Подключений больше 1000 и начинаем банить по  жесткой" $link
          iptables -t filter -A INPUT -s 104.0.0.0/8 -j DROP
        iptables -t filter -A INPUT -s  45.5.0.0/16 -j DROP
        iptables -t filter -A INPUT -s  172.121.0.0/16 -j DROP
        service php7.1-fpm stop
        sleep 3
        service nginx restart
        service php7.1-fpm start
else
echo "Подключений меньше 1000 и баним каждый айпи отдлельно "$link

fi

Вешаем это на крон

*/2 * * * * /usr/bin/antiddos

Оставить комментарий