解決策 1:
<ブロック引用>したがって、iptables は基本的に、送信パケットに使用されたポート番号を記憶します (UDP パケットに関して他に何を記憶できますか?)、
UDP の送信元と宛先のポートとアドレスが保存されていることは確かです。
状態テーブルを調べたい場合は、conntrack や netstat-nat をインストールしてください。
<ブロック引用>(時間枠内に誤ってそのポートでサービスを開始しようとした場合、その試みは拒否/ブロックされますか?)
OUTPUT と INPUT を使用しているため、ローカル サービスについて話していることになります。ポートは既に使用されています。何かがそのポートで既にリッスンしているため、システムで別のサービスを開始できるとは思えません。本当にやりたい場合は、最初のサービスを停止して別のサービスを開始することもできると思いますが、その場合、応答はおそらくあなたのサービスに届きます。サービスがパケットに対して行う処理は、パケットの内容とサービスによって異なります。
解決策 2:
注意:この回答は編集されています。
マニュアル ページに記載されている内容にもかかわらず、 ESTABLISHED
「ステートフル」を意味するようです。 UDP の場合、(あなたが示唆するように) 各送信 UDP パケット (「src ip、src port dst ip、dst port」タプル) をしばらく記憶し、その応答を認識することを意味します。
FWIW、DNS トラフィックの通常のルールは次のようになります:
# permit any outbound DNS request (NB: TCP required too)
iptables -A OUTPUT -p udp --sport 1024:65535 --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 1024:65535 --dport 53 -j ACCEPT
# accept any packet that's a response to anything we sent
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
つまり、OUTPUT
のトラフィックを制御します チェインしてから iptables
状態モジュールは INPUT
で他のすべてを処理します
この関連する質問も参照してください。