Brute-force атаки — это один из самых распространённых способов взлома серверов. Злоумышленники автоматически перебирают пароли, пытаясь получить несанкционированный доступ к системам через SSH, почтовые, веб-приложения и другие службы. Один из надёжных способов защиты от таких атак — использование Fail2ban.
Fail2ban — это программное обеспечение, которое анализирует журналы событий (логи) и блокирует IP-адреса, с которых происходят повторные неудачные попытки входа. Решение эффективно, настраиваемо и поддерживается большинством Linux-систем.
Установка Fail2ban
Fail2ban доступен в большинстве репозиториев Linux-дистрибутивов. Установка осуществляется с помощью штатного пакетного менеджера. Пример:
sudo apt install fail2ban
⚠️ Обратите внимание: в CentOS/AlmaLinux и других системах используется dnf или yum.
Базовая настройка
Все основные настройки хранятся в конфигурационных файлах в каталоге /etc/fail2ban/.
Не рекомендуется изменять файл jail.conf напрямую. Вместо этого создайте локальную копию:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Откройте jail.local в текстовом редакторе и найдите секцию [sshd] — именно она отвечает за защиту SSH:
sudo nano /etc/fail2ban/jail.local
Пример настройки секции:
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = systemd
maxretry = 5
bantime = 1h
findtime = 10m
Пояснение параметров:
- enabled — включает защиту.
- port — порт, на котором работает SSH (можно указать конкретный, если используется нестандартный).
- logpath — путь к логам. Для большинства систем подойдёт переменная %(sshd_log)s.
- backend — механизм чтения логов. В современных дистрибутивах актуален systemd.
- maxretry — количество неудачных попыток до блокировки.
- bantime — длительность бана (поддерживаются s, m, h, d).
- findtime — за какое время должны произойти попытки для блокировки.
Расширенная защита и фильтры
Fail2ban поддерживает расширенную фильтрацию по регулярным выражениям. Для каждого "джейла" (jail) — изолированной зоны наблюдения — можно задать собственный фильтр.
Путь к фильтрам: /etc/fail2ban/filter.d/. Для SSH по умолчанию используется sshd.conf.
Вы можете создавать свои фильтры, например, для веб-приложений (Apache, Nginx, WordPress, и др.), почтовых серверов (Postfix, Dovecot) или панелей управления (ISPmanager, VestaCP и др.).
Проверка и управление Fail2ban
После внесения изменений перезапустите Fail2ban:
sudo systemctl restart fail2ban
Проверить статус:
sudo fail2ban-client status
Статус конкретного "джейла", например, sshd:
sudo fail2ban-client status sshd
Здесь вы увидите количество банов, активные IP, параметры защиты.
Актуальные практики
- Используйте динамическое время блокировки
Вместо фиксированного bantime можно задать bantime.increment, чтобы каждый последующий бан для IP увеличивался.
bantime.increment = true
bantime.rndtime = 10m
- Подключение к внешним blacklist'ам
Возможно настроить Fail2ban для автоматической блокировки IP из публичных чёрных списков (например, abuseipdb). - Интеграция с firewall-cmd или nftables
Fail2ban поддерживает различные backends: iptables, nftables, firewalld. Рекомендуется использовать актуальный механизм фильтрации, поддерживаемый в вашей системе. - Уведомления в Telegram или Email
Можно настроить уведомления при срабатывании банов. Особенно полезно для VPS и серверов без выделенного мониторинга.
Заключение
Fail2ban остаётся актуальным инструментом, обеспечивая надёжную и гибкую защиту серверов от перебора паролей. Его простота, расширяемость и поддержка множества сервисов делают его неотъемлемой частью арсенала системного администратора.
Если вы управляете сервером или отвечаете за безопасность инфраструктуры, убедитесь, что Fail2ban настроен и активно работает. Это простая мера, которая может предотвратить серьёзные инциденты.
Дополнительный материал:
Если вам понравился материал, не забудьте поставить палец вверх 👍 и поделиться статьёй с друзьями. Подписывайтесь на мой Telegram-канал, чтобы первыми узнавать о новых статьях и полезных материалах. А также загляните на сайт RoadIT.ru, где я собираю заметки о командах Linux, HowTo-гайды и много другой интересной информации. Спасибо за внимание!