Fail2Ban на Linux: Установка, настройка и защита SSH от атак
Содержание
- Введение
- Что такое Fail2Ban?
- Как установить Fail2Ban на Linux
- Первичная настройка Fail2Ban
- Как защитить SSH с помощью Fail2Ban
- Проверка статуса jail-а
- Как разбанить IP в Fail2Ban
- Какие сервисы защищает Fail2Ban?
- Как написать кастомный jail для Fail2Ban
- Где размещать кастомные jail-и?
- Пример собственного jail-а:
- Как создать фильтр (filter)
- Применение и тест
- Советы по безопасности и эксплуатации
- Заключение
Введение
Открытые порты — как двери, через которые злоумышленники могут попасть на ваш сервер. Особенно это касается SSH, FTP, почтовых и веб-сервисов. Если вы заметили в логах бесконечные попытки входа с китайских, индийских или просто неизвестных IP — поздравляю, ваш сервер уже кто-то брутит.
К счастью, есть простое и эффективное решение — Fail2Ban. Это инструмент, который анализирует логи и автоматически блокирует IP-адреса, совершающие подозрительные действия — например, многократные ошибки при входе.
Что такое Fail2Ban?
Fail2Ban — это фоновая служба, которая отслеживает логи (например, /var/log/auth.log) и выявляет IP-адреса, нарушающие правила безопасности. Далее он применяет правила для блокировки этих IP с помощью iptables, nftables, firewalld и других бэкендов.
Пример: IP 192.168.1.100 сделал 5 неудачных попыток входа по SSH за 1 минуту. Fail2Ban блокирует этот IP на 10 минут (или дольше).
Как установить Fail2Ban на Linux
Установка зависит от вашей операционной системы. Ниже приведены команды для популярных дистрибутивов.
Ubuntu / Debian
sudo apt update && sudo apt install -y fail2ban
CentOS
sudo dnf install -y epel-release
sudo dnf update && sudo dnf install fail2ban
RedOS
sudo dnf update && sudo dnf install -y fail2ban
ALT Linux
sudo apt-get update && sudo apt-get install -y fail2ban
Запустите и проверьте статус службы:
sudo systemctl start fail2ban
sudo systemctl status fail2ban
Первичная настройка Fail2Ban
Все конфиги находятся в директории /etc/fail2ban.
Важно: Не редактируйте файл
jail.conf. Вместо этого создайтеjail.local, чтобы сохранить свои настройки при обновлениях.
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Или просто создайте файл с нужными параметрами — остальное будет использоваться по умолчанию (рекомендуется).
Как защитить SSH с помощью Fail2Ban
Fail2Ban "из коробки" поддерживает защиту SSH.
Пример /etc/fail2ban/jail.local:
[sshd]
enabled = true
port = ssh
maxretry = 2
bantime = 10m
findtime = 5m
Пояснение параметров:
enabled— включить фильтрport— порт SSH (можно указать нестандартный)maxretry— сколько неудачных попыток допускаетсяfindtime— за какой период анализируются попыткиbantime— время блокировки IP
После изменения настроек перезапустите Fail2Ban:
sudo systemctl restart fail2ban
Больше про SSH можно почитать здесь.
Проверка статуса jail-а
Запусти команду:
sudo fail2ban-client status sshd
Пример вывода:
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 2
| `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
|- Currently banned: 1
|- Total banned: 1
`- Banned IP list: 203.0.113.45
Как разбанить IP в Fail2Ban
Иногда нужно разбанить IP вручную:
sudo fail2ban-client set sshd unbanip 203.0.113.45
Какие сервисы защищает Fail2Ban?
Fail2Ban поддерживает множество сервисов. Ниже — самые популярные:
| Сервис | Назначение | Jail |
|---|---|---|
| SSH | Брутфорс | sshd |
| FTP | Аутентификация | vsftpd, proftpd |
| Nginx | 404, сканирование, атаки | nginx-* |
| Apache | Web-атаки | apache-* |
| Postfix | Почтовая защита | postfix |
| Dovecot | IMAP/POP3 | dovecot |
| MySQL | Подбор пароля | mysqld-auth |
Все фильтры находятся в каталоге /etc/fail2ban/filter.d/.
Вы можете включать нужные или создавать собственные — например, для WordPress, phpMyAdmin, панелей администрирования и др.
Как написать кастомный jail для Fail2Ban
Где размещать кастомные jail-и?
Лучше всего — в отдельном файле:
/etc/fail2ban/jail.d/mycustom.conf
Можно и в jail.local, но jail.d/ — предпочтительнее, особенно если вы хотите использовать несколько отдельных правил или управлять ими через Ansible и другие инструменты.
Пример собственного jail-а:
[my-service]
enabled = true
filter = my-service
port = 12345
logpath = /var/log/my-service/access.log
maxretry = 5
findtime = 10m
bantime = 1h
action = iptables[name=my-service, port=12345, protocol=tcp]
Что означает:
filter = my-service— название фильтра, который мы ещё создадим (в/etc/fail2ban/filter.d/my-service.conf)port = 12345— порт твоего сервисаlogpath = ...— путь до лога, в котором Fail2Ban будет искать злоумышленниковmaxretry— сколько раз допускается ошибкаfindtime— за какой промежуток времени считаются попыткиbantime— на сколько времени баним IP
Как создать фильтр (filter)
Создайте файл:
sudo nano /etc/fail2ban/filter.d/my-service.conf
Содержимое:
[Definition]
failregex = ^.*Failed login from <HOST>.*
ignoreregex =
Важно:
failregexдолжен соответствовать реальной строке в логе. Используй<HOST>как шаблон для IP-адреса.
Хорошая практика — перед запуском нового jail убедитесь, что фильтр действительно срабатывает, с помощью fail2ban-regex.
fail2ban-regex /var/log/my-service/access.log /etc/fail2ban/filter.d/my-service.conf
Применение и тест
После добавления jail-а и фильтра:
sudo systemctl restart fail2ban
Проверить статус:
sudo fail2ban-client status
sudo fail2ban-client status my-service
Советы по безопасности и эксплуатации
- Используйте
nftablesвместоiptables— он быстрее и современнее. - Обязательно добавьте
ignoreipдля whitelisting своего IP:ignoreip = 127.0.0.1/8 192.168.1.0/24 - Не ставьте слишком строгие лимиты, иначе можете забанить себя.
- Настройте email-уведомления о банах через
sendmailилиmail.
Заключение
Fail2Ban — незаменимый инструмент для базовой защиты серверов от автоматических атак. Он легко устанавливается, гибко настраивается и подходит как для начинающих администраторов, так и для DevOps-инженеров.
Если у вас есть публичный сервер — Fail2Ban должен быть установлен по умолчанию. Это базовая гигиена безопасности.