ポート 7162 で SNMP トラップをリッスンするアプリケーションがあります。トラップはポート 162 に到着するので、iptables で次のリダイレクトを設定します。
-A PREROUTING -p udp -m udp --dport 162 -j REDIRECT --to-ports 7162
ポート162への着信接続を明示的に許可する必要はありますか?
-A INPUT -p udp -m state --state NEW -m udp --dport 162 -j ACCEPT
最初の行だけで機能する場合もあれば、機能しない場合もあるので、その理由を解明しようとしています。
答え1
INPUT
何らかの方法でポート 7162 へのアクセスをチェーンで制限していない限り、最初のルールで十分です。
INPUT
実際、少なくとも次の図によれば、UDP パケットは宛先ポートが 162 に設定されたチェーンを通過するべきではありません。https://upload.wikimedia.org/wikipedia/commons/3/37/Netfilter-packet-flow.svg
さらに、INPUT
ルールが複雑すぎるようです。UDP はステートレス プロトコルなので、netfilter 内で何らかの形式の状態を処理することになります。UDP で使用されるこれらの状態が何を意味するかについての適切なドキュメントさえ見つけていません。
手がかりを得るためにプログラムで両方のポートを監視してみてくださいtcpdump
(注:チェーン内でパケットをドロップするとポート 162 の着信パケットのみを確認でき、ループバックをリッスンしてもリダイレクトは明らかになりません。PREROUTING
、tcpdumpはそれを検出しません。
編集:単一マシン内の接続でルールを試しているわけではないですよね?PREROUTING
ローカルホストのみの接続では走査されません。