iptablesルールでパケットを記録して削除できますか?

iptablesルールでパケットを記録して削除できますか?

私は現在以下を持っています人形ファイアウォール設定:

firewall { '100 drop insecure outgoing HTTP traffic':
  chain  => 'OUTPUT',
  dport  => 80,
  proto  => tcp,
  action => reject,
}

その結果、次のようなルールが発生します。

$ sudo iptables --list-rules OUTPUT | grep ^-A
-A OUTPUT -p tcp -m multiport --dports 80 -m comment --comment "100 drop insecure outgoing HTTP traffic" -j REJECT --reject-with icmp-port-unreachable

パケットロギングの一般的な解決策は、各ソースチェーンに対して別々のログチェーンを作成し、そのチェーンにジャンプするようですが、これは少なくともルールセットの複雑さを倍増し、ロジックに従うのがより困難になります。したがって:パケットを破棄したのと同じルールでパケットを記録できますか?

答え1

iptables "LOG"拡張子を使用する回避策があります。からman 8 iptables-extensions

これは「非終了対象」です。つまり、ルール巡回は次のルールから続行されます。したがって、拒否されたパケットを記録するには、同じ一致基準を持つ2つの別々のルールを使用します。まず、ターゲットLOGとDROP(またはREJECT)を使用してください。

人形から:

firewall { '100 log insecure outgoing HTTP traffic':
  chain => 'OUTPUT',
  dport => 80,
  proto => tcp,
  jump  => 'LOG',
} ->
firewall { '101 drop insecure outgoing HTTP traffic':
  chain  => 'OUTPUT',
  dport  => 80,
  proto  => tcp,
  action => reject,
}

または単純にiptables

$ sudo iptables --list-rules OUTPUT | grep ^-A
-A OUTPUT -p tcp -m multiport --dports 80 -m comment --comment "100 log insecure outgoing HTTP traffic" -j LOG
-A OUTPUT -p tcp -m multiport --dports 80 -m comment --comment "101 drop insecure outgoing HTTP traffic" -j REJECT --reject-with icmp-port-unreachable

あまりきれいではありませんが、少なくとも単純です。

関連情報