Iptables:「-p udp --state ESTABLISHED」


18

発信DNSを許可するためによく使用される次の2つのiptablesルールを見てみましょう。

iptables -A OUTPUT -p udp --sport 1024:65535 --dport 53 
   -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A INPUT -p udp --sport 53 --dport 1024:65535
   -m state --state ESTABLISHED -j ACCEPT

私の質問は次のとおりです。UDPのESTABLISHED状態をどの程度正確に理解すべきですか UDPはステートレスです。

ここに私の直観があります-これが間違っているかどうか、どこで知りたいですか:

マニュアルページはこれを教えてくれます:

状態

このモジュールは、接続追跡と組み合わせると、
このパケットの接続追跡状態。

  --state ...

それで、iptablesは基本的に、発信パケットに使用されたポート番号を記憶し(UDPパケットの場合は他に何を記憶できますか?)、その後、短い時間内に返送される最初の着信パケットを許可しますか?攻撃者はポート番号を推測する必要があります(本当に難しいですか?)

競合の回避について:

カーネルは、(他のサービスまたは以前の発信UDPパケットによって)ブロックされているポートを追跡し、これらのポートが時間枠内で新しい発信DNSパケットに使用されないようにしますか?(時間枠内で誤ってそのポートでサービスを開始しようとした場合、どうなりますか?その試みは拒否/ブロックされますか?)

上記のテキストですべてのエラーを見つけてください:-)ありがとう、

クリス

回答:


12

そのため、iptablesは基本的に、発信パケットに使用されたポート番号を記憶します(UDPパケットについては他に何を記憶できますか?)、

UDPの場合、送信元と宛先のポートとアドレスが保存されていると確信しています。

状態テーブルを検査する場合は、conntrackやnetstat-natをインストールしてください。

(時間枠内で誤ってそのポートでサービスを開始しようとした場合、どうなりますか?その試みは拒否/ブロックされますか?)

OUTPUTとINPUTを使用しているため、ローカルサービスについて話していることになります。ポートはすでに使用されています。既にそのポートで何かがリッスンしているため、システムで別のサービスを開始できるとは思われません。本当にやりたい場合は、最初のサービスを停止して別のサービスを開始できると思います。その場合、おそらく応答がサービスに届きます。サービスがパケットで行うことは、パケットの内容とサービスの内容によって異なります。


したがって、ポート8080でTomcatインスタンスを開始した場合、誤って同じポートでDNSクエリが実行されていると、1:(65535-1023)で起動に失敗する可能性がありますか?または、タイムフレームが期限切れになるまで待つだけですか?デフォルトの時間枠はどれくらいですか?
クリスラーチャー

6
Linuxでは、一時的なポート範囲は一般的に32768-61000(/ proc / sys / net / ipv4 / ip_local_port_rangeを参照)であると考えています。これには8080のサンプルポートは含まれません。はかない範囲内。テーブル内のUDPエントリが示す時間は通常30秒です(/ proc / sys / net / netfilter / nf_conntrack_udp_timeoutを参照)
Zoredache

2
+1ありがとう、特に/ procパスについて!
クリスラーチャー

1
場合いずれかudp_timeout、使用延びることを望むecho "net.netfilter.nf_conntrack_udp_timeout = 180" >> /etc/sysctl.conf
キラン

8

注意:この回答は編集されました。

マニュアルページの説明にもかかわらず、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チェーン上の他のすべてを処理させます。

関連する質問もご覧ください。


1
TCPも許可する必要があることは承知しています。しかし、UDPにとってRELATEDはどういう意味ですか?マンページ:「パケットが新しい接続を開始しているが、既存の接続に関連付けられていることを意味します...」UDPの接続?ESTABLISHEDよりも理にかなっているかもしれませんが、それが私が知りたいことです。
クリスラーチャー

ルールを使用するが、udp INPUTをRELATEDに制限すると、DNSクエリが機能しません。ESTABLISHEDを許可する必要があるようです。RELATED(UDPの場合)も許可する理由はありますか?
クリスラーチャー

わかりました、「確立された」はマニュアルページに書かれている以上の意味があるようです。いずれにしても、私のようなOUTPUTフィルターを使用し、inbonudトラフィックを受け入れない場合、そのINPUTルールのみが必要になります。
アルニタック

1
私たちが見つけたものを考えると、RELATED udpパケットは見当たりません。ただし、(たとえば)そのボックスからアウトバウンド FTPを実行する場合、データチャネルのRELATED状態ルールが必要です。単一の「ESTABLISHED、RELATED」ルールは、入口トラフィックに最も最適な単一ルールです。
オリオン座ゼータ星

1
実際、RTP にはRELATEDUDPパケット存在する場合があります。
アルニタック

1

iptablesの開発者は、「ESTABLISHED」状態とは、2つのクライアント間のプロトコルに関係なく、パケットが双方向で見られる状況であると考えています。

状態拡張はconntrackの一部です。カーネルはテーブルから状態を理解します

/proc/net/nf_conntrack

送信者の観点からのテーブルnf_conntrackのUDPのiptable状態の例。UDPでDNSクエリを送信すると想像してみましょう

udp   17 20 src=192.168.1.2 dst=192.168.1.10 sport=35237 dport=53 \
 [UNREPLIED] src=192.168.1.10 dst=192.168.1.2 sport=53 \
 dport=35237 use=1

パケットが送信されました。それは返事をしませんでした、そして、テーブルには、見返りに期待されるもののためのデータがあります(DNS回答のためのパケット)。

udp   17 20 src=192.168.1.2 dst=192.168.1.10 sport=35237 dport=53 \
  src=192.168.1.10 dst=192.168.1.2 sport=53 \
 dport=35237 use=1

応答が到着し、未応答フラグがなくなった場合、このUDP接続は、システムで定義された短い時間の間、確立状態にあることを意味します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.