HTTP インスペクション ポリシー マップの設定
メッセージがパラメータに違反したときのアクションを指定するには、HTTP インスペクション ポリシー マップを作成します。作成したインスペクション ポリシー マップは、HTTP インスペクションをイネーブルにすると適用できます。
はじめる前に
一部のトラフィック照合オプションでは、照合のために正規表現を使用します。これらのテクニックの 1 つを使用する場合は、最初に正規表現または正規表現のクラス マップを作成します。
手順
ステップ 1
(任意)次の手順に従って、HTTP インスペクションのクラス マップを作成します。
クラス マップは複数のトラフィック照合をグループ化します。代わりに、ポリシー マップで match コマンドを直接指定できます。クラス マップを作成することとインスペクション ポリシー マップでトラフィックとの照合を直接定義することの違いは、クラス マップでは複雑な照合基準を作成でき、クラス マップを再利用できるということです。
クラス マップと照合しないトラフィックを指定するには、 match not コマンドを使用します。たとえば、 match not コマンドで文字列「example.com」を指定すると、「example.com」が含まれるすべてのトラフィックはクラス マップと照合されません。
このクラス マップで指定するトラフィックに対しては、インスペクション ポリシー マップでトラフィックに対して実行するアクションを指定します。
match コマンドごとに異なるアクションを実行する場合、ポリシー マップに直接トラフィックを特定する必要があります。
a. 次のコマンドを入力して、クラス マップを作成します。
hostname(config)# class-map type inspect http [match-all | match-any] class_map_name
class_map_name には、クラス マップの名前を指定します。 match-all キーワードはデフォルトです。トラフィックがクラス マップと一致するには、すべての基準と一致する必要があることを指定します。match-any キーワードは、トラフィックが少なくとも 1 つの match ステートメントと一致したらクラス マップと一致することを指定します。CLI がクラスマップ コンフィギュレーション モードに入り、1 つ以上の match コマンドを入力できます。
b. (任意)クラス マップに説明を追加するには、次のコマンドを使用します。
hostname(config-cmap)# description string
string には、クラス マップの説明を 200 文字以内で指定します。
c. 次のいずれかの match コマンドを使用して、アクションを実行するトラフィックを指定します。 match not コマンドを使用すると、 match not コマンドの基準に一致しないすべてのトラフィックにアクションが適用されます。
• match [ not ] req-resp content-type mismatch :HTTP 応答の content-type フィールドが対応する HTTP 要求メッセージの accept フィールドと一致しないトラフィックを照合します。
• match [ not ] request args regex { regex_name | class class_name }:HTTP 要求メッセージの引数で見つかったテキストを、指定した正規表現または正規表現クラスと照合します。
• match [ not ] request body { regex { regex_name | class class_name } | length gt bytes }:HTTP 要求メッセージの本文で見つかったテキストを、指定した正規表現または正規表現クラスと照合します。または、要求の本文が指定した長さより長いメッセージを照合します。
• match [ not ] request header { field | regex regex_name } regex { regex_name | class class_name }:HTTP 要求メッセージ ヘッダーのフィールドの内容を、指定した正規表現または正規表現クラスと照合します。フィールド名を明示的に指定することも、フィールド名を正規表現と一致させることもできます。フィールド名は次のとおりです。accept、accept-charset、accept-encoding、accept-language、allow、authorization、cache-control、connection、content-encoding、content-language、content-length、content-location、content-md5、content-range、content-type、cookie、date、expect、expires、from、host、if-match、if-modified-since、if-none-match、if-range、if-unmodified-since、last-modified、max-forwards、pragma、proxy-authorization、range、referer、te、trailer、transfer-encoding、upgrade、user-agent、via、warning。
• match [ not ] request header { field | regex { regex_name | class class_name }} { length gt bytes | count gt number }:HTTP 要求メッセージ ヘッダーの指定したフィールドの長さ、またはヘッダーのフィールドの総数を照合します。フィールド名を明示的に指定することも、フィールド名を正規表現または正規表現クラスと一致させることもできます。フィールド名は、前の項目の一覧と同じです。
• match [ not ] request header { length gt bytes | count gt number | non-ascii }:HTTP 要求メッセージ ヘッダーの全体の長さ、ヘッダーのフィールドの総数、または ASCII 以外の文字を含むヘッダーを照合します。
• match [ not ] request method { method | regex { regex_name | class class_name }}:HTTP 要求のメソッドを照合します。メソッドを明示的に指定することも、メソッドを正規表現または正規表現クラスと一致させることもできます。メソッドは次のとおりです。bcopy、bdelete、bmove、bpropfind、bproppatch、connect、copy、delete、edit、get、getattribute、getattributenames、getproperties、head、index、lock、mkcol、mkdir、move、notify、options、poll、post、propfind、proppatch、put、revadd、revlabel、revlog、revnum、save、search、setattribute、startrev、stoprev、subscribe、trace、unedit、unlock、unsubscribe。
• match [ not ] request uri { regex { regex_name | class class_name } | length gt bytes }:HTTP 要求メッセージの URI で見つかったテキストを、指定した正規表現または正規表現クラスと照合します。または、要求の URI が指定した長さより長いメッセージを照合します。
• match [ not ] response body { active-x | java-applet | regex { regex_name | class class_name }}:HTTP 応答メッセージの本文で見つかったテキストを、指定した正規表現または正規表現クラスと照合します。または、Java アプレットおよび Active X オブジェクトをフィルタ処理のためにコメント化します。
• match [ not ] response body length gt bytes :本文が指定した長さより大きい HTTP 応答メッセージを照合します。
• match [ not ] response header { field | regex regex_name } regex { regex_name | class class_name }:HTTP 応答メッセージ ヘッダーのフィールドの内容を、指定した正規表現または正規表現クラスと照合します。フィールド名を明示的に指定することも、フィールド名を正規表現と一致させることもできます。フィールド名は次のとおりです。accept-ranges、age、allow、cache-control、connection、content-encoding、content-language、content-length、content-location、content-md5、content-range、content-type、date、etag、expires、last-modified、location、pragma、proxy-authenticate、retry-after、server、set-cookie、trailer、transfer-encoding、upgrade、vary、via、warning、www-authenticate。
• match [ not ] response header { field | regex { regex_name | class class_name }} { length gt bytes | count gt number }:HTTP 応答メッセージ ヘッダーの指定したフィールドの長さ、またはヘッダーのフィールドの総数を照合します。フィールド名を明示的に指定することも、フィールド名を正規表現または正規表現クラスと一致させることもできます。フィールド名は、前の項目の一覧と同じです。
• match [ not ] response header { length gt bytes | count gt number | non-ascii }:HTTP 応答メッセージ ヘッダーの全体の長さ、ヘッダーのフィールドの総数、または ASCII 以外の文字を含むヘッダーを照合します。
• match [ not ] response status-line regex { regex_name | class class_name }:HTTP 応答メッセージのステータス行で見つかったテキストを、指定した正規表現または正規表現クラスと照合します。
d. クラス マップ コンフィギュレーション モードを終了するには、「 exit 」と入力します。
ステップ 2 HTTP インスペクション ポリシー マップを作成します。
hostname(config)# policy-map type inspect http policy_map_name
policy_map_name には、ポリシー マップの名前を指定します。CLI はポリシー マップ コンフィギュレーション モードに入ります。
ステップ 3 (任意)このポリシー マップに説明を追加するには、次のコマンドを使用します。
hostname(config-pmap)# description string
ステップ 4 一致したトラフィックにアクションを適用するには、次の手順を実行します。
a. 次のいずれかの方法を使用して、アクションを実行するトラフィックを指定します。
• HTTP クラス マップを作成した場合は、次のコマンドを入力してそれを指定します。
hostname(config-pmap)# class class_map_name
• HTTP クラス マップで説明されている match コマンドのいずれかを使用して、ポリシー マップに直接トラフィックを指定します。 match not コマンドを使用すると、 match not コマンドの基準に一致しないすべてのトラフィックにアクションが適用されます。
b. 次のコマンドを入力して、一致したトラフィックに対して実行するアクションを指定します。
hostname(config-pmap-c)# {drop-connection [log]| reset [log] | log}
drop-connection キーワードを指定すると、パケットをドロップし、接続を閉じます。
reset キーワードを指定すると、パケットをドロップして接続を閉じ、サーバまたはクライアントに TCP リセットを送信します。
log キーワードを指定すると、システム ログ メッセージを送信します。このキーワードは単独で、または他のキーワードのいずれかと一緒に使用できます。
ポリシー マップには、複数の class コマンドまたは match コマンドを指定できます。 class コマンドと match コマンドの順序については、「インスペクション ポリシー マップのアクションの定義」を参照してください。
ステップ 5 インスペクション エンジンに影響のあるパラメータを設定するには、次の手順を実行します。
a. パラメータ コンフィギュレーション モードに入るには、次のコマンドを入力します。
hostname(config-pmap)# parameters
b. 1 つまたは複数のパラメータを設定します。次のオプションを設定できます。オプションをディセーブルにするには、コマンドの no 形式を使用してください。
• body-match-maximum number :HTTP メッセージの本文照合時に検索する本文の最大文字数を設定します。デフォルトは 200 バイトです。大きな値を指定すると、パフォーマンスに大きな影響を与えます。
• protocol-violation action { drop-connection [ log ] | reset [ log ] | log }:HTTP メッセージの本文照合時に検索する本文の最大文字数を設定します。デフォルトは 200 バイトです。大きな値を指定すると、パフォーマンスに大きな影響を与えます。HTTP プロトコル違反を検査します。違反に対して実行するアクション(切断、リセット、ログ記録)、およびロギングをイネーブルまたはディセーブルにするかどうかも選択する必要があります。
• spoof-server string :サーバ ヘッダー フィールドの文字列を置き換えます。WebVPN ストリームは spoof-server コマンドの対象ではありません。
例
次に、「GET」メソッドまたは「PUT」メソッドで「www\.xyz.com/.*\.asp」または「www\.xyz[0-9][0-9]\.com」にアクセスしようとしている HTTP 接続を許可し、ロギングする HTTP インスペクション ポリシー マップを定義する例を示します。それ以外の URL/メソッドの組み合わせは、サイレントに許可されます。
hostname(config)# regex url1 “www\.xyz.com/.*\.asp”
hostname(config)# regex url2 “www\.xyz[0-9][0-9]\.com”
hostname(config)# regex get “GET”
hostname(config)# regex put “PUT”
hostname(config)# class-map type regex match-any url_to_log
hostname(config-cmap)# match regex url1
hostname(config-cmap)# match regex url2
hostname(config-cmap)# exit
hostname(config)# class-map type regex match-any methods_to_log
hostname(config-cmap)# match regex get
hostname(config-cmap)# match regex put
hostname(config-cmap)# exit
hostname(config)# class-map type inspect http http_url_policy
hostname(config-cmap)# match request uri regex class url_to_log
hostname(config-cmap)# match request method regex class methods_to_log
hostname(config-cmap)# exit
hostname(config)# policy-map type inspect http http_policy
hostname(config-pmap)# class http_url_policy
hostname(config-pmap-c)# log
HTTP インスペクション サービス ポリシーの設定
HTTP インスペクションはデフォルトのインスペクション ポリシーではイネーブルにされないため、このインスペクションが必要な場合はイネーブルにする必要があります。ただし、デフォルトの inspect クラスにはデフォルトの HTTP ポートが含まれているので、デフォルトのグローバル インスペクション ポリシーを編集するだけで HTTP インスペクションを追加できます。または、たとえばインターフェイス固有のポリシーなど、必要に応じて新しいサービス ポリシーを作成することもできます。
手順
ステップ 1 必要な場合は、L3/L4 クラス マップを作成して、インスペクションを適用するトラフィックを識別します。
例:
hostname(config)# class-map http_class_map
hostname(config-cmap)# match access-list http
デフォルト グローバル ポリシーの inspection_default クラス マップは、すべてのインスペクション タイプのデフォルト ポートを含む特別なクラス マップです( match default-inspection-traffic )。このマップをデフォルト ポリシーまたは新しいサービス ポリシーで使用する場合は、このステップを省略できます。
照合ステートメントについては、「トラフィックの特定(レイヤ 3/4 クラス マップ)」を参照してください。
ステップ 2 クラス マップ トラフィックで実行するアクションを設定するポリシー マップを追加または編集します。
例:
hostname(config)# policy-map global_policy
デフォルト設定では、global_policy ポリシー マップはすべてのインターフェイスにグローバルに割り当てられます。global_policy を編集する場合は、ポリシー名として global_policy を入力します。
ステップ 3 HTTP インスペクションに使用する L3/L4 クラス マップを指定します。
例:
hostname(config-pmap)# class inspection_default
デフォルト ポリシーを編集する場合、または新しいポリシーで特別な inspection_default クラス マップを使用する場合は、 name として inspection_default を指定します。それ以外の場合は、この手順ですでに作成したクラスを指定します。
ステップ 4 HTTP インスペクションを設定します。
inspect http [http_policy_map]
http_policy_map は、オプションの HTTP インスペクション ポリシー マップです。デフォルト以外のインスペクション処理が必要な場合にのみマップが必要です。HTTP インスペクション ポリシー マップの作成の詳細については、「HTTP インスペクション ポリシー マップの設定」を参照してください。
例:
hostname(config-class)# no inspect http
hostname(config-class)# inspect http http-map
(注) デフォルトのグローバル ポリシー(または使用中の任意のポリシー)を編集して、異なる HTTP インスペクション ポリシー マップを使用する場合は、no inspect http コマンドで HTTP インスペクションを除去した後、新しい HTTP インスペクション ポリシー マップ名を指定して再度追加します。
ステップ 5 既存のサービス ポリシー(たとえば、global_policy という名前のデフォルト グローバル ポリシー)を編集している場合は、以上で終了です。それ以外の場合は、1 つまたは複数のインターフェイスでポリシー マップをアクティブにします。
service-policy policymap_name {global | interface interface_name}
例:
hostname(config)# service-policy global_policy global
global キーワードはポリシー マップをすべてのインターフェイスに適用し、 interface は 1 つのインターフェイスに適用します。グローバル ポリシーは 1 つしか適用できません。インターフェイスのグローバル ポリシーは、そのインターフェイスにサービス ポリシーを適用することで上書きできます。各インターフェイスには、ポリシー マップを 1 つだけ適用できます。