Cisco ASA 5500 シリーズ コンフィギュレーション ガイド(CLI8.2 を使用)
TCP 正規化の 設定
TCP 正規化の設定
発行日;2012/02/01 | 英語版ドキュメント(2011/09/19 版) | ドキュメントご利用ガイド | ダウンロード ; この章pdf , ドキュメント全体pdf (PDF - 21MB) | フィードバック

目次

TCP 正規化の設定

TCP 正規化に関する情報

TCP ノーマライザのカスタマイズ

TCP 正規化の設定例

TCP 正規化の設定

TCP 正規化機能は、検出時に適応型セキュリティ アプライアンスが対処できる異常なパケットを識別します。適応型セキュリティ アプライアンスは、パケットを許可、ドロップ、またはクリアできます。TCP 正規化は、攻撃から適応型セキュリティ アプライアンスを保護するのに役立ちます。TCP 正規化は常にイネーブルになっていますが、機能の一部の動作をカスタマイズできます。

この章には、次の項があります。

「TCP 正規化に関する情報」

「TCP ノーマライザのカスタマイズ」

「TCP 正規化の設定例」

TCP 正規化に関する情報

TCP 正規化には、設定できないアクションと設定できるアクションが含まれます。通常、接続をドロップまたはクリアする設定できないアクションは、どのような場合でも不良なパケットに適用されます。設定できるアクション(「TCP ノーマライザのカスタマイズ」を参照)は、ネットワークのニーズに応じたカスタマイズが必要な場合があります。

TCP 正規化に関する次のガイドラインを参考にしてください。

ノーマライザは、SYN フラッドからの保護は行いません。適応型セキュリティ アプライアンスには、他の方法による SYN フラッド保護機能が組み込まれています。

ノーマライザは、適応型セキュリティ アプライアンスがフェールオーバーのためにルーズ モードになっていない限り、SYN パケットを最初のパケットと見なします。

TCP ノーマライザのカスタマイズ

この機能はモジュラ ポリシー フレームワークを使用するため、TCP 正規化のカスタマイズは、トラフィックの特定、TCP 正規化アクションの指定、およびインターフェイスでの TCP 正規化のカスタマイズのアクティブ化で構成されます。詳細については、「モジュラ ポリシー フレームワークの使用」を参照してください。

TCP 正規化をカスタマイズするには、次の手順を実行します。


ステップ 1 検索する TCP 正規化基準を指定するには、次のコマンドを入力して TCP マップを作成します。

hostname(config)# tcp-map tcp-map-name
 

TCP マップごとに 1 つまたは複数の設定値をカスタマイズできます。

ステップ 2 (オプション)次の 1 つ以上のコマンド( 表 52-1 を参照)を入力して TCP マップ基準を設定します。一部の設定をカスタマイズする場合、入力しないコマンドにはデフォルトが使用されます。デフォルト コンフィギュレーションには、次の設定が含まれます。

no check-retransmission
no checksum-verification
exceed-mss allow
queue-limit 0 timeout 4
reserved-bits allow
syn-data allow
synack-data drop
invalid-ack drop
seq-past-window drop
tcp-options range 6 7 clear
tcp-options range 9 255 clear
tcp-options selective-ack allow
tcp-options timestamp allow
tcp-options window-scale allow
ttl-evasion-protection
urgent-flag clear
window-variation allow-connection
 

 

表 52-1 tcp-map コマンド

コマンド

check-retransmission

一貫性のない TCP 再送信を防止します。

checksum-verification

チェックサムを確認します。

exceed-mss { allow | drop }

データ長が TCP 最大セグメント サイズを超えるパケットに対するアクションを設定します。

(デフォルト) allow キーワードは、データ長が TCP 最大セグメント サイズを超えるパケットを許可します。

drop キーワードは、データ長が TCP 最大セグメント サイズを超えるパケットをドロップします。

invalid-ack { allow | drop }

無効な ACK を含むパケットに対するアクションを設定します。次のような場合に無効な ACK が検出される可能性があります。

TCP 接続が SYN-ACK-received ステータスでは、受信した TCP パケットの ACK 番号が次の TCP パケット送信のシーケンス番号と同じでない場合、その ACK は無効です。

受信した TCP パケットの ACK 番号が次の TCP パケット送信のシーケンス番号より大きい場合は常に、その ACK は無効です。

allow キーワードは、無効な ACK を含むパケットを許可します。

(デフォルト) drop キーワードは、無効な ACK を含むパケットをドロップします。

