本文檔介紹如何配置使用正規表示式和模組化策略架構(MPF)的Cisco安全裝置ASA/PIX 8.x,以便按伺服器名稱阻止或允許某些FTP站點。
本文假設Cisco安全裝置已配置並且工作正常。
本文中的資訊係根據以下軟體和硬體版本:
運行軟體版本8.0(x)及更高版本的Cisco 5500系列自適應安全裝置(ASA)
適用於ASA 8.x的Cisco調適型安全裝置管理器(ASDM)版本6.x
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路正在作用,請確保您已瞭解任何指令可能造成的影響。
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命令。此外,regex命令還可用於各種需要進行文本匹配的功能。例如,您可以使用使用檢查策略對映的MPF來配置特殊的應用程式檢查操作。有關詳細資訊,請參閱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代表空格。 |
本節提供用於設定本文件中所述功能的資訊。
注意:使用命令查詢工具(僅限註冊客戶)可獲取有關此部分使用的命令的更多資訊。
此文件使用以下網路設定:
注意:允許使用正規表示式或阻止選定的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 |
完成以下步驟,以配置正規表示式並將其應用於MPF,從而阻止特定的FTP站點:
確定FTP伺服器名稱。
FTP檢測引擎可以使用不同標準(如命令、檔名、檔案型別、伺服器和使用者名稱)提供檢測。此程式會使用伺服器作為條件。FTP檢測引擎使用FTP站點傳送的伺服器220響應作為伺服器值。此值可以不同於站點使用的域名。此示例使用Wireshark捕獲到站點的FTP資料包,該站點經過檢查後會得到響應220值,以用於第2步的正規表示式。
根據捕獲情況來看,ftp://hp.com的響應220值為(例如) q5u0081c.atlanta.hp.com。
建立規則運算式。
選擇Configuration > Firewall > Objects > Regular Expressions,然後按一下Regular Expression頁籤下的Add,以便根據此步驟中的描述建立正規表示式:
建立正規表示式FTP_SITE1,以便匹配從ftp站點(例如,「。* hp\.com.*」)接收的響應220(如Wireshark或任何其他所用工具中的資料包捕獲所示),然後按一下OK。
注意:您可以按一下生成以獲取有關如何建立更高級正規表示式的幫助。
建立正規表示式後,請按一下Apply。
建立規則運算式類別。
選擇Configuration > Firewall > Objects > Regular Expressions,然後按一下Regular Expression Classes部分下的Add,以便根據此步驟中的描述建立正規表示式類:
建立正規表示式類FTP_SITES,以匹配正規表示式FTP_SITE1和FTP_SITE2中的任何一個,然後按一下OK。
建立類對映後,請按一下Apply。
檢查透過類對映辨識出的流量。
選擇Configuration > Firewall > Objects > Class Maps > FTP > Add,按一下右鍵並選擇Add,以便建立類對映來檢查此步驟中描述的各種正規表示式所辨識出的FTP流量:
建立類對映FTP_Block_Site,以便將FTP響應220與您所建立的正規表示式進行匹配。
如果要排除正規表示式中的指定站點,請按一下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。
使用本節內容,確認您的組態是否正常運作。
輸出直譯器工具(僅供註冊客戶使用) (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 |
初始版本 |