Защита от брутфорса с Fail2Ban
Как установить и настроить Fail2Ban для блокировки подбора паролей.
Время: 10 мин · Сложность: ★☆☆☆☆
Подходит: ✓ Ubuntu 22.04 · ✓ Debian 12 · ✓ AlmaLinux 9
Краткое описание
Fail2Ban анализирует системные логи и временно блокирует IP-адреса, которые слишком часто ошибаются при входе. Работает с SSH, Nginx, Postfix и другими службами. После установки защита от перебора включается автоматически — без дополнительной настройки.
Когда пригодится
- Сразу после запуска нового VPS с открытым SSH
- Если в
/var/log/auth.logвидите сотни строк сFailed password - Когда хотите защитить не только SSH, но и веб-сервер или почтовый сервер
Что понадобится
- Root-доступ к серверу
- Открытый порт SSH (стандартный 22 или нестандартный)
Пошаговая инструкция
1. Установка
На Ubuntu и Debian:
apt install -y fail2ban
На AlmaLinux:
dnf install -y fail2ban
Включите автозапуск и запустите службу:
systemctl enable --now fail2ban
2. Настройка для SSH
Создайте файл с локальными настройками — он не перезапишется при обновлении пакета:
nano /etc/fail2ban/jail.local
Добавьте следующее содержимое:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 3600
findtime = 600
Параметры:
maxretry = 5— после 5 неудачных попыток IP блокируетсяbantime = 3600— блокировка на 1 час (в секундах)findtime = 600— окно наблюдения 10 минут
Если используете нестандартный порт SSH, замените port = ssh на port = 2222 (или ваш порт).
На AlmaLinux путь к логу другой:
logpath = /var/log/secure
3. Применить настройки
systemctl restart fail2ban
4. Проверка статуса
fail2ban-client status sshd
Вывод покажет количество заблокированных IP и текущий список.
5. Разблокировать IP вручную
Если заблокировали себя или нужного пользователя:
fail2ban-client set sshd unbanip 1.2.3.4
Проверка результата
fail2ban-client status sshd
В выводе должно быть:
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 0
|- Total banned: 0
`- Banned IP list:
Служба работает, если Currently failed и Total banned присутствуют в выводе.
Возможные ошибки
«Failed to start fail2ban» — скорее всего ошибка синтаксиса в jail.local. Проверьте конфигурацию:
fail2ban-client -t
Заблокировали сами себя — откройте VNC-консоль в панели VMmanager и выполните:
fail2ban-client set sshd unbanip ВАШ_IP
Или временно отключите Fail2Ban: systemctl stop fail2ban.
Fail2Ban не реагирует на попытки входа — проверьте, что logpath указывает на существующий файл. На разных дистрибутивах путь к логу может отличаться.
«ERROR No file(s) found for glob» — файл лога не существует или указан неверный путь. Найдите нужный лог: journalctl -u ssh или ls /var/log/auth*.
FAQ
Можно ли защитить Nginx от перебора?
Да. Добавьте в jail.local секцию [nginx-http-auth] — фильтр уже встроен в Fail2Ban. Путь к логу: /var/log/nginx/error.log.
Как посмотреть все активные «тюрьмы»?
fail2ban-client status
Как увеличить время блокировки?
Измените bantime. Значение -1 блокирует навсегда.
Fail2Ban и UFW — они конфликтуют?
Нет. Fail2Ban может управлять правилами UFW. Для этого добавьте в jail.local параметр banaction = ufw.
Полезные ссылки
/etc/fail2ban/filter.d/— встроенные фильтры для разных службfail2ban-client --help— справка по командам клиента/var/log/fail2ban.log— собственный лог Fail2Ban