сервер ддосили (CentOS release 6.6, ядро 3.10.23-xxxx-std-ipv6-64) и на помощь пришла статья http://habrahabr.ru/post/204508/, но к большому сожалению сервер OVH как часто бывает на виртуализированных серверах (например VMware vSphere и других) правила вида
iptables -I INPUT -s x.x.x.x -j DROP
ничего не блокируют и типа заблокированная айпиха конектится и дальше, почему я нигде не нашел (имеется ввиду что за фигня с iptables на виртуальных машинах) и никто мне до сих пор не рассказал (в свое время чуть голову не слома думая как такое может быть), если кто-то из читающих будет знать отпишитесь в коментах
зато на этом сервере заработал ipset (которые кстати и благодаря своему бинарному дереву работает побыстрее iptables) и наработка автора статьи на хабре была модифицирована под ipset, которые в отличии от iptables работал. Собственно создаем таблицу ipset
cat /etc/ipset.conf
#!/bin/bash
/usr/sbin/ipset -N access iphash
#!/bin/bash
/usr/sbin/ipset -N access iphash
не забываем
chmod +x /etc/ipset.conf
/etc/ipset.conf
а также прописывает в автозапуск
tail -3 /etc/rc.local
/etc/ipset.conf
/sbin/service iptables start
/sbin/service fail2ban restart
/etc/ipset.conf
/sbin/service iptables start
/sbin/service fail2ban restart
2 последние строки нужно поскольку rc.local выполнится уже после запуска iptables, а сервис iptables не стартанет поскольку таблица ipset не создана, а fail2ban после запуска iptables конечно лучше рестартануть. Также первым правилом в /etc/sysconfig/iptables добавляем
-A INPUT -p tcp -m set --match-set access src -m tcp -m multiport --dports 80,443 -j DROP
сам скрипт который будет блокировать айпихи, у которых больше 50 подключений (можете поставить 20 например), также не забываем chmod +x /usr/local/ddos/ddos.sh
cat /usr/local/ddos/ddos.sh
#!/bin/sh
# find all connection and save them to file ddos.iplist in tmp dir
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | grep -v x.x.x.x | uniq -c | sort -n > /tmp/ddos.iplist
# empty script which ban ips
cat /dev/null > /tmp/iptables_ban.sh
# create DROP rule for 50 more aggresive bots
awk '{if ($1 > 50) {print "/usr/sbin/ipset -A access " $2 "" }}' /tmp/ddos.iplist >> /tmp/iptables_ban.sh
# this rule need for for creating file with analysing all iptables rules
echo "/usr/sbin/ipset -L access > /tmp/iptables.log" >> /tmp/iptables_ban.sh
# start script for ip banning
bash /tmp/iptables_ban.sh
#!/bin/sh
# find all connection and save them to file ddos.iplist in tmp dir
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | grep -v x.x.x.x | uniq -c | sort -n > /tmp/ddos.iplist
# empty script which ban ips
cat /dev/null > /tmp/iptables_ban.sh
# create DROP rule for 50 more aggresive bots
awk '{if ($1 > 50) {print "/usr/sbin/ipset -A access " $2 "" }}' /tmp/ddos.iplist >> /tmp/iptables_ban.sh
# this rule need for for creating file with analysing all iptables rules
echo "/usr/sbin/ipset -L access > /tmp/iptables.log" >> /tmp/iptables_ban.sh
# start script for ip banning
bash /tmp/iptables_ban.sh
где x.x.x.x - на всякий случай айпиха самого хоста (осталось от iptables теста), так на всякий случай. Задача в крон
*/10 * * * * /bin/sh /usr/local/ddos/ddos.sh >/dev/null 2>&1
вот собственно и все - спасибо автору на хабре за скрипт.
Также не забываем вырубить в апаче ipv6, поскольку скрипт будет некоректно получать айпихи
vim /etc/httpd/conf.d/httpd.conf
Listet 0.0.0.0:80
service httpd restart
Также не забываем вырубить в апаче ipv6, поскольку скрипт будет некоректно получать айпихи
vim /etc/httpd/conf.d/httpd.conf
Listet 0.0.0.0:80
service httpd restart
вырубать нужно если в выводе
netstat -ant | grep :80
вы видите ffff
tcp 0 0 ::ffff:3.18.16.2:80 ::ffff:5.135.39.9:3571 TIME_WAIT
tcp 0 0 ::ffff:3.18.16.2:80 ::ffff:200.93.191.251:1534 TIME_WAIT
netstat -ant | grep :80
вы видите ffff
tcp 0 0 ::ffff:3.18.16.2:80 ::ffff:5.135.39.9:3571 TIME_WAIT
tcp 0 0 ::ffff:3.18.16.2:80 ::ffff:200.93.191.251:1534 TIME_WAIT
http://linux-notes.org/zashhita-ot-ddos-s-iptables-gotovy-j-skript/ Хорошая статья по данной теме
ОтветитьУдалить