是否扰乱 hash:net,端口支持 0.0.0.0/0

是否扰乱 hash:net,端口支持 0.0.0.0/0

有没有办法将 0.0.0.0/0 添加到 ipset 类型 hash:net,port 中?它似乎只支持 1-32 的前缀长度,但如果我希望 ipset 哈希中的条目支持给定端口上的所有 ip 流量该怎么办?例如

ipset create testset hash:net,port
ipset add testset 0.0.0.0,22
iptables -I INPUT 1 -m set --match-set testset src, src -j ACCEPT
iptables -I INPUT 2 -j LOG --log-prefix "** FIREWALL **"

不会做任何事。 SSH 流量将到达防火墙并生成日志。 0.0.0.0/0 不被接受为有效的 CIDR 表示法,尽管他们似乎在修订版 2 中将其添加到 hash:net,iface 中。我知道我可以将端口存储在 bitmap:port 中并将其应用于它自己的iptables 规则。但是,我特别想将端口存储在哈希中,因为某些端口可能关心 src ip 地址,而其他端口则不会,而且我不想为 0.0.0.0/0 维护单独的集合。

答案1

正确的语法是使用 0.0.0.0/0,因为 0.0.0.0 默认为 0.0.0.0/32。可惜您发现这不受支持:

# ipset add testset 0.0.0.0/0,22
ipset v7.3: The value of the CIDR parameter of the IP address is invalid

你可以做的就是在覆盖路由时使用 OpenVPN 中使用的相同技巧:将 0.0.0.0/0 分成两半:0.0.0.0/1 和 128.0.0.0/1:

ipset add testset 0.0.0.0/1,22
ipset add testset 128.0.0.0/1,22

笔记:

通常,对于运行当地的ssh 服务器,iptables参数大概应该是这样的:

iptables -I INPUT 1 -m set --match-set testset src,dst -j ACCEPT

既然我们在输入链条,意义接收,src,dst表示检查远程(源)IP 和本地(目标)端口,而src,src表示检查远程(源)IP 和远程(源)端口。唯一的用途是允许来自远程 ssh 服务器的回复流量,但这通常已经在-m conntrack --ctstate ESTABLISHED其他地方处理。

相关内容