Iptables

如何檢查 ipset 是否連接到 iptables

  • September 25, 2019

我的 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?

謝謝

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

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

如果集合不存在,則返回碼 > 0。

ipset有一個內置的引用計數器。因此,每當它被iptables引用時,它的引用計數器就會增加。據我所知,只有ipset的元集list:setiptables引用了ipset。如果您不使用list:set或不更改它,您可以直接查詢ipset (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

引用自:https://unix.stackexchange.com/questions/543450