В данной заметке рассмотрим как фильтровать доступ к определенным файлам или категориям на 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.
Комментариев нет:
Отправить комментарий