Як я можу заблокувати агент користувача з усіх сайтів мого сервера?


9

Спочатку я публікував це на веб-майстрах.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 поскаржиться, що моя редакція занадто мала. Спасибі все одно, працює частування!
Thibaut Barrère

@ ThibautBarrre, якщо вам це дійсно потрібно, ви можете обійти невеликий ліміт редагування, додавши невидимий <!-- -->у редагування
hanshenrik

1

Якщо синтаксис у рядках SetEnv правильний, ви повинні мати змогу перекинути це в конфіденційність так:

<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.