Серверное оборудование для бизнеса — надёжные решения для любых задач Подробнее →
Статья

Настройка fail2ban: защищаем SSH за 10 минут

Настройка fail2ban: защищаем SSH за 10 минут

Каждый сервер, открытый в интернет, уже через несколько минут начинает получать брутфорс-атаки на SSH. Fail2ban — простой и проверенный инструмент, который автоматически блокирует IP-адреса после нескольких неудачных попыток входа. Настроить его можно буквально за 10 минут, и это должен сделать каждый администратор.

Установка

На Debian/Ubuntu:

apt update && apt install fail2ban -y

На RHEL/CentOS/AlmaLinux:

dnf install epel-release -y && dnf install fail2ban -y

После установки сервис нужно включить и запустить:

systemctl enable fail2ban --now

Базовая конфигурация

Никогда не редактируйте файл /etc/fail2ban/jail.conf напрямую — он перезапишется при обновлении пакета. Создайте локальный оверрайд:

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Откройте jail.local и найдите секцию [DEFAULT]. Ключевые параметры:

  • bantime = 1h — на сколько блокировать IP (можно указать 1d, 1w)
  • findtime = 10m — временное окно, в котором считаются попытки
  • maxretry = 5 — сколько неудачных попыток допустить

Для SSH включите специальный jail. В том же файле найдите секцию [sshd] и убедитесь, что она выглядит так:

[sshd]
enabled = true
port    = ssh
logpath = %(sshd_log)s
backend = %(syslog_backend)s
maxretry = 3
bantime  = 2h

Если вы используете нестандартный порт SSH, укажите его явно: port = 2222.

Проверка работы

После изменения конфига перезапустите fail2ban:

systemctl restart fail2ban

Посмотрите статус jail-а:

fail2ban-client status sshd

Вывод покажет количество заблокированных IP и список активных банов. Чтобы разбанить конкретный адрес вручную:

fail2ban-client set sshd unbanip 1.2.3.4

Настройка whitelist

Обязательно добавьте свой IP в белый список, чтобы случайно не заблокировать себя:

[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 203.0.113.10

Здесь можно перечислить как отдельные адреса, так и подсети.

Мониторинг и логи

Fail2ban пишет свои логи в /var/log/fail2ban.log. Посмотреть последние события:

tail -f /var/log/fail2ban.log

Также можно настроить оповещения по email — для этого в секции [DEFAULT] указывается destemail, sendername и mta. Однако для большинства случаев достаточно периодически проверять лог или интегрировать fail2ban с системой мониторинга через парсинг журнала.

Дополнительные jail-ы

Fail2ban умеет защищать не только SSH. Популярные варианты:

  • [nginx-http-auth] — защита от брутфорса HTTP-авторизации
  • [postfix] — защита почтового сервера
  • [dovecot] — защита IMAP/POP3
  • [wordpress] — защита формы входа WordPress (требует дополнительного фильтра)

Каждый jail подключается аналогично SSH — достаточно добавить секцию в jail.local и указать enabled = true.

Итог

Fail2ban — это минимальный необходимый уровень защиты для любого публичного сервера. Установка и базовая настройка занимает меньше 10 минут, а эффект ощутим сразу: количество мусорных попыток в логах SSH резко сокращается. Не забудьте добавить свой IP в whitelist и задать разумный bantime — слишком короткий период блокировки не даст нужного эффекта.

2 Ответа

  1. Пользуюсь fail2ban уже несколько лет, всё работает отлично. Единственное — советую сразу выставлять bantime не меньше суток, иначе боты просто возвращаются через час.

  1. Хорошая статья, но стоило упомянуть nftables-бэкенд — на современных системах он работает заметно быстрее iptables. Ставьте в конфиге banaction = nftables-multiport.