TCPセッション
ネットワークでTCP経由でデータを送信するには、3ウェイハンドシェイクセッション確立プロセスに従います。セッションを開始するプロセスと、TCP セッションを終了するプロセスがあります。このトピックは、TCP セッションの処理に関連するプロセスを理解するのに役立ちます。
ポリシーごとのTCPセッションチェックについて
デフォルトでは、TCP SYNチェックとシーケンスチェックのオプションは、すべてのTCPセッションで有効になっています。Junos OS(Junosオペレーティングシステム)は、TCPセッション中に以下の操作を実行します。
セッションの最初のパケットに含まれる SYN フラグをチェックし、セッションを開始しようとする非 SYN フラグを持つ TCP セグメントを拒否します。
ステートフルインスペクション中に TCP シーケンス番号を検証します。
ポリシーごとのTCPセッションチェック機能により、各ポリシーのSYNおよびシーケンスチェックを設定できます。現在、TCP オプション フラグの no-sequence-check と no-syn-check は、サービス ゲートウェイの動作を制御するためにグローバル レベルで使用できます。ポリシーごとのTCPオプションをサポートするために、次の2つのオプションを使用できます。
sequence-check-required: sequence-check-required 値は、グローバル値 no-sequence-check を上書きします。
syn-check-required: syn-check-required 値は、グローバル値 no-syn-check をオーバーライドします。
ポリシーごとの TCP オプションを設定するには、それぞれのグローバル オプションをオフにする必要があります。そうしないと、コミット・チェックが失敗します。グローバルTCPオプションが無効で、SYNフラッド保護が最初のパケットを許可する場合、ポリシーごとのTCPオプションは、SYNおよび/またはシーケンスチェックを実行するかどうかを制御します。
per-policy
syn-check-required
オプションは、set security flow tcp-session no-syn-check-in-tunnel
CLIコマンドの動作を上書きしません。グローバル SYN チェックを無効にすると、パケット フラッディングに対するデバイスの防御の有効性が低下します。
グローバル SYN チェックを無効にし、ポリシー検索後に SYN チェックを実施すると、ルータが処理できるパケット数に大きく影響します。これにより、CPUの動作が集中します。グローバルSYNチェックを無効にし、ポリシーごとのSYNチェックの適用を有効にする場合は、このパフォーマンスへの影響に注意する必要があります。
TCPパケットセキュリティチェックの無効化
SRXシリーズファイアウォールでは、TCPパケットのセキュリティチェックを無効にして、TCP実装に欠陥のあるホストおよびデバイスとの相互運用性を確保できます。
no-sequence-check
オプションは、TCP シーケンス チェックを無効にします。また、スループットも向上します。
set security flow tcp-session no-sequence-check
コマンドは、デフォルトまたはハッシュベースモードのすべてのTCPセッションでTCPシーケンスチェックを無効にします。
例:ポリシーごとの TCP パケット セキュリティ チェックの設定
この例では、デバイス内のポリシーごとにTCPパケットセキュリティチェックを設定する方法を示しています。
必要条件
開始する前に、グローバル レベルで設定されている tcp オプション、 tcp-syn-check
、および tcp-sequence-check
を無効にする必要があります。
概要
SYNおよびシーケンスチェックオプションは、すべてのTCPセッションでデフォルトで有効になっています。大容量のファイル転送をサポートする必要がある環境や、非標準のアプリケーションを実行する環境では、ポリシーごとに異なる方法でシーケンス チェックと同期チェックを構成する必要がある場合があります。この例では、ポリシー pol1
のシーケンスと同期チェックを設定します。
構成
プロシージャ
手順
ポリシーレベルでTCPパケットセキュリティチェックを設定するには:
セッションを作成する前に、TCP SYNビットのチェックを設定します。
[edit] user@host# set security policies from-zone Zone-A to-zone Zone-B policy pol1 then permit tcp-options syn-check-required
ステートフルインスペクション中のTCPセグメントのシーケンス番号のチェックを設定します。
[edit] user@host# set security policies from-zone Zone-A to-zone Zone-B policy pol1 then permit tcp-options sequence-check-required
デバイスの設定が完了したら、設定をコミットします。
[edit] user@host# commit
検証
設定が正常に機能していることを確認するには、 show security policies detail
コマンドを入力します。
例:SRXシリーズサービスゲートウェイのTCPパケットセキュリティチェックの無効化
この例では、デバイスでTCPパケットセキュリティチェックを無効にする方法を示しています。
必要条件
開始する前に、TCP パケットセキュリティチェックを無効にする状況を理解してください。.
概要
Junos OSは、TCPパケットのセキュリティチェックを無効にするメカニズムを提供し、TCP実装に障害のあるホストおよびデバイスとの相互運用性を確保します。no-SYN-check中、Junos OSはセッション作成用のTCP SYNパケットを探しません。順序なしチェックは、TCP シーケンス チェックの検証を無効にします。また、スループットも向上します。SYNチェックとシーケンスチェックはデフォルトで有効になっています。set security flow コマンドは、すべての TCP セッションで TCP SYN チェックと TCP シーケンス チェックを無効にするため、セキュリティが低下します。これは、大きな転送ファイルなどの顧客や、標準で正しく動作しないアプリケーションなどのシナリオで必要になる場合があります。
構成
プロシージャ
手順
次の例では、設定階層のいくつかのレベルに移動する必要があります。その方法の詳細については、CLIユーザー ガイドの 設定モードにおけるCLIエディターの使用を参照してください。
TCPパケットセキュリティチェックを無効にするには:
セッションを作成する前に、TCP SYNビットのチェックを無効にします。
[edit security flow] user@host# set tcp-session no-syn-check
ステートフルインスペクション中のTCPセグメントのシーケンス番号のチェックを無効にします。
[edit security flow] user@host# set tcp-session no-sequence-check
デバイスの設定が完了したら、設定をコミットします。
[edit ] user@host# commit
検証
設定が正常に機能していることを確認するには、 show security flow
コマンドを入力します。
例:SRXシリーズファイアウォールのすべてのTCPセッションの最大セグメントサイズの設定
この例では、SRXシリーズファイアウォールのすべてのTCPセッションに最大セグメントサイズを設定する方法を示しています。
必要条件
開始する前に、最大セグメント サイズを設定する状況を理解してください。
概要
TCP最大セグメントサイズ(TCP-MSS)を変更することで、すべてのTCPセッションを終了できます。フラグメント化の可能性を低減し、パケット損失から保護するために、tcp-mss を使用してより低い TCP MSS 値を指定できます。これは、MSS値が指定した値よりも高いルーターのイングレスインターフェイスを通過するすべてのTCP SYNパケットに適用されます。
DF ビットが設定されている場合、パケットはフラグメント化されず、Junos OS は ICMP エラー タイプ 3 コード 4 パケットをアプリケーション サーバーに送信します(宛先到達不能;Fragmentation Needed and DF set)。この ICMP エラーメッセージには、アプリケーションサーバが使用する正しい MTU(tcp-mss で定義)が含まれており、アプリケーションサーバはこのメッセージを受信し、それに応じてパケットサイズを調整する必要があります。これは、IPsecによってパケットのオーバーヘッドが加わるため、特にVPNで必要です。したがって、TCP-MSSを適切に下げる必要があります。
SRXシリーズファイアウォールをパケットモードで実行している場合は、 set system internet-options tcp-mss を使用してTCP-MSS値を調整します。すべてのポートが TCP-MSS 設定の影響を受けます。特定のポートを除外することはできません。SRXシリーズ ファイアウォールをフローモードで実行している場合、 set system internet-options tcp-mss を使用できますが、TCP-MSS 値を調整するには set security flow tcp-mss のみを使用することをお勧めします。両方のステートメントが設定されている場合、2つの値のうち小さい方が有効になります。
構成
プロシージャ
手順
すべてのTCPセッションの最大セグメントサイズを設定するには、次の手順に従います。
すべてのTCPセッションのTCP最大セグメントサイズを設定します。
[edit security flow] user@host# set tcp-mss all-tcp mss 1300
デバイスの設定が完了したら、設定をコミットします。
[edit ] user@host# commit
業績
設定モードから、 show security flow
コマンドを入力して設定を確認します。出力結果に意図した設定内容が表示されない場合は、この例の設定手順を繰り返して設定を修正します。
簡潔にするために、この show
コマンド出力には、この例に関連する設定のみ含まれています。システム上のその他の設定はすべて省略記号(...)で置き換えられています。
[edit] user@host# show security flow ... tcp-mss{ all-tcp{ mss 1300; } } ...
検証
設定が正常に機能していることを確認するには、動作モードから show configuration security flow
コマンドを入力します。
user@host> show configuration security flow tcp-mss{ all-tcp{ mss 1300; } }
TCP州外パケットドロップロギングの概要
パケット交換ネットワークでは、需要が利用可能な容量を超えると、パケットはキューに入れられ、キューがいっぱいになるまで超過したパケットを保持し、その後パケットは破棄されます。TCPがこのようなネットワーク上で動作する場合、エラーのないエンドツーエンドの通信を維持するために是正措置を講じます。
フローモジュールは、セッションの作成やセッションの終了などのセッションベースのイベントのRTLOGの生成をすでにサポートしています。SRXシリーズファイアウォールは、セッションが存在しないパケットドロップなどのパケットベースのイベントに対するRTLOGの生成をサポートするようになりました。
SRXシリーズファイアウォールは、フローモジュールによって破棄された、同期されていないTCP状態外パケットのロギングをサポートします。
TCP アウトオブステート パケット ドロップ ロギング機能は、パケットの損失を回避し、エラーのない通信のために非同期パケットをログに記録することでパケットの回復を可能にし、データベース サーバーの同期が取れなくなるのを防ぎます。この機能は、セキュリティ ログ (RTLOG) 機能の上に構築されています。
TCP状態外パケットドロップロギングは、次の条件下でのTCPパケットドロップログのキャプチャをサポートします。
Session ages out—長いTCPセッション上でクラウドアプリケーションが実行されており、セッションが終了した後もこれらのアプリケーションがTCPセッションを更新しない場合、TCPパケットはドロップされます。この機能は、これらのドロップされた TCP パケットのロギングをサポートします。
Unsynchronized first packets due to attacks or asymmetric routes—2つのサイトにSRXシリーズファイアウォールを導入し、ルーティングによって非対称トラフィックが強制されることがある場合、同期(SYN)パケットは1つのサイトで見られますが、同期確認(SYN_ACK)パケットは別のサイトで見られます。
つまり、SRXシリーズファイアウォールは、一致する状態テーブルエントリーがないTCP ACKパケットを認識します。これは、接続が一定期間非アクティブであったか、接続テーブルがフラッシュされたために発生する可能性があります(たとえば、ポリシーのインストールまたは再起動が原因です)。
この場合、別のサイトで見られるSYN_ACKパケットは、SRXシリーズファイアウォールによって拒否されましたが、ログに記録されませんでした。この機能は、拒否されたSYN_ACKパケットのロギングをサポートします。
Other out-of-state conditions (like TCP sequence check fail and synchronization packet received in FIN state)—SRXシリーズファイアウォールがシーケンス障害を検出した場合、デバイスがTCPの4ウェイクローズ状態であるがSYNパケットを受信した場合、またはスリーウェイハンドシェイクの失敗があった場合、SRXシリーズファイアウォールはTCPパケットをドロップし、これらのドロップされたパケットはログに記録されます。
非同期 TCP 状態外パケット ドロップ ログは、セッションベースのログではなく、パケットベースのログです。
TCP 状態外パケット ドロップ ロギングは、CPU が攻撃されるのを防ぐためのスロットル メカニズムを使用して設計されており、各スロットル間隔内で一部のログをドロップできます。
フロー モジュールによってドロップされた TCP アウトオブステート パケットのみがログに記録されます。TCPプロキシおよびIDPによってドロップされたTCPパケットはログに記録されません。
TCPアウトオブステートパケットドロップロギングについて
TCP 州外パケット ドロップ ロギングの実装を理解するために、2 つのサイトに SRXシリーズ ファイアウォールを展開し、ルーティングによって SYN パケットが 1 つのサイトで見られるが、SYN_ACK パケットが別のサイトで見られるという非対称トラフィックが強制されることがあると考えます。この場合、SYN_ACKパケットは拒否されますが、ログには記録されません。TCPアウトオブステートパケットドロップロギング機能は、これらの非同期パケットドロップを可視化します。
データセンター内のデータベースが、キープアライブを送信せずにTCPソケットを開いたままにしておくシナリオを考えてみましょう。データが送信されていない場合、SRXシリーズファイアウォールはセッションをタイムアウトにします。データベースはそのTCPソケットを介してデータを送信しますが、トラフィックがSRXシリーズファイアウォールに到達すると、セッションは存在しなくなり、パケットはドロップされますが、ログには記録されません。ドロップされたこれらの状態外TCPパケットは、SRXシリーズファイアウォールによってログに記録されます。
サポートされるTCP状態外ロギング機能
TCP 状態外ログは、次の機能をサポートしています。
ターゲット・トラフィックをフィルタリングするためのパケット・フィルタ・コンポーネント。
ログ メッセージによる CPU の過負荷から保護するためのスロットル コンポーネント。
ログ生成レートを柔軟に変更できます。
パケット フィルター コンポーネント
ロギング フィルターは、現在のフロー トレース フィルターを利用します。これにより、さまざまな方法でトラフィックをフィルタリングできます。パケットログを生成するようにフィルターを設定する必要があります。設定しないと、ログがトリガーされません。
このフィルター機能により、ログが予期せず有効になるのを回避できます。サポートされる最大フィルター数は 64 です。
set security flow packet-log packet-filter <filter-name>
コマンドを使用して、必要な関連フィルター コンポーネントを有効にします。
スロットル コンポーネント
すべてのTCPの状態外パケットをログに記録すると、トラフィックが重い場合や攻撃が発生した場合に、デバイスが過負荷になる可能性があります。CPU がアイドル状態で、できるだけ多くのメッセージをログに記録する場合は、CPU の過負荷につながる可能性があります。
スロットル メカニズムを使用すると、CLI からスロットル間隔を設定できるため、CPU が過負荷になるのを防ぐことができます。
ログに記録されたデータをマッピングするために、ハッシュテーブルが導入されました。ハッシュ キーは、送信元 IP アドレス、宛先 IP アドレス、送信元ポート、および宛先ポートを使用して生成されます。
各スロットル間隔内では、限られた数 (複数) のメッセージのみが RTLOG に送信されます。残りのログメッセージは調整されます。
デフォルトのスロットル間隔は 1 秒です。スロットル間隔(ミリ秒レベル)は、2の累乗またはゼロ(0、1、2、4、8、16...2^N) です。
スロットル間隔が 0 に設定されている場合、スロットル メカニズムは関与しません。これは、トラフィックが非常に少なく、すべてのパケット ドロップ ログを記録するシナリオに適しています。
スロットル間隔を 2^N に構成すると、スロットルメカニズムがロックレスになり、ログキャプチャのパフォーマンスが向上します。
ログ生成レートを柔軟に変更可能
設定されたスロットル間隔に基づいて、ログ生成レートを変更および管理できます。
つまり、各 32 ミリ秒 (ms) 間隔内で、限られた数のログが生成され、残りが削除される可能性があるということです。間隔を(0, 1, 2, 4, 8, 16, 32 ...2^N) です。
入力値が2^Nにアライメントされていない場合は、フロー処理中に自動的に2^Nにアライメントされます。たとえば、10 ミリ秒間隔を構成すると、自動的に 8 ミリ秒間隔に調整されます。
受信フラグメンテーション特性を保持することでスループットがどのように向上するかの理解
このトピックでは、SRXシリーズファイアウォールを使用して受信パケットフラグメントの特性を維持するメリットについて説明します。
あるホストから別のホストにデータが送信されると、一連のパケットとして送信されます。最大サイズのパケットが、データパス内のどのリンクでもフラグメント化されることなく、送信元ノードから宛先ノードへのパスを通過できる場合、パフォーマンスが向上し、ネットワークリソースが節約されます。パケットがそのリンクに確立された最大伝送単位(MTU)のパケットよりも大きいために、パス内のリンクを通過するためにパケットをより小さいパケットにフラグメント化する必要がある場合、結果として得られる各フラグメントには、ペイロードまたはデータに加えて、パケットヘッダー情報が含まれている必要があります。オーバーヘッドが増加すると、スループットが低下し、ネットワークパフォーマンスが低下する可能性があります。また、パケットフラグメントは宛先ノードで再構成する必要があり、これは追加のネットワークリソースを消費します。
一方、ホストがパスMTU(パス最大送信単位)よりもはるかに小さいパケットを送信すると、ネットワークリソースが浪費され、スループットが最適ではありません。パスMTUディスカバリープロセスは、セッションのソースノードから宛先ノードにデータパスを通過するフラグメントの最適なMTUサイズを検出するために機能します。したがって、最適なパケット サイズはパス MTU のサイズです。フラグメント化は、パケットのサイズがパス MTU を超えた場合に発生します。
SRXシリーズファイアウォールでアプリケーションレイヤーサービスが設定されている場合、サービスを適用してコンテンツを検査する前に、イングレスインターフェイスのパケットフラグメントを再構成する必要があります。これらの再構成されたパケットフラグメントは、データがエグレスインターフェイスから送信される前に、再度分解する必要があります。通常、SRXシリーズファイアウォールから次のリンクに送信されるフラグメントのサイズを決定するのは、エグレスインターフェイスのMTUサイズです。SRXシリーズファイアウォールのエグレスMTUサイズがパスMTUよりも大きい場合、データパスでパケットフラグメント化が発生し、パフォーマンスが低下したり、パケットがドロップしたりする可能性があります。パケットフラグメントは、送信元から宛先へのパスのすべてのリンクを通過するのに十分な大きさである必要があります。
デフォルトでは、SRXシリーズファイアウォールは、エグレスインターフェイスに設定されたMTUサイズを使用して、送信するパケットフラグメントのサイズを決定します。しかし、受信フラグメント特性を保持する機能を有効にすると、SRXシリーズファイアウォールは受信パケットフラグメントのサイズを検出して保存します。
データパスでパケットがフラグメント化される可能性を低減するために、SRXシリーズファイアウォールは、そのフローのエグレスMTUを追跡し、調整します。これは、すべての受信フラグメントの最大サイズを識別します。その情報をエグレスインターフェイスの既存のMTUと組み合わせて使用し、エグレスインターフェイスから送信されるフラグメントパケットの正しいMTUサイズを決定します。SRXシリーズファイアウォールは、この2つの数値を比較します。小さい方の番号を取り、それをエグレスインターフェイスのMTUサイズに使用します。
set security flow preserve-incoming-frag-size
コマンドを使用してデバイスを設定し、着信パケットフラグメントのサイズを考慮した機能を有効にします。
表1 は、SRXシリーズのエグレスMTUサイズを決定する方法をまとめたものです。
受信フラグメント サイズ(Incoming Fragment Size) |
既存のエグレスMTUサイズ |
最終エグレスMTUサイズ |
---|---|---|
最大のフラグメントが |
既存のegress MTUサイズより小さい |
最大の受信フラグメント サイズが使用されます。 |
最大のフラグメントが |
既存のegress MTUサイズよりも大きい |
既存のエグレスインターフェイスMTUが使用されます。 |
この機能は、SRXシリーズファイアウォールでサポートされています。通過トラフィックとトンネルを出るトラフィックをサポートします。これは、IPv4 と IPv6 の両方のトラフィックに適用されます。
次の 2 つの考慮事項がフラグメント サイズに影響します。
コンテンツセキュリティやALGなどのストリームベースのアプリケーションでは、フラグメントを受信していなくても、アプリケーション自体がパケットを変更または再構成できます。この場合、既存のエグレスインターフェイスMTUが使用されます。
パス MTU ディスカバリーパケットがセッションに配信されると、そのセッションのパス MTU はパス MTU パケットによって確立された値にリセットされます。
変更履歴
サポートされる機能は、使用しているプラットフォームとリリースによって決まります。特定の機能がお使いのプラットフォームでサポートされているかどうかを確認するには、 Feature Explorer を使用します。
set security flow preserve-incoming-frag-size
コマンドを使用してデバイスを設定し、着信パケットフラグメントのサイズを考慮した機能を有効にします。