Боримся с ддос
Намеренно не стал усложнять скрипт условиями и тд.
grep -Ve -исключение, тут мои доверительные айпи, синтаксис думаю понятен.
/root/ddos/much_conn.txt - создайте не стал усложнять скрипт проверкой наличия каталога.
Вешаем это на крон
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
Оставить комментарий