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:setの合計iptables引用するIPセット。未使用またはlist:set変更しない場合は、直接クエリできます。IPセット(と共に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:

参照回数が増加します。このセットを使用して新しいコマンドを追加すると、iptables2に増えます。など。

XML形式の出力は、正しいツールを使用したスクリプト作成に役立ちます。たとえば、

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

答え2

-Cフラグインを使用して、iptablesコレクションが存在することを確認できます。

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

コレクションが存在しない場合は、戻りコード> 0です。

関連情報