yandex

Блокировка доступа к админкам сайтов для nginx и apache

Author:

С пятницы по рунету прокатилась волна брутфорса. Довольно большой ботнет подбирал пароли для доступа в административную часть таких движков как 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
содержание может быть произвольным, но содержать логин и хэш пароля. В вышеприведенном случае это логин imnotabot и пароль imhuman.
И уже в файл Includes/bot-block.conf (FreeBSD) conf.d/bot-block-conf (Linux) добавляем следующее правило:
<Location ~ "/(wp-login\.php|administrator|admin\.php)">
AuthType Basic
AuthName "Subdomain authorization"
AuthUserFile "/usr/local/etc/apache22/.htpasswd"
Require valid-user
</Location>
Обращаем внимание на полный путь месторасположения файла

.htpasswd

 в конфигурационном файле.

One thought on “Блокировка доступа к админкам сайтов для nginx и apache”

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *