永久禁止 IP 時,fail2ban 的奇怪行為

永久禁止 IP 時,fail2ban 的奇怪行為

根據文檔,將監獄禁止時間設為負值應該會導致永久禁止。然而,一旦完成,與將 bantime 設定為正整數相比,以下行為會發生變化:

1)ipset list不顯示fail2ban-sshd哈希表

2)firewall-cmd --direct --get-all-rules為空

3)/var/log/fail2ban.log變成單行。有趣的條目

sshd[25772]:來自93.174.89.88 埠37477 的無效使用者ubuntu','ip':'93.174.89.88','ipmatches':位於0x7f4588f9dc08>,'ipfailures':位於時間位於0x7f4588f9dc08>,'ipfailures':位於時間8076, '失敗': 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:設定fail2ban-sshd不存在。 012嘗試“iptables-restore -h”或“iptables-restore --help”以獲取更多資訊。防火牆[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 發行版仍然附帶舊版本,您可能還需要解決方法。

GitHub問題其中解釋了問題並修復還包括解決方法:

這在新版本中已修復。對於 0.9,您可以簡單地覆寫監獄內操作中的 bantime(逾時)參數(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

逾時 在建立集合和新增項目時,所有集合類型都支援可選的逾時參數。 create 指令的逾時參數值表示新條目的預設逾時值(以秒為單位)。如果建立的集支援逾時,則在新增條目時可以使用相同的逾時選項來指定非預設逾時值。零超時值意味著條目被永久添加到集合中。可以透過使用 -exist 選項重新新增元素來變更已新增元素的逾時值。最大可能的超時值為 2147483(以秒為單位)。

用於建立 ipset 超時的值是 conf 值 bantime。由於 bantime conf 值中有 -1,因此您的系統在為fail2ban 的監獄建立 ipset 時出現錯誤,因為沒有建立 ipset,因為您本質上就是讓系統運作如下所示的內容:

ipset create fail2ban-sshd hash:ip timeout -1

可接受的超時值範圍是 0-2147483 秒。之後沒有名為fail2ban-sshd的ipset運行如下:

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

肯定會失敗,因為沒有建立名為fail2ban-sshd的ipset。您必須將 -1 bantime 變更為 0。

相關內容