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:
> Здравствуйте, Michail!
>
> Thursday, March 30, 2006, 10:31:02 AM, you wrote:
>
> MB> 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 или другое, думаю существует нечто подобное.
>>>
>>> Так же по этому же правилу можно наблюдать за ходом снижения атаки.
>>>
>>> Пару дней выдержать можно если канал не забивается полностью.
>>>
> MB> Всегда можно сделать еще проще:
>
> MB> $IPTABLES -A ext_tcp -p TCP --dport 80 -m state --state NEW -m recent
> MB> --name fhttp --set
> MB> $IPTABLES -A ext_tcp -p TCP --dport 80 -m state --state NEW -m recent
> MB> --name fhttp --update --seconds 120 --hitcount 360 -j DROP
>
>
> MB> Правило работает при запросах более 3 в секунду в двухминутном
> MB> интервале. Учитывая, что DOS это не DDOS - можно сказать что решение
> MB> наиболее правильное.
>
> MB> Главное подобрать параметры правильные, чтобы
> MB> корректные клиенты не заваливались на дроп.
>
> Это, как правило, самая сложная задача. Часто встречается ddos грамортный,
> такой, что отличить клиентов от атакующих хостов на основании промежутков
> времени сложно. Но как вариант, конечно, вполне подходит.
>
> Кстати, как справляется iptables c stateful правилами, когда количество их
> исчисляется тысячями?
>
>
Знаете, это уже оффтоп тут, но я думаю можно найти в специализированной
рассылке :)
--
Mike Baikov <mike at baikov dot com>
GameDot Labs Developer
|