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

  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:8999a18b051a44806aaab7ca5b74a470' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtejustify\">Один из методов защититы&nbsp;web-сервера от флуд атак и слабого ddos-a - это установка модуля&nbsp;<strong>mod_evasive</strong>.</p>\n<p class=\"rtejustify\">Установку выполним из портов:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td># cd /usr/ports/www/mod_evasive/ &amp;&amp; make install clean &amp;&amp; rehash</td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">После установки модуль автоматически добавляет себя в списки подгружаемых модулей. Остается только расскоментировать его в httpd.conf:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>LoadModule evasive20_module&nbsp;&nbsp; libexec/apache22/mod_evasive20.so</td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Также необходимо добавить в&nbsp; httpd.conf такой блок:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>&lt;IfModule mod_evasive20.c&gt;<br />\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DOSHashTableSize 3097<br />\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DOSPageCount&nbsp;4<br />\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DOSSiteCount&nbsp;15<br />\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DOSPageInterval&nbsp;3<br />\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DOSSiteInterval&nbsp;3<br />\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DOSBlockingPeriod 600<br />\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DOSEmailNotify <span class=\"spamspan\"><span class=\"u\">ddos</span> [at] <span class=\"d\">example [dot] com</span></span><br />\n &lt;/IfModule&gt;</td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">&nbsp;Доступные для использования опции:</p>\n<ul>\n<li class=\"rtejustify\"><strong>DOSHashTableSize</strong>: это размер хэш-таблицы которая обрабатывает запросы к WWW-серверу.</li>\n<li class=\"rtejustify\"><strong>DOSPageCount</strong>: число запросов к одной странице от одного и того же IP в течение указаного интервала времени.</li>\n<li class=\"rtejustify\"><strong>DOSSiteCount</strong>: число запросов ко всем страницам домена, т.е если поступило более 90-ти запросов с одного ай-пи на разные страницы домена &ndash; тогда такой ай-пи будет заблокирован.</li>\n<li class=\"rtejustify\"><strong>DOSPageInterval</strong>: Интервал для директивы DOSPageCount (в секундах)</li>\n<li class=\"rtejustify\"><strong>DOSSiteInterval</strong>: Интервал для директивы DOSSiteCount (в секундах)</li>\n<li class=\"rtejustify\"><strong>DOSBlockingPeriod</strong>: На сколько заблокировать ай-пи (в секундах)</li>\n<li class=\"rtejustify\"><strong>DOSEmailNotify</strong>: может быть использован для уведомления, будет отправлять сообщение по электронной почте о том что такой-то IP был заблокирован.</li>\n<li class=\"rtejustify\"><strong>DOSSystemCommand</strong>: эта директива используется для выполнения какой-нибудь вашей команды когда IP блокируется. Вы можете использовать это для добавления IP-адреса в таблицу фаервола. (пример: &quot;<strong>/sbin/ipfw table 111 add&nbsp;%s&quot;</strong>. В&nbsp;переменную&nbsp;&quot;%s&quot; передается от модуля IP-адресс атакуемого хоста)</li>\n<li class=\"rtejustify\"><strong>DOSWhiteList</strong>: список белых IP адресов, можно и по маскам (напр. 127.0.0.*)</li>\n</ul>\n<p>&nbsp;После внесения изменений перезапускаем Apache:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>#&nbsp;apachectl graceful</td>\n</tr>\n</tbody>\n</table>\n<p>В результате в логах сервера можно наблюдать следующие записи:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td># <strong>cat /var/log/messages | grep evasive<br />\n </strong>Feb 4 05:15:28 web0 mod_evasive[49786]: Blacklisting address 193.106.56.242: possible DoS attack.<br />\n Feb 4 05:24:11 web0 mod_evasive[51080]: Blacklisting address 95.135.45.76: possible DoS attack.</td>\n</tr>\n</tbody>\n</table>\n<p>&nbsp;</p>\n', created = 1767579017, expire = 1767665417, headers = '', serialized = 0 WHERE cid = '2:8999a18b051a44806aaab7ca5b74a470' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:17dea8a008f81aad112ba69c4fc2846e' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>Бестолковая штука. Сегодня столкнулся со злом. Блокируемым хостам все равно отправляются ответы 403, логи продолжают расти на глазах, apache плавненько замедляется, а потом перестает отвечать на запросы. Пришлость спасаться с помощью банального limit src-addr в соответствующем правиле ipfw <img src=\"http://muff.kiev.ua/modules/fckeditor/fckeditor/editor/images/smiley/msn/teeth_smile.gif\" alt=\"\" /></p>\n', created = 1767579017, expire = 1767665417, headers = '', serialized = 0 WHERE cid = '2:17dea8a008f81aad112ba69c4fc2846e' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:3ee05c0fb1760d454d6e72837abbb0a9' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>&quot;&nbsp;Один из методов защититы&nbsp;web-сервера от флуд атак и <span style=\"color: rgb(255, 0, 0); \"><strong>слабого </strong></span>ddos-a...&quot;</p>\n<p class=\"rtejustify\">По дефолту заблокированным хостам отправляется ответ 403. Тоесть ответ отправляется, хоть и быстрее (поскольку не нужно генерировать контент).</p>\n<p class=\"rtejustify\">Как вариант, можно настроить&nbsp;mod_evasive на взаимодействие с файрволом. См.&nbsp;<span class=\"Apple-style-span\" style=\"font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 16px; \"><strong>DOSSystemCommand</strong></span></p>\n', created = 1767579017, expire = 1767665417, headers = '', serialized = 0 WHERE cid = '2:3ee05c0fb1760d454d6e72837abbb0a9' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:b1f58154e0889ad9e13f315115f79cf2' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>&nbsp;</p>\n<p>&nbsp;</p>\n', created = 1767579017, expire = 1767665417, headers = '', serialized = 0 WHERE cid = '2:b1f58154e0889ad9e13f315115f79cf2' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:af6c53b98cf609809c6d19d74d210325' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>Прошу прощение за невнимательность. Касаемо ipfw, если я ничего не путаю, то права на добавление правил есть только у root\'а. Ставить SUID на ipfw как-то не хочется, придется извращаться с sudo.</p>\n', created = 1767579017, expire = 1767665417, headers = '', serialized = 0 WHERE cid = '2:af6c53b98cf609809c6d19d74d210325' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:7996a7942cf6d0e81cb6e3f051a7088f' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>Совершенно верно.</p>\n<p><strong>visudo </strong>вам в помощь <img alt=\"\" src=\"http://muff.kiev.ua/modules/fckeditor/fckeditor/editor/images/smiley/msn/wink_smile.gif\" /></p>\n<p>Кста,&nbsp;можете поделиться готовым решением? Если не сложно - напишите сами статью (для зарегистрированных пользователей есть такая возможность) и по факту, когда статья будет готова,&nbsp;сообщите,&nbsp;чтобы я ее опубликовал.</p>\n<p>Спасибо.</p>\n', created = 1767579017, expire = 1767665417, headers = '', serialized = 0 WHERE cid = '2:7996a7942cf6d0e81cb6e3f051a7088f' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:b1f58154e0889ad9e13f315115f79cf2' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>&nbsp;</p>\n<p>&nbsp;</p>\n', created = 1767579017, expire = 1767665417, headers = '', serialized = 0 WHERE cid = '2:b1f58154e0889ad9e13f315115f79cf2' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:6140f3cbef18f878da03d288361a22ca' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>Добавил <a href=\"http://muff.kiev.ua/content/dopolnenie-k-state-modevasive-zashchita-ot-dos-i-ddos-atak\">свое дополнение</a> <img src=\"http://muff.kiev.ua/modules/fckeditor/fckeditor/editor/images/smiley/msn/regular_smile.gif\" alt=\"\" /></p>\n', created = 1767579017, expire = 1767665417, headers = '', serialized = 0 WHERE cid = '2:6140f3cbef18f878da03d288361a22ca' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:07243fc0252056071eaa62af8c18d662' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtecenter\"><a class=\"thickbox\" href=\"/files/imagepicker/1/wake_up_ua.png\"><img alt=\"Вставай, Україно!\" class=\"imgp_img\" src=\"/files/imagepicker/1/thumbs/wake_up_ua.png\" style=\"height:200px; width:150px\" /></a></p>\n', created = 1767579017, expire = 1767665417, headers = '', serialized = 0 WHERE cid = '2:07243fc0252056071eaa62af8c18d662' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '3:cc913d232116f0426090404133377d88' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:d9a86123bfcbc57878743027b584400b' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtecenter\"><a href=\"http://muff.kiev.ua/rss.xml\"><img alt=\"RSS\" width=\"160\" height=\"60\" src=\"http://muff.kiev.ua/files/muf-rss.png\" /></a></p>\n', created = 1767579017, expire = 1767665417, headers = '', serialized = 0 WHERE cid = '2:d9a86123bfcbc57878743027b584400b' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '3:39649256b636e3d5ded656bc52bd8c01' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
