本文檔介紹如何使用帶模組化策略架構(MPF)的正規表示式來配置Cisco安全裝置ASA/PIX 7.2,以阻止某些網站(URL)。
注意:此配置不會阻止所有應用程式下載。要獲得可靠的檔案塊,必須使用專用裝置(如Websense等)或模組(如ASA的CSC模組)。
ASA不支援HTTPS過濾。ASA無法根據HTTPS流量的正規表示式執行深度資料包檢測或檢查,因為在HTTPS中,資料包的內容是加密的(ssl)。
本文假設Cisco安全裝置已配置並且工作正常。
執行軟體版本7.2(2)的Cisco 5500系列調適型安全裝置(ASA)
適用於ASA 7.2(2)的Cisco調適型安全裝置管理員(ASDM)版本5.2(2)
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路正在作用,請確保您已瞭解任何指令可能造成的影響。
此配置還可用於運行軟體版本7.2(2)的Cisco 500系列PIX。
MPF提供一致且靈活的方法來配置安全裝置功能。例如,您可以使用MPF建立特定於特定TCP應用的超時配置,而不是應用於所有TCP應用的超時配置。
MPF支援下列功能:
TCP規範化、TCP和UDP連線限制和超時以及TCP序列號隨機化
CSC
應用檢測
IPS
QoS輸入管制
QoS輸出管制
QoS優先佇列
MPF的配置包含四個任務:
辨識要應用操作的第3層和第4層流量。有關詳細資訊,請參閱使用第3層/第4層類對映辨識流量。
(僅限應用檢測)定義應用檢測流量的特殊操作。有關詳細資訊,請參閱配置特殊的應用程式檢查操作。
將操作應用於第3層和第4層流量。有關詳細資訊,請參閱使用第3層/第4層策略對映定義操作。
啟動介面上的動作。有關詳細資訊,請參閱使用服務策略將第3層/第4層策略應用到介面。
規則運算式會逐字比對文字字串,或者與中繼字元比對,因此您可以比對文字字串的多個變體。可以使用正規表示式來匹配某些應用流量的內容;例如,可以匹配HTTP資料包中的URL字串。
注意:使用Ctrl+V在CLI中對所有特殊字元進行轉義,例如問號(?)或製表符。例如,鍵入d[Ctrl+V]g可在配置中輸入d?g。
要建立正規表示式,請使用regex命令,此命令可用於各種需要文本匹配的功能。例如,您可以使用帶有檢查策略對映的模組化策略架構配置特殊的應用程式檢查操作(請參閱policy map type inspect命令)。在檢查策略對映中,如果您建立包含一個或多個match命令的檢查類對映,則可以辨識出要採取操作的流量,也可以直接在檢查策略對映中使用match命令。有些match命令可以用正規表示式來辨識資料包中的文本;例如,您可以匹配HTTP資料包中的URL字串。您可以在正規表示式類對映中將正規表示式分組(請參閱class-map type regex命令)。
表1列出了有特殊含義的元字元。
字元 | 說明 | 備註 |
---|---|---|
. | 點 | 匹配任意單個字元。例如,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]匹配大寫字母以外的任何單個字元。 |
[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」會在搜尋相符專案時保留前導空格。 |
^ | 插入號 | 指定行的開頭。 |
\ | 逸出字元 | 與中繼字元搭配使用時,會符合常值字元。例如,\[匹配左方括弧。 |
字元 | 字元 | 當字元不是中繼字元時,會比對文字字元。 |
\r | 回車 | 匹配回車0x0d。 |
\n | 新行 | 匹配新行0x0a。 |
\t | 標籤 | 匹配頁籤0x09。 |
\f | 格式饋送 | 比對表單摘要0x0c。 |
\xNN | 轉義的十六進位制數 | 比對十六進位的ASCII字元(剛好為兩位數)。 |
\NNN | 逸出八進位制數 | 匹配八進位制的ASCII字元(精確為三位)。例如,字元040代表空格。 |
本節提供用於設定本文件中所述功能的資訊。
注意:使用命令查詢工具(僅限註冊客戶)可獲取有關此部分使用的命令的更多資訊。
此文件使用以下網路設定:
本檔案使用下列組態:
ASA CLI配置 |
---|
ciscoasa#show running-config : Saved : ASA Version 7.2(2) ! hostname ciscoasa domain-name default.domain.invalid enable password 8Ry2YjIyt7RRXU24 encrypted names ! interface Ethernet0/0 nameif inside security-level 100 ip address 10.1.1.1 255.255.255.0 ! interface Ethernet0/1 nameif outside security-level 0 ip address 192.168.1.5 255.255.255.0 ! interface Ethernet0/2 nameif DMZ security-level 90 ip address 10.77.241.142 255.255.255.192 ! interface Ethernet0/3 shutdown no nameif no security-level no ip address ! interface Management0/0 shutdown no nameif no security-level no ip address ! passwd 2KFQnbNIdI.2KYOU encrypted regex urllist1 ".*\.([Ee][Xx][Ee]|[Cc][Oo][Mm]|[Bb][Aa][Tt]) HTTP/1.[01]" !--- Extensions such as .exe, .com, .bat to be captured and !--- provided the http version being used by web browser must be either 1.0 or 1.1 regex urllist2 ".*\.([Pp][Ii][Ff]|[Vv][Bb][Ss]|[Ww][Ss][Hh]) HTTP/1.[01]" !--- Extensions such as .pif, .vbs, .wsh to be captured !--- and provided the http version being used by web browser must be either !--- 1.0 or 1.1 regex urllist3 ".*\.([Dd][Oo][Cc]|[Xx][Ll][Ss]|[Pp][Pp][Tt]) HTTP/1.[01]" !--- Extensions such as .doc(word), .xls(ms-excel), .ppt to be captured and provided !--- the http version being used by web browser must be either 1.0 or 1.1 regex urllist4 ".*\.([Zz][Ii][Pp]|[Tt][Aa][Rr]|[Tt][Gg][Zz]) HTTP/1.[01]" !--- Extensions such as .zip, .tar, .tgz to be captured and provided !--- the http version being used by web browser must be either 1.0 or 1.1 regex domainlist1 "\.yahoo\.com" regex domainlist2 "\.myspace\.com" regex domainlist3 "\.youtube\.com" !--- Captures the URLs with domain name like yahoo.com, !--- youtube.com and myspace.com regex contenttype "Content-Type" regex applicationheader "application/.*" !--- Captures the application header and type of !--- content in order for analysis boot system disk0:/asa802-k8.bin ftp mode passive dns server-group DefaultDNS domain-name default.domain.invalid access-list inside_mpc extended permit tcp any any eq www access-list inside_mpc extended permit tcp any any eq 8080 !--- Filters the http and port 8080 !--- traffic in order to block the specific traffic with regular !--- expressions pager lines 24 mtu inside 1500 mtu outside 1500 mtu DMZ 1500 no failover icmp unreachable rate-limit 1 burst-size 1 asdm image disk0:/asdm-602.bin no asdm history enable arp timeout 14400 route DMZ 0.0.0.0 0.0.0.0 10.77.241.129 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 uauth 0:05:00 absolute dynamic-access-policy-record DfltAccessPolicy http server enable http 0.0.0.0 0.0.0.0 DMZ no snmp-server location no snmp-server contact snmp-server enable traps snmp authentication linkup linkdown coldstart no crypto isakmp nat-traversal telnet timeout 5 ssh timeout 5 console timeout 0 threat-detection basic-threat threat-detection statistics access-list ! class-map type regex match-any DomainBlockList match regex domainlist1 match regex domainlist2 match regex domainlist3 !--- Class map created in order to match the domain names !--- to be blocked class-map type inspect http match-all BlockDomainsClass match request header host regex class DomainBlockList !--- Inspect the identified traffic by class !--- "DomainBlockList" class-map type regex match-any URLBlockList match regex urllist1 match regex urllist2 match regex urllist3 match regex urllist4 !--- Class map created in order to match the URLs !--- to be blocked class-map inspection_default match default-inspection-traffic class-map type inspect http match-all AppHeaderClass match response header regex contenttype regex applicationheader !--- Inspect the captured traffic by regular !--- expressions "content-type" and "applicationheader" class-map httptraffic match access-list inside_mpc !--- Class map created in order to match the !--- filtered traffic by ACL class-map type inspect http match-all BlockURLsClass match request uri regex class URLBlockList ! !--- Inspect the identified traffic by class !--- "URLBlockList" ! policy-map type inspect dns preset_dns_map parameters message-length maximum 512 policy-map type inspect http http_inspection_policy parameters protocol-violation action drop-connection class AppHeaderClass drop-connection log match request method connect drop-connection log class BlockDomainsClass reset log class BlockURLsClass reset log !--- Define the actions such as drop, reset or log !--- in the inspection policy map policy-map global_policy class inspection_default inspect dns preset_dns_map inspect ftp 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 policy-map inside-policy class httptraffic inspect http http_inspection_policy !--- Map the inspection policy map to the class !--- "httptraffic" under the policy map created for the !--- inside network traffic ! service-policy global_policy global service-policy inside-policy interface inside !--- Apply the policy to the interface inside where the websites will be blocked prompt hostname context Cryptochecksum:e629251a7c37af205c289cf78629fc11 : end ciscoasa# |
完成以下步驟以配置正規表示式並將其應用於MPF以阻止特定網站:
建立規則運算式
選擇Configuration > Global Objects > Regular Expressions並按一下「Regular Expression」頁籤下的Add,以便建立正規表示式。
建立正規表示式domainlist1,以便捕獲域名yahoo.com。按一下「OK」(確定)。
建立正規表示式domainlist2,以便捕獲域名myspace.com。按一下「OK」(確定)。
建立正規表示式domainlist3,以便捕獲域名youtube.com。按一下「OK」(確定)。
建立正規表示式urllist1,以便捕獲exe、com和bat等副檔名(假設Web瀏覽器使用的http版本是1.0或1.1)。按一下「OK」(確定)。
建立正規表示式urllist2,以便捕獲pif、vbs、wsh等副檔名(假設Web瀏覽器使用的HTTP版本是1.0或1.1)。按一下「OK」(確定)。
建立正規表示式urllist3,以便捕獲doc、xls和ppt等副檔名(假設Web瀏覽器使用的HTTP版本是1.0或1.1)。按一下「OK」(確定)。
建立正規表示式urllist4,以便捕獲zip、tar和tgz等副檔名(假設Web瀏覽器使用的HTTP版本是1.0或1.1)。按一下「OK」(確定)。
建立正規表示式contenttype,以便捕獲內容型別。按一下「OK」(確定)。
建立正規表示式applicationheader,以便捕獲各種應用程式標頭。按一下「OK」(確定)。
等效的CLI配置
ASA CLI配置 |
---|
ciscoasa#configure terminal ciscoasa(config)#regex urllist1 ".*\.([Ee][Xx][Ee]|[Cc][Oo][Mm]|[Bb][Aa][Tt])$ ciscoasa(config)#regex urllist2 ".*\.([Pp][Ii][Ff]|[Vv][Bb][Ss]|[Ww][Ss][Hh])$ ciscoasa(config)#regex urllist3 ".*\.([Dd][Oo][Cc]|[Xx][Ll][Ss]|[Pp][Pp][Tt])$ ciscoasa(config)#regex urllist4 ".*\.([Zz][Ii][Pp]|[Tt][Aa][Rr]|[Tt][Gg][Zz])$ ciscoasa(config)#regex domainlist1 "\.yahoo\.com" ciscoasa(config)#regex domainlist2 "\.myspace\.com" ciscoasa(config)#regex domainlist3 "\.youtube\.com" ciscoasa(config)#regex contenttype "Content-Type" ciscoasa(config)#regex applicationheader "application/.*" |
建立規則運算式類別
選擇Configuration > Global Objects > Regular Expressions並按一下Regular Expression Classes頁籤下的Add,以便建立各種類。
建立正規表示式類DomainBlockList,以便匹配以下任意正規表示式:domainlist1、domainlist2和domainlist3。按一下「OK」(確定)。
建立正規表示式類URLBlockList,以便匹配以下任意正規表示式:urllist1、urllist2、urllist3、urllist4。按一下「OK」(確定)。
等效的CLI配置
ASA CLI配置 |
---|
ciscoasa#configure terminal ciscoasa(config)#class-map type inspect http match-all BlockDomainsClass ciscoasa(config-cmap)#match request header host regex class DomainBlockList ciscoasa(config-cmap)#exit ciscoasa(config)#class-map type regex match-any URLBlockList ciscoasa(config-cmap)#match regex urllist1 ciscoasa(config-cmap)#match regex urllist2 ciscoasa(config-cmap)#match regex urllist3 ciscoasa(config-cmap)#match regex urllist4 ciscoasa(config-cmap)#exit |
檢查透過類對映辨識出的流量
選擇Configuration > Global Objects > Class Maps > HTTP > Add,以便建立類對映,用來檢查由各種正規表示式辨識出的HTTP流量。
建立類對映AppHeaderClass,以便用正規表示式捕獲來匹配響應標頭。
按一下「OK」(確定)。
建立類對映BlockDomainsClass,以便用正規表示式捕獲來匹配請求標頭。
按一下「OK」(確定)。
建立類對映BlockURLsClass,以便用正規表示式捕獲來匹配請求URI。
按一下「OK」(確定)。
等效的CLI配置
ASA CLI配置 |
---|
ciscoasa#configure terminal ciscoasa(config)#class-map type inspect http match-all AppHeaderClass ciscoasa(config-cmap)#match response header regex contenttype regex applicationheader ciscoasa(config-cmap)#exit ciscoasa(config)#class-map type inspect http match-all BlockDomainsClass ciscoasa(config-cmap)#match request header host regex class DomainBlockList ciscoasa(config-cmap)#exit ciscoasa(config)#class-map type inspect http match-all BlockURLsClass ciscoasa(config-cmap)#match request uri regex class URLBlockList ciscoasa(config-cmap)#exit |
為檢查策略中的匹配流量設定操作
選擇Configuration > Global Objects > Inspect Maps > HTTP,以便建立http_inspection_policy,用來為匹配的流量設定操作。按一下Add和Apply。
選擇Configuration > Global Objects > Inspect Maps > HTTP > http_inspection_policy(按兩下),然後按一下Advanced View > Inspections > Add,以便為目前為止建立的各種類設定操作。
按一下「OK」(確定)。
將操作設定為Drop Connection;為「Criterion」為「Request Method」且「Value」為「connect」的流量啟用日誌記錄。
按一下「OK」(確定)。
將操作設定為Drop Connection,並且Enable為AppHeaderClass類啟用日誌記錄。
按一下「OK」(確定)。
將操作設定為Reset,並且啟用類BlockDomainsClass的日誌記錄。
按一下「OK」(確定)。
將操作設定為Reset,並且啟用類BlockURLsClass的日誌記錄。
按一下「OK」(確定)。
按一下「Apply」。
等效的CLI配置
ASA CLI配置 |
---|
ciscoasa#configure terminal ciscoasa(config)#policy-map type inspect http http_inspection_policy ciscoasa(config-pmap)#parameters ciscoasa(config-pmap-p)#match request method connect ciscoasa(config-pmap-c)#drop-connection log ciscoasa(config-pmap-c)#class AppHeaderClass ciscoasa(config-pmap-c)#drop-connection log ciscoasa(config-pmap-c)#class BlockDomainsClass ciscoasa(config-pmap-c)#reset log ciscoasa(config-pmap-c)#class BlockURLsClass ciscoasa(config-pmap-c)#reset log ciscoasa(config-pmap-c)#exit ciscoasa(config-pmap)#exit |
將檢查http策略應用於介面
在「Service Policy Rules」頁籤下選擇Configuration > Security Policy > Service Policy Rules > Add > Add Service Policy Rule。
HTTP流量
從下拉選單中選擇帶有inside介面的Interface單選按鈕,然後選擇「Policy Name」作為inside-policy。按「Next」(下一步)。
建立類對映httptraffic,然後選中Source and Destination IP Address(uses ACL)。按「Next」(下一步)。
將「Source」和「Destination」設定為any,並將「TCP port」設定為HTTP。按「Next」(下一步)。
選中HTTP單選按鈕,然後按一下Configure。
選中Select a HTTP inspect map for the control over inspection單選按鈕。按一下「OK」(確定)。
按一下「Finish」(結束)。
埠8080流量
再次按一下Add > Add Service Policy Rule。
按「Next」(下一步)。
選擇Add rule to existing traffic class單選按鈕,然後從下拉選單中選擇httptraffic。按「Next」(下一步)。
將「Source」和「Destination」設定為any,並將「TCP port」設定為8080。按「Next」(下一步)。
按一下「Finish」(結束)。
按一下「Apply」。
等效的CLI配置
ASA CLI配置 |
---|
ciscoasa#configure terminal ciscoasa(config)#access-list inside_mpc extended permit tcp any any eq www ciscoasa(config)#access-list inside_mpc extended permit tcp any any eq 8080 ciscoasa(config)#class-map httptraffic ciscoasa(config-cmap)#match access-list inside_mpc ciscoasa(config-cmap)#exit ciscoasa(config)#policy-map inside-policy ciscoasa(config-pmap)#class httptraffic ciscoasa(config-pmap-c)#inspect http http_inspection_policy ciscoasa(config-pmap-c)#exit ciscoasa(config-pmap)#exit ciscoasa(config)#service-policy inside-policy interface inside |
使用本節內容,確認您的組態是否正常運作。
輸出直譯器工具(僅供註冊客戶使用) (OIT)支援某些show指令。使用OIT檢視對show命令輸出的分析。
show running-config regex— 顯示已配置的正規表示式
ciscoasa#show running-config regex regex urllist1 ".*\.([Ee][Xx][Ee]|[Cc][Oo][Mm]|[Bb][Aa][Tt]) HTTP/1.[01]" regex urllist2 ".*\.([Pp][Ii][Ff]|[Vv][Bb][Ss]|[Ww][Ss][Hh]) HTTP/1.[01]" regex urllist3 ".*\.([Dd][Oo][Cc]|[Xx][Ll][Ss]|[Pp][Pp][Tt]) HTTP/1.[01]" regex urllist4 ".*\.([Zz][Ii][Pp]|[Tt][Aa][Rr]|[Tt][Gg][Zz]) HTTP/1.[01]" regex domainlist1 "\.yahoo\.com" regex domainlist2 "\.myspace\.com" regex domainlist3 "\.youtube\.com" regex contenttype "Content-Type" regex applicationheader "application/.*" ciscoasa#
show running-config class-map— 顯示已配置的類對映
ciscoasa#show running-config class-map ! class-map type regex match-any DomainBlockList match regex domainlist1 match regex domainlist2 match regex domainlist3 class-map type inspect http match-all BlockDomainsClass match request header host regex class DomainBlockList class-map type regex match-any URLBlockList match regex urllist1 match regex urllist2 match regex urllist3 match regex urllist4 class-map inspection_default match default-inspection-traffic class-map type inspect http match-all AppHeaderClass match response header regex contenttype regex applicationheader class-map httptraffic match access-list inside_mpc class-map type inspect http match-all BlockURLsClass match request uri regex class URLBlockList ! ciscoasa#
show running-config policy-map type inspect http— 顯示用來檢查已配置的http流量的策略對映
ciscoasa#show running-config policy-map type inspect http ! policy-map type inspect http http_inspection_policy parameters protocol-violation action drop-connection class AppHeaderClass drop-connection log match request method connect drop-connection log class BlockDomainsClass reset log class BlockURLsClass reset log ! ciscoasa#
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 http http_inspection_policy parameters protocol-violation action drop-connection class AppHeaderClass drop-connection log match request method connect drop-connection log class BlockDomainsClass reset log class BlockURLsClass reset log policy-map global_policy class inspection_default inspect dns preset_dns_map inspect ftp 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 policy-map inside-policy class httptraffic inspect http http_inspection_policy ! ciscoasa#
show running-config service-policy— 顯示當前正在運行的所有服務策略配置
ciscoasa#show running-config service-policy service-policy global_policy global service-policy inside-policy interface inside
show running-config access-list— 顯示在安全裝置上運行的訪問清單配置
ciscoasa#show running-config access-list access-list inside_mpc extended permit tcp any any eq www access-list inside_mpc extended permit tcp any any eq 8080 ciscoasa#
本節提供的資訊可用於對組態進行疑難排解。
附註:使用 debug 指令之前,請先參閱有關 Debug 指令的重要資訊。
debug http— 顯示HTTP流量的調試消息。
修訂 | 發佈日期 | 意見 |
---|---|---|
1.0 |
10-Jan-2008 |
初始版本 |