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 должен быть установлен по умолчанию. Это базовая гигиена безопасности.