Post

Fail2ban: захист SSH від брутфорс атак на AlmaLinux 9

Fail2ban: захист SSH від брутфорс атак на AlmaLinux 9

Поки налаштовував Fail2ban на своєму VPS, відкрив логи SSH і побачив картину яка мене здивувала. Сервер атакують постійно — боти пробують різні логіни: root, admin, git, temp1, www-data. І це все протягом кількох хвилин.

1
journalctl -u sshd | grep -i "invalid\|preauth" | tail -10

Invalid user admin 2.57.121.25 port 14404 [preauth]
Invalid user temp1 5.182.83.231 port 58098 [preauth]
Invalid user www-data 5.182.83.231 port 33530 [preauth]
Invalid user git 185.242.3.195 port 37720 [preauth]

Один IP — 5.182.83.231 — атакував особливо активно. Саме час поставити Fail2ban.

Що таке Fail2ban

Fail2ban — демон який моніторить логи системи і автоматично блокує IP адреси які виявляють підозрілу активність. Спробував залогінитись 3 рази за 10 хвилин — отримуй бан на 24 години.

Працює через iptables/firewalld — просто додає правило блокування для конкретного IP.

Встановлення

1
2
3
dnf install -y fail2ban
systemctl start fail2ban
systemctl enable fail2ban

Налаштування

Fail2ban має два типи конфігів:

  • jail.conf — базовий, не чіпаємо
  • jail.local — наші налаштування, перекриває базовий

Створюємо свій конфіг:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
cat > /etc/fail2ban/jail.local << 'EOF'
[DEFAULT]
bantime  = 24h
findtime = 10m
maxretry = 3
ignoreip = 127.0.0.1/8

[sshd]
enabled  = true
port     = ssh
logpath  = %(sshd_log)s
backend  = systemd
mode     = aggressive
EOF

Параметри:

  • bantime = 24h — блокуємо на 24 години
  • findtime = 10m — вікно пошуку спроб — 10 хвилин
  • maxretry = 3 — максимум 3 невдалі спроби
  • ignoreip — ці IP ніколи не блокуємо (localhost)
  • mode = aggressive — ловить спроби ще на етапі preauth

Остання опція важлива — без неї Fail2ban шукає Failed password в логах. Але якщо на сервері дозволений вхід тільки через SSH ключі (PermitRootLogin prohibit-password), боти відключаються ще до введення пароля і стандартний фільтр їх не бачить.

Перезапускаємо:

1
systemctl restart fail2ban

Результат

Через кілька хвилин перевіряємо статус:

1
fail2ban-client status sshd

Fail2ban статус — заблокований IP 5.182.83.231 вже в бані — 10 спроб за кілька хвилин

Дивимось деталі бану:

1
fail2ban-client get sshd banip --with-time

Fail2ban — деталі блокування Час блокування і термін дії бану

Той самий 5.182.83.231 який найактивніше атакував — заблокований першим. Справедливо.

Корисні команди

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# Статус всіх jail
fail2ban-client status

# Статус конкретного jail
fail2ban-client status sshd

# Розблокувати IP вручну
fail2ban-client set sshd unbanip 5.182.83.231

# Заблокувати IP вручну
fail2ban-client set sshd banip 1.2.3.4

# Перевірити чи заблокований IP
fail2ban-client get sshd banip --with-time

# Логи Fail2ban
journalctl -u fail2ban -f

Висновок

Fail2ban встановлюється за 5 хвилин і одразу починає працювати. На публічному VPS атаки на SSH йдуть постійно — без захисту це просто питання часу.

Три речі які варто зробити одразу після підняття VPS:

  1. Вимкнути вхід по паролю (PermitRootLogin prohibit-password)
  2. Поставити Fail2ban
  3. Моніторити через Netdata і Uptime Kuma
This post is licensed under CC BY 4.0 by the author.