Вики / Службы и systemd
fail2ban
Бан по логам — защита SSH и сервисов от перебора; jail'ы, статус, разбан.
fail2ban читает логи сервисов, ловит признаки атаки (например, неудачные входы
по SSH) и временно банит IP через файрвол. Служба fail2ban под systemd.
systemctl status fail2ban
sudo fail2ban-client status # список активных jail'ов
sudo fail2ban-client status sshd # детали jail sshd (забаненные IP)
Не правь jail.conf — создай jail.local (переживает обновления пакета):
# /etc/fail2ban/jail.local
[DEFAULT]
bantime = 1h # на сколько банить (поддерживает 10m, 1h, 1d)
findtime = 10m # окно, в котором считаем попытки
maxretry = 5 # сколько промахов до бана
ignoreip = 127.0.0.1/8 10.0.0.0/24 # белый список (свои сети!)
backend = systemd # в Ubuntu логи SSH часто в journald
[sshd]
enabled = true
[recidive] # бан повторных нарушителей надолго
enabled = true
bantime = 1w
findtime = 1d
maxretry = 5
sudo systemctl restart fail2ban
sudo fail2ban-client status # все jail'ы
sudo fail2ban-client status sshd # кто забанен, счётчики
sudo fail2ban-client set sshd unbanip 1.2.3.4 # разбанить
sudo fail2ban-client set sshd banip 1.2.3.4 # забанить вручную
sudo fail2ban-client get sshd bantime # текущее значение параметра
sudo fail2ban-client reload # перечитать конфиг
sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf # тест фильтра
journalctl -u fail2ban -f # лог решений
Для своего сервиса: фильтр (regex с группой <HOST>) + jail:
# /etc/fail2ban/filter.d/myapp.conf
[Definition]
failregex = ^.*authentication failed from <HOST>.*$
# /etc/fail2ban/jail.local
[myapp]
enabled = true
logpath = /var/log/myapp/access.log
maxretry = 4
Проверь регуляркой до включения: fail2ban-regex <лог> <фильтр> (покажет, сколько
совпадений поймал).
Забанил сам себя
С консоли (гипервизор/serial) или с разрешённого IP:
fail2ban-client set sshd unbanip <твой IP>. Добавь свою сеть в ignoreip.
Jail не банит
enabled = true?fail2ban-client statusпоказывает jail?- Верный
logpathи фильтр под формат логов; в Ubuntu SSH часто в journald — нуженbackend = systemd. - Проверь фильтр:
fail2ban-regexна реальном логе — ловит ли строки.
Банит, но атака продолжается с других IP
Это распределённый брутфорс. Включи recidive, ужесточи maxretry/findtime,
рассмотри гео/ASN-блок на firewall (см. whois для CIDR).
Не уверен, работает ли вообще
fail2ban-client status sshd → Total/Currently failed и banned. journalctl -u fail2ban
покажет «Ban»/«Unban».
sudo fail2ban-client status # jail'ы
sudo fail2ban-client status sshd # забаненные
sudo fail2ban-client set sshd unbanip IP # разбан
sudo fail2ban-regex LOG FILTER # тест фильтра
# jail.local: bantime/findtime/maxretry/ignoreip/backend=systemd ; [recidive]
См. также
- journalctl — Логи и аудит
- Файрвол (nftables / ufw) — Сеть
- sshd (SSH-сервер) — Службы и systemd