本文檔介紹如何配置使用正規表示式和模組化策略架構(MPF)的Cisco安全裝置ASA/PIX 8.x,以阻止某些網站(URL)。
注意:此配置不會阻止所有應用程式下載。為了可靠地阻止檔案,應使用Ironport S系列等專用裝置或ASA的CSC模組等模組。
注意:ASA不支援HTTPS過濾。ASA無法根據HTTPS流量的正規表示式執行深度資料包檢測或檢查,因為在HTTPS中,資料包的內容是加密的(SSL)。
本文假設Cisco安全裝置已配置並且工作正常。
運行軟體版本8.0(x)及更高版本的Cisco 5500系列自適應安全裝置(ASA)
適用於ASA 8.x的Cisco調適型安全裝置管理器(ASDM)版本6.x
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路正在作用,請確保您已瞭解任何指令可能造成的影響。
此配置還可用於運行軟體版本8.0(x)及更高版本的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命令。
下表列出了有特殊含義的元字元。
字元 | 說明 | 備註 |
---|---|---|
. | 點 | 匹配任意單個字元。例如,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 8.0(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 are blocked. prompt hostname context Cryptochecksum:e629251a7c37af205c289cf78629fc11 : end ciscoasa# |
完成以下步驟以配置正規表示式,並將它們應用於MPF以阻止特定的網站,如下所示。
建立規則運算式
選擇Configuration > Firewall > 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 > Firewall > 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 > Firewall > 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 > Firewall > Objects > Inspect Maps > HTTP,以便建立http_inspection_policy,用來為匹配的流量設定操作(如圖所示)。按一下「OK」(確定)。
選擇Configuration > Firewall > Objects > Inspect Maps > HTTP > http_inspection_policy(按兩下),然後按一下Details > Add,以便為目前為止建立的各種類設定操作。
將操作設定為Drop Connection,並且為「Criterion」為「Request Method」且「Value」為「connect」的流量啟用日誌記錄。
按一下OK
將操作設定為Drop Connection,並且為AppHeaderClass類啟用日誌記錄。
按一下「OK」(確定)。
將操作設定為Reset,並且為BlockDomainsClass類啟用日誌記錄。
按一下OK
將操作設定為Reset,並且Enable用於類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策略應用於介面
選擇Configuration > Firewall > Service Policy Rules > Add > Add Service Policy Rule。
HTTP流量
從下拉選單中選擇內部介面的Interface單選按鈕,然後選擇「Policy Name」作為inside-policy。按「Next」(下一步)。
建立類對映httptraffic,然後選中Source和Destination IP Address(uses ACL)。按「Next」(下一步)。
將「Source」和「Destination」設定為「any」,並將服務設定為tcp-udp/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/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 |
21-Jan-2008 |
初始版本 |