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

Как я могу заблокировать пользовательский агент со всех сайтов на моем сервере?

Изначально я разместил это на webmasters.stackexchange.com, но мне сказали, что здесь меня встретят лучше.


В течение последних нескольких дней я страдал от того, что, похоже, было (предположительно непреднамеренной) атакой DDOS. Я получаю так много запросов от агента, который идентифицируется как «Mozilla / 4.0 (совместимый; ICS)», что apache съедает всю доступную память.

Следовательно, я хотел бы заблокировать все запросы, сопровождаемые этим пользовательским агентом, поэтому я попытался сделать это в httpd.conf:

SetEnvIfNoCase User-Agent "Mozilla/4.0 (compatible; ICS)" bad_user
Deny from env=bad_user

Но когда я перезапускаю apache, он жалуется на использование deny Вот. Без необходимости оборачивать его location или directory block, что означало бы, что мне пришлось бы добавить новый блок для каждого сайта, есть ли способ запретить доступ ко всему серверу?


ОБНОВЛЕНИЕ: ошибка, которую я получаю

  • Перезапуск веб-сервера apache2
    Синтаксическая ошибка в строке 4 /etc/apache2/httpd.conf: запретить здесь запрещено [сбой]

Сейчас это похоже на старый вопрос, но я хотел сделать то же самое и нашел ответ на нервы выше. Не совсем то как есть - мне кажется, так и должно быть <Location "/">, а SetEnvIf требуется регулярное выражение, поэтому круглые скобки нужно заключать в кавычки.

Это помогло мне применить контроль доступа ко всем vhosts:

SetEnvIfNoCase User-Agent "^Mozilla/4.0 \(compatible; Synapse\)" bad_ua
<Location "/">
    Deny from env=bad_ua
</Location>

Просто включите это перед определениями vhost.

mod_rewrite можно настроить на уровне сервера в соответствии с документами:

RewriteCond %{HTTP_USER_AGENT} "Mozilla/4\.0 \(compatible; ICS\)" [nocase]
RewriteRule ^.*$ - [forbidden,last]

Не забудьте избежать регулярного выражения в RewriteCond

Если синтаксис в строках SetEnv верен, вы сможете добавить это в conf следующим образом:

<Location *>
SetEnvIfNoCase User-Agent "Mozilla/4.0 (compatible; ICS)" bad_user
Deny from env=bad_user
</Location>

Должно позволить, чтобы это работало на всех виртуальных хостах - только что протестировано на 2.2.24, сработало отлично.