本產品的文件集力求使用無偏見用語。針對本文件集的目的,無偏見係定義為未根據年齡、身心障礙、性別、種族身分、民族身分、性別傾向、社會經濟地位及交織性表示歧視的用語。由於本產品軟體使用者介面中硬式編碼的語言、根據 RFP 文件使用的語言,或引用第三方產品的語言,因此本文件中可能會出現例外狀況。深入瞭解思科如何使用包容性用語。
思科已使用電腦和人工技術翻譯本文件,讓全世界的使用者能夠以自己的語言理解支援內容。請注意,即使是最佳機器翻譯,也不如專業譯者翻譯的內容準確。Cisco Systems, Inc. 對這些翻譯的準確度概不負責,並建議一律查看原始英文文件(提供連結)。
本文檔介紹ASA上的不同FTP和TFTP檢測方案、ASA FTP/TFTP檢測配置和基本故障排除。
思科建議瞭解以下主題:
所需介面之間的基本通訊
位於DMZ網路中的FTP伺服器的組態
本文檔介紹了自適應安全裝置(ASA)上的不同FTP和TFTP檢測方案,還介紹了ASA FTP/TFTP檢測配置和基本故障排除。
本文中的資訊係根據以下軟體和硬體版本:
運行9.1(5)軟體映像的ASA 5500或ASA 5500-X系列ASA
任何FTP使用者端
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路運作中,請確保您瞭解任何指令可能造成的影響。
安全裝置通過自適應安全演算法功能支援應用檢測。
通過自適應安全演算法使用的狀態應用檢測,安全裝置會跟蹤穿越防火牆的每個連線,並確保它們有效。
通過狀態檢查,防火牆還會監視連線的狀態,以編譯資訊以放入狀態表中。
除了使用管理員定義的規則外,還使用狀態表,過濾決策將基於以前通過防火牆的資料包建立的上下文。
應用檢查的實施包括以下操作:
識別流量
對流量應用檢查
啟用介面檢測
FTP有兩種形式,如下圖所示。
活動模式
被動模式
主動式FTP
在主動式FTP模式下,使用者端從隨機非特權連線埠(N>1023)連線到FTP伺服器的指令連線埠(21)。然後使用者端開始監聽連線埠N>1023,並將FTP命令連線埠N>1023傳送到FTP伺服器。然後,伺服器從其本地資料埠(即埠20)連線回客戶端的指定資料埠。
被動FTP
在被動式FTP模式下,客戶端發起到伺服器的兩個連線,這解決了防火牆過濾從伺服器到客戶端的傳入資料埠連線的問題。開啟FTP連線時,使用者端會在本機開啟兩個隨機非特權連線埠。第一埠與埠21上的伺服器聯絡。但是,客戶端不會運行port命令並允許伺服器連線回其資料埠,而是發出PASV命令。如此一來,伺服器就會開啟一個隨機的未授權連線埠(P>1023),並將port P命令傳送回使用者端。然後客戶端發起從埠N>1023到伺服器埠P的連線以傳輸資料。如果安全裝置上未配置inspection命令,則從內部使用者傳出郵件的FTP僅在被動模式下工作。此外,外部使用者傳入FTP伺服器時,會遭到拒絕存取。
TFTP
如RFC 1350所述,TFTP是一種在TFTP伺服器和使用者端之間讀取和寫入檔案的簡單通訊協定。TFTP使用UDP埠69。
為什麼需要FTP檢測?
某些應用需要思科安全裝置應用檢查功能進行特殊處理。這些型別的應用程式通常在使用者資料包中嵌入IP編址資訊,或在動態分配的埠上開啟輔助通道。應用檢測功能與網路地址轉換(NAT)配合使用,可幫助識別嵌入編址資訊的位置。
除了識別嵌入式編址資訊外,應用檢查功能還監控會話,以確定輔助通道的埠號。許多協定會開啟輔助TCP或UDP埠以提高效能。公認連線埠上的初始作業階段用於交涉動態分配的連線埠號碼。
應用檢查功能會監視這些會話、識別動態埠分配並在特定會話期間允許在這些埠上進行資料交換。多媒體和FTP應用都表現出這種行為。
如果尚未在安全裝置上啟用FTP檢測,則會放棄此請求,並且FTP會話不會傳輸任何請求的資料。
如果在ASA上啟用了FTP檢測,則ASA會監控控制通道並嘗試識別開啟資料通道的請求。FTP協定將資料通道埠規範嵌入控制通道流量,要求安全裝置檢查控制通道的資料埠更改。
ASA識別請求後,會為會話期間的資料通道流量臨時建立一個開口。這樣,FTP檢查功能監視控制通道,識別資料埠分配,並允許資料埠上交換會話長度的資料。
預設情況下,ASA通過global-inspection class-map檢查FTP流量的埠21連線。安全裝置還可以識別主動和被動FTP會話之間的區別。
如果FTP會話支援被動FTP資料傳輸,則ASA通過inspect ftp命令識別來自使用者的資料埠請求,並開啟一個大於1023的新資料埠。
inspect ftp命令檢查會檢查FTP會話並執行四項任務:
FTP應用檢查為FTP資料傳輸準備輔助通道。通道是響應於檔案上傳、檔案下載或目錄清單事件而分配的,並且它們必須預先協商。連線埠是透過PORT或PASV(227)命令交涉。
注意:在ASA上啟用FTP檢測後,將解釋所有網路方案。
客戶端連線到ASA的內部網路以及外部網路中的伺服器。
注意:此配置中使用的IP編址方案在Internet上不能合法路由。
如本圖所示,使用的網路設定具有在IP為172.16.1.5的內部網路中帶有客戶端的ASA。伺服器位於IP為192.168.1.15的外部網路中。客戶端在外部網路中有一個對映的IP 192.168.1.5。
因為FTP檢查會開啟動態埠通道,所以無需允許外部介面上的任何訪問清單。
組態範例:
ASA Version 9.1(5) ! hostname ASA domain-name corp. com enable password WwXYvtKrnjXqGbu1 encrypted names ! interface GigabitEthernet0/0
nameif Outside
security-level 0
ip address 192.168.1.2 255.255.255.0
!
interface GigabitEthernet0/1
nameif Inside
security-level 50
ip address 172.16.1.12 255.255.255.0
!
interface GigabitEthernet0/2
shutdown
no nameif
no security-level
no ip address
!
interface GigabitEthernet0/3
shutdown
no nameif
no security-level
no ip address
!
interface Management0/0
management-only
shutdown
no nameif
no security-level
no ip address
!--- Output is suppressed. !--- Object groups is created to define the host.
object network obj-172.16.1.5
subnet 172.16.1.0 255.255.255.0
!--- Object NAT is created to map Inside Client to Outside subnet IP.
object network obj-172.16.1.5
nat (Inside,Outside) dynamic 192.168.1.5
class-map inspection_default match default-inspection-traffic ! ! policy-map type inspect dns preset_dns_map parameters message-length maximum 512 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 ! !--- This command tells the device to !--- use the "global_policy" policy-map on all interfaces. service-policy global_policy global prompt hostname context Cryptochecksum:4b2f54134e685d11b274ee159e5ed009 : end ASA(config)#
驗證
連線
Client in Inside Network running ACTIVE FTP:
Ciscoasa(config)# sh conn
3 in use, 3 most used
TCP Outside 192.168.1.15:20 inside 172.16.1.5:61855, idle 0:00:00, bytes 145096704, flags UIB <--- Dynamic Connection Opened
TCP Outside 192.168.1.15:21 inside 172.16.1.5:61854, idle 0:00:00, bytes 434, flags UIO
此處,Inside中的客戶端啟動與源埠61854到目標埠21的連線。然後使用者端會傳送含6個元組值的Port命令。伺服器反過來啟動輔助/資料連線,源埠為20,目的地埠則按照這些捕獲後提到的步驟進行計算。
Capture Inside Interface(捕獲內部介面),如下圖所示。
捕獲外部介面,如下圖所示。
埠值使用最後兩個(共六個)的示例進行計算。剩餘4個元組是IP地址,2個元組用於埠。如圖所示,IP地址為192.168.1.5和241*256 + 159 = 61855。
Capture(捕獲)還顯示,啟用FTP檢測後,埠命令的值會發生更改。Inside Interface Capture顯示IP的實際值,而Client for Server傳送的埠則用於連線到客戶端的資料通道,Outside Interface Capture則顯示對映地址。
ASA內部網路中的客戶端和外部網路中的伺服器。
連線
Client in Inside Network running Passive Mode FTP:
ciscoasa(config)# sh conn
3 in use, 3 most used
TCP Outside 192.168.1.15:60142 inside 172.16.1.5:61839, idle 0:00:00, bytes 184844288, flags UI <--- Dynamic Connection Opened.
TCP Outside 192.168.1.15:21 inside 172.16.1.5:61838, idle 0:00:00, bytes 451, flags UIO
這裡,內部客戶端啟動與源埠和目61838埠21的連線。由於是被動式FTP,使用者端會啟動兩個連線。因此,在客戶端傳送PASV命令後,伺服器會使用其6元組值進行回覆,並且客戶端會連線到該套接字以進行資料連線。
Capture Inside Interface(捕獲內部介面),如下圖所示。
捕獲外部介面,如下圖所示。
連線埠的計算方式保持不變。
如前所述,如果啟用了FTP檢測,ASA將重寫嵌入的IP值。此外,它還會為資料連線開啟動態埠通道。
以下是連線詳細資訊,如果 FTP檢測已禁用
Connection:
ciscoasa(config)# sh conn
2 in use, 3 most used
TCP Outside 192.168.1.15:21 inside 172.16.1.5:61878, idle 0:00:09, bytes 433, flags UIO
TCP Outside 192.168.1.15:21 inside 172.16.1.5:61875, idle 0:00:29, bytes 259, flags UIO
如果沒有FTP檢查,它只會嘗試反複傳送port命令,但是沒有應答,因為外部接收的PORT帶有原始IP且沒有NAT地址。垃圾場上也出現了同樣的現象。
在配置終端模式下可使用no fixup protocol ftp 21命令禁用FTP檢查。
如果沒有FTP檢查,則只有PASV命令在客戶端位於Inside時有效,因為沒有port命令來自Inside,需要嵌入該命令,並且兩個連線都是從Inside發起的。
ASA外部網路中的客戶端和DMZ網路中的伺服器。
組態:
ASA(config)#show running-config ASA Version 9.1(5) ! hostname ASA domain-name corp .com enable password WwXYvtKrnjXqGbu1 encrypted names ! interface GigabitEthernet0/0
nameif Outside
security-level 0
ip address 192.168.1.2 255.255.255.0
!
interface GigabitEthernet0/1
nameif DMZ
security-level 50
ip address 172.16.1.12 255.255.255.0
!
interface GigabitEthernet0/2
shutdown
no nameif
no security-level
no ip address
!
interface GigabitEthernet0/3
shutdown
no nameif
no security-level
no ip address
!
interface Management0/0
management-only
shutdown
no nameif
no security-level
no ip address
!--- Output is suppressed.
!--- Permit inbound FTP control traffic.
access-list 100 extended permit tcp any host 192.168.1.5 eq ftp
!--- Object groups are created to define the hosts.
object network obj-172.16.1.5
host 172.16.1.5
!--- Object NAT is created to map FTP server with IP of Outside Subnet.
object network obj-172.16.1.5
nat (DMZ,Outside) static 192.168.1.5
access-group 100 in interface outside
class-map inspection_default match default-inspection-traffic ! ! policy-map type inspect dns preset_dns_map parameters message-length maximum 512 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 ! !--- This command tells the device to !--- use the "global_policy" policy-map on all interfaces. service-policy global_policy global prompt hostname context Cryptochecksum:4b2f54134e685d11b274ee159e5ed009 : end ASA(config)#
驗證
Connection:
Client in Outside Network running in Active Mode FTP:
ciscoasa(config)# sh conn
3 in use, 3 most used
TCP outside 192.168.1.15:55836 DMZ 172.16.1.5:21, idle 0:00:00, bytes 470, flags UIOB
TCP outside 192.168.1.15:55837 DMZ 172.16.1.5:20, idle 0:00:00, bytes 225595694, flags UI <--- Dynamic Port channel
擷取DMZ介面,如下圖所示。
捕獲外部介面,如下圖所示。
在這裡,客戶端運行活動模式客戶端192.168.1.15,並在埠21上啟動到DMZ中伺服器的連線。然後使用者端將包含六個元組值的port命令傳送到伺服器以連線到該特定動態連線埠。然後,伺服器啟動源埠為20的資料連線。
ASA外部網路中的客戶端和DMZ網路中的伺服器。
連線
Client in Outside Network running in Passive Mode FTP:
ciscoasa(config)# sh conn
3 in use, 3 most used
TCP Outside 192.168.1.15:60071 DMZ 172.16.1.5:61781, idle 0:00:00, bytes 184718032, flags UOB <--- Dynamic channel Open
TCP Outside 192.168.1.15:60070 DMZ 172.16.1.5:21, idle 0:00:00, bytes 413,
flags UIOB
擷取DMZ介面,如下圖所示。
捕獲外部介面,如下圖所示。
預設情況下,配置包含與所有預設應用檢測流量匹配並將檢測應用於所有介面上的流量的策略(全域性策略)。預設應用檢測流量包括到每個協定的預設埠的流量。
您只能應用一個全域性策略,因此,如果要更改全域性策略(例如,將檢測應用於非標準埠,或新增預設情況下未啟用的檢測),則需要編輯預設策略或禁用該策略並應用新的策略。有關所有預設埠的清單,請參閱預設檢測策略。
運行policy-map global_policy命令。
ASA(config)#policy-map global_policy
運行class inspection_default命令。
ASA(config-pmap)#class inspection_default
執行inspect FTP 指令。
ASA(config-pmap-c)#inspect FTP
在介面上啟用 strict選項後,FTP檢查會強制執行以下行為:
必須在安全裝置允許新命令之前確認FTP命令
安全裝置會丟棄傳送嵌入式命令的連線
會檢查227和PORT命令,以確保它們不會顯示在錯誤字串中
警告:使用strict選項可能會導致嚴格符合FTP RFC的FTP客戶端出現故障。請參閱使用strict選項,瞭解有關使用strict選項的詳細資訊。
您可以使用以下配置行為非標準TCP埠配置FTP協定檢測(用新埠號替換XXXX):
access-list ftp-list extended permit tcp any any eq XXXX ! class-map ftp-class match access-list ftp-list ! policy-map global_policy class ftp-class inspect ftp
要確保配置已成功執行,請運行show service-policy命令。此外,通過運行show service-policy inspect ftp 命令將輸出限製為FTP檢查。
ASA#show service-policy inspect ftp Global Policy: Service-policy: global_policy Class-map: inspection_default Inspect: ftp, packet 0, drop 0, reste-drop 0 ASA#
預設情況下啟用TFTP檢測。
安全裝置會檢查TFTP流量,並在必要時動態建立連線和轉換,以允許在TFTP客戶端和伺服器之間傳輸檔案。具體來說,檢查引擎檢查TFTP讀取請求(RRQ)、寫入請求(WRQ)和錯誤通知(ERROR)。
如果需要,在接收有效RRQ或WRQ時分配動態輔助通道和PAT轉換。TFTP隨後會使用此輔助通道進行檔案傳輸或錯誤通知。
只有TFTP伺服器可以通過輔助通道發起流量,而且TFTP客戶端和伺服器之間最多只能存在一個不完整的輔助通道。來自伺服器的錯誤通知將關閉輔助通道。
如果使用fstatic PAT重新導向TFTP流量,則必須啟用TFTP檢查。
預設情況下,配置包含與所有預設應用檢測流量匹配並將檢測應用於所有介面上的流量的策略(全域性策略)。預設應用檢測流量包括到每個協定的預設埠的流量。
只能應用一個全域性策略。因此,如果要更改全域性策略,例如將檢測應用於非標準埠,或新增預設情況下未啟用的檢測,則需要編輯或禁用預設策略並應用新的策略。有關所有預設埠的清單,請參閱預設檢測策略。
運行policy-map global_policy命令。
ASA(config)#policy-map global_policy
運行class inspection_default 命令。
ASA(config-pmap)#class inspection_default
執行inspect TFTP命令。
ASA(config-pmap-c)#inspect TFTP
這裡是在外部網路中配置的客戶端。TFTP伺服器位於DMZ網路中。伺服器對映到位於外部子網中的IP 192.168.1.5。
組態範例:
ASA(config)#show running-config ASA Version 9.1(5) ! hostname ASA domain-name corp. com enable password WwXYvtKrnjXqGbu1 encrypted names ! interface GigabitEthernet0/0
nameif Outside
security-level 0
ip address 192.168.1.2 255.255.255.0
!
interface GigabitEthernet0/1
nameif DMZ
security-level 50
ip address 172.16.1.12 255.255.255.0
!
interface GigabitEthernet0/2
shutdown
no nameif
security-level 100
ip address 10.1.1.1 255.255.255.0
!
interface GigabitEthernet0/3
shutdown
no nameif
no security-level
no ip address
!
interface Management0/0
management-only
shutdown
no nameif
no security-level
no ip address
!--- Output is suppressed. !--- Permit inbound TFTP traffic. access-list 100 extended permit udp any host 192.168.1.5 eq tftp ! !--- Object groups are created to define the hosts. object network obj-172.16.1.5
host 172.16.1.5
!--- Object NAT to map TFTP server to IP in Outside Subnet.
object network obj-172.16.1.5
nat (DMZ,Outside) static 192.168.1.5
access-group 100 in interface outside
class-map inspection_default
match default-inspection-traffic
!
!
policy-map type inspect dns preset_dns_map
parameters
message-length maximum 512
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
!
!--- This command tells the device to
!--- use the "global_policy" policy-map on all interfaces.
service-policy global_policy global
prompt hostname context
Cryptochecksum:4b2f54134e685d11b274ee159e5ed009
: end
ASA(config)#
要確保配置已成功執行,請運行show service-policy命令。此外,請僅通過運行show service-policy inspect tftp 命令來將輸出限製為TFTP檢查。
ASA#show service-policy inspect tftp Global Policy: Service-policy: global_policy Class-map: inspection_default Inspect: tftp, packet 0, drop 0, reste-drop 0 ASA#
本節提供的資訊可用於對組態進行疑難排解。
Packet Tracer
FTP client Inside - Packet Tracer for Control Connection : Same Flow for Active and Passive.
# packet-tracer input inside tcp 172.16.1.5 12345 192.168.1.15 21 det
-----Omitted------
Phase: 5
Type: INSPECT
Subtype: inspect-ftp
Result: ALLOW
Config:
class-map inspection_default
match default-inspection-traffic
policy-map global_policy
class inspection_default
inspect ftp
service-policy global_policy global
Additional Information:
Forward Flow based lookup yields rule:
in id=0x76d9a120, priority=70, domain=inspect-ftp, deny=false
hits=2, user_data=0x76d99a30, cs_id=0x0, use_real_addr, flags=0x0, protocol=6
src ip/id=0.0.0.0, mask=0.0.0.0, port=0
dst ip/id=0.0.0.0, mask=0.0.0.0, port=21, dscp=0x0
input_ifc=inside, output_ifc=any
Phase: 6
Type: NAT
Subtype:
Result: ALLOW
Config:
object network obj-172.16.1.5
nat (inside,outside) static 192.168.1.5
Additional Information:
NAT divert to egress interface DMZ
translate 172.16.1.5/21 to 192.168.1.5/21
Phase: 7
Type: NAT
Subtype: rpf-check
Result: ALLOW
Config:
object network obj-172.16.1.5
nat (inside,outside) static 192.168.1.5
Additional Information:
Forward Flow based lookup yields rule:
out id=0x76d6e308, priority=6, domain=nat-reverse, deny=false
hits=15, user_data=0x76d9ef70, cs_id=0x0, use_real_addr, flags=0x0, protocol=0
src ip/id=0.0.0.0, mask=0.0.0.0, port=0
dst ip/id=172.16.1.5, mask=255.255.255.255, port=0, dscp=0x0
input_ifc=inside, output_ifc=outside
----Omitted----
Result:
input-interface: inside
input-status: up
input-line-status: up
output-interface: Outside
output-status: up
output-line-status: up
Action: allow
FTP client Outside - Packet Tracer for Control Connection : Same Flow for Active and Passive
# packet-tracer input outside tcp 192.168.1.15 12345 192.168.1.5 21 det
Phase: 1
Type: UN-NAT
Subtype: static
Result: ALLOW
Config:
object network obj-172.16.1.5
nat (DMZ,outside) static 192.168.1.5
Additional Information:
NAT divert to egress interface DMZ
Untranslate 192.168.1.5/21 to 172.16.1.5/21
-----Omitted-----
Phase: 4
Type: INSPECT
Subtype: inspect-ftp
Result: ALLOW
Config:
class-map inspection_default
match default-inspection-traffic
policy-map global_policy
class inspection_default
inspect ftp
service-policy global_policy global
Additional Information:
Forward Flow based lookup yields rule:
in id=0x76d84700, priority=70, domain=inspect-ftp, deny=false
hits=17, user_data=0x76d84550, cs_id=0x0, use_real_addr, flags=0x0, protocol=6
src ip/id=0.0.0.0, mask=0.0.0.0, port=0
dst ip/id=0.0.0.0, mask=0.0.0.0, port=21, dscp=0x0
input_ifc=outside, output_ifc=any
Phase: 5
Type: NAT
Subtype: rpf-check
Result: ALLOW
Config:
object network obj-172.16.1.5
nat (DMZ,outside) static 192.168.1.5
Additional Information:
Forward Flow based lookup yields rule:
out id=0x76d6e308, priority=6, domain=nat-reverse, deny=false
hits=17, user_data=0x76d9ef70, cs_id=0x0, use_real_addr, flags=0x0, protocol=0
src ip/id=0.0.0.0, mask=0.0.0.0, port=0
dst ip/id=172.16.1.5, mask=255.255.255.255, port=0, dscp=0x0
input_ifc=outside, output_ifc=DMZ
----Omitted-----
Result:
input-interface: Outside
input-status: up
input-line-status: up
output-interface: DMZ
output-status: up
output-line-status: up
Action: allow
如資料包跟蹤器所示,流量會到達各自的NAT語句和FTP檢查策略。它們還會保留其所需的介面。
在故障排除期間,您可以嘗試捕獲ASA入口和出口介面,並檢視ASA嵌入式IP地址重寫是否工作正常,並檢查是否允許在ASA上使用動態埠。
修訂 | 發佈日期 | 意見 |
---|---|---|
2.0 |
08-Jun-2023 |
重新認證 |
1.0 |
19-Oct-2015 |
初始版本 |