Странное поведение fail2ban при постоянной блокировке IP-адресов

Странное поведение fail2ban при постоянной блокировке IP-адресов

Согласно документации, установка bantime в jail на отрицательное значение должна привести к постоянному бану. Однако после этого следующее поведение изменится по сравнению с установкой bantime на положительное целое число:

1) ipset listне показывает хэш-таблицу fail2ban-sshd

2) firewall-cmd --direct --get-all-rulesпусто

3) /var/log/fail2ban.logстановится одной строкой. интересная запись

sshd[25772]: Неверный пользователь ubuntu с 93.174.89.88 порт 37477', 'ip': '93.174.89.88', 'ipmatches': at 0x7f4588f9dc08>, 'ipfailures': at 0x7f4588f9daa0>, 'time': 1536301842.088076, 'failures': 1443, 'ipjailfailures': at 0x7f4588f9dd70>})': Ошибка блокировки 93.174.89.88

4) /var/log/messagesимеет следующее

firewalld[916]: ПРЕДУПРЕЖДЕНИЕ: '/usr/sbin/iptables-restore --wait=2 -n' не удалось: iptables-restore v1.4.21: Set fail2ban-sshd не существует.#012#012Произошла ошибка в строке: 2#012Попробуйте 'iptables-restore -h' или 'iptables-restore --help' для получения дополнительной информации. firewalld[916]: ОШИБКА: COMMAND_FAILED

Единственная команда, которая работает как и ожидалось, это fail2ban-client status sshd, однако IP-адреса, которые показаны как забаненные, все равно пытаются подключиться. Я думаю, что корень всех проблем в том, что ipset не создается по какой-то причине, когда целое число отрицательное.

Есть идеи? Также, команда fail2ban-client reloadимеет тот же эффект, что и systemctl restart fail2ban.serviceпри применении новой конфигурации?

В моем случае /etc/fail2ban/jail.d/local.conf

[sshd]
enabled = true
bantime = -1
findtime = 3600
maxretry = 5
action = %(action_)s

решение1

Это была ошибка в старых версиях fail2ban. С тех пор она была исправлена, но если ваш дистрибутив Linux все еще поставляет эту старую версию, вам также может понадобиться обходной путь.

TheПроблема с GitHubкоторый объясняет проблему и ее исправление, а также включает обходной путь:

Это исправлено в новых версиях. Для версии 0.9 вы можете просто перезаписать параметр bantime (timeout) в действии внутри тюрьмы (параметр timeout для постоянного правила ipset равен 0).

[sshd]
bantime = -1
action = %(banaction)s[name=%(__name__)s, bantime=0, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]

решение2

ipset может иметь минимальный тайм-аут 0 или максимальный тайм-аут 2147483 см.http://ipset.netfilter.org/ipset.man.html

timeout Все типы наборов поддерживают необязательный параметр timeout при создании набора и добавлении записей. Значение параметра timeout для команды create означает значение timeout по умолчанию (в секундах) для новых записей. Если набор создан с поддержкой timeout, то тот же параметр timeout можно использовать для указания нестандартных значений timeout при добавлении записей. Нулевое значение timeout означает, что запись добавляется в набор навсегда. Значение timeout уже добавленных элементов можно изменить, повторно добавив элемент с помощью параметра -exist. Наибольшее возможное значение timeout составляет 2147483 (в секундах).

значение, которое используется для создания тайм-аута ipset, — это значение конфигурации bantime. Поскольку в значении конфигурации bantime указано -1, в вашей системе возникает ошибка при создании ipset для тюрем fail2ban, поскольку ipset не создается, поскольку по сути вы заставляете систему выполнять что-то вроде этого:

ipset create fail2ban-sshd hash:ip timeout -1

Допустимый диапазон значений тайм-аута составляет 0–2147483 секунд. После этого без ipset с именем fail2ban-sshd запустится что-то вроде:

firewall-cmd --direct --add-rule ipv4 filter INPUT_direct 0 -p tcp -m multiport --dports http,https -m set --match-set fail2ban-sshd src -j REJECT --reject-with icmp-port-unreachable

или:

iptables -t filter -I INPUT_direct 1 -p tcp -m multiport --dports http,https -m set --match-set fail2ban-sshd src -j REJECT --reject-with icmp-port-unreachable

определенно потерпит неудачу, так как не было создано ни одного ipset с именем fail2ban-sshd. Вам необходимо изменить время запрета -1 на 0.

Связанный контент