2 min read

Fail2ban: защита SSH-сервера от подбора паролей

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.

Связаться с нами
Telegram
WhatsApp
Email