Собственно, нужно правильно средствами NGINXа ограничить доступ к админке сайта.
В данном случае это Joomla и папочка /administrator/ которую последнее время сильно стали тревожить подозрительные запросы …
Пишу «правильно» т.к. года два назад написал конфиг преследуя эту же цель и «вроде бы» всё работало как надо!
На днях всплыло, что не как надо 🙂
Итак:
1 2 3 4 |
location /administrator/ { auth_basic «Hello, please login»; auth_basic_user_file /site_userpass_path/.htpasswd; } |
Оказалось вообще не верным, т.к. работало только на /administrator/
И пропускало все атаки, переборы и т.д. на /administrator/index.php — которые уходили в секцию обработки скриптов
1 |
location ~ \.php$ { |
«Правильное» решение, сразу же найденное в сети — использование префикса ^~
то есть
1 |
location ^~ /administrator/ { ... |
НО! в таком случае правило работает на все файлы находящиеся в /administrator/
и до location обрабатывающего статику а-ля
1 |
location ~* ^.+\.(jpg|jpeg|gif|png|ico)$ { |
дело не доходит! а т.к. у меня fast-cgi то статика осталась вообще не удел
всё происходит из-за приоритетов обработки location
Правильно обработки папки /administrator/ имеет более высокий приоритет, и после его обработки дальнейшие location не обрабатываются
Подумал я и ничего лучше, чем обработку /administrator/ запихать в регулярку (для выравнивания приоритетов) не придумал
Финальный результат (закоментированные строки убирать специально не стал, т.к. имея статический IP — это самая лучшая защита админки)
1 2 3 4 5 6 7 8 9 10 11 |
location ~* ^/administrator/.+\.php { # allow X.X.X.X; # deny all; auth_basic «Hello, please login»; auth_basic_user_file /site_userpass_path/.htpasswd; fastcgi_pass unix:/tmp/php—fcgi.sock; include /usr/local/etc/nginx/fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } |
Таким образом все php из /administrator/ «пройдут» через секцию с авторизацией, не помешав обработке статики.
Ч.т.д.