Установка Fail2Ban на Rocky Linux: защита от брутфорс-атак

Fail2Ban защищает серверы Rocky Linux от атак перебором (brute-force), отслеживая логи и автоматически блокируя IP-адреса, проявляющие вредоносное поведение. Когда злоумышленник предпринимает повторяющиеся неудачные попытки входа по SSH, подбора паролей или сканирования уязвимостей, Fail2Ban блокирует его IP-адрес через правила firewalld, предотвращая дальнейшие попытки доступа. Для серверов, доступных из интернета, этот автоматический ответ останавливает большинство автоматизированных атак до того, как они достигнут цели.

💡 Если ваш сервер доступен из интернета (SSH, веб-сервер, почта) — Fail2Ban автоматически блокирует IP-адреса злоумышленников после нескольких неудачных попыток входа, защищая вас от атак перебором.

В этом руководстве мы установим и настроим Fail2Ban на Rocky Linux 8, 9 и 10. Вы узнаете:

  • Как установить EPEL и Fail2Ban
  • Как настроить защиту SSH
  • Как настраивать время бана и игнорируемые IP
  • Как управлять банами через командную строку
  • Как добавлять защиты для веб-серверов (Apache/Nginx)
  • Как устранять типичные проблемы

Для кого: сисадмины (защита серверов от взлома), DevOps (автоматизация безопасности), владельцы VPS (защита от ботов), новички (понимание основ безопасности).


Оглавление

1. Что такое Fail2Ban и как он работает

КомпонентЧто делает
Фильтр (filter)Определяет, какие строки в логах считать подозрительными (например, «Failed password for root»)
Действие (action)Что делать при обнаружении атаки (например, добавить
правило в firewalld)
Тюрьма (jail)Связывает фильтр и действие, применяя их к конкретному
сервису (SSH, Apache, Nginx)

Типичный сценарий: Злоумышленник пытается подобрать пароль к SSH → Fail2Ban видит 5 неудачных попыток → добавляет IP в блокировку firewalld на 10 минут → атака прекращается.

💡 Вывод для новичка: Fail2Ban — это ваш личный охранник, который автоматически банит подозрительные IP-адреса.


2. Подготовка системы

2.1 Обновление системы

sudo dnf upgrade --refresh -y

Что делает:

  • sudo — права суперпользователя.
  • dnf upgrade — обновляет все пакеты до последних версий.
  • --refresh — принудительно перекачивает метаданные репозиториев (игнорирует кэш).
  • -y — автоматически отвечает «yes».

Зачем: Это стандартная практика безопасности перед установкой нового ПО.


3. Установка EPEL и Fail2Ban

Fail2Ban отсутствует в стандартных репозиториях Rocky Linux. Он поставляется через EPEL (Extra Packages for Enterprise Linux).

3.1 Установка EPEL

sudo dnf install -y epel-release

3.2 Проверка, что EPEL подключён

dnf repolist | grep epel

Ожидаемый вывод (Rocky 10):

epel                 Extra Packages for Enterprise Linux 10 - x86_64

3.3 Установка Fail2Ban

sudo dnf install -y fail2ban

Что делает: Устанавливает Fail2Ban вместе с интеграцией для firewalld (fail2ban-firewalld). На минимальных установках также подтянется firewalld.

3.4 Проверка установки

fail2ban-client --version

Ожидаемый вывод (Rocky 10/9):

Fail2Ban v1.1.0

Ожидаемый вывод (Rocky 8):

Fail2Ban v1.0.2

4. Запуск и включение автозагрузки

4.1 Запуск и включение

sudo systemctl enable --now fail2ban

4.2 Проверка статуса

systemctl status fail2ban

Ожидаемый вывод:

● fail2ban.service - Fail2Ban Service
     Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; enabled; preset: disabled)
     Active: active (running) since Wed 2026-01-15 10:30:00 UTC; 5s ago
   Main PID: 12346 (fail2ban-server)
      Tasks: 3 (limit: 4915)
     Memory: 12.0M

Признаки успеха:

  • Active: active (running) — сервис работает
  • enabled — автозагрузка настроена

