Fail2Ban
Fail2Ban — это утилита для защиты серверов от брутфорс-атак и других видов несанкционированного доступа путем временной блокировки IP-адресов.
►1) Установка Fail2Ban
Debian/Ubuntu:
|
1 |
apt update && sudo apt install fail2ban -y |
CentOS/RHEL:
|
1 2 |
yum install epel-release -y yum install fail2ban -y |
Arch Linux:
|
1 |
sudo pacman -S fail2ban |
►2) Управление сервисом
Запуск и включение Fail2Ban
|
1 2 |
systemctl start fail2ban systemctl enable fail2ban |
Перезапуск и проверка статуса
|
1 2 |
systemctl restart fail2ban systemctl status fail2ban |
Fail2Ban падает, потому что включён jail sshd, а источник логов для него не задан. На Ubuntu22 по умолчанию всё уходит в journald, файла /var/log/auth.log может не быть (особенно на минималке без rsyslog). Включим файл /var/log/auth.log, если хотите классическую схему через rsyslog.
|
1 2 3 4 5 6 |
apt update apt install -y rsyslog systemctl enable --now rsyslog # убедимся, что появился /var/log/auth.log (иногда нужно минутку подождать/логин по SSH) ls -l /var/log/auth.log || sleep 5 && ls -l /var/log/auth.log |
►3) Конфигурация Fail2Ban
Файл конфигурации по умолчанию:
|
1 |
/etc/fail2ban/jail.conf |
Рекомендуется создать локальную копию:
|
1 |
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local |
Редактировать:
|
1 |
nano /etc/fail2ban/jail.local |
Основные параметры:
|
1 2 3 4 5 |
[DEFAULT] bantime = 10m # Время бана (10 минут) findtime = 10m # Временной промежуток для поиска нарушений maxretry = 5 # Количество неудачных попыток до блокировки ignoreip = 127.0.0.1/8 # IP-адреса, которые не будут заблокированы |
►4) Настройка фильтров
Фильтры хранятся в /etc/fail2ban/filter.d/.
Пример фильтра sshd.conf (/etc/fail2ban/filter.d/sshd.conf):
|
1 2 3 |
[Definition] failregex = ^%(__prefix_line)sFailed password for .* from <HOST> port \d+ ssh2 ignoreregex = |
►5) Настройка jail для SSH
Файл /etc/fail2ban/jail.local:
|
1 2 3 4 5 6 7 8 9 |
[sshd] enabled = true port = ssh № port = 30022 если например порт нестандартный filter = sshd logpath = /var/log/auth.log # Для Debian/Ubuntu # logpath = /var/log/secure # Для CentOS/RHEL maxretry = 3 bantime = 1h |
►6) Перезапуск и проверка работы
|
1 2 |
systemctl restart fail2ban fail2ban-client status |
Проверить конкретный jail:
|
1 |
fail2ban-client status sshd |
►7) Разблокировка IP
Список заблокированных IP:
|
1 |
fail2ban-client status sshd |
Разблокировать IP:
|
1 |
fail2ban-client set sshd unbanip 192.168.1.100 |
►8) Логирование и отладка
Просмотр журнала Fail2Ban:
|
1 |
journalctl -u fail2ban --no-pager |
Лог-файл:
|
1 |
tail -f /var/log/fail2ban.log |
►9) Полезные команды
Блокировка IP вручную
|
1 |
fail2ban-client set sshd banip 192.168.1.200 |
Добавление в белый список (whitelist)
Добавьте IP в ignoreip в /etc/fail2ban/jail.local:
|
1 |
ignoreip = 127.0.0.1/8 192.168.1.100 |
Удаление бана с IP
|
1 |
fail2ban-client set sshd unbanip 192.168.1.100 |
Удаление всех банов
|
1 |
sudo fail2ban-client set sshd unban --all |
►10) Автозапуск после перезагрузки
|
1 |
systemctl enable fail2ban |
►11) Интеграция с UFW (Ubuntu)
Если используется UFW:
|
1 |
nano /etc/fail2ban/jail.local |
Добавьте:
|
1 2 3 4 5 6 |
[sshd] enabled = true backend = auto port = ssh filter = sshd banaction = ufw |
Перезапустите Fail2Ban:
|
1 |
systemctl restart fail2ban |
Эта шпаргалка содержит основные команды и конфигурации для защиты сервера от атак с помощью Fail2Ban.