DDoS и iptables ... помогите составить правило (не более 5 запросов с одного IP на 80 порт и не более 200 IP одноврмен)
Модератор: SLEDopit
DDoS и iptables ... помогите составить правило
Здравствуйте!
Вот столкнулся с проблемой DDoS'а.
При чем все смешно... я точно не уверен, т.к. аксес логи энджинка перенаправлялись в /dev/null , но похоже в досе участвовало где-то 4 машины всего ( . Если не меньше. А т.к. На ВПСке мне выделено не много ресурсов, некоторые ПО ложатся, а мастер отвечает, что-то вроде
"виртуальный сервер достиг предела выделенных ему ресурсов numtcpsock: 12686 раз."
Досят nginx простыми запросами страниц.
Конечно, в nginx'е можно попробовать поправить keepalive_timeout 60 , сменить на 0, но мне кажется, это не выход... поправьте меня, если я чего-то не правильно сформулировал.
Вот подумал составить правило в , т.к. в голову другого нечего не приходит.
Может кто поделиться советами, что тут еще можно сделать?
На счет iptables, к сожалению я с ним плохо знаком, составить правило нужно что-то вроде:
глобально не более 5 запросов с одного IP на 80 порт и не более 200 IP одноврменно на 80 порт
не более 200 IP на случай если досят не 4 машины, а больше...
Спасибо огромное за помощь.
Вот столкнулся с проблемой DDoS'а.
При чем все смешно... я точно не уверен, т.к. аксес логи энджинка перенаправлялись в /dev/null , но похоже в досе участвовало где-то 4 машины всего ( . Если не меньше. А т.к. На ВПСке мне выделено не много ресурсов, некоторые ПО ложатся, а мастер отвечает, что-то вроде
"виртуальный сервер достиг предела выделенных ему ресурсов numtcpsock: 12686 раз."
Досят nginx простыми запросами страниц.
Конечно, в nginx'е можно попробовать поправить keepalive_timeout 60 , сменить на 0, но мне кажется, это не выход... поправьте меня, если я чего-то не правильно сформулировал.
Вот подумал составить правило в , т.к. в голову другого нечего не приходит.
Может кто поделиться советами, что тут еще можно сделать?
На счет iptables, к сожалению я с ним плохо знаком, составить правило нужно что-то вроде:
глобально не более 5 запросов с одного IP на 80 порт и не более 200 IP одноврменно на 80 порт
не более 200 IP на случай если досят не 4 машины, а больше...
Спасибо огромное за помощь.
Re: DDoS и iptables ... помогите составить правило
iptables -t filter -A INPUT -i ppp0 -p tcp --dport 80 -m connlimit --connlimit-above 200 --connlimit-mask 0 -j DROP
iptables -t filter -A INPUT -i ppp0 -p tcp --dport 80 -m connlimit --connlimit-above 200 --connlimit-mask 0 -j LOG --log-prefix "DoS200:"
iptables -t filter -A INPUT -i ppp0 -p tcp --dport 80 --syn -m connlimit --connlimit-above 5 -j DROP
iptables -t filter -A INPUT -i ppp0 -p tcp --dport 80 --syn -m connlimit --connlimit-above 5 -j LOG --log-prefix "DoS5:"
iptables -t filter -A INPUT -i ppp0 -p tcp --dport 80 -j ACCEPT
iptables -t filter -A INPUT -i ppp0 -p tcp --dport 80 -m connlimit --connlimit-above 200 --connlimit-mask 0 -j LOG --log-prefix "DoS200:"
iptables -t filter -A INPUT -i ppp0 -p tcp --dport 80 --syn -m connlimit --connlimit-above 5 -j DROP
iptables -t filter -A INPUT -i ppp0 -p tcp --dport 80 --syn -m connlimit --connlimit-above 5 -j LOG --log-prefix "DoS5:"
iptables -t filter -A INPUT -i ppp0 -p tcp --dport 80 -j ACCEPT
Re: DDoS и iptables ... помогите составить правило
mandreika писал(а): ↑25.09.2009 10:18iptables -t filter -A INPUT -i ppp0 -p tcp --dport 80 -m connlimit --connlimit-above 200 --connlimit-mask 0 -j DROP
iptables -t filter -A INPUT -i ppp0 -p tcp --dport 80 -m connlimit --connlimit-above 200 --connlimit-mask 0 -j LOG --log-prefix "DoS200:"
iptables -t filter -A INPUT -i ppp0 -p tcp --dport 80 --syn -m connlimit --connlimit-above 5 -j DROP
iptables -t filter -A INPUT -i ppp0 -p tcp --dport 80 --syn -m connlimit --connlimit-above 5 -j LOG --log-prefix "DoS5:"
iptables -t filter -A INPUT -i ppp0 -p tcp --dport 80 -j ACCEPT
Спасибо...
Но к сожалению, данный способ не проканает (
Где я арендую ВПС, работает OpenVZ... Я не могу пересобрать ядро... А, на сколько я знаю connlimit работает только с патчем "patch-o-matic"..
В ответ получаю
iptables: No chain/target/match by that name.
Re: DDoS и iptables ... помогите составить правило
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>
После чего перезапустим Апач
Код: Выделить всё
srv2# /usr/local/etc/rc.d/apache restart
В падарок к етому модулю в архиве сразу предоставлен тест для проверки работоспособности модуля. С вот таким содержанием.
Код: Выделить всё
#!/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
Код: Выделить всё
cat /etc/pf.conf
Код: Выделить всё
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)
А всех кто попал к нам в блек лист можем посмотреть вот так:
Код: Выделить всё
pfctl -t ddos -T show
А удалить вот так
Код: Выделить всё
pfctl -t ddos -T flush
А для удобства я кинул в крон вот такую строчку
чтобы каждых 20 минут само чистило
Код: Выделить всё
*/20 * * * * root pfctl -t ddos -T flush
Re: DDoS и iptables ... помогите составить правило
Sepsys, спасибо за информацию... я читал, про этот mod_evasive, но к сожалению у меня nginx, как я выше и написал... никаких фронт-эндов
да и блочить это на уровне апача, мне кажется, бредовая идея...
ОС gentoo... так что есть только iptables
да и блочить это на уровне апача, мне кажется, бредовая идея...
ОС gentoo... так что есть только iptables
Re: DDoS и iptables ... помогите составить правило
у меня в Debian/Lenny изкаропки connlimit пашет - а работать с индивидуальными ip сессиями только с ним.
Можно использовать критерий limit/сек для syn на 80 порт.
Или замени главную страничку на форму авторизации - кто не прошел проверку блочить Ip
Можно использовать критерий limit/сек для syn на 80 порт.
Или замени главную страничку на форму авторизации - кто не прошел проверку блочить Ip
Re: DDoS и iptables ... помогите составить правило
iptables -A INPUT -p tcp --dport 80 -m iplimit --iplimit-above 10 -j REJECT
iptables v1.4.3.2: Couldn't load match `iplimit':/lib/xtables/libipt_iplimit.so: cannot open shared object file: No such file or directory
Try `iptables -h' or 'iptables --help' for more information.
Видимо совсем, все плохо Т_Т
не все так просто... там несколько вхостов где стоят готовые движки... вмешиваться в код и дописывать это будет не очень хорошо
Re: DDoS и iptables ... помогите составить правило
iptables --append INPUT --in-interface $WAN --protocol tcp --destination-port 21 -m limit --limit 3/minute --jump ACCEPT
может быть поможет?
может быть поможет?
Спасибо сказали:
Re: DDoS и iptables ... помогите составить правило
iptables -t filter -A INPUT -i ppp0 -p tcp --syn --dport 80 -m limit --limit 10/s -j ACCEPT
все остальные Ассепты на 80 порт выброси
Где я арендую ВПС, работает OpenVZ... Я не могу пересобрать ядро... А, на сколько я знаю connlimit работает только с патчем "patch-o-matic"..
На сколько я понимаю тебе не нужно новое ядро - просто скомпилированный модуль connlimit подключить
Ставь себе OpenVZ c точно токим же линупсом, компилируй модуль - закидывай в lib - подключай в iptables
все остальные Ассепты на 80 порт выброси
Где я арендую ВПС, работает OpenVZ... Я не могу пересобрать ядро... А, на сколько я знаю connlimit работает только с патчем "patch-o-matic"..
На сколько я понимаю тебе не нужно новое ядро - просто скомпилированный модуль connlimit подключить
Ставь себе OpenVZ c точно токим же линупсом, компилируй модуль - закидывай в lib - подключай в iptables
Спасибо сказали:
Re: DDoS и iptables ... помогите составить правило
дык. это же ограничение всех АйПишников раз в 10 секунд
а мне OpenVZ даст это сделать? лады, попробую.. спасибо
не дал)
Re: DDoS и iptables ... помогите составить правило
Не дал - что?
Не дал - где?
Не дал - где?
Re: DDoS и iptables ... помогите составить правило
OpenVZ использует одно ядро на всех.... я не могу просто так вмешаться в работу ядра...
connlimit подключить то в ядре нужно? так?
connlimit подключить то в ядре нужно? так?
Re: DDoS и iptables ... помогите составить правило
Для начала всех приветствую, и хочу поблагодарить за очень полезную и актуальную тему mandreika. Что то я вынес полезное и для себя т.к., держу тоже форум в сети. У меня вопрос, если составить так правила, что я сделал заметив как пытаются меня досить (заметил по резкому Рекорду одновременно присутствующих пользователей форума, что не может быть впринципе. Всегда не более 20-30 а тут 179 резко)вот и вопрос, если я так ставлю правила:
То когда голобальный лимт достигнет в 200, скажем за сутки, оно не заблокирует всех? Счётчик будет глобальный обнулятся? Ну как я понял connlimit похож на хашлимит, или это немного другое?
mandreika писал(а): ↑25.09.2009 10:18iptables -t filter -A INPUT -i ppp0 -p tcp --dport 80 -m connlimit --connlimit-above 200 --connlimit-mask 0 -j DROP
iptables -t filter -A INPUT -i ppp0 -p tcp --dport 80 -m connlimit --connlimit-above 200 --connlimit-mask 0 -j LOG --log-prefix "DoS200:"
iptables -t filter -A INPUT -i ppp0 -p tcp --dport 80 --syn -m connlimit --connlimit-above 5 -j DROP
iptables -t filter -A INPUT -i ppp0 -p tcp --dport 80 --syn -m connlimit --connlimit-above 5 -j LOG --log-prefix "DoS5:"
iptables -t filter -A INPUT -i ppp0 -p tcp --dport 80 -j ACCEPT
То когда голобальный лимт достигнет в 200, скажем за сутки, оно не заблокирует всех? Счётчик будет глобальный обнулятся? Ну как я понял connlimit похож на хашлимит, или это немного другое?
Re: DDoS и iptables ... помогите составить правило
Попросить хостера добавить этот модуль, либо, что ещё лучше, организовать правила где-то у себя на оборудовании ещё на входе в дата-центр.
Re: DDoS и iptables ... помогите составить правило
но похоже в досе участвовало где-то 4 машины всего
это явно не дос, вот если бы 4k, то да. А так просто какой то школьник поигрался