Полное руководство по настройке Fail2Ban и AbuseIPDB для защиты WordPress на Debian 12

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

Что я покажу вам, как сделать, и зачем это нужно?

Я научу вас настраивать автоматическую защиту с помощью двух инструментов:

  • Fail2Ban: Представьте, что это очень внимательный и строгий охранник для вашего сервера. Я настрою его так, чтобы он постоянно читал системные журналы (логи) и, если заметит, что кто-то пытается подобрать пароль, немедленно блокировал IP-адрес этого злоумышленника.
  • AbuseIPDB: Это огромная, всемирная база данных “плохих” IP-адресов. Когда наш “охранник” Fail2Ban ловит нарушителя, он не просто его блокирует, но и отправляет жалобу в AbuseIPDB. Я считаю, что это наш гражданский долг в сети — сообщать о злоумышленниках.

Моя итоговая цель: Показать вам, как сделать так, чтобы ваш сервер автоматически блокировал атакующих и сообщал о них всему интернету, делая веб-пространство чуточку безопаснее.

Часть 1: Подготовка — Получаем ваш API-ключ AbuseIPDB

Это ваш “ключ” от пульта для отправки жалоб. Без него ничего не получится.

  1. Перейдите на сайт AbuseIPDB.com и создайте свой бесплатный аккаунт.
  2. Войдите в свой аккаунт.
  3. Перейдите в раздел API. Обычно это можно сделать, кликнув на ваше имя пользователя, а затем на “API”.
  4. Нажмите кнопку “Create API Key” (Создать API-ключ).
  5. Дайте ключу любое имя (например, “My WordPress Server”) и создайте его.
  6. Вы увидите длинную строку из букв и цифр. Это ваш API-ключ. Скопируйте его в надежное место (например, в текстовый файл на вашем компьютере).

ВАЖНО: Ваш API-ключ — это как пароль. Никогда и никому его не показывайте и не публикуйте в открытом доступе.

Часть 2: Установка Fail2Ban на ваш сервер

Теперь я покажу, как установить на сервер нашего “охранника”.

  1. Подключитесь к вашему серверу по SSH.
  2. Сначала я рекомендую обновить списки пакетов. Это гарантирует, что вы устанавливаете самую свежую версию программы:
    sudo apt update
  3. Теперь установим сам Fail2Ban. Ключ -y в конце автоматически ответит “да” на вопрос об установке:
    sudo apt install fail2ban -y
  4. После установки нужно включить сервис и добавить его в автозагрузку, чтобы он запускался сам после каждой перезагрузки сервера. Я покажу, как сделать это одной командой:
    sudo systemctl enable --now fail2ban

Часть 3: Конфигурация — Обучаем нашего “охранника”

Это самый важный этап. Я объясню, как научить Fail2Ban следить за нужными событиями.

Шаг 3.1: Создание Фильтров для WordPress

Фильтры — это инструкции, которые описывают, как выглядит атака в лог-файлах. Я покажу, как создать три отдельных фильтра.

1. Фильтр для атак на страницу входа (wp-login.php)

Создаем и открываем файл конфигурации с помощью текстового редактора nano:

sudo nano /etc/fail2ban/filter.d/wordpress.conf

В открывшийся пустой редактор вставьте следующий текст:

[Definition]
failregex = ^ .* "POST /wp-login.php HTTP/.*" 200
ignoreregex =

Сохраните файл и закройте редактор. Для этого нажмите Ctrl+X, затем клавишу Y, а затем Enter.

2. Фильтр для спама в комментариях (wp-comments-post.php)

Создаем и открываем новый файл:

sudo nano /etc/fail2ban/filter.d/wordpress-comments.conf

Вставляем текст:

[Definition]
failregex = ^ .* "POST /wp-comments-post.php HTTP/.*"
ignoreregex =

Сохраняем и выходим: Ctrl+X, Y, Enter.

3. Фильтр для атак на файл xmlrpc.php

Создаем и открываем еще один файл:

sudo nano /etc/fail2ban/filter.d/wordpress-xmlrpc.conf

Вставляем текст:

[Definition]
failregex = ^ .* "POST /xmlrpc.php HTTP/.*"
ignoreregex =

Сохраняем и выходим: Ctrl+X, Y, Enter.

Шаг 3.2: Создание Главного Файла с Правилами (jail.local)

Теперь я покажу, как создать главный файл, который будет использовать наши фильтры. Мы создаем файл с расширением .local, чтобы ваши настройки не были удалены при обновлении Fail2Ban.

