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


9

Первоначально я писал об этом на 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, что означало бы, что я должен добавить новый блок для каждого сайта, есть ли способ запретить доступ ко всему серверу?


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

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

Ответы:


7

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

Это сработало для меня, чтобы применить контроль доступа ко всем vhosts:

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

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


(Для аналога в Apache 2.4) Будьте осторожны, используя, <Location>поскольку он переопределяет любые другие ограничения авторизации <Directory>, если только вы не добавите AuthMerging And. См. Предупреждение о безопасности Requireв документации apache: httpd.apache.org/docs/2.4/mod/mod_authz_core.html#require
Седрик Найт,

4

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

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

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


1
Внимание: тире не является настоящей чертой при копировании. Я пытался редактировать, но SF будет жаловаться, что мое редактирование слишком мало. В любом случае спасибо, работает удовольствие!
Тибо Баррер

@ ThibautBarrère, если вам действительно нужно, вы можете обойти небольшой предел редактирования, добавив невидимое <!-- -->для редактирования
hanshenrik

1

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

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

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


Это лучше в том, что нет никаких ошибок, но, хотя подделка моего агента пользователя, мне не отказывают. Есть идеи, почему это может быть?
Том Райт
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.