Re[2]: Защита от DDoS атак

Vyacheslav Kokorin slava at peterhost.ru
Thu Mar 30 10:42:08 MSD 2006


Здравствуйте, 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 правилами, когда количество их
исчисляется тысячями?


-- 
С уважением, Вячеслав Кокорин
Системный администратор хостинга PeterHost.Ru
Тел: (812) 34-777-43
     (495) 540-56-33
http://www.PeterHost.Ru






More information about the nginx-ru mailing list