このドキュメントでは、サーバ名によって特定の FTP サイトをブロックまたは許可するために Modular Policy Framework(MPF)で正規表現を使用する Cisco セキュリティ アプライアンス ASA/PIX 8.x を設定する方法について説明します。
このドキュメントでは、Ciscoセキュリティアプライアンスが設定され、適切に動作していることを前提としています。
このドキュメントの情報は、次のソフトウェアとハードウェアのバージョンに基づいています。
ソフトウェア バージョン 8.0(x) 以降が稼働する Cisco 5500 シリーズ適応型セキュリティ アプライアンス(ASA)
ASA 8.x 用の Cisco Adaptive Security Device Manager(ASDM)バージョン 6.x
このドキュメントの情報は、特定のラボ環境にあるデバイスに基づいて作成されました。このドキュメントで使用するすべてのデバイスは、クリアな(デフォルト)設定で作業を開始しています。対象のネットワークが実稼働中である場合には、どのようなコマンドについても、その潜在的な影響について確実に理解しておく必要があります。
ドキュメント表記の詳細については、『シスコ テクニカル ティップスの表記法』を参照してください。
MPF を使用すると、一貫した柔軟な方法でセキュリティ アプライアンスの機能を設定できるようになります。たとえば、MPF を使用してタイムアウトを設定すると、すべての TCP アプリケーションにではなく、特定の TCP アプリケーションに固有に適用できます。
MPF は次の機能をサポートします。
TCP 正規化、TCP 接続と UDP 接続の制限およびタイムアウト、TCP シーケンス番号のランダム化
CSC
アプリケーション検査
IPS
QoS 入力ポリシング
QoS 出力ポリシング
QoS プライオリティ キュー
MPF の設定は、次の 4 つの作業で構成されます。
アクションを適用するレイヤ3およびレイヤ4トラフィックを特定します。詳細は、『レイヤ 3/4 クラス マップによるトラフィックの特定』を参照してください。
(アプリケーション検査のみ)。 アプリケーション検査トラフィックに対する特別なアクションを定義します。詳細は、『アプリケーション検査のための特別なアクションの設定』を参照してください。
レイヤ3およびレイヤ4トラフィックにアクションを適用します。詳細は、『レイヤ 3/4 ポリシー マップによるアクションの定義』を参照してください。
インターフェイスでアクションをアクティブにします。詳細については、『サービス ポリシーによるインターフェイスへのレイヤ 3/4 ポリシーの適用』を参照してください。
正規表現は、テキスト文字列を正確な文字列として、またはメタ文字を使用してテキスト文字列と一致させるため、テキスト文字列の複数のバリアントと一致させることができます。正規表現を使用して、特定のアプリケーショントラフィックの内容を照合できます。たとえば、HTTP パケット内の URL ストリングを照合できます。
注:疑問符(?)やタブなど、CLIですべての特殊文字をエスケープするには、Ctrl+Vを使用します。たとえば、d[Ctrl+V]gと入力して、設定にd?gと入力します。
正規表現を作成するには、regexコマンドを使用します。また、regexコマンドは、テキストの照合を必要とするさまざまな機能に使用できます。たとえば、インスペクションポリシーマップを使用するMPFを使用して、アプリケーションインスペクションに特別なアクションを設定できます。詳細については、policy-map type inspect コマンドを参照してください。
インスペクションポリシーマップでは、1つ以上のmatchコマンドを含むインスペクションクラスマップを作成する場合、アクションの実行対象となるトラフィックを識別できます。または、matchコマンドをインスペクションポリシーマップ内で直接使用することもできます。一部のmatchコマンドでは、正規表現を使用してパケット内のテキストを識別できます。たとえば、HTTP パケット内の URL ストリングを照合できます。正規表現クラス マップで正規表現をグループ化できます。詳細については、class-map type regex コマンドを参照してください。
次の表に、特殊な意味を持つメタ文字を示します。
文字 | 説明 | 注意事項 |
. | ドット | 任意の単一の文字と照合されます。たとえば、d.g は dog、dag、dtg、doggonnit など、これらの文字が含まれているすべての単語と一致します。 |
(exp) | サブ表現 | サブ表現は、文字を周囲の文字から分離して、サブ表現に他のメタ文字を使用できるようにします。たとえば、d(o|a)gはdogおよびdagに一致しますが、do|agはdoおよびagに一致します。また、サブ表現を繰り返し限定作用素とともに使用して、繰り返す文字を区別できます。たとえば、ab(xy){3}z は、abxyxyxyz に一致します。 |
| | 代替 | このメタ文字によって区切られている複数の表現のいずれかと一致します。たとえば、dog|catはdogまたはcatに一致します。 |
? | 疑問符 | 直前の表現が 0 または 1 個存在することを示す修飾子。たとえば、lo?seはlseまたはloseに一致します。 注:Ctrl+Vを入力してから疑問符を入力しないと、ヘルプ機能が呼び出されます。 |
* | アスタリスク | 直前の式に0、1、または任意の数があることを示す修飾子。たとえば、lo*se は、lse、lose、loose などに一致します。 |
{x} | 繰り返し限定作用素 | 厳密に x 回繰り返します。たとえば、ab(xy){3}z は、abxyxyxyz に一致します。 |
{x,} | 最小繰り返し限定作用素 | 少なくとも x 回繰り返します。たとえば、ab(xy){2,}z は、abxyxyz や abxyxyxyz などに一致します。 |
[abc] | 文字クラス | カッコ内の任意の文字と一致します。たとえば、[abc] は a、b、または c と一致します。 |
[^abc] | 否定文字クラス | 角カッコに含まれていない単一文字と一致します。たとえば、[^abc]はa、b、c以外の文字と一致します。[^A-Z]は、大文字でない任意の1文字と一致します。 |
[a-c] | 文字範囲クラス | 範囲内の任意の文字と一致します。[a-z] は、任意の小文字と一致します。文字と範囲を組み合わせることができます。[abcq-z]は、a、b、c、q、r、s、t、u、v、w、x、y、zに一致し、[a-cq-z]にも一致します。ダッシュ(-)文字は、角カッコ内の最後または最初の文字[abc-]または[-abc]である場合にのみリテラルになります。 |
"" | 引用符 | 文字列の末尾または先頭のスペースを保持します。たとえば、" test" は、一致を検索する場合に先頭のスペースを保持します。 |
^ | キャレット | 行の先頭を指定します。 |
\ | エスケープ文字 | メタ文字とともに使用すると、リテラル文字と一致します。たとえば、\[ は左の角カッコと一致します。 |
char | 文字 | 文字がメタ文字でない場合は、リテラル文字と一致します。 |
\r | 復帰 | キャリッジリターン0x0dに一致します。 |
\n | 改行 | 新しい行0x0aに一致します。 |
\t | Tab | タブ0x09に一致します。 |
\f | 改ページ | フォームフィード0x0cに一致します。 |
\xNN | エスケープされた 16 進数 | 正確に2桁の16進数を使用するASCII文字と一致します。 |
\NNN | エスケープされた 8 進数 | 厳密に 3 桁の 8 進数としての ASCII 文字と一致します。たとえば、文字 040 はスペースを表します。 |
このセクションでは、このドキュメントで説明する機能を設定するために必要な情報を提供しています。
注:このセクションで使用されているコマンドの詳細を調べるには、Command Lookup Tool(登録ユーザ専用)を参照してください。一部ツールについては、ゲスト登録のお客様にはアクセスできない場合がありますことをご了承ください。
このドキュメントでは、次のネットワーク セットアップを使用します。
注:選択したFTPサイトは、正規表現を使用して許可またはブロックされます。
このドキュメントでは、次のコンフィギュレーションを使用します。
ASA CLI の設定 |
---|
ciscoasa#show run
: Saved
:
ASA Version 8.0(4)
!
hostname ciscoasa
domain-name cisco.com
enable password 8Ry2YjIyt7RRXU24 encrypted
passwd 2KFQnbNIdI.2KYOU encrypted
names
!
interface GigabitEthernet0/0
nameif outside
security-level 0
ip address 10.66.79.86 255.255.255.224
!
interface GigabitEthernet0/1
nameif inside
security-level 100
ip address 10.238.26.129 255.255.255.248
!
interface Management0/0
shutdown
no nameif
no security-level
no ip address
!
!--- Write regular expression (regex) to match the FTP site you want !--- to access. NOTE: The regular expression written below must match !--- the response 220 received from the server. This can be different !--- than the URL entered into the browser. For example, !--- FTP Response: 220 g1u0103c.austin.hp.com
regex FTP_SITE1 "([0-9A-Za-z])*[Hh][Pp]\.[Cc][Oo][Mm]"
regex FTP_SITE2 "([0-9A-Za-z])* CISCO SYSTEMS ([0-9A-Za-z])*"
!--- NOTE: The regular expression will be checked against every line !--- in the Response 220 statement (which means if the FTP server !--- responds with multiple lines, the connection will be denied if !--- there is no match on any one line).
boot system disk0:/asa804-k8.bin
ftp mode passive
pager lines 24
logging enable
logging timestamp
logging buffered debugging
mtu outside 1500
mtu inside 1500
no failover
icmp unreachable rate-limit 1 burst-size 1
asdm image disk0:/asdm-61557.bin
no asdm history enable
arp timeout 14400
global (outside) 1 interface
nat (inside) 1 0.0.0.0 0.0.0.0
route outside 0.0.0.0 0.0.0.0 10.66.79.65 1
timeout xlate 3:00:00
timeout conn 1:00:00 half-closed 0:10:00 udp 0:02:00 icmp 0:00:02
timeout sunrpc 0:10:00 h323 0:05:00 h225 1:00:00 mgcp 0:05:00 mgcp-pat 0:05:00
timeout sip 0:30:00 sip_media 0:02:00 sip-invite 0:03:00 sip-disconnect 0:02:00
timeout sip-provisional-media 0:02:00 uauth 0:05:00 absolute
dynamic-access-policy-record DfltAccessPolicy
http server enable
http 0.0.0.0 0.0.0.0 inside
http 0.0.0.0 0.0.0.0 outside
no snmp-server location
no snmp-server contact
snmp-server enable traps snmp authentication linkup linkdown coldstart
telnet timeout 5
ssh scopy enable
ssh timeout 5
console timeout 0
management-access inside
threat-detection basic-threat
threat-detection statistics access-list
no threat-detection statistics tcp-intercept
class-map type regex match-any FTP_SITES
match regex FTP_SITE1
match regex FTP_SITE2
!−−− Class map created in order to match the server names !−−− of FTP sites to be blocked by regex.
class-map type inspect ftp match-all FTP_class_map
match not server regex class FTP_SITES
!−−− Write an FTP inspect class map and match based on server !--- names, user name, FTP commands, and so on. Note that this !--- example allows the sites specified with the regex command !--- since it uses the match not command. If you need to block !--- specific FTP sites, use the match command without the not option.
class-map inspection_default
match default-inspection-traffic
policy-map type inspect dns preset_dns_map
parameters
message-length maximum 512
policy-map type inspect ftp FTP_INSPECT_POLICY
parameters
class FTP_class_map
reset log
!−−− Policy map created in order to define the actions !--- such as drop, reset, or log.
policy-map global_policy
class inspection_default
inspect dns preset_dns_map
inspect h323 h225
inspect h323 ras
inspect netbios
inspect rsh
inspect rtsp
inspect skinny
inspect esmtp
inspect sqlnet
inspect sunrpc
inspect tftp
inspect sip
inspect xdmcp
inspect icmp
inspect ftp strict FTP_INSPECT_POLICY
!--- The FTP inspection is specified with strict option !--- followed by the name of policy.
service-policy global_policy global
prompt hostname context
Cryptochecksum:40cefb1189e8c9492ed7129c7577c477
: end |
正規表現を設定し、特定のFTPサイトをブロックするためにMPFに適用するには、次の手順を実行します。
FTPサーバ名を確認します。
FTPインスペクションエンジンは、コマンド、ファイル名、ファイルタイプ、サーバ、ユーザ名など、さまざまな基準を使用してインスペクションを提供できます。この手順では、基準としてサーバを使用します。FTPインスペクションエンジンは、FTPサイトから送信されたサーバ220応答をサーバ値として使用します。この値は、サイトが使用するドメイン名とは異なる場合があります。この例では、ステップ2の正規表現で使用した応答220の値を取得するために、Wiresharkを使用して、検査されるサイトへのFTPパケットをキャプチャします。
キャプチャに基づくと、ftp://hp.comの応答220の値は(たとえば)q5u0081c.atlanta.hp.comです。
正規表現を作成します。
Configuration > Firewall > Objects > Regular Expressionsの順に選択し、Regular ExpressionタブでAddをクリックして、次の手順に従って正規表現を作成します。
ftpサイトから受信した応答220(Wiresharkのパケットキャプチャや使用されているその他のツールで表示される応答)に一致させるための正規表現FTP_SITE1を作成して(たとえば、「。* hp\.com.*」)、OKをクリックします。
注:より高度な正規表現の作成方法については、「構築」をクリックしてください。
正規表現を作成したら、Applyをクリックします。
正規表現クラスを作成します。
Configuration > Firewall > Objects > Regular Expressionsの順に選択し、Regular Expression ClassesセクションにあるAddをクリックして、次の手順に従ってクラスを作成します。
正規表現FTP_SITE1およびFTP_SITE2のいずれかに一致させるため、正規表現クラスFTP_SITESを作成して、OKをクリックします。
クラスマップが作成されたら、Applyをクリックします。
クラスマップを使用して特定されたトラフィックを検査します。
Configuration > Firewall > Objects > Class Maps > FTP > Addの順に選択して右クリックし、Addを選択します。次の手順に示すように、さまざまな正規表現で識別されるFTPトラフィックを検査するためのクラスマップが作成されます。
作成した正規表現にFTP応答220を照合するため、クラスマップFTP_Block_Siteを作成します。
正規表現で指定したサイトを除外する場合は、No Matchオプションボタンをクリックします。
「値」セクションで、正規表現または正規表現クラスを選択します。この手順では、以前に作成されたクラスを選択します。
[APPLY] をクリックします。
検査ポリシーで一致するトラフィックに対するアクションを設定します。
Configuration > Firewall > Objects > Inspect Maps > FTP> Addの順に選択してインスペクションポリシーを作成し、必要に応じて一致するトラフィックのアクションを設定します。
インスペクションポリシーの名前と説明を入力します。(例:FTP_INSPECT_POLICY)。
[Details] をクリックします。
Inspectionsタブをクリックします。(1)
[Add] をクリックします。(2)
Multiple matchesオプションボタンをクリックし、ドロップダウンリストからトラフィッククラスを選択します。(3)
有効または無効にするリセット操作を選択します。この例では、指定したサイトと一致しないすべてのFTPサイトに対して、FTP接続のリセットを有効にします。(4)
OKをクリックし、再度OKをクリックしてから、Applyをクリックします。(5)
インスペクションFTPポリシーをグローバルインスペクションリストに適用します。
Configuration > Firewall > Service Policy Rulesの順に選択します。
右側でinspection_defaultポリシーを選択し、Editをクリックします。
Rule Actionsタブ(1)で、FTPのConfigureボタンをクリックします。(2)
Select FTP Inspect Mapダイアログボックスで、Use strict FTPチェックボックスにチェックマークを入れてから、FTP inspect map for fine control over inspectionオプションボタンをクリックします。
新しいFTPインスペクションポリシーFTP_INSPECT_POLICYがリストに表示されます。
OKをクリックし、再度OKをクリックしてから、Applyをクリックします。
このセクションでは、設定が正常に動作していることを確認します。
Output Interpreter Tool(OIT)(登録ユーザ専用)では、特定の show コマンドがサポートされています。OIT を使用して show コマンド出力の解析を表示します。
show running-config regex:設定された正規表現の表示
ciscoasa#show running-config regex regex FTP_SITE1 "[Cc][Ii][Ss][Cc][Oo]\.[Cc][Oo][Mm]" regex FTP_SITE2 ".*hp\.com.*"
show running-config class−map:設定されたクラスマップの表示
ciscoasa#show running-config class-map class-map type regex match-any FTP_SITES match regex FTP_SITE1 match regex FTP_SITE2 class-map type inspect ftp match-all FTP_Block_Site match not server regex class FTP_SITES class-map inspection_default match default-inspection-traffic !
show running-config policy-map type inspect http:設定されたHTTPトラフィックを検査するポリシーマップの表示。
ciscoasa#show running-config policy-map type inspect ftp ! policy-map type inspect ftp FTP_INSPECT_POLICY parameters mask-banner mask-syst-reply class FTP_Block_Site reset log !
Show running-config policy-map:デフォルトのポリシーマップコンフィギュレーションおよびすべてのポリシーマップコンフィギュレーションの表示。
ciscoasa#show running-config policy-map ! policy-map type inspect dns preset_dns_map parameters message-length maximum 512 policy-map type inspect ftp FTP_INSPECT_POLICY parameters mask-banner mask-syst-reply class FTP_Block_Site reset log policy-map global_policy class inspection_default inspect dns preset_dns_map inspect h323 h225 inspect h323 ras inspect netbios inspect rsh inspect rtsp inspect skinny inspect esmtp inspect sqlnet inspect sunrpc inspect tftp inspect sip inspect xdmcp inspect ftp strict FTP_INSPECT_POLICY !
show running-config service-policy:現在実行中のすべてのサービスポリシー設定の表示
ciscoasa#show running-config service-policy service-policy global_policy global
このセクションでは、設定のトラブルシューティングに役立つ情報を紹介します。
show service-policyコマンドを使用すると、インスペクションエンジンによってトラフィックが検査され、正しく許可または廃棄されているかどうかを確認できます。
ciscoasa#show service-policy Global policy: Service-policy: global_policy Class-map: inspection_default Inspect: dns preset_dns_map, packet 0, drop 0, reset-drop 0 Inspect: h323 h225 _default_h323_map, packet 0, drop 0, reset-drop 0 Inspect: h323 ras _default_h323_map, packet 0, drop 0, reset-drop 0 Inspect: netbios, packet 0, drop 0, reset-drop 0 Inspect: rsh, packet 0, drop 0, reset-drop 0 Inspect: rtsp, packet 0, drop 0, reset-drop 0 Inspect: skinny , packet 0, drop 0, reset-drop 0 Inspect: esmtp _default_esmtp_map, packet 0, drop 0, reset-drop 0 Inspect: sqlnet, packet 0, drop 0, reset-drop 0 Inspect: sunrpc, packet 0, drop 0, reset-drop 0 Inspect: tftp, packet 0, drop 0, reset-drop 0 Inspect: sip , packet 0, drop 0, reset-drop 0 Inspect: xdmcp, packet 0, drop 0, reset-drop 0 Inspect: ftp strict FTP_INSPECT_POLICY, packet 40, drop 0, reset-drop 2
改定 | 発行日 | コメント |
---|---|---|
1.0 |
21-Jul-2009 |
初版 |