ПРОЕКТЫ 


  АРХИВ 


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:
> Здравствуйте, Митрофанов!
> 
> 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





 




Copyright © Lexa Software, 1996-2009.