Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> WWW —> mod_evasive

mod_evasive - защита от DOS и DDOS атак

Автор: HOSTER.


Собственно ДОС и ДДОС атаки проблема практически всех кто предоставляет такую услугу как хостинг и как всегда кому-то не очень понравится какой нить из проетов что размещены у вас на сервере и как всегда мозгов нет чтобы сломать а задосить ето и 5-ти класник может. Вот собственно нашел модуль какой сможет спасти вас от нашествия ДОС и ДДОС атак вместо того чтобы закидать всех негодяев в фаервол (что же ето за хостинг когда тебя пол мира не видит :)).


Данный модуль к апачу уже появился в портах!

Установка из портов
cd /usr/ports/www/mod_evasive && make && make install && make clean

После успешной установки берем конфиг для вашей версии апача что изложены ниже и перезапускаем апач.
apachectl graceful

Установка mod_evasive для Apache 1.3 и Apache 2.2 из исходников
Скачать модуль возможно тут.

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 755 имя файла.
Если после запуска скрипта видим примерно вот такую штуку

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  первых 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



размещено: 2008-02-28,
последнее обновление: 2009-10-23,
автор: HOSTER


SniZ, 2008-03-26 в 23:02:07

Снова ещё один гламурный падонак.

stooper, 2008-04-09 в 14:22:47

srv2# /usr/local/sbin/apxs apxs -i -a -c mod_evasive2.c // для Apache 2.2
да, только синтаксис apxs немного другой))
# /usr/local/sbin/apxs apxs -i -a -c mod_evasive2.c
Usage: apxs -g [-S <var>=<val>] -n <modname>.........
ну естественно, тогда вот так:
# /usr/local/sbin/apxs -i -a -c mod_evasive2.c
....... cc: mod_evasive2.c: No such file or directory
cc: No input files specified
Все понятно. далю так:
/usr/local/apache2/bin/apxs -cia mod_evasive20.c
...... chmod 755 /usr/local/libexec/apache2/mod_evasive20.so
[activating module `evasive20' in /usr/local/etc/apache2/httpd.conf]
вот так то лучше!
#pf simple rules for apache anti-ddos:
table <abusive_http> persist
block in quick on $if inet proto tcp from <abusive_http> to any
pass in quick on $if inet proto tcp from any port > 1023 to $addr135 port { 80, 443 } modulate state ( max 300 source-track rule max-src-nodes 100 max-src-conn-rate 15/5 max-src-states 15 tcp.established 600 tcp.closing 10 overload <abusive_http>) flags S/SAFR
#where you can set max connections per ip per minute etc...
вот и дополнено =)))

Genry, 2009-03-22 в 8:54:20

Кстати говоря, модуль уже портирован

/usr/ports/www/mod_evasive

огромное спасибо спасибо за статью!

sens, 2009-04-01 в 22:09:15

у кого-то под фрей модуль работает?
у меня ничего не блочит
под гентуу всё ок

lissyara, 2009-04-01 в 22:18:23

У меня работает.
В том числе и на этом сервере.
Ставил из портов.

HOSTER, 2009-04-02 в 13:05:47

Отредактировал статейку и добавил установку из портов!

sens, 2009-04-02 в 20:19:36

в стаью надо выложить конфиг апача с которым работает этот модуль
иначе она не полная
при "раскрученом" апаче, расчитаным на большой траффик модуль не работает
если найду что в исходниках надо поправить чьто б работало по-людски
отпишу

sens, 2009-04-02 в 23:23:07

покрутил исходники,плюнул
написал скрипт на шелле

HOSTER, 2009-04-03 в 11:45:46

Все оч просто добавьте
<IfModule mod_evasive.c>
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 300
</IfModule>
в теги <virtualhost>
<IfModule mod_evasive.c>
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 300
</IfModule>
</virtualhost>

И тогда данный модуль будет работать только на данный ресурс!

sens, 2009-04-03 в 13:02:43

я говорю про настройки апача
количество startservers и тд
в что это писать в вируталхост и так понятно =)

HOSTER, 2009-04-03 в 17:11:58

Если интересно могу свой показать

sens, 2009-04-03 в 17:43:45

выкладуй
наверно он тебя дефолтный

владер, 2009-07-24 в 18:27:32

Модуль мне не понравился. Неадекватный он, тугой какой-то. При откровенных ботовских входах (5 запросов в сек) он никак не реагирует. Выкинул, буду искать другое что-то.

HOSTER, 2009-07-24 в 18:54:23

Не понравился или не помог, если не помог то испытайте правила для PF, работает стабильно, а модуль к апачу как дополнение отлично

desruptor, 2009-10-22 в 14:47:58

>права для запуска chmod +r

о_О разве права запуска не +x? или скриптам надо быть просто читаемыми?

Роман, 2012-09-05 в 11:30:10

привет модуль не качаеца как ево скачать?



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.1947 секунд
Из них PHP: 38%; SQL: 62%; Число SQL-запросов: 86 шт.
Исходный размер: 35798; Сжатая: 7553