回答:
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以上のルールになりやすいサーバー上で実行されるサービスが増えます。
related/established
行は存在するが、後続のルールがアサートしない場合を振り返ることができますNEW
か?
NEW
パケットが新しい接続を開始したことを意味します。
ip_conntrack_*
ファイアウォールをステートフルにするというカーネルモジュールによって処理されます。ステートフルファイアウォールは、トラフィックストリームを監視できます。
プロトコルとポート番号を指定するだけの場合、ファイアウォールはステートフルではなくステートレスです。パケットを制限またはブロックするだけです。これらのタイプのファイアウォールは、データフローを認識しません。
良い例はFTPです。アクティブFTPは制御チャネルにポート21を使用しますが、データチャネルにはポート20を使用します。ステートフルファイアウォールの場合、ポート21で以前に新しく確立された接続に関連しているため、ポート20を明示的に開く必要はありません。
以下はiptables
manページの抜粋です:
NEW-パケットが新しい接続を開始したことを意味します。さもなければ、両方向でパケットを見なかった接続に関連付けられます。
ESTABLISHED-パケットが両方向のパケットを見た接続に関連付けられていることを意味します。
RELATED-パケットは新しい接続を開始していますが、FTPデータ転送やICMPエラーなどの既存の接続に関連付けられています。
-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
をアサートすると、無効なパケットが誤って受け入れられないことが保証されます。
そして意味を明確にするために: