Дополнение к статье mod_evasive – защита от DOS и DDOS атак

Версия для печатиОтправить другуPDF version

Как уже сказал автор, mod_evasive поддерживает опцию DOSSystemCommand, которая:

используется для выполнения какой-нибудь вашей команды когда IP блокируется. Вы можете использовать это для добавления IP-адреса в таблицу фаервола. (пример: "/sbin/ipfw table 111 add %s". В переменную "%s" передается от модуля IP-адрес атакуемого атакующего хоста).

Как показала практика, эта полезнейшая возможность позволяет заметно разгрузить атакуемый Веб-сервер и избавить его от генерации ответов с кодом 403 за счет блокировки атакующих хостов с помощью брандмауэра. Эта заметка посвящена описанию используемого мной рецепта добавления соответствующих правил ipfw(8) с помощью mod_evasive.

В связи с тем, что по умолчанию изменение правил ipfw разрешено только суперпользователю root, а Веб-сервер работает от имени www, для выполнения соответствующих команд ipfw add ... придется воспользоваться утилитой security/sudo. Для разрешения выполнения команды /sbin/ipfw пользователю www с IP-адреса X.X.X.X, на котором "висит" Apache, без ввода пароля необходимо добавить в файл конфигурации sudo следующую строку (напоминаю, что для открытия файла конфигурации sudo в редакторе по умолчанию нужно выполнить команду visudo):
www X.X.X.X=NOPASSWD:/sbin/ipfw

После сохранения файла конфигурации sudo можно добавить в раздел <IfModule mod_evasive20.c>...</IfModule> файла конфигурации Веб-сервера примерно такую строку:

DOSSystemCommand '/usr/local/bin/sudo /sbin/ipfw add 4399 deny tcp from %s to X.X.X.X 80 in via bge0'

Естественно, X.X.X.X и bge0 нужно заменить на уже упомянутый IP-адрес и имя сетевого интерфейса, которому он соответствует. Обязательно обратите внимание на номер правила, позволяющий вставить добавляемое правило в нужное место набора правил ipfw. В моем случае правила блокировки атакующих хостов добавляются непосредственно перед правилом, разрешающим все установленные TCP-соединения:

/sbin/ipfw add pass tcp from any to any established

Вот, собственно, и весь рецепт 

 

 

Ваша оценка: Нет Средняя: 5 (2 голоса)

Как на меня, то более

Как на меня, то более правильно было бы "заганять" IP-адреса атакующих хостов в таблицу файрвола, запретив, соответственно, для этой таблицы доступ к серверу. Это предотвратило бы стремительное разрастание количество правил файрвола (что тоже влияет на производительность).

Пример.

Допустим, что IP-адреса атакующих хостов будем добавлять в таблицу 25 файрвола ipfw. Предположим, что атака проводится не только по протоколу http, поэтому доступ для атакующих IP-адресов будем блокировать полностью, а не только на 80 порт:

# ipfw add 15 deny tcp from "table(25)" to me

Все остальное - согласно статьи.  Только, соответственно, необходимо изменить параметр DOSSystemCommand на следующий:

DOSSystemCommand '/usr/local/bin/sudo /sbin/ipfw table 25 add %s

 

Спасибо! Таблички как-то

Спасибо! Таблички как-то вылетели из головы. Безусловно, их применение логичнее, удобнее и эффективнее во всех отношениях, даже с номерами правил уже не нужно заморачиваться, т.к. можно сразу прописать запрещающее правило в нужное место /etc/rc.firewall. А вот насчет блокировки всего трафика я категорически не согласен. Как минимум нужно оставлять доступ к 22 порту TCP, если не хочется ни куда ехать после нескольких неловких движений (например, нескольких последовательных нажатий <F5> в браузере)

Я обычно над этим не

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

Re: Как на меня, то более

При удачной настройке iptables nginx попросту блокирует атакующие адреса и они не нагружают системные ресурсы сервера, ну а для решения серьезных проблем нужная хорошая аппаратная защита. Могу порекомендовать ребят из Simplyway. отлично справляются  с ддос атаками 

Ровнее использовать для этих

Ровнее использовать для этих целей а) pf pfctl -t bruteforce -T expire 86400 will remove
table entries which have not been referenced for 86400 seconds. b) bruteblock В противном случае кто будет чистить таблички от устаревания, мы ж не хотим там всю жизнь держать адреса?

Спасибо, что поделились

Спасибо, что поделились решением. Возьмем на заметку.

Re: Спасибо, что поделились

IMHO, в таком случае полезно использование универсального механизма fail2ban с настройкой специфического фильтра для mod_evasive для блокировки/удаления правил через ipfw.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Вставай, Україно!

Литература