Версия для печатиОтправить другуPDF version

Один из методов защититы web-сервера от флуд атак и слабого ddos-a - это установка модуля mod_evasive.

Установку выполним из портов:

# cd /usr/ports/www/mod_evasive/ && make install clean && rehash

После установки модуль автоматически добавляет себя в списки подгружаемых модулей. Остается только расскоментировать его в httpd.conf:

LoadModule evasive20_module   libexec/apache22/mod_evasive20.so

Также необходимо добавить в  httpd.conf такой блок:

<IfModule mod_evasive20.c>
        DOSHashTableSize 3097
        DOSPageCount 4
        DOSSiteCount 15
        DOSPageInterval 3
        DOSSiteInterval 3
        DOSBlockingPeriod 600
        DOSEmailNotify ddos [at] example [dot] com
</IfModule>

 Доступные для использования опции:

  • DOSHashTableSize: это размер хэш-таблицы которая обрабатывает запросы к WWW-серверу.
  • DOSPageCount: число запросов к одной странице от одного и того же IP в течение указаного интервала времени.
  • DOSSiteCount: число запросов ко всем страницам домена, т.е если поступило более 90-ти запросов с одного ай-пи на разные страницы домена – тогда такой ай-пи будет заблокирован.
  • DOSPageInterval: Интервал для директивы DOSPageCount (в секундах)
  • DOSSiteInterval: Интервал для директивы DOSSiteCount (в секундах)
  • DOSBlockingPeriod: На сколько заблокировать ай-пи (в секундах)
  • DOSEmailNotify: может быть использован для уведомления, будет отправлять сообщение по электронной почте о том что такой-то IP был заблокирован.
  • DOSSystemCommand: эта директива используется для выполнения какой-нибудь вашей команды когда IP блокируется. Вы можете использовать это для добавления IP-адреса в таблицу фаервола. (пример: "/sbin/ipfw table 111 add %s". В переменную "%s" передается от модуля IP-адресс атакуемого хоста)
  • DOSWhiteList: список белых IP адресов, можно и по маскам (напр. 127.0.0.*)

 После внесения изменений перезапускаем Apache:

