ipset type hash:net,port に 0.0.0.0/0 を追加する方法はありますか? 1~32 のプレフィックス長のみをサポートしているようですが、ipset ハッシュのエントリで特定のポートのすべての IP トラフィックをサポートしたい場合はどうすればよいですか? たとえば、
ipset create testset hash:net,port
ipset add testset 0.0.0.0,22
iptables -I INPUT 1 -m set --match-set testset src, src -j ACCEPT
iptables -I INPUT 2 -j LOG --log-prefix "** FIREWALL **"
何もしません。SSH トラフィックはファイアウォールにヒットし、ログを生成します。0.0.0.0/0 は有効な CIDR 表記として受け入れられませんが、リビジョン 2 で hash:net,iface に追加されたようです。ポートを bitmap:port に保存して、独自の iptables ルールに適用できることはわかっています。ただし、ポートによっては src ip アドレスを気にするものと気にしないものがあり、0.0.0.0/0 用に別のセットを維持したくないため、ポートをハッシュに保存したいと考えています。
答え1
正しい構文は 0.0.0.0/0 を使用することです。0.0.0.0 はデフォルトで 0.0.0.0/32 になります。残念ながら、これはサポートされていません。
# ipset add testset 0.0.0.0/0,22
ipset v7.3: The value of the CIDR parameter of the IP address is invalid
代わりに、ルートを上書きするときに OpenVPN で使用されるのと同じ種類のトリックを使用できます。0.0.0.0/0 を半分に分割します。0.0.0.0/1 と 128.0.0.0/1 です。
ipset add testset 0.0.0.0/1,22
ipset add testset 128.0.0.0/1,22
注記:
通常、地元SSHサーバー、iptablesパラメータはおそらく次のようになります:
iptables -I INPUT 1 -m set --match-set testset src,dst -j ACCEPT
私たちは入力チェーン、意味受け取るは、src,dst
リモート (送信元) IP とローカル (送信先) ポートを確認することを意味し、 は、src,src
リモート (送信元) IP とリモート (送信元) ポートを確認することを意味します。 この唯一の用途は、リモート SSH サーバーからの応答トラフィックを許可することですが、これは通常、-m conntrack --ctstate ESTABLISHED
他の場所で既に処理されています。