Настройка
Не правь jail.conf — создай 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
Свой jail/фильтр
Для своего сервиса: фильтр (regex с группой <HOST>) + jail:
[Definition]
failregex = ^.*authentication failed from <HOST>.*$
[myapp]
enabled = true
logpath = /var/log/myapp/access.log
maxretry = 4
Проверь регуляркой до включения: fail2ban-regex <лог> <фильтр> (покажет, сколько
совпадений поймал).
Порядок файлов
fail2ban читает настройки jail по порядку, и действует последнее значение:
jail.conf — из пакета, не правят;
jail.d/*.conf — по алфавиту, тут же defaults-debian.conf;
jail.local;
jail.d/*.local — по алфавиту.
maxretry = 6 в jail.d/aa.conf, 4 в jail.local и 3 в
jail.d/zz.local дают 3. Итог для jail печатает fail2ban-client -d:
student@ubuntu:~$ sudo fail2ban-client -d | grep "'sshd', '"
['set', 'sshd', 'maxretry', 3]
['set', 'sshd', 'findtime', '10m']
['set', 'sshd', 'bantime', '10m']
['set', 'sshd', 'addignoreip', '127.0.0.1/8', '192.0.2.20']
Ошибка в любом файле не даёт службе стартовать — fail2ban-client -d
покажет и её.
Что задаёт Ubuntu
На учебной машине служба fail2ban выключена. Пакет кладёт
jail.d/defaults-debian.conf:
[DEFAULT]
banaction = nftables
banaction_allports = nftables[type=allports]
backend = systemd
[sshd]
enabled = true
backend = systemd — jail читает журнал systemd, logpath ему не нужен.
fail2ban-client status sshd показывает, что он ищет:
Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd (+ — «или»;
на Ubuntu 24.04 служба называется ssh.service, строки находятся по
_COMM=sshd).
Бан — адрес в наборе таблицы inet f2b-table, правило отвечает reject:
table inet f2b-table {
set addr-set-sshd {
type ipv4_addr
elements = { 192.0.2.20 }
}
chain f2b-chain {
type filter hook input priority filter - 1; policy accept;
tcp dport 22 ip saddr @addr-set-sshd reject with icmp port-unreachable
}
}
Забаненный адрес видит порт 22 как filtered (см. nmap),
после unbanip — снова open.