Краткий ответ: Ограничьте попытки входа (плагин), включите 2FA для всех админов, заблокируйте или ограничьте xmlrpc.php и добавьте серверный rate limiting через fail2ban, читающий лог аутентификации WordPress. Вместе это превращает бесконечный ботовый подбор паролей из угрозы в фоновый шум.
Обзор
Каждый публичный сайт на WordPress ежедневно брутфорсят — боты круглосуточно долбят wp-login.php и xmlrpc.php. Риск не только в угаданном пароле: незадушенный поток логинов также жжёт CPU. Защита имеет уровень приложения (лимиты, 2FA) и уровень сервера (fail2ban, правила веб-сервера) — используйте оба.
Что нужно иметь
- Админ-доступ к wp-admin и SSH.
- Уже активный файрвол (гайд по UFW) — fail2ban встраивается в него.
Пошаговая инструкция
- Лимит попыток: поставьте «Limit Login Attempts Reloaded» (или встроенный лимитер Wordfence): блокировка после 4–5 неудач с растущим временем блокировки.
- 2FA: добавьте TOTP-плагин (WP 2FA, Two-Factor) и сделайте его обязательным для ролей администратора и редактора.
- xmlrpc.php: если не пользуетесь мобильным приложением/Jetpack — запретите на веб-сервере (см. server block для Nginx); иначе ограничьте по IP.
- fail2ban: установите плагин «WP fail2ban» (логирует события аутентификации в syslog), затем:
Плагин поставляет соответствующие filter-файлы; скопируйте их вsudo apt install fail2ban # /etc/fail2ban/jail.d/wordpress.conf [wordpress-hard] enabled = true filter = wordpress-hard logpath = /var/log/auth.log maxretry = 3 bantime = 3600 port = http,https/etc/fail2ban/filter.d/и перезапустите fail2ban. - Проверка: сделайте несколько неудачных логинов с VPN-IP и посмотрите
sudo fail2ban-client status wordpress-hard.
Типичные проблемы
- Заблокировали сами себя: добавьте свой IP в белый список лимитера и в
ignoreipfail2ban. - Атаки продолжаются через xmlrpc: лимитеры логина часто его не покрывают — именно поэтому важен явный блок.
- Переименование wp-login ломает интеграции: прятать страницу входа — косметика; настоящая защита это rate limiting + 2FA.
Когда обращаться в поддержку
Если поток логинов насыщает сервер несмотря на баны (нетипично), откройте тикет с временными метками и примерами IP — события масштаба DDoS оцениваются на уровне сети, а DDoS-защита доступна как опция услуги.
Частые вопросы
Достаточно ли переименовать страницу входа, чтобы остановить brute force?
Нет — это лишь прячет wp-login.php от ленивых ботов и ломает некоторые интеграции. Лимит попыток, 2FA и fail2ban останавливают атаки независимо от того, известен ли адрес входа.
Почему атакуют именно xmlrpc.php?
xmlrpc.php принимает аутентификацию и пакует много попыток пароля в один запрос, обходя простые лимитеры — блокируйте его полностью, если не пользуетесь удалённой публикацией или Jetpack.
Что даёт fail2ban сверх плагина-лимитера входа?
fail2ban банит агрессивные IP на файрволе, так что рецидивисты вообще не доходят до PHP — это экономит CPU во время потоков атак и тем же механизмом покрывает SSH и другие сервисы.
Похожие статьи
- Как защитить WordPress на VPS
- Чек-лист безопасности WordPress
- Как настроить файрвол UFW
- Как защитить VPS после развёртывания
Нужна помощь? Связаться с поддержкой Cloud2Y →
