ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
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





 




Copyright © Lexa Software, 1996-2009.