iptables:NEW、ESTABLISHED、RELATEDパケットの違い


46

サーバー上のファイアウォールの一部:

iptables -A INPUT -p tcp --dport 22 -m state NEW --state -m recent --set

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 100 --hitcount 10 -j DROP

オンラインで検索すると、そのルールで常にNEWが使用されていますが、ESTABLISHEDおよびRELATEDが使用されていない理由を理解するのに苦労しています。

このような :

iptables -A INPUT -p tcp --dport 22 -m state NEW,ESTABLISHED,RELATED --state -m recent --set

iptables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED,RELATED -m recent --update --seconds 100 --hitcount 10 -j DROP

新しいパケットがESTABLISHEDおよびRELATEDに変更されたとき、誰かが私に説明できますか?

回答:


46

新しいパケットは、受信者がピックアップする前の電話と考えてください。ESTABLISHEDパケットは「Hello」です。そして、関連パケットは、あなたがそれらを送信しようとしていた電子メールについて彼らに伝えるために電話をしていた場合になります。(関連する電子メール。)

私の類推がそれほど良くない場合、manページがそれをうまく処理すると思う。

NEW-パケットが新しい接続を開始したこと、または両方向でパケットを見なかった接続に関連付けられたことを意味します。

ESTABLISHED-パケットが両方向のパケットを見た接続に関連付けられていることを意味します。

RELATED-パケットは新しい接続を開始していますが、FTPデータ転送やICMPエラーなどの既存の接続に関連付けられています。

iptables(8)-Linux manページ


9
好奇心から、それが関連パケットを決定する方法を知っていますか?接続が関連する接続であることをアプリケーションがiptablesに通知するために使用できるメカニズムはありますか、それとも純粋にiptablesのステートフル部分の一部ですか?
マシューシャーリー

9
ip_conntrack_ *と呼ばれる一連のカーネルモジュールによって処理されます。各モジュールは、無関係な接続(FTPなど)を使用する特定のプロトコル用に記述されています。あなたの質問に答えるには、アプリケーションに同様のモジュールをロードする必要があると思います。
カイルスミス

4
はい、ありがとうございます。しかし、NEWを含むルールに戻ると、パケットが既に確立されており、そのためにルールによってブロックされていないように見せることはできませんか?
クリス

2
@クリス:発信パケットを偽造するのはかなり難しいので、答えのmanページの文言では、どのように見えるかわかりません。開いている接続にバインドされているように見えるパケットを偽造することは可能ですが、ファイアウォールがなくても、TCPスタックは、接続が開いていることを知らない場合、パケットをフロアにドロップします送信者。これがルーターのファイアウォール上にある場合、ルーターを通過する際にSYN/ ACK/ RST/ etcパケットを検査することでこの状態を維持することはまだ可能であり、iptablesがこれを行うことを期待しています。
マシューシャーリー

2
@Kris:これに似たもの(技術的には同一ではありませんが)は、TeamViewerなどのVNCソフトウェアでファイアウォール/ルーターをトンネリングするために使用されます。このプロセスは、穴あけと呼ばれます。要するに、別のデバイスから(インターネット経由で)接続したいホストPC(制限ファイアウォールの背後にある可能性があります)があります。両方のPCは、個別のサーバー(TeamViewerサーバーなど)への個別の接続を開きます。これらのサーバーは、それらの間を「仲介」します。その他。
レビテ14

14

サーバーとクライアントの両方に制限的INPUTでオープンなOUTPUT、つまり:

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT

また、アクティブモードのFTPの例に対するiptables-extensions(8)から:

1.新しい

NEWパケットは新しい接続を開始したか、または双方向でパケットを見なかった接続に関連付けられています。

ポート上のクライアント50000(任意のランダムな非特権ポート)はポート上のFTPサーバーに接続し21、サーバーはこの着信接続を受け入れるために少なくともこれが必要です。

iptables -A INPUT --dport 21 -m state --state NEW -j ACCEPT

2.設立済み

ESTABLISHEDパケットは、両方向のパケットを見た接続に関連付けられています。

今、クライアント側では、彼は、ポート上のサーバへの発信接続をオープンした21ローカルポートを使用して50000、彼は応答がから到着できるようにするには、次のiptablesを必要とserver (21)しますclient (50000)

sudo iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT

3.関連

RELATEDパケットは新しい接続を開始していますが、FTPデータ転送やICMPエラーなどの既存の接続に関連付けられています。

FTP接続が確立され、データ接続が実行される直前に、クライアントはポートでサーバーソケットを開きます(はい、アクティブなFTPクライアントはデータ接続のサーバーになります)60000(私の理解では、クライアントはこのポートをマークします60000などRELATEDから他の接続への50000->21)およびFTPを使用してサーバーにこのポート番号を送信するPORTコマンドを。次に、FTPサーバーは、クライアントの20ポートからポートへの新しい接続を開き60000ます。クライアントは、この新しい接続を成功させるために次のことを要求します。

sudo iptables -A INPUT -m state --state RELATED -j ACCEPT

最後に、これが機能ip_conntrack_ftpするには、システムが接続/パッケージをマークできるようにカーネルモジュールを有効にする必要がありますRELATED(これは私の理解であり、あまり掘り下げていません)。

modprobe ip_conntrack_ftp

確立されたのは、TCP 3ウェイハンドシェイクではなく、以前にローカルで発生した単方向フローのみで、私の理解は正しいですか?
sdaffa23fdsf

回答をありがとう、確立されたため、「サーバー(21)からクライアント(50000)に応答が届くようにするiptables」と答えました。
メディア

@Medya、クライアントの観点から、server(21)からclient(50000)に送信されるパケットは着信パケットであるため、クライアントの場合はになりますINPUT
ハイメHablutzel
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.