Fail2ban: защита SSH-сервера от подбора паролей
Открой логи auth.log на любом сервере с открытым SSH — там будут сотни попыток подбора пароля от случайных IP. Это происходит постоянно, автоматически, ботами. Fail2ban закрывает эту проблему: следит за логами и banит адреса, которые ведут себя подозрительно.
Что такое Fail2ban
Fail2ban — инструмент защиты от брутфорс-атак. Он сканирует лог-файлы и автоматически блокирует IP-адреса после превышения числа неудачных попыток входа.
Установка
Debian/Ubuntu:
sudo apt update && sudo apt install fail2ban -y
CentOS/RHEL:
sudo yum install epel-release
sudo yum install fail2ban
Arch Linux:
sudo pacman -S fail2ban
Запуск и проверка статуса
Включаю и запускаю сервис:
sudo systemctl enable --now fail2ban
Проверяю статус:
sudo systemctl status fail2ban
Ожидаемый вывод:
● fail2ban.service - Fail2Ban Service
Loaded: loaded (/etc/systemd/system/fail2ban.service; enabled; vendor preset: enabled)
Active: active (running)
Настройка для SSH
Главный файл конфигурации не редактирую напрямую — копирую в jail.local. Это защищает настройки от перезаписи при обновлении пакета:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Открываю на редактирование:
sudo vim /etc/fail2ban/jail.local
Добавляю или меняю:
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 3
ignoreip = 127.0.0.1/8 192.168.1.0/24 10.10.0.0/24
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log # Для Debian/Ubuntu
# logpath = /var/log/secure # Для CentOS/RHEL
maxretry = 3
bantime = 1h
findtime = 10m
Что значат основные параметры:
maxretry— сколько неудачных попыток входа допустимо перед баномbantime— на сколько банится IP (например,1h— час)findtime— окно времени, в котором считаются неудачные попыткиignoreip— адреса, которые никогда не банятся (свои сети, локалхост)
Сохраняю и выхожу.
Перезапуск и проверка
Применяю изменения:
sudo systemctl restart fail2ban
Проверяю активные jail'ы:
sudo fail2ban-client status
Ожидаемый результат:
Status
|- Number of jail: 1
`- Jail list: sshd
Проверка работы
Посмотреть забаненные адреса:
sudo fail2ban-client status sshd
Снять бан вручную:
sudo fail2ban-client set sshd unbanip 192.168.1.1
Если забанил себя
Бывает — заходишь с нового IP, ошибаешься паролем пару раз, и Fail2ban банит тебя самого. Снимается той же командой:
sudo fail2ban-client set sshd unbanip <IP-АДРЕС>
Поэтому свою сеть стоит сразу прописать в ignoreip.
Дополнительные настройки
Если атаки регулярные и агрессивные — увеличиваю время бана:
bantime = 24h
Логи
Через journalctl:
sudo journalctl -u fail2ban --no-pager | tail -n 50
Или напрямую из файла:
sudo cat /var/log/fail2ban.log
Fail2ban — простой инструмент, который заметно снижает риск несанкционированного доступа. Защиту можно расширить и на другие сервисы — Nginx, Apache, Postfix — добавив соответствующие блоки в /etc/fail2ban/jail.local.
Если хочешь обсудить похожую задачу — пиши на [email protected] или заходи на 1it.pro.