我的理解是使用 ipset 运行 Fail2ban 速度更快。为此:
我根据说明(针对 Fedora 37 修改)从 Git 下载并安装了 ritsu/ipset-fail2ban。
我的禁令仍然设置为:
banaction_allports = firewallcmd-rich-rules[actiontype=]
当我尝试添加或替换上述内容时:
banaction = firewallcmd-ipset
我收到如下错误:
2023-04-09 15:51:46,130 fail2ban.actions [986]: NOTICE [postfix-auth] Restore Ban 117.69.159.181
2023-04-09 15:51:46,526 fail2ban.utils [986]: ERROR 7f29c6bd0ea0 -- exec: ipset -exist create f2b-postfix-unv hash:ip timeout 0
firewall-cmd --direct --add-rule ipv4 filter INPUT_direct 0 -p tcp -m multiport --dports smtp,imap2,imap3,imaps,pop3,pop3s,465,587, submission -m set --match-set f2b-postfix-unv src -j REJECT --reject-with icmp-port-unreachable
2023-04-09 15:51:46,527 fail2ban.utils [986]: ERROR 7f29c6bd0ea0 -- stderr: "Error: COMMAND_FAILED: '/usr/sbin/iptables-restore -w -n' failed: iptables-restore v1.8.8 (legacy): invalid port/service `' specified"
2023-04-09 15:51:46,527 fail2ban.utils [986]: ERROR 7f29c6bd0ea0 -- stderr: 'Error occurred at line: 2'
2023-04-09 15:51:46,527 fail2ban.utils [986]: ERROR 7f29c6bd0ea0 -- stderr: "Try `iptables-restore -h' or 'iptables-restore --help' for more information."
2023-04-09 15:51:46,527 fail2ban.utils [986]: ERROR 7f29c6bd0ea0 -- stderr: ''
2023-04-09 15:51:46,527 fail2ban.utils [986]: ERROR 7f29c6bd0ea0 -- returned 13
如果我运行,firewall-cmd --list-all-zones
我会得到当前被禁止的 IP 地址的列表。
但是它们不在任何区域文件中/etc/firewalld/zones
$ iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP all -- anywhere anywhere match-set blacklist-fail2ban src
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
DROP tcp -- anywhere 185.191.32.198 tcp dpt:http
如果我错了,那么我错在哪里?
谢谢
[附录1]
根据 Ginnungagap 关于构建问题的建议,我对他关于尾随逗号的问题的回答是:
我的错误示例的jail.local是:
[postfix-unv]
enabled = true
filter = postfix-unv
port = smtp,imap2,imap3,imaps,pop3,pop3s,465,587, submission
logpath = /var/log/maillog
maxretry = 1
bantime = 604800
我没有看到多余的逗号。我也没有在实际过滤器中看到多余的逗号。我会研究一下 nftables。
[附录2]
按照你的建议更改了 banaction。当我发布 cmd nft 列表规则集时,它似乎有效。
我重新启动了firewalld,它没有附加规则(即丰富的规则集)
我重新启动了 fail2ban,它在大约一分钟内加载了所有禁止的规则。
我还需要 Git 中的文件吗(如上所述)?
谢谢 Ginnungagap,非常感谢您的帮助。
答案1
fail2ban 尝试注入的直接规则在端口列表中有一个尾随逗号,导致记录错误iptableq-restore
。
无论如何,我强烈建议转向 nftables,它将让 fail2ban 管理自己的表和本机集合支持。iptables 仍然存在于兼容性目的,但灵活性远不如 nftables。
Firewalld 仅在使用 nftables 后端时刷新其自己的表,因此firewall-cmd
不会清除 fail2ban 的表(或除 Firewalld 之外的任何表)。
将后端更改为 nftables 相当简单,只需添加banaction = nftables-multiport
到您的 jail 或分别将全局banaction
和更改banaction_allports
为nftables-multiport
和nftables-allports
。