Установка и настройка Fail2ban
Как защитить SSH-сервер от брутфорс-атак с помощью Fail2ban.
Fail2ban — локальный сервис, который отслеживает лог-файлы запущенных программ и автоматически блокирует по IP адреса нарушителей на основе заданных условий. Один из самых популярных способов защиты SSH от автоматизированного перебора паролей.
Установка
Ubuntu / Debian:
apt-get install fail2ban
CentOS:
yum install fail2ban
Структура конфигурации
У Fail2ban два основных конфигурационных файла:
/etc/fail2ban/fail2ban.conf— настройки запуска самого процесса Fail2ban/etc/fail2ban/jail.conf— настройки защиты конкретных сервисов, в том числе SSH
Файл jail.conf разделён на секции — так называемые «изоляторы» (jails). Каждая секция отвечает за определённый сервис и тип атаки:
[DEFAULT]
ignoreip = 127.0.0.1/8
bantime = 600
maxretry = 3
banaction = iptables-multiport
[ssh]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 6
Параметры из секции [DEFAULT] применяются ко всем остальным секциям, если явно не переопределены.
Секция [ssh] отвечает за защиту от повторяющихся неудачных попыток авторизации — то есть от классического брутфорса.
Описание основных параметров
ignoreip— IP-адреса, которые никогда не будут заблокированы. Можно указать список адресов через пробел, маску подсети или имя DNS-сервера.bantime— время блокировки в секундах. По истечении этого времени IP-адрес автоматически удаляется из списка заблокированных.maxretry— количество подозрительных совпадений, после которых срабатывает блокировка. Для секции[ssh]— это число неудачных попыток входа.findtime— интервал в секундах, в течение которого должно накопитьсяmaxretryсобытий для применения санкций. По умолчанию — 600 секунд (10 минут).enabled—trueактивирует изолятор,falseотключает.port— порт целевого сервиса. Для SSH это22или буквенный псевдонимssh.filter— имя фильтра с регулярными выражениями для поиска подозрительных событий в логах. Фильтруsshdсоответствует файл/etc/fail2ban/filter.d/sshd.conf.logpath— путь к лог-файлу, который Fail2ban будет анализировать. История всех входов в систему по умолчанию записывается в/var/log/auth.log.
Рекомендации по настройке
Не редактируйте jail.conf напрямую. Для пользовательских настроек предназначены файлы с расширением .local — они подключаются автоматически и имеют более высокий приоритет.
Создайте файл jail.local:
nano /etc/fail2ban/jail.local
Пример рекомендуемой конфигурации:
[DEFAULT]
# Укажите ваш постоянный IP-адрес, чтобы случайно не заблокировать себя.
# Если не переопределить ignoreip здесь,
# закомментируйте этот параметр в jail.conf.
ignoreip = 57.66.158.131
[ssh]
# Если в течение 1 часа...
findtime = 3600
# ...зафиксировано 6 неудачных попыток входа...
maxretry = 6
# ...блокировать IP на 24 часа.
bantime = 86400
Почему стоит менять
ignoreip: значение по умолчанию127.0.0.1/8небезопасно в многопользовательских системах. Если злоумышленник получил доступ к любому shell-аккаунту на сервере, он сможет запустить брутфорс прямо изнутри — и Fail2ban его не заблокирует.
Почему стоит увеличивать
findtime: ботнеты, использующие «медленный брутфорс», умеют обходить стандартное значение в 10 минут. Приmaxretry = 6атакующий делает 5 попыток, ждёт 10 минут, делает ещё 5 — и так до бесконечности без бана. Увеличениеfindtimeдо часа и более значительно усложняет такой сценарий.
Перезапуск Fail2ban
После внесения изменений перезапустите сервис:
service fail2ban restart
Помощь
Если у вас возникли вопросы или требуется помощь, пожалуйста, свяжитесь с нами через систему тикетов — мы обязательно вам поможем!