
私はカーネルから特定のパケットを拾い、それらに何らかの処理を施すために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