fail2ban ipset 正确设置 jail.conf

fail2ban ipset 正确设置 jail.conf

我的理解是使用 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_allportsnftables-multiportnftables-allports

相关内容