Назад | Перейти на главную страницу

IP флуд, несмотря на mod_evasive?

У меня есть сервер Apache 2, на котором запущены PHP5, prefork MPM, eaccelerator и modevasive.

Мой сервер иногда выходит из строя, по-видимому, из-за флуда с некоторых IP-адресов. По крайней мере, это то, что я понял из запуска netstat. У меня такие вещи:

tcp        0      0 my.ip.is.here:80        88.160.126.117:55864    ESTABLISHED
tcp        0      0 my.ip.is.here:80        88.160.126.117:57073    ESTABLISHED
tcp        0      0 my.ip.is.here:80        88.160.126.117:56989    ESTABLISHED
tcp      639      0 my.ip.is.here:80        88.160.126.117:57813    ESTABLISHED
tcp      639      0 my.ip.is.here:80        88.160.126.117:57695    ESTABLISHED
tcp        0      0 my.ip.is.here:80        88.160.126.117:57274    ESTABLISHED
tcp      602      0 my.ip.is.here:80        80.214.0.41:51131       ESTABLISHED
tcp        0      0 my.ip.is.here:80        88.160.126.117:57513    ESTABLISHED
tcp        0      0 my.ip.is.here:80        77.88.31.248:64551      ESTABLISHED
tcp        0      0 my.ip.is.here:80        88.160.126.117:55131    ESTABLISHED
tcp      639      0 my.ip.is.here:80        88.160.126.117:57565    ESTABLISHED
tcp      357      0 my.ip.is.here:80        209.85.228.92:51134     ESTABLISHED
tcp      639      0 my.ip.is.here:80        88.160.126.117:57817    ESTABLISHED
tcp        0      0 my.ip.is.here:80        88.160.126.117:53902    ESTABLISHED
tcp        0      0 my.ip.is.here:80        88.160.126.117:57060    ESTABLISHED
tcp      718      0 my.ip.is.here:80        82.252.2.103:49506      ESTABLISHED
tcp      639      0 my.ip.is.here:80        88.160.126.117:57553    ESTABLISHED
tcp      639      0 my.ip.is.here:80        88.160.126.117:57692    ESTABLISHED
tcp        0      0 my.ip.is.here:80        88.160.126.117:55571    ESTABLISHED
tcp      639      0 my.ip.is.here:80        88.160.126.117:57762    ESTABLISHED
tcp      639      0 my.ip.is.here:80        88.160.126.117:57771    ESTABLISHED
tcp     1750      0 my.ip.is.here:80        41.105.112.207:19940    ESTABLISHED
tcp        0      0 my.ip.is.here:80        88.160.126.117:57187    ESTABLISHED
tcp        0      0 my.ip.is.here:80        88.160.126.117:56782    ESTABLISHED
tcp      668      0 my.ip.is.here:80        86.72.212.166:64263     ESTABLISHED
tcp      750      0 my.ip.is.here:80        88.160.126.117:57681    ESTABLISHED
tcp        0      0 my.ip.is.here:80        88.160.126.117:56741    ESTABLISHED

так что похоже, что 88.160.126.117 наводняет мой сервер. (Каждый раз это другой IP-адрес, поэтому я не могу заблокировать его вручную) Mod_evasive регистрирует этот IP-адрес в своем журнале, но никак не решает эту проблему!

Даже когда я перезапускаю apache2, сеть, сервер снова застревает, достигая настройки maxclients.

Есть идеи, что я могу сделать?

Моя скромная конфигурация:

DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 20
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10

Низкие пределы

Ваши пределы могут быть слишком низкими. Ваш лимит составляет 20 в секунду. Если злоумышленник достигает значения ниже этого лимита, блок не сработает.

Если ресурс, к которому они обращаются, является интенсивным процессом (например, функция поиска), очень низкая частота запросов может вывести систему из строя.

Возможно, вам придется настроить блоки на основе паттернов атаки.

В mod_evasive есть сценарий test.pl, попробуйте его и посмотрите, сможете ли вы запустить блокировку.

Целевой URL

Также к какому IP-адресу осуществляется доступ? Попробуйте включить серверный статус в Apache и проверьте URL-адрес. Это позволит вам узнать, попадают ли они на одну и ту же страницу или на разные страницы. Это позволит вам узнать, подходит ли PageCount для SiteCount.

Проверьте IP-адрес в своих журналах и посмотрите, с какой скоростью они подключаются. Используйте это, чтобы настроить пределы. Обратите внимание, что ограничения указаны для каждого ребенка. Нет никакой гарантии, что они попадут в один и тот же дочерний процесс.

Быстрые наводнения

Наконец, я видел наводнения, когда злоумышленник устанавливает сразу несколько десятков подключений. В этом случае dos evasive может не успеть среагировать. Будущие запросы будут заблокированы, но если уже сделано 100, будет слишком поздно. В этих случаях используйте функцию mod_dosevasive для вызова iptables и полного сброса на брандмауэре.

MaxRequestPerChild

Какова настройка MaxRequestPerChild вашего Apache? Ограничение скорости зависит от ребенка. Я видел случаи, когда MaxRequestPerChild был слишком низким, чтобы позволить mod_evasive работать. Обычно это не проблема, но нужно проверить одну область.