(注) 無効な ACK を含む TCP パケットは、WAAS 接続で自動的に許可されます。

queue-limit pkt_num [ timeout seconds ]

バッファに格納して TCP 接続の正しい順序に設定できる、異常なパケットの最大数を設定します。1 ~ 250 パケットです。デフォルト値の 0 は、この設定がディセーブルであり、トラフィックのタイプに応じたデフォルトのシステム キュー制限が使用されることを意味します。

アプリケーション検査( inspect コマンド)、IPS( ips コマンド)、および TCP 検査再送信(TCP マップ check-retransmission コマンド)のための接続のキュー制限は、3 パケットです。適応型セキュリティ アプライアンスが異なるウィンドウ サイズの TCP パケットを受信した場合は、アドバタイズされた設定と一致するようにキュー制限がダイナミックに変更されます。

他の TCP 接続の場合は、異常なパケットはそのまま通過します。

queue-limit コマンドを 1 以上に設定した場合、すべての TCP トラフィックに対して許可される異常なパケットの数は、この設定と一致します。アプリケーション検査、IPS、および TCP 検査再送信の各トラフィックの場合、アドバタイズされた設定は無視されます。その他の TCP トラフィックについては、異常なパケットはバッファに格納されて、そのまま通過するのではなく、正しい順序に設定されます。

timeout seconds 引数は、異常なパケットがバッファ内に留まることができる最大時間を設定します。設定できる値は 1 ~ 20 秒です。タイムアウト期間内に正しい順序に設定されて渡されなかったパケットはドロップされます。デフォルトは 4 秒です。 pkt_num 引数を 0 に設定した場合は、どのトラフィックのタイムアウトも変更できません。 timeout キーワードを有効にするには、制限を 1 以上に設定する必要があります。

reserved-bits { allow | clear | drop }

TCP ヘッダーの予約ビットに対するアクションを設定します。

(デフォルト) allow キーワードは、TCP ヘッダーの予約ビットが設定されているパケットを許可します。

clear キーワードは、TCP ヘッダーの予約ビットを消去して、パケットを許可します。

drop キーワードは、TCP ヘッダーの予約ビットが設定されているパケットをドロップします。

seq-past-window { allow | drop }

パストウィンドウ シーケンス番号を含むパケットに対するアクションを設定します。つまり、受信した TCP パケットのシーケンス番号が、TCP 受信ウィンドウの右端より大きい場合です。

allow キーワードは、パストウィンドウ シーケンス番号を含むパケットを許可します。このアクションは、 queue-limit コマンドが 0(ディセーブル)に設定されている場合に限り許可されます。

(デフォルト) drop キーワードは、パストウィンドウ シーケンス番号を含むパケットをドロップします。

synack-data { allow | drop }

データを含む TCP SYNACK パケットに対するアクションを設定します。

allow キーワードは、データを含む TCP SYNACK パケットを許可します。

(デフォルト) drop キーワードは、データを含む TCP SYNACK パケットをドロップします。

syn-data { allow | drop }

データを含む SYN パケットに対するアクションを設定します。

(デフォルト) allow キーワードは、データを含む SYN パケットを許可します。

drop キーワードは、データを含む SYN パケットをドロップします。

tcp-options { selective-ack | timestamp | window-scale } { allow | clear }

または

tcp-options range lower upper { allow | clear | drop }

selective-ack、timestamp、window-scale などの TCP オプションを含むパケットに対するアクションを設定します。

(デフォルト) allow キーワードは、指定したオプションを含むパケットを許可します。

range の場合のデフォルト) clear キーワードは、オプションを消去して、パケットを許可します。

drop キーワードは、指定したオプションを含むパケットをドロップします。

selective-ack キーワードは、SACK オプションに対するアクションを設定します。

timestamp キーワードは、タイムスタンプ オプションに対するアクションを設定します。タイムスタンプ オプションを消去すると、PAWS と RTT がディセーブルになります。

widow-scale キーワードは、ウィンドウ スケール メカニズム オプションに対するアクションを設定します。

range キーワードは、オプションの範囲を指定します。 lower 引数は、範囲の下限を設定します。6、7、または 9 ~ 255 です。

upper 引数は、範囲の上限を設定します。6、7、または 9 ~ 255 です。

ttl-evasion-protection

TTL 回避保護をディセーブルにします。セキュリティ ポリシーを回避しようとする攻撃を防ぐ場合は、このコマンドを入力しないでください。

