Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Защита от DDoS ат ак
Vyacheslav Kokorin wrote:
> Здравствуйте, Митрофанов!
>
> Wednesday, March 29, 2006, 6:10:13 PM, you wrote:
>
> ММВ> Пару дней мои сервера бомбили такими запросами, до 4000 в секунду:
>
> ММВ> 212.220.207.103 - - [24/Mar/2006:13:54:15 +0300] "POST
> /users/posts/edit/1135161334 HTTP/1.1" 302 5 "http://www.el
> ММВ> 68.9.143.23 - - [24/Mar/2006:13:54:16 +0300] "GET
> /market/?searchfor=E8E7EEEBFFF2EEF0FB HTTP/1.1" 200 11412 "-" "-
> ММВ> 84.190.74.124 - - [24/Mar/2006:13:54:16 +0300] "GET
> /market/?searchfor=E8E7EEEBFFF2EEF0FB HTTP/1.1" 200 11412 "-"
> ММВ> 68.85.245.55 - - [24/Mar/2006:13:54:16 +0300] "GET
> /market/?searchfor=E8E7EEEBFFF2EEF0FB HTTP/1.1" 200 11405 "-" "
> ММВ> 84.190.74.124 - - [24/Mar/2006:13:54:16 +0300] "GET
> /market/?searchfor=E8E7EEEBFFF2EEF0FB HTTP/1.1" 200 11405 "-"
> ММВ> 68.85.245.55 - - [24/Mar/2006:13:54:17 +0300] "GET
> /market/?searchfor=E8E7EEEBFFF2EEF0FB HTTP/1.1" 200 11412 "-" "
> ММВ> 220.254.0.4 - - [24/Mar/2006:13:54:17 +0300] "GET
> /market/?searchfor=E8E7EEEBFFF2EEF0FB HTTP/1.1" 200 11412 "-" "-
> ММВ> 24.28.89.43 - - [24/Mar/2006:13:54:17 +0300] "GET
> /market/?searchfor=E8E7EEEBFFF2EEF0FB HTTP/1.1" 200 11412 "-" "-
> ММВ> 220.254.0.4 - - [24/Mar/2006:13:54:17 +0300] "GET
> /market/?searchfor=E8E7EEEBFFF2EEF0FB HTTP/1.1" 200 11412 "-" "-
> ММВ> 220.254.0.4 - - [24/Mar/2006:13:54:17 +0300] "GET
> /market/?searchfor=E8E7EEEBFFF2EEF0FB HTTP/1.1" 200 11412 "-" "-
> ММВ> 68.45.47.242 - - [24/Mar/2006:13:54:17 +0300] "GET
> /market/?searchfor=E8E7EEEBFFF2EEF0FB HTTP/1.1" 200 11412 "-" "
> ММВ> 68.45.47.242 - - [24/Mar/2006:13:54:17 +0300] "GET
> /market/?searchfor=E8E7EEEBFFF2EEF0FB HTTP/1.1" 200 11412 "-" "
> ММВ> 68.45.47.242 - - [24/Mar/2006:13:54:17 +0300] "GET
> /market/?searchfor=E8E7EEEBFFF2EEF0FB HTTP/1.1" 200 11412 "-" "
> ММВ> 84.190.74.124 - - [24/Mar/2006:13:54:17 +0300] "GET
> /market/?searchfor=E8E7EEEBFFF2EEF0FB HTTP/1.1" 200 11412 "-"
> ММВ> 83.27.110.151 - - [24/Mar/2006:13:54:17 +0300] "GET
> /market/?searchfor=E8E7EEEBFFF2EEF0FB HTTP/1.1" 200 11405 "-"
> ММВ> 84.190.74.124 - - [24/Mar/2006:13:54:17 +0300] "GET
> /market/?searchfor=E8E7EEEBFFF2EEF0FB HTTP/1.1" 200 11412 "-"
> ММВ> 84.190.74.124 - - [24/Mar/2006:13:54:17 +0300] "GET
> /market/?searchfor=E8E7EEEBFFF2EEF0FB HTTP/1.1" 200 11412 "-"
> ММВ> 83.27.110.151 - - [24/Mar/2006:13:54:17 +0300] "GET
> /market/?searchfor=E8E7EEEBFFF2EEF0FB HTTP/1.1" 200 11412 "-"
> ММВ> 68.45.47.242 - - [24/Mar/2006:13:54:17 +0300] "GET
> /market/?searchfor=E8E7EEEBFFF2EEF0FB HTTP/1.1" 200 11412 "-" "
> ММВ> 222.161.3.43 - - [24/Mar/2006:13:54:17 +0300] "GET
> /market/?searchfor=E8E7EEEBFFF2EEF0FB HTTP/1.1" 200 11412 "-" "
>
> ММВ> Что посоветуете для защиты soft\hard?
>
> Работоспособное решение на коленке, может кому пригодится:
>
>
> Вариант реакции постфактум, когда сигнатуры запросов уже ясны (а
> обычно это так и есть)
>
> Забиваем IP-адреса атакующих в таблицу ipfw (добавив соответствующее
> запрещающее правило).
> Такой скрипт во время атаки можно выполнять раз в минуту или чаще.
>
> #!/bin/sh
>
> ips=`tail -n 1000 /var/log/nginx-attack.log | egrep 'E8E7EEEBFFF2EEF0FB' |
> awk '{print $1}' | sort | uniq`
> for ip in $ips; do
> if ! grep $ip ./blocked >/dev/null; then
> echo " ADDING $ip"
> ipfw table 1 add $ip
> echo $ip >>./blocked
> fi
> done
>
> Поиск по таблицам в ipfw осуществляется крайне быстро.
> Если это iptables или другое, думаю существует нечто подобное.
>
> Так же по этому же правилу можно наблюдать за ходом снижения атаки.
>
> Пару дней выдержать можно если канал не забивается полностью.
>
Всегда можно сделать еще проще:
$IPTABLES -A ext_tcp -p TCP --dport 80 -m state --state NEW -m recent
--name fhttp --set
$IPTABLES -A ext_tcp -p TCP --dport 80 -m state --state NEW -m recent
--name fhttp --update --seconds 120 --hitcount 360 -j DROP
Правило работает при запросах более 3 в секунду в двухминутном
интервале. Учитывая, что DOS это не DDOS - можно сказать что решение
наиболее правильное. Главное подобрать параметры правильные, чтобы
корректные клиенты не заваливались на дроп.
--
Mike Baikov <mike at baikov dot com>
GameDot Labs Developer
|