5. Понимание конфигурации Fail2Ban

Fail2Ban использует систему, где локальные файлы переопределяют настройки по умолчанию.

ФайлНазначение
/etc/fail2ban/jail.confНастройки по умолчанию (не редактировать!)
/etc/fail2ban/jail.d/*.confПереопределения от пакетов
(например, 00-firewalld.conf)
/etc/fail2ban/jail.localВаши пользовательские настройки
(создайте этот файл)

Пакет fail2ban-firewalld создаёт файл /etc/fail2ban/jail.d/00-firewalld.conf, который настраивает Fail2Ban на использование firewalld.


6. Настройка защиты SSH (jail.local)

6.1 Создание файла конфигурации

sudo nano /etc/fail2ban/jail.local

6.2 Базовая конфигурация для SSH

Скопируйте и вставьте следующее:

[DEFAULT]
# Fail2Ban читает логи из systemd journal на Rocky Linux
backend = systemd

# IP-адреса, которые никогда не должны баниться (добавьте свои)
ignoreip = 127.0.0.1/8 ::1

# Длительность бана (10 минут по умолчанию)
bantime = 10m

# Временное окно для подсчёта неудач
findtime = 10m

# Количество неудач перед баном
maxretry = 5

[sshd]
enabled = true
port = ssh
maxretry = 3
bantime = 1h
findtime = 10m

Что делает эта конфигурация:

  • Защищает SSH с более строгими настройками: бан на 1 час после 3 неудачных попыток за 10 минут.
  • backend = systemd — Fail2Ban читает логи из systemd journal (стандарт для Rocky Linux).
  • ignoreip — локальный хост никогда не будет забанен.

6.3 Применение конфигурации

sudo systemctl restart fail2ban

7. Настройка времени бана

7.1 Фиксированное время

ЗначениеДлительность
bantime = 10m10 минут
bantime = 1h1 час
bantime = 1d1 день
bantime = -1Навсегда (до ручного разбана)

7.2 Инкрементальные баны (для повторных нарушителей)

Добавьте в секцию [DEFAULT]:

bantime.increment = true
bantime.multipliers = 1 2 4 8 16 32 64

Как работает: При первой блокировке IP банится на 10 минут, при второй — на 20 минут, при третьей — на 40 минут и так далее.

7.3 Белый список (игнорируемые IP)

Добавьте свои IP-адреса в ignoreip, чтобы они никогда не блокировались:

ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 203.0.113.50

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


8. Защита веб-серверов (Apache/Nginx)

8.1 Для Apache

Добавьте в jail.local:

[apache-auth]
enabled = true
port = http,https
logpath = %(apache_error_log)s
maxretry = 3
bantime = 1h

[apache-badbots]
enabled = true
port = http,https
logpath = %(apache_access_log)s
maxretry = 2
bantime = 48h

8.2 Для Nginx

Добавьте в jail.local:

[nginx-http-auth]
enabled = true
port = http,https
logpath = %(nginx_error_log)s
maxretry = 3
bantime = 1h

[nginx-botsearch]
enabled = true
port = http,https
logpath = %(nginx_access_log)s
maxretry = 2
bantime = 2h

8.3 Применение изменений

sudo systemctl restart fail2ban

9. Управление банами (fail2ban-client)

9.1 Просмотр активных тюрем (jails)

sudo fail2ban-client status

Ожидаемый вывод:

Status
|- Number of jail:      1
`- Jail list:   sshd

9.2 Просмотр забаненных IP в конкретной тюрьме (jail)

sudo fail2ban-client status sshd

Ожидаемый вывод:

Status for the jail: sshd
|- Filter
|  |- Currently failed: 3
|  |- Total failed:     15
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned: 1
   |- Total banned:     2
   `- Banned IP list:   203.0.113.7

9.3 Ручной бан IP

sudo fail2ban-client set sshd banip 203.0.113.7

9.4 Ручной разбан IP

sudo fail2ban-client set sshd unbanip 203.0.113.7

9.5 Перезагрузка конфигурации без потери банов

sudo fail2ban-client reload

10. Мониторинг логов

10.1 Просмотр последних записей

sudo tail -20 /var/log/fail2ban.log

10.2 Мониторинг в реальном времени

sudo tail -f /var/log/fail2ban.log

Нажмите Ctrl+C для выхода.

10.3 Поиск по логам

# Найти все баны
grep "Ban" /var/log/fail2ban.log

# Найти конкретный IP
grep "203.0.113.7" /var/log/fail2ban.log

11. Настройка email-уведомлений

11.1 Установка Postfix (для отправки почты)

sudo dnf install -y postfix s-nail
sudo systemctl enable --now postfix

11.2 Настройка email в Fail2Ban

Добавьте в секцию [DEFAULT] файла jail.local:

destemail = admin@example.com
sender = fail2ban@example.com
action = %(action_mwl)s

Что делает: action_mwl отправляет email с whois-информацией о забаненном IP и строками лога, которые вызвали бан.

11.3 Тест отправки письма

echo "Test email from Fail2Ban server" | mail -s "Fail2Ban Test" admin@example.com

12. Диагностика проблем

12.1 Ошибка: «log file not found» для SSH

Причина: Rocky Linux использует systemd journal, а не текстовые файлы логов.

Решение: Убедитесь, что в jail.local есть backend = systemd в секции [DEFAULT].

12.2 Тюрьма (jail) не запускается

Проверка конфигурации:

sudo fail2ban-client -t

Ожидаемый вывод:

OK: configuration test is successful

Проверка логов:

sudo journalctl -xeu fail2ban

12.3 Firewalld не запущен

Проверка:

sudo systemctl status firewalld

Запуск:

sudo systemctl enable --now firewalld
sudo systemctl restart fail2ban

12.4 Тест работы баннера

sudo fail2ban-client set sshd banip 203.0.113.7
sudo firewall-cmd --list-rich-rules

Ожидаемый вывод:

rule family="ipv4" source address="203.0.113.7" port port="ssh" protocol="tcp" reject type="icmp-port-unreachable"

Очистка:

sudo fail2ban-client set sshd unbanip 203.0.113.7

13. Удаление Fail2Ban

13.1 Остановка и отключение

sudo systemctl stop fail2ban
sudo systemctl disable fail2ban

13.2 Удаление пакетов

sudo dnf remove fail2ban fail2ban-firewalld fail2ban-sendmail fail2ban-server -y

13.3 Удаление конфигурации (опционально)

sudo rm -rf /etc/fail2ban/
sudo rm -f /var/log/fail2ban.log*
sudo rm -rf /var/lib/fail2ban/

13.4 Проверка удаления

rpm -qa | grep fail2ban

Ожидаемый вывод: (пусто)


Чек-лист: всё готово к работе

# 1. Проверка версии Fail2Ban
fail2ban-client --version

# 2. Проверка статуса сервиса
systemctl status fail2ban

# 3. Просмотр активных тюрем
sudo fail2ban-client status

# 4. Проверка логов (должны видеть запуск)
sudo tail -10 /var/log/fail2ban.log

# 5. Тест бана (забаньте тестовый IP и проверьте firewalld)
sudo fail2ban-client set sshd banip 203.0.113.7 && sudo firewall-cmd --list-rich-rules && sudo fail2ban-client set sshd unbanip 203.0.113.7

Заключение

Вы установили и настроили Fail2Ban на Rocky Linux для защиты от атак перебором.

Что теперь есть в системе:

  • ✅ Автоматическая блокировка IP при подозрительной активности
  • ✅ Защита SSH (и опционально веб-серверов, почты)
  • ✅ Интеграция с firewalld
  • ✅ Инструменты для управления банами и мониторинга

Что дальше:

  • Настройте дополнительные тюрьмы (jails) для сервисов, которые вы используете (vsftpd, postfix, dovecot)
  • Для повышения безопасности отключите аутентификацию по паролю в SSH и используйте ключи
  • Настройте email-уведомления для получения оповещений о банах
  • Периодически просматривайте логи для обнаружения новых атакующих паттернов

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

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