# apachectl graceful

В результате в логах сервера можно наблюдать следующие записи:

# cat /var/log/messages | grep evasive
Feb 4 05:15:28 web0 mod_evasive[49786]: Blacklisting address 193.106.56.242: possible DoS attack.
Feb 4 05:24:11 web0 mod_evasive[51080]: Blacklisting address 95.135.45.76: possible DoS attack.

 

Голосов пока нет

Бестолковая штука. Сегодня

Бестолковая штука. Сегодня столкнулся со злом. Блокируемым хостам все равно отправляются ответы 403, логи продолжают расти на глазах, apache плавненько замедляется, а потом перестает отвечать на запросы. Пришлость спасаться с помощью банального limit src-addr в соответствующем правиле ipfw

" Один из методов

" Один из методов защититы web-сервера от флуд атак и слабого ddos-a..."

По дефолту заблокированным хостам отправляется ответ 403. Тоесть ответ отправляется, хоть и быстрее (поскольку не нужно генерировать контент).

Как вариант, можно настроить mod_evasive на взаимодействие с файрволом. См. DOSSystemCommand

Прошу прощение за

Прошу прощение за невнимательность. Касаемо ipfw, если я ничего не путаю, то права на добавление правил есть только у root'а. Ставить SUID на ipfw как-то не хочется, придется извращаться с sudo.

Совершенно верно. visudo вам

Совершенно верно.

visudo вам в помощь

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

Спасибо.

Добавил свое дополнение

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

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

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

Литература

Блаженны юзеры ибо не ведают что творят!