Важное отступление про SSH: Прежде чем мы продолжим, я хочу сделать оговорку. В конфигурации ниже вы увидите, что первое правило, [sshd], я отключил (enabled = false). Я делаю это на своих серверах по одной простой причине: я использую для доступа только SSH-ключи и нестандартный порт, а вход по паролю у меня полностью запрещен. Это делает атаки по подбору пароля к SSH бессмысленными. Отключение этого правила не дает Fail2Ban выполнять ненужную работу. Если вы тоже используете ключи (а я настоятельно это рекомендую), вам следует сделать так же.

  1. Откройте для редактирования файл jail.local. Если его нет, он будет создан.
    sudo nano /etc/fail2ban/jail.local
  2. Скопируйте весь приведенный ниже текст и вставьте его в редактор. Этот файл описывает наши правила блокировки.
    # --- ОТКЛЮЧЕНИЕ ПРАВИЛА ДЛЯ SSH ---
    # Я отключаю это правило, так как использую вход по ключам и нестандартный порт.
    [sshd]
    enabled = false
    
    # --- ПРАВИЛО ДЛЯ ЗАЩИТЫ СТРАНИЦЫ ВХОДА WORDPRESS ---
    [wordpress]
    enabled  = true
    port     = http,https
    filter   = wordpress
    action   = %(action_mwl)s
               abuseipdb[abuseipdb_apikey="ВАШ_API_КЛЮЧ", abuseipdb_category="18,22"]
    logpath  = /var/log/apache2/access.log  # ВАЖНО: Проверьте этот путь!
    maxretry = 3
    findtime = 3600
    bantime  = 86400
    
    # --- ПРАВИЛО ДЛЯ ЗАЩИТЫ ОТ СПАМА В КОММЕНТАРИЯХ ---
    [wordpress-comments]
    enabled  = true
    port     = http,https
    filter   = wordpress-comments
    action   = %(action_mwl)s
               abuseipdb[abuseipdb_apikey="ВАШ_API_КЛЮЧ", abuseipdb_category="10"]
    logpath  = /var/log/apache2/access.log  # ВАЖНО: Проверьте этот путь!
    maxretry = 5
    findtime = 3600
    bantime  = 86400
    
    # --- ПРАВИЛО ДЛЯ ЗАЩИТЫ ОТ АТАК НА XML-RPC ---
    [wordpress-xmlrpc]
    enabled  = true
    port     = http,https
    filter   = wordpress-xmlrpc
    action   = %(action_mwl)s
               abuseipdb[abuseipdb_apikey="ВАШ_API_КЛЮЧ", abuseipdb_category="18,21"]
    logpath  = /var/log/apache2/access.log  # ВАЖНО: Проверьте этот путь!
    maxretry = 5
    findtime = 3600
    bantime  = 604800

Шаг 3.3: Редактирование Конфигурации под Себя (САМЫЙ ВАЖНЫЙ ШАГ!)

В этом же открытом файле jail.local вам нужно изменить две вещи:

1. ВАШ_API_КЛЮЧ: Найдите все три строки, где написано ВАШ_API_КЛЮЧ, и замените эту надпись на реальный ключ, который вы скопировали с сайта AbuseIPDB. Кавычки вокруг ключа должны остаться!

2. Путь к логам (logpath): Путь /var/log/apache2/access.log подходит для веб-сервера Apache. Если вы используете Nginx, вам нужно изменить этот путь во всех трех секциях на /var/log/nginx/access.log.

После того как вы внесли эти изменения, сохраните файл и закройте редактор: Ctrl+X, Y, Enter.

Часть 4: Финальный запуск и проверка

Все настроено. Теперь я покажу, как применить изменения и убедиться, что всё работает.

  1. Перезапустите Fail2Ban, чтобы он прочитал нашу новую конфигурацию:
    sudo systemctl restart fail2ban
  2. Теперь проверим статус. Эта команда покажет, какие наборы правил активны:
    sudo fail2ban-client status

    Если вы все сделали правильно, вы должны увидеть примерно такой результат:

    Status
    |- Number of jail:      3
    `- Jail list:   wordpress, wordpress-comments, wordpress-xmlrpc

    Это означает, что наш “охранник” теперь следит за тремя видами атак на WordPress.

Часть 5: Что делать, если что-то пошло не так?

Проблема: Команда sudo fail2ban-client status показывает только одно правило или вообще ни одного из наших.

Причина: Скорее всего, в вашем файле jail.local есть синтаксическая ошибка. Fail2Ban читает конфигурацию до первой ошибки и останавливается.

Решение: Я покажу, как запустить команду для отладки:

sudo fail2ban-client -d

Просмотрите вывод. Вам не нужно понимать всё, ищите строки, где есть слово ERROR. Чаще всего ошибка заключается в пропущенной кавычке у API-ключа или опечатке в названии параметра. Внимательно проверьте ваш файл /etc/fail2ban/jail.local еще раз, исправьте ошибку и перезапустите Fail2Ban.

Бонус: Как добавить свой IP в белый список?

Чтобы вы случайно не заблокировали самого себя, я покажу, как добавить свой IP-адрес в список исключений.

  1. Откройте файл /etc/fail2ban/jail.local снова.
  2. В самом верху файла добавьте следующие строки (если их еще нет):
    [DEFAULT]
    ignoreip = 127.0.0.1/8 ::1 ВАШ_IP_АДРЕС
  3. Замените ВАШ_IP_АДРЕС на ваш реальный IP. Если адресов несколько, их можно перечислить через пробел.
  4. Сохраните файл и перезапустите Fail2Ban:
    sudo systemctl restart fail2ban

Теперь вы в безопасности! Я показал вам, как настроить надежную и полезную для всего сообщества защиту вашего сайта. Удачи!

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

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