Защита административной панели WordPress — важный шаг для повышения безопасности сайта. Один из лучших методов — использование базовой аутентификации, добавляющей дополнительный уровень защиты. В этой статье мы подробно рассмотрим, как настроить такую защиту для папки /wp-admin/
и страницы /wp-login.php
в Nginx.
В этой заметке рассмотрим защиту без использования сторонних плагинов для WordPress, для этого будем использовать возможности NGINX.
Установка и настройка пакета apache2-utils
Для управления паролями базовой аутентификации нам понадобится утилита htpasswd, которая является частью пакета apache2-utils.
Установка apache2-utils
Введите следующую команду в терминале:
sudo apt update && sudo apt install apache2-utils
Создание файла с паролями
Далее с помощью утилиты htpasswd создаем файл паролей. Например, создадим файл /etc/nginx/.htpasswd
и добавим туда пользователя admin:
sudo htpasswd -c /etc/nginx/.htpasswd admin
После выполнения команды вас попросят ввести и подтвердить пароль для пользователя. Флаг -c
создаёт новый файл, поэтому при добавлении новых пользователей его использовать не нужно. Например, чтобы добавить второго пользователя, используйте команду ниже:
sudo htpasswd /etc/nginx/.htpasswd имя-второго-пользователя
Проверка содержимого файла
Убедитесь, что файл /etc/nginx/.htpasswd
создан и содержит хэшированные пароли:
cat /etc/nginx/.htpasswd
Вывод должен быть примерно таким:
admin:$apr1$0BLj/X9a$g3kQxoYpfybTx2hczicSl.
Настройка Nginx для защиты wp-admin и wp-login.php
Добавьте в конфигурацию вашего сайта следующий код:
# Защита wp-admin паролем
location /wp-admin/ {
auth_basic "Restricted Area"; # Сообщение, которое увидит пользователь
auth_basic_user_file /etc/nginx/.htpasswd;
# Отключаем пароль для внутренних запросов от самого сервера
satisfy any;
allow 127.0.0.1; # Разрешить доступ локальному серверу
allow 192.168.1.0/24; # Разрешить доступ из локальной сети
deny all;
# Обработка PHP
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# Оставляем доступ для ajax-запросов
location ~ admin-ajax\.php$ {
allow all;
}
}
# Защита wp-login.php паролем
location = /wp-login.php {
auth_basic "Restricted Area";
auth_basic_user_file /etc/nginx/.htpasswd;
# Отключаем пароль для внутренних запросов от самого сервера
satisfy any;
allow 127.0.0.1;
allow 192.168.1.0/24;
deny all;
# Обработка PHP
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
Подробные комментарии к конфигурации
auth_basic — Эта директива включает базовую аутентификацию. Текст в кавычках (например, «Restricted Area») отображается как подсказка при запросе логина и пароля.
auth_basic_user_file — Указывает путь к файлу с хэшированными паролями, созданному ранее с помощью утилиты htpasswd.
satisfy any — Позволяет разрешить доступ без ввода пароля, если запросы исходят от определённых IP-адресов, указанных в директивах allow.
allow и deny
- allow 127.0.0.1; позволяет доступ с локального сервера.
- allow 192.168.1.0/24; разрешает доступ для всей подсети.
- deny all; запрещает доступ всем остальным.
Блоки для PHP — Включение PHP-обработки необходимо для корректной работы динамических страниц. Убедитесь, что путь к PHP-FPM сокету /run/php/php8.1-fpm.sock
соответствует вашей версии PHP.
Обработка ajax-запросов — Ajax-запросы (например, к admin-ajax.php) не должны блокироваться, так как это может нарушить работу сайта. Для этого предусмотрен отдельный блок с allow all.
Применение изменений
После внесения изменений в конфигурацию, перезагрузите Nginx:
sudo systemctl reload nginx
Тестирование
Попробуйте зайти в административную панель по адресу http://yourwebsite.ru/wp-admin/
и убедитесь, что требуется ввод логина и пароля.
Проверьте, что ajax-запросы (например, при публикации постов) работают корректно.
Убедитесь, что доступ к /wp-login.php
также защищён паролем.
На этом настройка базовой аутентификации для административной панели WordPress завершена.
Такая защита значительно повышает уровень безопасности вашего сайта. Даже если злоумышленник узнает логин и пароль администратора WordPress, ему придётся преодолеть дополнительный барьер в виде базовой аутентификации. Следуйте рекомендациям из этой статьи, чтобы надёжно защитить ваш сайт.
Помогла статья? Подписывайся на Telegram канал автора.
Анонсы всех статей, много другой полезной и интересной информации, которая не попадает на сайт.
Если у вас имеются вопросы, задавайте их в комментариях.