Установка Apache mod_evasive.
Mod_evasive
, ранее известный как mod_dosevasive
, помогает защититься от атак DoS
, DDoS
(распределенный отказ в обслуживании), и атак типа brute force
на веб-сервере Apache
. Это может обеспечить отвлекающее действие во время атаки и сообщать о атаке по электронной почте. Модуль работает путем создания встроенной динамической таблицы IP-адресов и URI, а также блокировку IP-адреса из в случае выполнения следующих действий:
- Запрашивающая ту же страницу больше, чем несколько раз в секунду
- Создание более 50 одновременных запросов на того же ребенка в секунду
- Внесение каких-либо запросов в то время как временно занесен в черный список
Для установки в среде RHEL/CentOS воспользуйтесь yum:
yum install mod_evasive
Для установки в среде Debian/Ubuntu воспользуйтесь apt:
apt-get install libapache2-mod-evasive
Конфигурационный файл (mod_evasive.conf) находится в папке web сервера, на пример:
/etc/httpd/conf.d/mod_evasive.conf
Выглядит следующим образом:
<ifmodule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 5
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 90
DOSLogDir /var/log/apache2/mod_evasive
DOSWhitelist 127.0.0.1
</ifmodule>
Немного поянений:
- DOSHashTableSize - размер хэш таблыцы, который указывает максимальное количество нод для каждой дочерней таблицы. Увеличение этого значения приведет к приросту производительности, поскольку уменьшится количество итераций для поиска нужной записи, но при этом увеличится выделение памяти.
- DOSPageCount - максимально допустимое количество запросов к одной странице с одного ip за заданый промежуток времени.
- DOSPageInterval - интервал времени для DOSPageCount. По умолчанию 1 секунда.
- DOSSiteCount - максимально допустимое количество запросов к сайту с одного ip за заданый промежуток времени.
- DOSSiteInterval- интервал времени для DOSSiteCount. По умолчанию 1 секунда.
- DOSBlockingPeriod - время, на которое блокируется атакующий ip.
- DOSEmailNotify - куда слать уведомления.
- DOSLogDir - куда писать логи
- DOSWhitelist - список исключенных ip адресов.
Для проверки воспользуемся скриптом, который предоставляется с исходниками:
#!/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);
}