はじめに
このドキュメントでは、TCP 状態バイパス機能を設定する方法について説明します。この機能を使用すると、発信トラフィックと着信トラフィックが個別の Cisco ASA 5500 シリーズ適応型セキュリティ アプライアンス(ASA)を通過するようになります。
前提条件
要件
このドキュメントで説明されている設定を続行するには、Cisco ASAに少なくともBaseライセンスがインストールされている必要があります。
使用するコンポーネント
このドキュメントの情報は、ソフトウェアバージョン9.xが稼働するCisco ASA 5500シリーズに基づくものです。
このドキュメントの情報は、特定のラボ環境にあるデバイスに基づいて作成されました。このドキュメントで使用するすべてのデバイスは、クリアな(デフォルト)設定で作業を開始しています。本稼働中のネットワークでは、各コマンドによって起こる可能性がある影響を十分確認してください。
表記法
ドキュメント表記の詳細については、『シスコ テクニカル ティップスの表記法』を参照してください。
背景説明
このセクションでは、TCP状態バイパス機能の概要と関連するサポート情報について説明します。
TCP状態バイパス機能の概要
デフォルトでは、ASAを通過するすべてのトラフィックはAdaptive Security Algorithm(ASA;アダプティブセキュリティアルゴリズム)を使用して検査され、セキュリティポリシーに基づいて通過を許可されるか廃棄されます。ファイアウォールのパフォーマンスを最大化するために、ASAは各パケットの状態をチェックし(たとえば、新しい接続であるか確立された接続であるかをチェックし)、パケットをセッション管理パス(新しい接続の同期(SYN)パケット)、高速パス(確立された接続)、またはコントロールプレーンパス(高度な検査)のいずれかに割り当てます。
高速パスの現在の接続と一致するTCPパケットは、セキュリティポリシーのすべての面を再確認することなく、ASAを通過できます。この機能によってパフォーマンスが最大化されます。ただし、(SYNパケットを使用する)高速パスでセッションを確立するために使用される方式と(TCPシーケンス番号などの)高速パスで発生するチェックは、非対称ルーティングソリューションの妨げになる可能性があります。接続の発信フローと着信フローは同じASAを通過する必要があります。
たとえば、新しい接続が ASA 1 に到達するとします。SYN パケットはセッション管理パスを通過し、接続のエントリが高速パス テーブルに追加されます。この接続で後続のパケットがASA 1を通過する場合、パケットは高速パスのエントリに一致し、そのまま通過します。後に続くパケットが ASA 2 に送信される場合、そこにセッション管理パスを通った SYN パケットがなかったとすると、その接続用に高速パスのエントリが存在しないので、パケットは廃棄されます。
アップストリームルータで非対称ルーティングを設定しており、トラフィックが2つのASA間で交互に発生する場合は、特定のトラフィックに対してTCP状態バイパス機能を設定できます。TCP状態バイパス機能は、高速パスでセッションが確立される方法を変更し、高速パスチェックを無効にします。この機能では、TCPトラフィックがUDP接続と同様に扱われます。指定されたネットワークと一致する非SYNパケットがASAに入り、高速パスエントリがない場合、パケットは高速パスで接続を確立するためにセッション管理パスを通過します。高速パス内に入ると、トラフィックは高速パス チェックをバイパスします。
次の図は、非対称ルーティングの例であり、ここでは、発信トラフィックが着信トラフィックとは異なる ASA を通過しています。
注:Cisco ASA 5500シリーズでは、TCP状態バイパス機能はデフォルトで無効になっています。また、TCP状態バイパスの設定が適切に実装されていないと、多数の接続が発生する可能性があります。
サポート情報
このセクションでは、TCP状態バイパス機能のサポート情報について説明します。
- コンテキストモード:TCP状態バイパス機能は、シングルコンテキストモードとマルチコンテキストモードでサポートされています。
- ファイアウォールモード:TCP状態バイパス機能は、ルーテッドモードとトランスペアレントモードでサポートされています。
- フェールオーバー:TCP状態バイパス機能でフェールオーバーがサポートされています。
TCP状態バイパス機能を使用する場合、次の機能はサポートされません。
- アプリケーション検査:アプリケーション検査では、着信トラフィックと発信トラフィックの両方が同じASAを通過することが必要です。そのため、アプリケーション検査はTCP状態バイパス機能ではサポートされません。
- 認証、許可、アカウンティング(AAA)で認証されたセッション:ユーザがあるASAで認証すると、ユーザがそのASAで認証しなかったため、他のASA経由で返されるトラフィックは拒否されます。
- TCPインターセプト、最大初期接続制限、TCPシーケンス番号ランダム化:ASAでは接続の状態が追跡されないため、これらの機能は適用されません。
- TCPのノーマライズ:TCPノーマライザはディセーブルになっています。
- セキュリティサービスモジュール(SSM)およびセキュリティサービスカード(SSC)機能:IPSやコンテンツセキュリティ(CSC)など、SSMまたはSSCで実行されるアプリケーションでは、TCP状態バイパス機能を使用できません。
注:変換セッションはASAごとに個別に確立されるため、両方のASAでTCP状態バイパストラフィック用にスタティックNetwork Address Translation(NAT;ネットワークアドレス変換)を設定するようにしてください。ダイナミックNATを使用する場合、ASA 1のセッション用に選択されるアドレスは、ASA 2のセッション用に選択されるアドレスとは異なります。
設定
このセクションでは、ASA 5500シリーズにTCP状態バイパス機能を設定する方法について、2つの異なるシナリオで説明します。
注:このセクションで使用されているコマンドの詳細を調べるには、Command Lookup Tool(登録ユーザ専用)を使用してください。
シナリオ 1
次に、最初のシナリオで使用されるトポロジを示します。
注:このセクションで説明されている設定を両方のASAに適用する必要があります。
TCP状態バイパス機能を設定するには、次の手順を実行します。
- class-map class_map_nameコマンドを入力して、クラスマップを作成します。クラスマップは、ステートフルファイアウォールインスペクションを無効にするトラフィックを特定するために使用されます。
注:この例で使用するクラスマップはtcp_bypassです。
ASA(config)#class-map tcp_bypass
- match parameterコマンドを入力して、クラスマップ内で対象のトラフィックを指定します。モジュラポリシーフレームワークを使用する場合、class-mapコンフィギュレーションモードでmatch access-listコマンドを使用して、アクションを適用するトラフィックの識別用のアクセスリストを使用します。次にこの設定の例を示します。
ASA(config)#class-map tcp_bypass
ASA(config-cmap)#match access-list tcp_bypass
注:tcp_bypassは、この例で使用するアクセスリストの名前です。対象のトラフィックの指定方法についての詳細は、『トラフィックの識別(レイヤ3/4クラスマップ)』を参照してください。
- policy-map nameコマンドを入力して、ポリシーマップの追加、または指定したクラスマップトラフィックに関して行われるアクションを割り当てる(すでに存在する)ポリシーマップの編集を行います。モジュラポリシーフレームワークを使用する場合、レイヤ3/4クラスマップで特定したトラフィック(class-mapまたはclass-map type managementコマンド)にアクションを割り当てるために、グローバルコンフィギュレーションモードでpolicy-mapコマンド(typeキーワードなし)を使用します。 次の例では、ポリシー マップは tcp_bypass_policy です。
ASA(config-cmap)#policy-map tcp_bypass_policy
- クラスマップトラフィックにアクションを割り当てることができるように、作成したクラスマップ(tcp_bypass)をポリシーマップ(tcp_bypass_policy)に割り当てるには、policy-map configurationモードでclassコマンドを入力します。次の例では、クラスマップはtcp_bypassです。
ASA(config-cmap)#policy-map tcp_bypass_policy
ASA(config-pmap)#class tcp_bypass
- クラスコンフィギュレーションモードでset connection advanced-options tcp-state-bypass コマンドを入力して、TCP状態バイパス機能をイネーブルにします。このコマンドはバージョン 8.2(1) から導入されました。 クラスコンフィギュレーションモードには、次の例に示すようにpolicy-mapコンフィギュレーションモードからアクセスできます。
ASA(config-cmap)#policy-map tcp_bypass_policy
ASA(config-pmap)#class tcp_bypass
ASA(config-pmap-c)#set connection advanced-options tcp-state-bypass
- service-policy policymap_name [ global | interface intf ] コマンドをグローバルコンフィギュレーションモードで入力して、ポリシーマップをすべてのインターフェイスでグローバルに、または対象のインターフェイスでアクティブ化します。サービス ポリシーをディセーブルにするには、このコマンドの no 形式を使用します。一連のポリシーをインターフェイスに対してイネーブルにするには、service-policyコマンドを入力します。globalキーワードはポリシーマップをすべてのインターフェイスに適用し、interfaceキーワードはポリシーマップを1つのインターフェイスにのみ適用します。許可されるグローバル ポリシーは 1 つだけです。インターフェイスでグローバル ポリシーを上書きするには、サービス ポリシーをインターフェイスに適用します。各インターフェイスに適用できるポリシー マップは 1 つだけです。ランダム データの例は次のとおりです。
ASA(config-pmap-c)#service-policy tcp_bypass_policy outside
ASA1のTCP状態バイパス機能の設定例を次に示します。
!--- Configure the access list to specify the TCP traffic
!--- that needs to by-pass inspection to improve the performance.
ASA1(config)#access-list tcp_bypass extended permit tcp 10.1.1.0 255.255.255.0
172.16.1.0 255.255.255.0
!--- Configure the class map and specify the match parameter for the
!--- class map to match the interesting traffic.
ASA1(config)#class-map tcp_bypass
ASA1(config-cmap)#description "TCP traffic that bypasses stateful firewall"
ASA1(config-cmap)#match access-list tcp_bypass
!--- Configure the policy map and specify the class map
!--- inside this policy map for the class map.
ASA1(config-cmap)#policy-map tcp_bypass_policy
ASA1(config-pmap)#class tcp_bypass
!--- Use the set connection advanced-options tcp-state-bypass
!--- command in order to enable TCP state bypass feature.
ASA1(config-pmap-c)#set connection advanced-options tcp-state-bypass
!--- Use the service-policy policymap_name [ global | interface intf ]
!--- command in global configuration mode in order to activate a policy map
!--- globally on all interfaces or on a targeted interface.
ASA1(config-pmap-c)#service-policy tcp_bypass_policy outside
!--- NAT configuration
ASA1(config)#object network obj-10.1.1.0
ASA1(config-network-object)#subnet 10.1.1.0 255.255.255.0
ASA1(config-network-object)#nat(inside,outside) static 192.168.1.0
ASA2のTCP状態バイパス機能の設定例を次に示します。
!--- Configure the access list to specify the TCP traffic
!--- that needs to by-pass inspection to improve the performance.
ASA2(config)#access-list tcp_bypass extended permit tcp 172.16.1.0 255.255.255.0
10.1.1.0 255.255.255.0
!--- Configure the class map and specify the match parameter for the
!--- class map to match the interesting traffic.
ASA2(config)#class-map tcp_bypass
ASA2(config-cmap)#description "TCP traffic that bypasses stateful firewall"
ASA2(config-cmap)#match access-list tcp_bypass
!--- Configure the policy map and specify the class map
!--- inside this policy map for the class map.
ASA2(config-cmap)#policy-map tcp_bypass_policy
ASA2(config-pmap)#class tcp_bypass
!--- Use the set connection advanced-options tcp-state-bypass
!--- command in order to enable TCP state bypass feature.
ASA2(config-pmap-c)#set connection advanced-options tcp-state-bypass
!--- Use the service-policy policymap_name [ global | interface intf ]
!--- command in global configuration mode in order to activate a policy map
!--- globally on all interfaces or on a targeted interface.
ASA2(config-pmap-c)#service-policy tcp_bypass_policy outside
!--- NAT configuration
ASA2(config)#object network obj-10.1.1.0
ASA2(config-network-object)#subnet 10.1.1.0 255.255.255.0
ASA1(config-network-object)#nat(inside,outside) static 192.168.1.0
シナリオ 2
このセクションでは、非対称ルーティングを使用するシナリオのASAでTCP状態バイパス機能を設定する方法について説明します。非対称ルーティングでは、トラフィックがASAに対して同じインターフェイスから発着信します(uターン)。
このシナリオで使用されるトポロジを次に示します。
TCP状態バイパス機能を設定するには、次の手順を実行します。
- TCPインスペクションをバイパスする必要があるトラフィックを照合するには、アクセスリストを作成します。
ASA(config)#access-list tcp_bypass extended permit tcp 192.168.2.0 255.255.255.0
192.168.1.0 255.255.255.0
- class-map class_map_nameコマンドを入力して、クラスマップを作成します。クラスマップは、ステートフルファイアウォールインスペクションを無効にするトラフィックを特定するために使用されます。
注:この例で使用するクラスマップはtcp_bypassです。
ASA(config)#class-map tcp_bypass
- match parameterコマンドを入力して、クラスマップで対象のトラフィックを指定します。モジュラポリシーフレームワークを使用する場合、class-mapコンフィギュレーションモードでmatch access-listコマンドを使用して、アクションを適用するトラフィックの識別用のアクセスリストを使用します。次にこの設定の例を示します。
ASA(config)#class-map tcp_bypass
ASA(config-cmap)#match access-list tcp_bypass
注:tcp_bypassは、この例で使用するアクセスリストの名前です。対象のトラフィックの指定方法についての詳細は、『トラフィックの識別(レイヤ3/4クラスマップ)』を参照してください。
- policy-map nameコマンドを入力して、ポリシーマップの追加や、指定したクラスマップトラフィックに対して実行されるアクションを設定する(すでに存在する)ポリシーマップの編集を行います。モジュラポリシーフレームワークを使用する場合、レイヤ3/4クラスマップで特定したトラフィック(class-mapまたはclass-map type managementコマンド)にアクションを割り当てるために、グローバルコンフィギュレーションモードでpolicy-mapコマンド(typeキーワードなし)を使用します。 次の例では、ポリシー マップは tcp_bypass_policy です。
ASA(config-cmap)#policy-map tcp_bypass_policy
- クラスマップトラフィックにアクションを割り当てることができるように、作成したクラスマップ(tcp_bypass)をポリシーマップ(tcp_bypass_policy)に割り当てるには、policy-mapコンフィギュレーションモードでclassコマンドを入力します。次の例では、クラスマップはtcp_bypassです。
ASA(config-cmap)#policy-map tcp_bypass_policy
ASA(config-pmap)#class tcp_bypass
- クラスコンフィギュレーションモードでset connection advanced-options tcp-state-bypass コマンドを入力して、TCP状態バイパス機能をイネーブルにします。このコマンドはバージョン 8.2(1) から導入されました。 クラスコンフィギュレーションモードには、次の例に示すようにpolicy-mapコンフィギュレーションモードからアクセスできます。
ASA(config-cmap)#policy-map tcp_bypass_policy
ASA(config-pmap)#class tcp_bypass
ASA(config-pmap-c)#set connection advanced-options tcp-state-bypass
- ポリシーマップをすべてのインターフェイスでグローバルにアクティブ化するか、または対象のインターフェイスでアクティブ化するには、グローバルコンフィギュレーションモードでservice-policy policymap_name [ global | interface intf ]コマンドを入力します。サービス ポリシーをディセーブルにするには、このコマンドの no 形式を使用します。一連のポリシーをインターフェイスに対してイネーブルにするには、service-policyコマンドを入力します。globalキーワードはポリシーマップをすべてのインターフェイスに適用し、interfaceキーワードはポリシーを1つのインターフェイスにのみ適用します。許可されるグローバル ポリシーは 1 つだけです。インターフェイスでグローバル ポリシーを上書きするには、サービス ポリシーをインターフェイスに適用します。各インターフェイスに適用できるポリシー マップは 1 つだけです。ランダム データの例は次のとおりです。
ASA(config-pmap-c)#service-policy tcp_bypass_policy inside
- ASA上のトラフィックに対して同じセキュリティレベルを許可します。
ASA(config)#same-security-traffic permit intra-interface
ASAのTCP状態バイパス機能の設定例を次に示します。
!--- Configure the access list to specify the TCP traffic
!--- that needs to bypass inspection to improve the performance.
ASA(config)#access-list tcp_bypass extended permit tcp 192.168.2.0 255.255.255.0
192.168.1.0 255.255.255.0
!--- Configure the class map and specify the match parameter for the
!--- class map to match the interesting traffic.
ASA(config)#class-map tcp_bypass
ASA(config-cmap)#description "TCP traffic that bypasses stateful firewall"
ASA(config-cmap)#match access-list tcp_bypass
!--- Configure the policy map and specify the class map
!--- inside this policy map for the class map.
ASA(config-cmap)#policy-map tcp_bypass_policy
ASA(config-pmap)#class tcp_bypass
!--- Use the set connection advanced-options tcp-state-bypass
!--- command in order to enable TCP state bypass feature.
ASA(config-pmap-c)#set connection advanced-options tcp-state-bypass
!--- Use the service-policy policymap_name [ global | interface intf ]
!--- command in global configuration mode in order to activate a policy map
!--- globally on all interfaces or on a targeted interface.
ASA(config-pmap-c)#service-policy tcp_bypass_policy inside
!--- Permit same security level traffic on the ASA to support U-turning
ASA(config)#same-security-traffic permit intra-interface
確認
config コマンドを入力します show conn コマンドを発行して、アクティブなTCPとUDPの接続数とさまざまなタイプの接続に関する情報を表示します。指定された接続タイプの接続状態を表示するには、 show conn コマンドを特権EXECモードで使用します。
注:このコマンドはIPv4アドレスとIPv6アドレスをサポートします。TCP状態バイパス機能を使用する接続に関して表示される出力には、フラグbが含まれています。
次に出力例を示します。
ASA(config)show conn
1 in use, 3 most used
TCP tcp 10.1.1.1:49525 tcp 172.16.1.1:21, idle 0:01:10, bytes 230, flags b
トラブルシュート
この機能に関する特定のトラブルシューティング情報はありません。一般的な接続のトラブルシューティング情報については、次のドキュメントを参照してください。
注:TCP状態バイパスの接続は、フェールオーバーペアのスタンバイユニットには複製されません。
エラー メッセージ
TCP状態バイパス機能を有効にした後でも、ASAに次のエラーメッセージが表示されます。
%PIX|ASA-4-313004:Denied ICMP type=icmp_type, from source_address oninterface
interface_name to dest_address:no matching session
ステートフルICMP機能によって追加されたセキュリティチェックが原因で、ASAによってインターネット制御メッセージプロトコル(ICMP)パケットがドロップされます。通常、これらは、有効なエコー要求がASA経由ですでに渡されていないICMP エコー応答か、またはASAで現在確立されているTCP、UDP、またはICMPセッションとは関係のないICMPエラーメッセージです。
TCP状態バイパス機能が有効になっている場合でもこのログが表示されるのは、この機能を無効化(つまり、接続テーブルでタイプ3のICMP リターンエントリをチェック)できないためです。ただし、TCP状態バイパス機能は正常に動作します。
これらのメッセージが表示されないようにするには、次のコマンドを入力します。
hostname(config)#no logging message 313004
関連情報