Установка и настройка fail2ban
Установим и настроим fail2ban для базовой защиты SSH на Debian 11 bullseye. Я буду ставить fail2ban на свежеустановленную систему.
Настройка для Debian 12.
Установка fail2ban и iptables
Перед установкой программ произведём обновление информации о пакетах и зависимостях в подключенных репозиториях:
apt-get update
Далее устанавливаем сам fail2ban:
apt-get install fail2ban
#или с ключом (параметром) -y, для установки без запросов подтверждения
apt-get install -y fail2ban
На вопрос хотим ли мы продолжить отвечам y:
Я буду использовать fail2ban совместно с iptables, но возможно использование и UFW или firewalld.
Устанавливаем iptables:
apt-get install iptables
С установкой завершили, переходим к настройке.
Запуск fail2ban
Для начала проверим, что fail2ban запустился:
service fail2ban status
fail2ban запущен
Если нет, то запускаем:
service fail2ban start
И добавляем в автозагрузку:
systemctl enable fail2ban
Настройка fail2ban
Далее редактируем конфигурационный файл отвечающий за защиту конкретных сервисов.
Для этого редактируем файл /etc/fail2ban/jail.local - именно .local. Jail.conf может обновляться и перезаписываться, то есть настройки могут не сохраниться. А конфигурационный файл jail.local имеет высший приоритет перед jail.conf, соответственно настройки в первую очередь будут применяться из данного файла.
Сначала скопируем jail.conf и переименуем, чтобы использовать его как шаблон:
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Редактируем файл jail.local, я использую midnight commander, но можно и другими текстовыми редакторами:
mcedit /etc/fail2ban/jail.local
Находим уже созданный jail для SSH, он имеет название [sshd]
и приводим к следующему виду, не забывая отредактировать [DEFAULT] как необходимо:
[DEFAULT]
#ignoreip =
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 1800
banaction = iptables-multiport
Перезапускаем fail2ban для применения настроек:
service fail2ban restart
Просмотрим log, запустилась ли sshd jail с указанными параметрами:
tail -n 15 /var/log/fail2ban.log
2022-05-18 15:10:20,155 fail2ban.server [1847]: INFO --------------------------------------------------
2022-05-18 15:10:20,155 fail2ban.server [1847]: INFO Starting Fail2ban v0.11.2
2022-05-18 15:10:20,155 fail2ban.observer [1847]: INFO Observer start...
2022-05-18 15:10:20,168 fail2ban.database [1847]: INFO Connected to fail2ban persistent database '/var/lib/fail2ban/fail2ban.sqlite3'
2022-05-18 15:10:20,170 fail2ban.database [1847]: WARNING New database created. Version '4'
2022-05-18 15:10:20,171 fail2ban.jail [1847]: INFO Creating new jail 'sshd'
2022-05-18 15:10:20,184 fail2ban.jail [1847]: INFO Jail 'sshd' uses pyinotify {}
2022-05-18 15:10:20,187 fail2ban.jail [1847]: INFO Initiated 'pyinotify' backend
2022-05-18 15:10:20,189 fail2ban.filter [1847]: INFO maxLines: 1
2022-05-18 15:10:20,218 fail2ban.filter [1847]: INFO maxRetry: 3
2022-05-18 15:10:20,218 fail2ban.filter [1847]: INFO findtime: 600
2022-05-18 15:10:20,218 fail2ban.actions [1847]: INFO banTime: 1800
2022-05-18 15:10:20,218 fail2ban.filter [1847]: INFO encoding: UTF-8
2022-05-18 15:10:20,218 fail2ban.filter [1847]: INFO Added logfile: '/var/log/auth.log'
2022-05-18 15:10:20,223 fail2ban.jail [1847]: INFO Jail 'sshd' started
Всё успешно, настройка завершена.
Для проверки работы, можно попробовать подключиться самому с неверными пользователем или паролем. Перед этим уменьшив время блокировки или просто с другого ip-адреса. После блокировки SSH перестанет отвечать на запросы и будет уходить в таймаут, а в логе появиться запись о блокировке и разблокировке по истечению времени, ip-адреса.
Команда для разблокировки ip-адреса
Команда для версии fail2ban 0.8.8 и выше:
fail2ban-client set YOURJAILNAMEHERE unbanip IPADDRESSHERE