23.04.2020

Фильтрация доступа в .htaccess по UserAgent

 В данной заметке рассмотрим как фильтровать доступ к определенным файлам или категориям на Web-сервере при помощи .htaccess

К написанию данной заметки меня натолкнула необходимость запрета перебора паролей к сайтам на базе CMS Wordpress. Несмотря на то, что все пользователи с правами Администратора используют "сложные" пароли, которые не возможно подобрать, все же данные действия создают дополнительную нагрузку на сервер. Блокировать доступ по IP-адресам - простой, но не эффективный способ.

При анализе логов Web-сервера заметил, что доступ пытаются получить через отправку данных на wp-login.php и xmlrpc.php, соответственно, доступ буду блокировать именно к этим файлам. В тоже время было замечено, что UserAgent на всех запросах к данным файлам является

"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0"

Исходя из этих данных, составлю правила для блокирования доступа.

Для этого буду использовать работу с переменными

Создание переменной с результатами

Будет использоваться директива для работы с переменными SetEnvIfNoCase. Для корректной работы необходимо, чтобы был установлен модуль Apache mod_setenvif

Синтаксис использования:

SetEnvIfNoCase attribute regex variable variable2 ...

Где:

  • attribute - атрибут, в котором производим поиск. Возможен поиск по любому HTTP-заголовку запроса
  • regex - регулярное выражение
  • variable - название переменной, допускается указание нескольких переменных через пробел

Производить поиск будем по заголовку User-Agent.

Пример кода .htaccess для запрета доступа к файлу wp-login.php пользователей с браузером Firefox 62.0. На момент написания актуальная версия 75

<IfModule mod_setenvif.c>

  SetEnvIfNoCase User-Agent ".*Firefox\/62.0*" block

  <Files wp-login.php>

  Order Allow,Deny

Allow from all

Deny from env=block

</Files>

</IfModule>

Аналогичным образом можно ограничить доступ для любых систем, которые идентифицируют себя через User-Agent или предоставить доступ только для определенных систем. Сфер применений множество.

Также перед применением правил рекомендую использовать проверку регулярных выражений, например, на https://regexr.com/, если вы допустите ошибку при написании правил, то при открытии сайта будете получать сообщение о внутренней ошибке сервера с кодом 500 (Internal Server Error). В логах Web-сервера будет соответствующее сообщение

.htaccess: SetEnvIfNoCase regex could not be compiled.

Использованные материалы:

https://www.askapache.com/htaccess/setenvif/

https://httpd.apache.org/docs/2.4/mod/mod_setenvif.html

Комментариев нет:

Отправить комментарий