Fail2Ban - защита SSH от брутфорса
Каждый сервер с открытым SSH постоянно получает попытки входа - боты перебирают пароли автоматически, сотнями в час. Fail2Ban смотрит на логи и банит IP-адреса, которые слишком часто ошибаются.
Как это работает
Fail2Ban читает лог-файлы. Видит, что с одного IP пришло, например, 5 неудачных попыток входа за 10 минут - и добавляет этот IP в блокировку через iptables на заданное время.
Установка
На Ubuntu/Debian:
sudo apt update && sudo apt install fail2ban -y
На CentOS/AlmaLinux:
sudo dnf install fail2ban -y
Настройка
Fail2Ban читает конфиг из /etc/fail2ban/jail.conf, но его трогать не нужно - он перезапишется при обновлении. Создайте свой файл:
sudo nano /etc/fail2ban/jail.local
Вставьте базовую конфигурацию:
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
[sshd]
enabled = true
port = 22
Что тут что:
bantime- на сколько банить IP.1h- час, можно поставить24hили даже-1(навсегда)findtime- за какой период считать попыткиmaxretry- сколько ошибок допустимо до банаport- если вы сменили SSH-порт, укажите свой, например2222
Сохраните: Ctrl+O, потом Ctrl+X.
Запуск
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
Проверка
Статус Fail2Ban:
sudo systemctl status fail2ban
Посмотреть заблокированные IP по SSH:
sudo fail2ban-client status sshd
Увидите что-то вроде:
Status for the jail: sshd
|- Filter
| |- Currently failed: 4
| |- Total failed: 17
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 0
|- Total banned: 1
`- Banned IP list:
Полезные команды
Разбанить IP вручную:
sudo fail2ban-client set sshd unbanip 1.2.3.4
Забанить вручную:
sudo fail2ban-client set sshd banip 1.2.3.4
Посмотреть все активные «тюрьмы»:
sudo fail2ban-client status
Частые ошибки
Забыли указать свой SSH-порт - если вы сменили порт с 22 на другой, обязательно пропишите port = 2222 в jail.local. Иначе Fail2Ban не будет защищать нужный порт.
Случайно забанили себя - бывает. Зайдите в панель управления, откройте VMmanager и подключитесь к серверу через VNC.

Не создали jail.local - редактировать jail.conf напрямую не стоит. При обновлении пакета файл перезапишется и настройки пропадут.
