私の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:
参照回数が増加します。このセットを使用して新しいコマンドを追加すると、iptables
2に増えます。など。
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です。