如何检查 ipset 是否连接到 iptables

如何检查 ipset 是否连接到 iptables

我的 iptables 输出如下所示:

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    DROP       all  --  0.0.0.0/0            0.0.0.0/0            match-set sshd src

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination  

我如何检查这个“sshd”集是否已经连接到 iptables?

谢谢

答案1

IP集具有内置参考计数器。所以每当它被引用时iptables,其引用计数器会增加。据我所知,只有IP集的元集list:setiptables参考IP集。如果你不使用list:set或者不改动,可以直接查询IP集(with ipset list) 了解它是否被引用iptables

例子:

# ipset create sshd hash:ip
# ipset list
Name: sshd
Type: hash:ip
Revision: 4
Header: family inet hashsize 1024 maxelem 65536
Size in memory: 88
References: 0
Number of entries: 0
Members:

# iptables -A INPUT -m set --match-set sshd src -j DROP

# ipset list sshd
Name: sshd
Type: hash:ip
Revision: 4
Header: family inet hashsize 1024 maxelem 65536
Size in memory: 88
References: 1
Number of entries: 0
Members:

引用计数增加。使用该集添加新iptables命令会将其增加到 2。等等。

XML 格式输出可能有助于使用正确的工具编写脚本。例如:

# references=$(ipset -terse -output xml list | xmlstarlet sel -t -v '/ipsets/ipset[@name="sshd"]/header/references')
# echo $references
2

答案2

您可以使用-Cflag iniptables来检查集合是否存在:

sudo iptables -C INPUT -m set --match-set sshd src -j DROP

如果该集合不存在,则返回代码 > 0。

相关内容