Мой веб-сервер (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>
Я бы рекомендовал иметь это в отдельном файле, который вы включаете из своей основной конфигурации, и просто переписывать этот небольшой фрагмент. Вы можете выполнить перезагрузку, чтобы принять изменение, которое не остановит ваш сервер, как это сделал бы перезапуск.