Защита/блокировка сайта с помощью .htaccess + .htpasswd

Другой вариант защиты - это установка пароля на сервере для доступа к файлу wp-login.php.

Принцип работы заключается в том, что при заходе на страницу wp-login.php пользователю будет показано дополнительное окно авторизации, в которое нужно ввести пароль для доступа к wp-login.php (как выглядит окно зависит от браузера).

login-w

Если пароль введен верно, то сервер допускает вас к файлу и далее как обычно можно авторизоваться в самом WordPress.

Порядок действий:

Шаг 1: создаем файл .htpasswd

В корне вашего сайта создаем файл, в котором указываем логин и пароль для доступа. Можно указать несколько логинов и паролей для разных пользователей:

kama:$apr1$Q9Gnetdv$pZyL9sGbN3ynC4k2oAZaQ.
andreas:$apr1$dHjB0/..$mkTTbqwpK/0h/rz4ZeN8M0
john:$apr1$IHaD0/..$N9ne/Bqnh8.MyOtvKU56j1

Пользователей можно вписать сколько угодно. Для генератора таких строк используйте специальные сервисы, например этот.

Шаг 2: Подключаем файл .htpasswd

Открываем файл .htaccess, который должен быть рядом с только что созданным .htpasswd и добавляем в него такой код (в любое место):

<Files wp-login.php>
AuthName "Access Denied"
AuthType Basic
AuthUserFile /home/www/example.com/.htpasswd
require valid-user
</Files>

Не забудьте поменять путь до файла к /home/www/example.com

Готово! Теперь попробуйте авторизоваться в WordPress. И вы уведите дополнительное окно для ввода логина и пароля. Такая защита защитит вас от нагрузки на брутфорс атак.

Nginx

Блокировку можно установить и на уровне Nginx. Для этого в конфиге файла домена можно использовать следующие директивы:

  • auth_basic строка | off;
  • auth_basic_user_file файл;

Подробнее о директивах читайте здесь.

Пример использования директив:

server {
	listen 443 ssl http2;
	server_name example.com;

	# еще директивы...

	location / {
		auth_basic "Restricted Access!";
		auth_basic_user_file /etc/nginx/htpasswd_example.com;

		index index.php;
		try_files $uri $uri/ /index.php?$args;
	}

	# еще директивы...
}

Теперь в файле /etc/nginx/htpasswd_example.com нужно указать пароли. Формат файла такой:

# комментарий
имя1:пароль1
имя2:пароль2:комментарий
kama:$wet1$F4HT89kL$f0gEMNpFKZNH4VggDMYTm0

Этот пример закроет сайт паролем для всех запросов на сайт (кроме статических файлов).