С пятницы по рунету прокатилась волна брутфорса. Довольно большой ботнет подбирал пароли для доступа в административную часть таких движков как WordPress и Joomla.
Для ограничения доступа можно выполнить следующие варианты конфигурирования веб-серверов
Для nginx:
location ~* ^/(administrator/|wp-admin|wp-login\.php) { allow <ip>; deny all; proxy_pass http://localhist:8080; proxy_redirect http://localhost:8080/ /; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; }
Тем самым доступ будет закрыт для всех, кроме указанных ip-адресов в директиве “allow“. Этот способ подойдет для работы nginx в качестве фронтенда к apache. При использования ISPmanager и активированного nginx, в локалхосты добавляется include /usr/local/ispmgr/etc/nginx.inc. Вот как раз в этот файл и можно добавить указанные выше строки для применения по всем сайтам.
На форуме searchengines.ru пользователь seocore предложил более гибкое решение для nginx
location ~* /(wp-login\.php|administrator|admin\.php) {
set $humantest 0; if ($http_cookie !~* "humans=checktest") { set $humantest 1; } if ($args ~* (callback|logout|lostpassword)) { set $humantest 0; } if ($humantest = 1) { add_header Content-Type text/html; return 200 "<html><body>document.cookie='humans=checktest;path=/';location.reload();</body></html>"; } error_page 404 = @fallback; }
Для Apache:
В случае, если у вас сайт работает исключительно на веб-сервере apache, то можно поместить в директорию /usr/local/etc/apache22/Include (для FreeBSD) или в /etc/httpd/conf.d/ (Linux) файл adm_block.conf следующего содержания:
<Directory /home/*/data/www/*/administrator> order allow,deny allow from <ip> deny from all </Directory> <FilesMatch "wp-login\.php"> order allow,deny allow from <ip> deny from all </FilesMatch>
Для Apache так же нашлось более гибкое решение, построенное на возможности авторизации живому человеку. Пролетел рецепт по внутренней рассылке, вполне возможно, он так же принадлежит кому-либо с форума searchengines.ru. Как найду оригинал, проставлю авторство. Со своей стороны добавил только объяснения.
Потребуется создать файл .htpasswd в директории /usr/local/etc/apache22 в случае с FreeBSD и в /etc/httpd/conf.d/ для Linux следующего содержания
imnotabot:$apr1$09TvnyPU$LLizGtHaWD1G3o4LMjDCe1
<Location ~ "/(wp-login\.php|administrator|admin\.php)"> AuthType Basic AuthName "Subdomain authorization" AuthUserFile "/usr/local/etc/apache22/.htpasswd" Require valid-user </Location>
Обращаем внимание на полный путь месторасположения файла
.htpasswd
в конфигурационном файле.
заместо conf.d/bot-block-conf (Linux)
нужно conf.d/bot-block.conf (Linux)
апач на автомате подтягивает *.conf