Тильда, Битрикс, WordPress

Защита WordPress от перебора паролей и ботов

Каждый сайт на WordPress рано или поздно получает тысячи попыток входа от ботов. Сами они чаще всего не взламывают сайт, но нагружают сервер и ждут слабого пароля. Разбираем, как закрыть вход так, чтобы боты не мешали, а владелец входил без проблем.

Обновлено 11 ноября 20263 мин чтенияКоманда nbots

Содержание
  1. Почему боты атакуют WordPress
  2. Как понять, что пароли подбирают
  3. Как защитить вход: по шагам
  4. Правила для nginx
  5. Чего не хватает плагинам безопасности
  6. Частые вопросы

Коротко

  • У всех сайтов на WordPress одинаковые адреса входа, поэтому перебор паролей начинается сам.
  • Через xmlrpc.php можно проверить сотни паролей одним запросом — если он не нужен, закройте его.
  • Надёжный пароль и двухфакторный вход защищают от взлома, лимиты на сервере — от нагрузки.

Почему боты атакуют WordPress

WordPress — самая популярная CMS в мире, и у всех сайтов на нём одинаковые адреса входа. Боту не нужно ничего искать: он перебирает список сайтов и пробует пары «логин — пароль» из утёкших баз. Сам WordPress число попыток входа не ограничивает.

Главные точки атаки:

  • /wp-login.php — обычная страница входа;
  • /xmlrpc.php — старый интерфейс для удалённого управления. Через него можно проверить сотни паролей одним запросом;
  • /wp-json/wp/v2/users и /?author=1 — по ним бот узнаёт логины авторов, чтобы перебирать только пароли.

Как понять, что пароли подбирают

  • в логах сервера много POST-запросов к wp-login.php или xmlrpc.php с разных адресов;
  • сайт тормозит, а нагрузка на процессор растёт без роста посетителей;
  • плагин безопасности присылает письма о неудачных входах;
  • хостинг предупреждает о превышении нагрузки.

Быстрее всего проверить по логам: загрузите кусок access.log в анализатор логов, он покажет попытки входа и адреса, с которых они идут.

Насколько защищён входОтметьте, что уже сделано
Отметьте, что совпадает

Как защитить вход: по шагам

  1. Надёжный пароль

    Уникальный пароль длиннее 14 символов у всех администраторов и редакторов. Пароли из утёкших баз боты пробуют первыми.

  2. Двухфакторный вход

    Код из приложения или письма при входе. Даже угаданный пароль без него бесполезен.

  3. Лимит попыток

    Плагин, который блокирует адрес после нескольких неудачных входов. Включите уведомления, чтобы видеть атаки.

  4. Закрыть xmlrpc.php

    Если не публикуете из приложений, закройте файл в настройках плагина безопасности или правилом сервера.

  5. Спрятать логины

    Логин администратора не должен совпадать с именем автора. Закройте вывод пользователей через REST API и перенаправление ?author=.

  6. Отсечь ботов до WordPress

    Лимиты в nginx и проверка браузера не дают ботам даже запустить PHP — сайт перестаёт тормозить во время атак.

Анализатор логов сервераВставьте кусок access.log — увидите попытки входа, адреса атакующих и долю ботов.Открыть

Правила для nginx

Если у вас свой сервер, часть защиты можно поставить до WordPress — тогда боты даже не запускают PHP и не нагружают сервер.

# В блоке http: не больше 5 запросов в минуту с одного адреса
limit_req_zone $binary_remote_addr zone=wplogin:10m rate=5r/m;

# В блоке server вашего сайта
location = /xmlrpc.php { deny all; }

location = /wp-login.php {
    limit_req zone=wplogin burst=3 nodelay;
    limit_req_status 429;
    # дальше — те же строки, что в вашем блоке location ~ \.php$
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php-fpm.sock;
}

После правки проверьте конфигурацию командой nginx -t и перезагрузите nginx. Путь к php-fpm возьмите из своего конфига.

Если сайт обновляется через приложения или Jetpack, проверьте, не нужен ли им xmlrpc.php, прежде чем закрывать его полностью.

Чего не хватает плагинам безопасности

Плагины ограничивают попытки входа, но работают внутри WordPress: каждая попытка всё равно запускает PHP и обращается к базе. При сильной атаке сайт тормозит, даже если ни один пароль не подошёл. Кроме того, боты меняют адреса после каждых нескольких попыток, и блокировка по IP их не останавливает.

Поэтому лучше сочетать три уровня: правила на сервере отсекают массовые запросы, плагин — перебор, а проверка браузера отсекает ботов, которые маскируются под людей. Как подключить nbots к WordPress, рассказали в статье о спаме в WordPress.

Частые вопросы

Нужно ли закрывать xmlrpc.php?

Если вы не публикуете записи из мобильного приложения и не используете сервисы, которым он нужен, — да. Через xmlrpc.php можно проверить много паролей одним запросом, а для обычной работы сайта он не нужен.

Помогает ли смена адреса wp-login.php?

Да, она убирает большую часть автоматических попыток: боты стучатся по стандартному адресу. Но это не замена надёжному паролю и двухфакторному входу — новый адрес можно узнать.

Как узнать, взломали ли сайт?

Проверьте список пользователей на незнакомых администраторов, последние изменённые файлы, новые плагины и странные ссылки в коде страниц. При сомнениях смените все пароли, ключи в wp-config.php и восстановите сайт из чистой копии.

Какой плагин выбрать для защиты входа?

Подойдёт любой популярный плагин безопасности с ограничением попыток входа и двухфакторной авторизацией. Важно не количество функций, а то, что он обновляется и не конфликтует с вашими плагинами.

Опасно ли, что видно логин администратора?

Само по себе — нет, но это упрощает перебор: боту остаётся подобрать только пароль. Поэтому логин лучше не показывать и обязательно включить двухфакторный вход.

Почему сайт тормозит, если пароль не подобрали?

Каждая попытка входа запускает PHP и обращается к базе. Тысячи попыток в час нагружают сервер так же, как тысячи посетителей. Лимиты в nginx отсекают их до WordPress.

Нужен ли отдельный антибот, если есть плагин безопасности?

Плагин защищает вход и админку, но не видит ботов, которые накручивают визиты, спамят в формах и скликивают рекламу. Антибот работает со всем трафиком сайта, поэтому они дополняют друг друга.

Читайте также