Защитить 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 сайт.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *