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

Эквивалентно denyhosts, но для HTTP-запросов?

Мой веб-сервер (apache2) постоянно подвергается атаке злонамеренных ботов, которые запрашивают такие URL-адреса:

   /blog/tag/pnphpbb2//index.php?name=PNphpBB2&file=posting&mode=quote/index.php?name=PNphpBB2&file=viewtopic&p=34004/viewtopic.php?p=15&sid=be4c914eb746ac7c96beea717fdfc692/&highlight=../../../../../../../../../../../../../etc/passwd%00 HTTP Response 301

   //index.php?name=PNphpBB2&file=posting&mode=quote/index.php?name=PNphpBB2&file=viewtopic&p=34004/viewtopic.php?p=15&sid=be4c914eb746ac7c96beea717fdfc692/&highlight=../../../../../../../../../../../../../etc/passwd%00 HTTP Response 200

   /wiki/index.php/Main:Some_Wiki_Pagename//index.php?name=PNphpBB2&file=posting&mode=quote/index.php?name=PNphpBB2&file=viewtopic&p=34004/viewtopic.php?p=15&sid=be4c914eb746ac7c96beea717fdfc692/&highlight=../../../../../../../../../../../../../etc/passwd%00 HTTP Response 200

   /wiki/index.php//index.php?name=PNphpBB2&file=posting&mode=quote/index.php?name=PNphpBB2&file=viewtopic&p=34004/viewtopic.php?p=15&sid=be4c914eb746ac7c96beea717fdfc692/&highlight=../../../../../../../../../../../../../etc/passwd%00 HTTP Response 200

   /blog/2009/01/title-of-post-here//index.php?name=PNphpBB2&file=posting&mode=quote/index.php?name=PNphpBB2&file=viewtopic&p=34004/viewtopic.php?p=15&sid=be4c914eb746ac7c96beea717fdfc692/&highlight=../../../../../../../../../../../../../etc/passwd%00 HTTP Response 301

Я бы хотел, чтобы ночной процесс cron находил любой хост, запрашивающий «вредоносный» URL, и добавлял их в HTTP-эквивалент hosts.deny.

Я мог бы предположить, что будет набор регулярных выражений, определяющих вредоносные URL-адреса, а также, возможно, какой-нибудь плагин apache, чтобы легко отклонять хост (без необходимости перезапуска httpd каждую ночь).

Есть ли что-нибудь подобное?

fail2ban сканирует файлы журналов, такие как / var / log / apache / error_log, и блокирует IP-адреса, которые делают это автоматическое сканирование на основе регулярных выражений (называемых фильтрами). По умолчанию он обновляет брандмауэр (iptables), чтобы заблокировать неправильный IP-адрес. Написать новые действия очень легко, и реализация одного из них для обновления .htaccess должна быть довольно простой, есть несколько примеров, доступных в раздаче fail2ban.

http://www.modsecurity.org/ можете делать что хотите.

Я второй fail2ban. Он работает в режиме реального времени, он может временно заблокировать и добавить IP-адреса в ваш брандмауэр, чтобы Apache не тратил на это время.

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

Если вы действительно ненавидите этих людей и используете Linux, вы также можете попробовать реализовать tarpitting для iptables (быстрый поиск не нашел никаких патчей, совместимых с 2.6). Это примет соединение, а затем сразу же установит размер окна на 0 (предотвращение передачи данных), но также предотвратит закрытие соединения удаленным концом вообще, то есть любое подключаемое приложение должно будет ждать где-то от трех до двадцати ( !!) минут до истечения времени ожидания соединения на их конце.

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

Другая возможность - использовать mod_rewrite для сопоставления URL-адреса и отправки клиенту 403 (или любого другого кода, который вы хотите). Пример:

RewriteEngine on
RewriteRule ^/.*passwd.*/ - [L,NC,G]

Или для развлечения:

RewriteEngine on
RewriteRule ^/(.*passwd.*)/ http://127.0.0.1/$1 [L,NC,R=301]

Если это Apache 2.0, вы можете попробовать mod_access: http://httpd.apache.org/docs/2.0/mod/mod_access.html

В Apache 2.2 это mod_authz_host: http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html

Конечно, похоже, что вам нужно будет сигнализировать Apache о перезагрузке его конфигурации, чтобы изменения в конфигурации модуля вступили в силу.

Изменить: Modsecurity выглядит так, как вы хотите, в отличие от создания статических конфигураций запрета путем сбора ваших файлов журнала и использования одного из вышеперечисленных. Я собираюсь проголосовать за этот ответ сейчас.

Я бы непременно посмотрел на OSSEC. Он обнаруживает эти шаблоны и может блокировать IP-адреса. Он также ищет сканирование (например, несколько 404) и блокирует IP-адрес нарушителя.

И да, он делает это по умолчанию.

Ссылка на сайт: http://www.ossec.net

Примером может быть:

<Location />
   Order Deny,Allow
   Deny from 123.123.123.123 231.213.123.0/24
   Allow from all
</location>

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