Пару недель назад наши сайты начали массово атаковать брутфорсом. Это начало вызывать перегрузку серверов и хостинг дал предупреждение о том что отключит сайты, если не сбавим нагрузку. И тут же прислал уведомление что обнаружил брутфорс-атаку и заблокировал страницу авторизации WordPress.

Все бы хорошо, но такая защита усложняла входы на сайт. И ладно если только нам, но у нас была одна сеть сайтов где было много клиентов. Понеслись жалобы.

Мы начали поиск решений и вот чего нашли 🙂

1. Блокировка доступа к wp-login.php через .htaccess

Это сделла хостинг reg.ru за нас и выглядело оно как блок в htaccess:


<Files "wp-login.php">
AuthType Basic
AuthName "please use your control panel password"
AuthUserFile /var/www/u0072692/data/etc/users
Require valid-user
</Files>

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

2. Блокировка при ошибках авторизации

Для этого ставим очень популярный и уважаемый плагин Limit Login Attempts https://wordpress.org/plugins/limit-login-attempts/

3. Включаем сокрытие wp-login.php

Вот это самое интересное. Нашел плагин WPS Hide Login.

У него целый ряд полезных особенностей:

  1. Совместим с плагином Limit Login Attempts
  2. Позволяет заменить путь wp-login.php на свой
  3. Совместим с режимом сети (WP Multisite). Но почему то путь по умолчанию /login/ — не заработал на поддоменах. Пришлось заменить на /signin/
  4. Отличное работает с защитой через htaccess из п.1 данной статьи.

Результат

  1. Брутфорсеры ломают себе зубы в попытке обратиться на wp-login.php об htaccess
  2. Клиенты получают короткий и более удобный адрес входа, например http://im4b.ru/sign/
  3. Частично скрываем от любопытных глаз тот факт что используем WordPress. При попыте зайти на wp-admin нас не бросит на страницу авторизации, а выдаст 404 ошибку. Пример http://im4b.ru/wp-admin/
  4. Хостер не угрожает нам блокировкой сайтов из-за перегрузки сервера