Защитить wordpress от brute force fail2ban – это один из самых эффективных способов повысить безопасность вашего сайта. При настройке fail2ban вы автоматически блокируете IP‑адреса, которые пытаются угадать пароль, а tar‑пакет позволяет быстро установить и обновить систему в продакшене. В этой статье мы разберём, как при помощи fail2ban и tar‑пакета усилить защиту от brute force атак, чтобы ваш сайт оставался быстрым и надёжным.
Разбор задачи
WordPress, будучи одним из самых популярных CMS, часто становится мишенью brute force атак, когда злоумышленники перебирают логины и пароли. Такие попытки не только накладывают нагрузку на сервер, но и могут привести к компрометации аккаунтов. Fail2ban – это инструмент, который анализирует логи и блокирует IP‑адреса, совершившие слишком много неудачных попыток входа. Однако без правильной настройки fail2ban сайт остаётся уязвимым. Tar‑пакет позволяет быстро развернуть и обновить fail2ban, что ускоряет процесс защиты. Мы рассмотрим, как собрать конфигурацию, добавить правила для WordPress и проверить работу.
Пошаговое решение
Первый шаг – установить fail2ban и tar‑пакет, если они ещё не установлены. Далее создаём конфиг для WordPress, где указываем путь к логам, порог количества попыток и действие блокировки. После чего перезапускаем fail2ban, чтобы новые правила вступили в силу. Наконец, проверяем, что блокировка работает, пытаясь войти в админку с неверными данными. Если всё настроено правильно, IP будет заблокирован, а лог-файл даст подробную информацию о попытках. Это позволит вам быстро реагировать на угрозы и поддерживать безопасность вашего WordPress без лишних усилий.
Рабочий код
// 1. Создаём фильтр для регистрации попыток логина
add_action('wp_login_failed', function() {
$ip = $_SERVER['REMOTE_ADDR'];
$log = sys_get_temp_dir() . "/fail2ban.log";
// В формате fail2ban: IP TIME USER
$time = date('Y-m-d H:i:s');
file_put_contents($log, "$ip $timen", FILE_APPEND);
});
// 2. Добавляем правила для nginx (пример)
// location /wp-login.php {
// if ($http_user_agent ~* "(?i)wordpress") { return 403; }
// }
// 3. Конфигурация fail2ban (jail.local)
// [wordpress-login]
// enabled = true
// filter = wordpress-login
// action = iptables-multiport[name=wordpress, port="80,443", protocol=tcp]
// logpath = /var/log/fail2ban.log
// maxretry = 5
// findtime = 600
// bantime = 3600
// 4. Фильтр fail2ban (wordpress-login.conf)
// [Definition]
// failregex = ^%(__prefix_line)ss+S+s+S+$
// ignoreregex =
Типичные ошибки
1. Некорректный путь к логу – fail2ban не найдет файл.
2. Отключённый php.ini логгинг – wp_login_failed не срабатывает.
3. Переопределение iptables правила – пользователь может обойти блокировку.
4. Не обновлённые правила nginx – атаки через другие скрипты не блокируются.
FAQ
Как проверить, что fail2ban блокирует IP?
Выполните fail2ban-client status wordpress-login. Если IP в списке Banned IP list, значит блокировка работает.
Можно ли блокировать только по IP, а не по логину?
Да, можно добавить iptables -I INPUT -s $ip -j DROP в скрипт. Но лучше использовать fail2ban, оно сам управляет временем блокировки.
Что делать, если блокировка блокирует валидных пользователей?
Увеличьте maxretry в jail.local. Смотрите логи, чтобы убедиться, что попытки логина не подозрительны.
Заключение и чек‑лист
1. Включите wp_login_failed hook, проверяйте $_SERVER['REMOTE_ADDR'].
2. Создайте fail2ban конфиги (jail.local, wordpress-login.conf).
3. Проверьте корректность путей к логам.
4. Перезапустите fail2ban.
5. Тестируйте блокировку через fail2ban-client status.
6. Мониторьте логи и обновляйте правила при необходимости.
7. Включите HTTPS и обновляйте WordPress и плагины.
8. Альтернативы: использовать плагины типа Wordfence для более простого управления.
Применив эти шаги, вы существенно снизите риск brute force атак на ваш WordPress сайт.
