rooty писал(а): ↑25.09.2009 03:14
Здравствуйте!
Вот столкнулся с проблемой DDoS'а.

При чем все смешно... я точно не уверен, т.к. аксес логи энджинка перенаправлялись в /dev/null , но похоже в досе участвовало где-то 4 машины всего ( . Если не меньше. А т.к. На ВПСке мне выделено не много ресурсов, некоторые ПО ложатся, а мастер отвечает, что-то вроде
"виртуальный сервер достиг предела выделенных ему ресурсов numtcpsock: 12686 раз."
Досят nginx простыми запросами страниц.
Конечно, в nginx'е можно попробовать поправить keepalive_timeout 60 , сменить на 0, но мне кажется, это не выход... поправьте меня, если я чего-то не правильно сформулировал.
Вот подумал составить правило в , т.к. в голову другого нечего не приходит.
Может кто поделиться советами, что тут еще можно сделать?
На счет iptables, к сожалению я с ним плохо знаком, составить правило нужно что-то вроде:
глобально не более 5 запросов с одного IP на 80 порт и не более 200 IP одноврменно на 80 порт
не более 200 IP на случай если досят не 4 машины, а больше...
Спасибо огромное за помощь.
Применение mod_evasive для защиты от ДДОС.
И так установка mod_evasive для Apache 1.3 и Apache 2.2 в портаx его нету так что нуно качать
http://www.zdziarski.com/projects/mod_evasive/mod_evasive_1.10.1.tar.gz
Код: Выделить всё
srv2# wget http://www.zdziarski.com/projects/mod_evasive/mod_evasive_1.10.1.tar.gz
srv2# tar xfz mod_evasive_1.10.1.tar.gz
srv2# cd mod_evasive
srv2# whereis apxs
apxs: /usr/local/sbin/apxs /usr/local/man/man8/apxs.8.gz // По умолчанию он тут
srv2# /usr/local/sbin/apxs -i -a -c mod_evasive.c // для Apache 1.3
srv2# /usr/local/sbin/apxs -i -a -c mod_evasive2.c // для Apache 2.2
srv2# rehash
После успешной установки в конфиг апача нужно добавить несколько строк:
Для
Apache 1.3
Код: Выделить всё
<IfModule mod_evasive.c>
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 300
</IfModule>
Для
Apache 2.2
Код: Выделить всё
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 300
</IfModule>
После чего перезапустим Апач
В падарок к етому модулю в архиве сразу предоставлен тест для проверки работоспособности модуля. С вот таким содержанием.
Код: Выделить всё
#!/usr/bin/perl
# test.pl: small script to test mod_dosevasive's effectiveness
use IO::Socket;
use strict;
for(0..100) {
my($response);
my($SOCKET) = new IO::Socket::INET( Proto => "tcp",
PeerAddr=> "127.0.0.1:80");
if (! defined $SOCKET) { die $!; }
print $SOCKET "GET /?$_ HTTP/1.0\n\n";
$response = <$SOCKET>;
print $response;
close($SOCKET);
}
Только не забудте поставить на него права для запуска
chmod +r имя файла.
Если после запуска скрипта видим примерно вот такую штуку
Код: Выделить всё
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
Значит все работает отлично.
P.S. Проверял на Апаче 1,3 кол-во машин 30 первых 5 - 10 минут ДДОС атаки держит, дальше Апач всетаки падает. Всетаки Апач дает ответ на запрос хоть и Forbidden, но отвечает. А окончательно проблему возможно решить с ДОС и ДДОС атаками с стандартным фаерволом OpenBSD тоесть PF.
Настройка PF
Код: Выделить всё
ext_if="em0"
table <ddos> persist
block in log quick from <ddos>
pass in on $ext_if proto tcp to $ext_if \
port www flags S/SA keep state \
( max-src-conn-rate 100/5, overload <ddos> flush)
А всех кто попал к нам в блек лист можем посмотреть вот так:
А удалить вот так
А для удобства я кинул в крон вот такую строчку
чтобы каждых 20 минут само чистило