我的 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:set
和iptables参考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
您可以使用-C
flag iniptables
来检查集合是否存在:
sudo iptables -C INPUT -m set --match-set sshd src -j DROP
如果该集合不存在,则返回代码 > 0。