iptablesは複数の-dフラグを受け入れません。

iptablesは複数の-dフラグを受け入れません。

iptablesを使用してファイルへのすべてのアウトバウンド接続を記録しようとしています。

私のルールは次のとおりです。

-A OUTPUT ! -o lo ! --destination 127.0.0.1  -m state --state NEW -j LOG --log-prefix "new_connection " --log-level 7

しかし、別のIPターゲット(マルチキャスト)を追加した場合、私のルールは次のようになります。

-A OUTPUT ! -o lo ! --destination 127.0.0.1 ! --destination 239.192.0.0 -m state --state NEW -j LOG --log-prefix "new_connection " --log-level 7

次のエラーが発生します。

multiple -d flags not allowed

私の質問はこのエラーが意味するものではありませんが、私のルールから複数のIPアドレスをどのように除外しますか? 2つの条件

! --destination 127.0.0.1

そして

! --destination 239.192.0.0

相互に排他的であるため、2つのルールがあるのは実際にはルールがまったくないようです(もっと悪いことは、ほぼ2倍も多くのログを得ることになるからです)。

それでは、「AND」演算子はありますか?

答え1

このような問題の場合は、新しいチェーンを定義してチェーン間を移動できます。たとえば、次の操作を使用して、チェーンを追加して記録したくないLOGGINGチェーンの先頭にパケットを一致させることができますRETURN

$ iptables -N LOGGING
$ iptables -A LOGGING -d 127.0.0.0/8 -j RETURN
$ iptables -A LOGGING -d 239.192.0.0/16 -j RETURN
$ iptables -A LOGGING -j LOG 
$ iptables -A OUTPUT -j LOGGING

これにより、OUTPUTチェーンを通過するすべてのパケットが最初にチェーンを通過し、LOGGING一致しないパケット127.0.0.0/8はすべて239.192.0.0/16記録され、次に制御権が返されますOUTPUT

答え2

はい、しかし、あなたが望むように動作しません。マニュアルページから:

複数のアドレスを指定できますが、これにより複数のルールに展開されるか(-Aを追加する場合)、複数のルールが削除されます(-Dで使用する場合)。

これを行う方法は、チェーンの最初にルールを追加して、履歴や変更を望まないトラフィックを切り替えることです。

-A OUTPUT -o lo -j ACCEPT
-A OUTPUT --destination 239.192.0.0 -j ACCEPT
-A OUTPUT  -m state --state NEW -j LOG --log-prefix "new_connection " --log-level 7

答え3

カンマで区切られた値またはまたは-dを使用して-s複数のIPを設定できます。 (議論を参照http://www.gossamer-threads.com/lists/gentoo/user/210361)

たとえば、次のコマンドは

sudo iptables -A OUTPUT -d 192.168.235.43,192.168.235.46 -j DROP

両方のサーバーへのトラフィックをフィルタリングします。

関連情報