Установка Apache mod_evasive.

1 minute read

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);
}

Categories:

Updated: