TCPセッション
ネットワーク内でTCP経由でデータを送信するには、3ウェイハンドシェイクセッション確立プロセスに従います。セッションを開始するプロセスと、TCPセッションを終了するプロセスがあります。このトピックは、TCPセッションの処理プロセスを理解するのに役立ちます。
ポリシーごとのTCPセッションチェックについて
デフォルトでは、TCP SYNチェックとシーケンスチェックオプションは、すべてのTCPセッションで有効になっています。Junosオペレーティングシステム(Junos OS)は、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および/またはシーケンスチェックを実行するかどうかを制御します。
ポリシーごとの
syn-check-requiredオプションは、set security flow tcp-session no-syn-check-in-tunnelCLIコマンドの動作を上書きしません。グローバル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セッションでデフォルトで有効になっています。大きなファイル転送をサポートする必要がある環境や、非標準のアプリケーションを実行する環境では、ポリシーごとに順序チェックと同期チェックを異なる方法で設定する必要がある場合があります。この例では、policy 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チェック中、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パケットをアプリケーションサーバーに送信します(宛先に到達できません;フラグメント化が必要で、DFが設定されています)。このICMPエラーメッセージには、アプリケーションサーバーが使用する正しいMTU(tcp-mssで定義)が含まれています。アプリケーションサーバーはこのメッセージを受信し、それに応じてパケットサイズを調整する必要があります。これはVPNで特に必要です。IPsecによってパケットのオーバーヘッドが増加するためです。したがって、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シリーズファイアウォールがシーケンス障害を検出した場合、デバイスがTCP4ウェイクローズ状態であるがSYNパケットを受信した場合、または3ウェイハンドシェイクエラーが発生した場合、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サイズを決定する方法をまとめたものです。
受信フラグメントサイズ |
既存のエグレス MTU サイズ |
最終的なエグレス MTU サイズ |
|---|---|---|
最大のフラグメントが |
既存のエグレスMTUサイズより小さい |
最大の受信フラグメントサイズが使用されます。 |
最大のフラグメントが |
既存のエグレス MTU サイズよりも大きい |
既存のエグレスインターフェイスMTUが使用されます。 |
この機能は、SRXシリーズファイアウォールでサポートされています。スルートラフィックとトンネルから出るトラフィックをサポートします。これは、IPv4とIPv6の両方のトラフィックに適用されます。
次の 2 つの考慮事項がフラグメント サイズに影響します。
コンテンツセキュリティやALGなどのストリームベースのアプリケーションでは、フラグメントが受信されていなくても、アプリケーション自体がパケットを変更または再アセンブリする可能性があります。この場合、既存のエグレスインターフェイスMTUが使用されます。
パス MTU ディスカバリー パケットがセッションに配信されると、そのセッションのパス MTU はパス MTU パケットによって確立された値にリセットされます。
TCPプロキシ短絡
TCPプロキシ短絡は、デバイスでデフォルトで有効になっています。セッションにTCPプロキシを使用することに関心のあるユーザー(L7ポリシー適用プラグイン/高度なアプリケーションサービス)がいない場合に自動的にトリガーされます。TCP セッションの確立とポリシーの適用が成功すると、デバイスはセッションを短絡状態に移行し、後続のデータ パケットがクライアントとサーバー間を直接流れるようにします。
最初のハンドシェイクフェーズ中、デバイスは完全なTCPプロキシ動作を維持し、接続の両側のTCP状態、シーケンス番号、確認応答を個別に管理します。セッションが正当で安定していることが確認されると、デバイスはデータトラフィックのシーケンス番号や再送をプロキシしなくなります。代わりに、ポリシーコンプライアンスとセキュリティ違反がないかセッションを監視し続けながら、パケットを直接転送します。
TCPプロキシショート回線は、完全なTCPプロキシによる長期的なパフォーマンスオーバーヘッドなしに、強力なTCPセキュリティと検証を必要とする導入に適しています。特に、データセンター、サービスプロバイダエッジ、大規模なエンタープライズネットワークなどの高スループット環境で効果的です。
TCPプロキシ短絡のメリット
-
バランスのとれたセキュリティとパフォーマンス
-
処理オーバーヘッドの低減とデータトラフィックの遅延の低減。
-
接続が短絡した後でもセキュリティポリシーのチェック、セッションの追跡、監視を維持することで、ポリシーの適用を維持。
変更履歴テーブル
サポートされる機能は、使用しているプラットフォームとリリースによって決まります。 機能エクスプローラー を使用して、機能がお使いのプラットフォームでサポートされているかどうかを確認します。
set security flow preserve-incoming-frag-sizeコマンドを使用してデバイスを設定し、受信パケットフラグメントのサイズを考慮した機能を有効にします。