iptablesファイアウォールルールを使用する場合、許可されたすべてのポートで新しい状態をアサートするのはなぜですか?


23

多くの場合、すべてのパケットを関連接続に許可し、特定のサービスポートを新規接続に許可するように構成されたiptablesが表示されます。

NEWと表示する理由は何ですか?接続が新規でない場合、関連していると思われるため、特定のポートルールはどちらも実行しません。それでは、プロトコルとポート番号だけでなく、サービスポートを明示的にNEWで定義するのはなぜですか?

回答:


21

netfilterファイアウォールのルール(iptables)は順次チェックされ、パケットの運命(ACCEPT、DROP、REJECTなど)は最初の一致に基づいて決定されます。

ファイアウォールをステートフルにし、最初のルールを作成することにより、通常-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT、サーバーへの正当なトラフィックの大部分は、その単一のルールのみを通過した後に受け入れられます。そのトラフィックは他のルールを通過する必要はありません。

ルールベースのサイズに応じて、ファイアウォールのパフォーマンスに大きな違いが生じる可能性があります。

ファイアウォールが検証する必要のあるトラフィックは、明示的に新しい接続のみです。

つまり、パブリックWebサーバーのファイアウォールと、ワークステーションからの少数のWebマスターのアクセスを比較します。

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp -m multiport --dports 80,443 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -m iprange --src-range 10.9.8.7-10.9.8.10 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited

正当なパケットの約99%は確立された接続に属し、最初のルールにヒットするだけです。そのルールに一致しないパケットのうち、大半はWebサイトへの新しい接続である必要があります。マルチポートモジュールは、単一のルールでHTTPまたはHTTPSへのアクセスを許可できます。Webマスターは、sshとsftpを使用して、固定アドレスで多数のワークステーションからログインし、その他はすべて拒否されます。

ルールがTCPポートによって論理的に順序付けられているファイアウォール:

-A INPUT -p tcp  -m tcp --dport 22  --source 10.9.8.7 -j ACCEPT
-A INPUT -p tcp  -m tcp --dport 22  --source 10.9.8.8 -j ACCEPT
-A INPUT -p tcp  -m tcp --dport 22  --source 10.9.8.9 -j ACCEPT
-A INPUT -p tcp  -m tcp --dport 22  --source 10.9.8.10 -j ACCEPT
-A INPUT -p tcp  -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp  -m tcp --dport 443 -j ACCEPT

ここではアクセスを許可する前に、HTTP Webサーバーへのパケットを5つのルールに対してチェックする必要があります。また、たとえば、fail2banまたは同様の製品を使用すると、50以上のルールになりやすいサーバー上で実行されるサービスが増えます。


1
最初の一致に基づいてアクセスが許可される」と言う以外は、優れた回答(私から+1!)。最初の一致がDROPまたはREJECTである場合、これはアクセスを許可しません。ログの場合、その後の一致を見つけ続ける必要があります。カスタムチェーンが関与すると、物事はかなりバロックになります。むしろ、「パケットの運命は、最初の不一致マッチに基づいて決定される」と言います。
MadHatterはモニカをサポートします14

5
related/established行は存在するが、後続のルールがアサートしない場合を振り返ることができますNEWか?
ダニエルウィドリック14

13

NEW パケットが新しい接続を開始したことを意味します。

ip_conntrack_*ファイアウォールをステートフルにするというカーネルモジュールによって処理されます。ステートフルファイアウォールは、トラフィックストリームを監視できます。

プロトコルとポート番号を指定するだけの場合、ファイアウォールはステートフルではなくステートレスです。パケットを制限またはブロックするだけです。これらのタイプのファイアウォールは、データフローを認識しません。

良い例はFTPです。アクティブFTPは制御チャネルにポート21を使用しますが、データチャネルにはポート20を使用します。ステートフルファイアウォールの場合、ポート21で以前に新しく確立された接続に関連しているため、ポート20を明示的に開く必要はありません。

以下はiptablesmanページの抜粋です:

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

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

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


1
ポート20をポート21に「関連付ける」メカニズムは何ですか?開いたIP接続を別のポートに転送できますか?
ドローヌス14年

nf_conntrack_ftp.ko
mateusza

7
-A INPUT -m tcp -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -DROP

上記のルールセットは、TCPポート22へのパケットをINVALID通過状態にしますACCEPT

無効:前の状態のいずれも適用されない場合、パケットの状態は無効です。これは、さまざまなタイプのステルスネットワークプローブが原因であるか、CONNTRACKエントリが不足していることを意味する可能性があります(ログにも記載されているはずです)。または、単に完全に良性の場合もあります。

/unix/57423/how-to-understand-why-the-packet-was-considered-invalid-by-the-iptables


STATE NEWをアサートすると、無効なパケットが誤って受け入れられないことが保証されます。

そして意味を明確にするために:

  • NEW:これは、新しい接続であります
  • ESTABLISHED:これは現在の接続に関係するパケットです
  • RELATED:これは新しい接続ですが、既存の接続によって予測されています
  • 無効:上記のいずれも当てはまりません。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.