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
5.182.83.231 вже в бані — 10 спроб за кілька хвилин
Дивимось деталі бану:
1
fail2ban-client get sshd banip --with-time
Час блокування і термін дії бану
Той самий 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:
- Вимкнути вхід по паролю (
PermitRootLogin prohibit-password) - Поставити Fail2ban
- Моніторити через Netdata і Uptime Kuma
