Назад | Перейти на главную страницу

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

Согласно документации, установка отрицательного значения 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 ': в 0x7f4588f9dc08>,' ipfailures ': в 0x7f4588f9daa0>,' time ': 1536301842.0880 ': 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

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

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

значение, которое используется для создания тайм-аута ipset, - это значение параметра conf bantime. поскольку у вас есть -1 в значении bantime conf, ваша система имеет ошибку при создании ipset для jails 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.

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

В Проблема с 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"]