我已经在嵌入式 Yocto-Linux 上安装了 iptables 和 failure2ban。当fail2ban时设置以下命令:
iptables -w -I INPUT -p tcp -m multiport --dports http,https -j f2b-NoScript
我有这个错误:
iptables v1.8.4 (legacy): Couldn't load match `multiport':No such file or directory
但库多端口存在于以下路径上:
/usr/lib/xtables/libxt_multiport.so
有什么建议 ?是否需要使用其他选项构建 iptables 配方?
答案1
iptables v1.8.4(旧版):无法加载匹配的“multiport”:没有这样的文件或目录
这意味着您没有 iptables 的多端口模块,因为它无法加载相关的 .so 库(通常不是/usr/lib/xtables/
but /usr/lib/iptables/
)。
您可以调用man iptables
以查看“多端口”模块可能需要什么,但是......
因为它说“遗留”,所以你可能有另一个主要的网络过滤子系统(可能iptables
只是模拟),所以你可以直接使用它而不是 iptables。
例如,如果它是 nftables(sudo nft -v
用版本回答),您可以在默认部分中指定它jail.local
(并重新启动fail2ban):
[DEFAULT]
# banaction = nftables-multiport
banaction = nftables[type=multiport]
# banaction_allports = nftables-allports
banaction_allports = nftables[type=allports]
然而 iptables 主要是在这种情况下写入(nf_tables)
而不是写入。(legacy)
所以可能会有所不同。在这种情况下,您会发现您的系统主要使用哪种网络过滤器并选择合适的禁止行动或者自己写。
如果没有任何帮助或者您找不到合适的操作并且您的系统不支持多端口,请尝试使用 allports 操作:
[DEFAULT]
banaction = iptables-allports
banaction_allports = iptables-allports
(请注意,在这种情况下,无论监狱中配置的端口如何,它都会完全禁止IP,因此通过可能的误报或一些测试尝试,例如在http端,它可能会禁止所有端口的IP,因此不可能通过 ssh 从该 IP 连接以手动解禁)。
答案2
我找到了解决方案,我使用以下选项重新编译了内核:
CONFIG_NETFILTER_XT_MATCH_MULTIPORT=y