В этом подробнейшем, пошаговом руководстве я проведу вас через весь процесс настройки мощной автоматической защиты для вашего WordPress-сайта. Я покажу каждый этап, объясню каждую команду и расскажу о возможных проблемах, чтобы даже новичок смог с этим справиться.
Что я покажу вам, как сделать, и зачем это нужно?
Я научу вас настраивать автоматическую защиту с помощью двух инструментов:
- Fail2Ban: Представьте, что это очень внимательный и строгий охранник для вашего сервера. Я настрою его так, чтобы он постоянно читал системные журналы (логи) и, если заметит, что кто-то пытается подобрать пароль, немедленно блокировал IP-адрес этого злоумышленника.
- AbuseIPDB: Это огромная, всемирная база данных “плохих” IP-адресов. Когда наш “охранник” Fail2Ban ловит нарушителя, он не просто его блокирует, но и отправляет жалобу в AbuseIPDB. Я считаю, что это наш гражданский долг в сети — сообщать о злоумышленниках.
Моя итоговая цель: Показать вам, как сделать так, чтобы ваш сервер автоматически блокировал атакующих и сообщал о них всему интернету, делая веб-пространство чуточку безопаснее.
Часть 1: Подготовка — Получаем ваш API-ключ AbuseIPDB
Это ваш “ключ” от пульта для отправки жалоб. Без него ничего не получится.
- Перейдите на сайт AbuseIPDB.com и создайте свой бесплатный аккаунт.
- Войдите в свой аккаунт.
- Перейдите в раздел API. Обычно это можно сделать, кликнув на ваше имя пользователя, а затем на “API”.
- Нажмите кнопку “Create API Key” (Создать API-ключ).
- Дайте ключу любое имя (например, “My WordPress Server”) и создайте его.
- Вы увидите длинную строку из букв и цифр. Это ваш API-ключ. Скопируйте его в надежное место (например, в текстовый файл на вашем компьютере).
ВАЖНО: Ваш API-ключ — это как пароль. Никогда и никому его не показывайте и не публикуйте в открытом доступе.
Часть 2: Установка Fail2Ban на ваш сервер
Теперь я покажу, как установить на сервер нашего “охранника”.
- Подключитесь к вашему серверу по SSH.
- Сначала я рекомендую обновить списки пакетов. Это гарантирует, что вы устанавливаете самую свежую версию программы:
sudo apt update
- Теперь установим сам Fail2Ban. Ключ
-y
в конце автоматически ответит “да” на вопрос об установке:sudo apt install fail2ban -y
- После установки нужно включить сервис и добавить его в автозагрузку, чтобы он запускался сам после каждой перезагрузки сервера. Я покажу, как сделать это одной командой:
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 выполнять ненужную работу. Если вы тоже используете ключи (а я настоятельно это рекомендую), вам следует сделать так же.
- Откройте для редактирования файл
jail.local
. Если его нет, он будет создан.sudo nano /etc/fail2ban/jail.local
- Скопируйте весь приведенный ниже текст и вставьте его в редактор. Этот файл описывает наши правила блокировки.
# --- ОТКЛЮЧЕНИЕ ПРАВИЛА ДЛЯ 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: Финальный запуск и проверка
Все настроено. Теперь я покажу, как применить изменения и убедиться, что всё работает.
- Перезапустите Fail2Ban, чтобы он прочитал нашу новую конфигурацию:
sudo systemctl restart fail2ban
- Теперь проверим статус. Эта команда покажет, какие наборы правил активны:
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-адрес в список исключений.
- Откройте файл
/etc/fail2ban/jail.local
снова. - В самом верху файла добавьте следующие строки (если их еще нет):
[DEFAULT] ignoreip = 127.0.0.1/8 ::1 ВАШ_IP_АДРЕС
- Замените
ВАШ_IP_АДРЕС
на ваш реальный IP. Если адресов несколько, их можно перечислить через пробел. - Сохраните файл и перезапустите Fail2Ban:
sudo systemctl restart fail2ban
Теперь вы в безопасности! Я показал вам, как настроить надежную и полезную для всего сообщества защиту вашего сайта. Удачи!