DDoS и iptables ... помогите составить правило (не более 5 запросов с одного IP на 80 порт и не более 200 IP одноврмен)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модератор: SLEDopit

Ответить
Аватара пользователя
rooty
Сообщения: 83
ОС: laptop: openSuSE 12.1
Контактная информация:

DDoS и iptables ... помогите составить правило

Сообщение rooty »

Здравствуйте!
Вот столкнулся с проблемой DDoS'а. :(
При чем все смешно... я точно не уверен, т.к. аксес логи энджинка перенаправлялись в /dev/null , но похоже в досе участвовало где-то 4 машины всего ( . Если не меньше. А т.к. На ВПСке мне выделено не много ресурсов, некоторые ПО ложатся, а мастер отвечает, что-то вроде
"виртуальный сервер достиг предела выделенных ему ресурсов numtcpsock: 12686 раз."
Досят nginx простыми запросами страниц.
Конечно, в nginx'е можно попробовать поправить keepalive_timeout 60 , сменить на 0, но мне кажется, это не выход... поправьте меня, если я чего-то не правильно сформулировал.

Вот подумал составить правило в , т.к. в голову другого нечего не приходит.

Может кто поделиться советами, что тут еще можно сделать?

На счет iptables, к сожалению я с ним плохо знаком, составить правило нужно что-то вроде:

глобально не более 5 запросов с одного IP на 80 порт и не более 200 IP одноврменно на 80 порт

не более 200 IP на случай если досят не 4 машины, а больше...

Спасибо огромное за помощь.
Спасибо сказали:
Аватара пользователя
mandreika
Сообщения: 217
ОС: Debian 3,4,5,6

Re: DDoS и iptables ... помогите составить правило

Сообщение mandreika »

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
Спасибо сказали:
Аватара пользователя
rooty
Сообщения: 83
ОС: laptop: openSuSE 12.1
Контактная информация:

Re: DDoS и iptables ... помогите составить правило

Сообщение rooty »

mandreika писал(а):
25.09.2009 10:18
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

Спасибо...
Но к сожалению, данный способ не проканает (
Где я арендую ВПС, работает OpenVZ... Я не могу пересобрать ядро... А, на сколько я знаю connlimit работает только с патчем "patch-o-matic".. :(

В ответ получаю
iptables: No chain/target/match by that name.
Спасибо сказали:
Sepsys
Сообщения: 3

Re: DDoS и iptables ... помогите составить правило

Сообщение Sepsys »

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
Спасибо сказали:
Аватара пользователя
rooty
Сообщения: 83
ОС: laptop: openSuSE 12.1
Контактная информация:

Re: DDoS и iptables ... помогите составить правило

Сообщение rooty »

Sepsys, спасибо за информацию... я читал, про этот mod_evasive, но к сожалению у меня nginx, как я выше и написал... никаких фронт-эндов
да и блочить это на уровне апача, мне кажется, бредовая идея...
ОС gentoo... так что есть только iptables
Спасибо сказали:
Аватара пользователя
mandreika
Сообщения: 217
ОС: Debian 3,4,5,6

Re: DDoS и iptables ... помогите составить правило

Сообщение mandreika »

у меня в Debian/Lenny изкаропки connlimit пашет - а работать с индивидуальными ip сессиями только с ним.

Можно использовать критерий limit/сек для syn на 80 порт.


Или замени главную страничку на форму авторизации - кто не прошел проверку блочить Ip
Спасибо сказали:
Аватара пользователя
rooty
Сообщения: 83
ОС: laptop: openSuSE 12.1
Контактная информация:

Re: DDoS и iptables ... помогите составить правило

Сообщение rooty »

mandreika писал(а):
25.09.2009 12:18
у меня в Debian/Lenny изкаропки connlimit пашет - а работать с индивидуальными ip сессиями только с ним.

Можно использовать критерий limit/сек для syn на 80 порт.

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.

Видимо совсем, все плохо Т_Т
mandreika писал(а):
25.09.2009 12:18
Или замени главную страничку на форму авторизации - кто не прошел проверку блочить Ip

не все так просто... там несколько вхостов где стоят готовые движки... вмешиваться в код и дописывать это будет не очень хорошо
Спасибо сказали:
IMB
Сообщения: 2561
ОС: Debian

Re: DDoS и iptables ... помогите составить правило

Сообщение IMB »

iptables --append INPUT --in-interface $WAN --protocol tcp --destination-port 21 -m limit --limit 3/minute --jump ACCEPT
может быть поможет?
Спасибо сказали:
Аватара пользователя
mandreika
Сообщения: 217
ОС: Debian 3,4,5,6

Re: DDoS и iptables ... помогите составить правило

Сообщение mandreika »

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
Спасибо сказали:
Аватара пользователя
rooty
Сообщения: 83
ОС: laptop: openSuSE 12.1
Контактная информация:

Re: DDoS и iptables ... помогите составить правило

Сообщение rooty »

mandreika писал(а):
25.09.2009 12:58
iptables -t filter -A INPUT -i ppp0 -p tcp --syn --dport 80 -m limit --limit 10/s -j ACCEPT

все остальные Ассепты на 80 порт выброси

дык. это же ограничение всех АйПишников раз в 10 секунд :(


mandreika писал(а):
25.09.2009 12:58
На сколько я понимаю тебе не нужно новое ядро - просто скомпилированный модуль connlimit подключить
Ставь себе OpenVZ c точно токим же линупсом, компилируй модуль - закидывай в lib - подключай в iptables

а мне OpenVZ даст это сделать? лады, попробую.. спасибо
не дал)
Спасибо сказали:
Аватара пользователя
mandreika
Сообщения: 217
ОС: Debian 3,4,5,6

Re: DDoS и iptables ... помогите составить правило

Сообщение mandreika »

Не дал - что?
Не дал - где?
Спасибо сказали:
Аватара пользователя
rooty
Сообщения: 83
ОС: laptop: openSuSE 12.1
Контактная информация:

Re: DDoS и iptables ... помогите составить правило

Сообщение rooty »

OpenVZ использует одно ядро на всех.... я не могу просто так вмешаться в работу ядра...
connlimit подключить то в ядре нужно? так?
Спасибо сказали:
Maine
Сообщения: 1
ОС: XP

Re: DDoS и iptables ... помогите составить правило

Сообщение Maine »

Для начала всех приветствую, и хочу поблагодарить за очень полезную и актуальную тему mandreika. Что то я вынес полезное и для себя т.к., держу тоже форум в сети. У меня вопрос, если составить так правила, что я сделал заметив как пытаются меня досить (заметил по резкому Рекорду одновременно присутствующих пользователей форума, что не может быть впринципе. Всегда не более 20-30 а тут 179 резко)вот и вопрос, если я так ставлю правила:


mandreika писал(а):
25.09.2009 10:18
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


То когда голобальный лимт достигнет в 200, скажем за сутки, оно не заблокирует всех? Счётчик будет глобальный обнулятся? Ну как я понял connlimit похож на хашлимит, или это немного другое?
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус
Контактная информация:

Re: DDoS и iptables ... помогите составить правило

Сообщение KiWi »

rooty писал(а):
25.09.2009 13:52
OpenVZ использует одно ядро на всех.... я не могу просто так вмешаться в работу ядра...
connlimit подключить то в ядре нужно? так?

Попросить хостера добавить этот модуль, либо, что ещё лучше, организовать правила где-то у себя на оборудовании ещё на входе в дата-центр.
Спасибо сказали:
ALexhha
Сообщения: 109

Re: DDoS и iptables ... помогите составить правило

Сообщение ALexhha »

но похоже в досе участвовало где-то 4 машины всего

:laugh: это явно не дос, вот если бы 4k, то да. А так просто какой то школьник поигрался
Спасибо сказали:
Ответить