特定のネガティブルールに一致するパケットを送信するiptablesルール

特定のネガティブルールに一致するパケットを送信するiptablesルール

私はカーネルから特定のパケットを拾い、それらに何らかの処理を施すためにnetfilter_queueを使用しています。netfilterキューには、特定のソースからのすべてのパケットが必要です。except UDP packets with src port 2152 & dst port 2152.

iptableルールを次のように追加します

iptables -A OUTPUT ! s 192.168.0.3 ! -p udp ! --sport 2905 ! --dport 2905 -j NFQUEUE --queue-num 0

iptablesは無効な引数のエラーを吐きます。dmesgに問い合わせると、次のエラーが出力されます。

ip_tables: udp match: only valid for protocol 17

次のバリエーションを試しましたが、同じエラーが発生しました。

iptables -A OUTPUT ! s 192.168.0.3 ! -p udp --sport 2905 --dport 2905 -j NFQUEUE --queue-num 0

私のケースにおける iptables コマンドの正しい使用法についてアドバイスをいただけますか。

答え1

チェーンを作成し、すべてをチェーンに送信し、チェーンで処理したくないものについては RETURN を実行すると、ルールの記述がはるかに簡単になります。チェーンを使用すると、非常に複雑なルールを考え出すことなく、後で他の例外を追加できます。

iptables -t filter -N out_queue
iptables -t filter -A OUTPUT -j out_queue
iptables -t filter -A out_queue -p udp --sport 2905 -j RETURN
iptables -t filter -A out_queue -p udp --dport 2905 -j RETURN
iptables -t filter -A out_queue -j NFQUEUE --queue-num 0

答え2

! はオプションの後に置くべきではないでしょうか?

iptables -A OUTPUT -s ! 192.168.0.3 -p udp --sport ! 2905 --dport ! 2905 -j NFQUEUE --queue-num 0

答え3

試してください:

iptables -A OUTPUT -s 192.168.0.3 -p udp --sport!2905 --dport!2905 -j NFQUEUE --queue-num 0

関連情報