たとえば、攻撃者は TTL を非常に短くしてポリシーを通過するパケットを送信できます。TTL がゼロになると、適応型セキュリティ アプライアンスとエンドポイントの間のルータはパケットをドロップします。この時点で、攻撃者は TTL を長くした悪意のあるパケットを送信できます。このパケットは、適応型セキュリティ アプライアンスにとって再送信のように見えるため、通過します。一方、エンドポイント ホストにとっては、このパケットが攻撃者によって受信された最初のパケットになります。この場合、攻撃者はセキュリティによる攻撃の防止を受けず、攻撃に成功します。

urgent-flag { allow | clear }

URG フラグを含むパケットに対するアクションを設定します。URG フラグは、ストリーム中の他のデータよりもプライオリティの高い情報がこのパケットに含まれていることを示すために使用します。TCP RFC では、URG フラグの正確な解釈が明確にされていません。そのため、エンド システムは緊急オフセットをさまざまな方法で処理しており、これが攻撃に対する脆弱性になることがあります。

allow キーワードは、URG フラグを含むパケットを許可します。

(デフォルト) clear キーワードは、URG フラグを消去してパケットを許可します。

window-variation { allow | drop }

予想外のウィンドウ サイズの変更が発生した接続に対するアクションを設定します。ウィンドウ サイズ メカニズムによって、TCP は大きなウィンドウをアドバタイズでき、続いて、過剰な量のデータを受け入れずに、はるかに小さなウィンドウをアドバタイズできます。TCP 仕様により、「ウィンドウの縮小」は極力避けることが推奨されています。この条件が検出された場合に、接続をドロップできます。

(デフォルト) allow キーワードは、ウィンドウが変化した接続を許可します。

drop キーワードは、ウィンドウが変化した接続をドロップします。

ステップ 3 トラフィックを特定するには、 class-map コマンドを使用してクラスマップを追加します。詳細については、「通過トラフィック用のレイヤ 3/4 クラスマップの作成」を参照してください。

たとえば、次のコマンドを使用してすべてのトラフィックを照合できます。

hostname(config)# class-map TCPNORM
hostname(config-cmap)# match any
 

特定のトラフィックを照合するため、アクセスリストと照合できます。

hostname(config)# access list TCPNORM extended permit ip any 10.1.1.1 255.255.255.255
hostname(config)# class-map TCP_norm_class
hostname(config-cmap)# match access-list TCPNORM
 

ステップ 4 クラスマップ トラフィックで実行するアクションを設定するポリシーマップを追加または編集するには、次のコマンドを入力します。

hostname(config)# policy-map name
hostname(config-pmap)# class class_map_name
hostname(config-pmap-c)#
 

class_map_nameステップ 3 で指定したクラスマップです。

次に例を示します。

hostname(config)# policy-map TCP_norm_policy
hostname(config-pmap)# class TCP_norm_class
hostname(config-pmap-c)#
 

ステップ 5 次のコマンドを入力して、TCP マップをクラスマップに適用します。

hostname(config-pmap-c)# set connection advanced-options tcp-map-name
 

ステップ 6 1 つ以上のインターフェイスでポリシーマップをアクティブにするには、次のコマンドを入力します。

hostname(config)# service-policy policymap_name {global | interface interface_name}
 

ここで、 global はポリシーマップをすべてのインターフェイスに適用し、 interface は 1 つのインターフェイスに適用します。グローバル ポリシーは 1 つしか適用できません。インターフェイス サービス ポリシーは、特定の機能に対するグローバル サービス ポリシーより優先されます。たとえば、検査のグローバル ポリシーと、TCP 正規化のインターフェイス ポリシーがある場合、検査と TCP 正規化の両方がインターフェイスに適用されます。これに対し、検査のグローバル ポリシーと、検査のインターフェイス ポリシーがある場合は、インターフェイス ポリシーの検査だけがインターフェイスに適用されます。


 

TCP 正規化の設定例

たとえば、既知の FTP データ ポートと Telnet ポートの間の TCP ポート範囲に送信されるすべてのトラフィックで緊急フラグと緊急オフセット パケットを許可するには、次のコマンドを入力します。

hostname(config)# tcp-map tmap
hostname(config-tcp-map)# urgent-flag allow
hostname(config-tcp-map)# class-map urg-class
hostname(config-cmap)# match port tcp range ftp-data telnet
hostname(config-cmap)# policy-map pmap
hostname(config-pmap)# class urg-class
hostname(config-pmap-c)# set connection advanced-options tmap
hostname(config-pmap-c)# service-policy pmap global