此产品的文档集力求使用非歧视性语言。在本文档集中,非歧视性语言是指不隐含针对年龄、残障、性别、种族身份、族群身份、性取向、社会经济地位和交叉性的歧视的语言。由于产品软件的用户界面中使用的硬编码语言、基于 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 (N>1023) 连接到 FTP 服务器的命令端口 (21)。然后,客户端开始侦听端口N>1023,并将FTP命令port N>1023发送到FTP服务器。接下来,服务器从其本地数据端口(端口 20)连接回客户端的指定数据端口。
被动式 FTP
在被动 FTP 模式下,客户端向服务器同时发起这两种连接,这将解决从服务器到客户端的数据端口传入连接被防火墙过滤掉的问题。打开FTP连接时,客户端会在本地打开两个随机非特权端口。第一个端口联系服务器的端口 21。但是,客户端不会运行port命令并允许服务器连接回其数据端口,而是发出PASV命令。这样做的结果是服务器会打开一个随机的非特权端口 P (P>1023),并将 port P 命令发送回客户端。然后,客户端发起从端口N>1023到服务器端口P的连接以传输数据。如果安全设备上未配置 inspection 命令,内部用户发起的出站 FTP 只能以被动方式工作。此外,外部用户发起的访问 FTP 服务器的入站请求将被拒绝。
TFTP
如 RFC 1350 中所述,TFTP 是一种用于在 TFTP 服务器与客户端之间读写文件的简单协议。TFTP 使用 UDP 端口 69。
为什么需要FTP检测?
某些应用程序要求由 Cisco 安全设备应用程序检查功能进行的特殊处理。此类应用程序通常将 IP 编址信息嵌入在用户数据包中,或者在动态分配的端口上打开辅助信道。应用检测功能与网络地址转换(NAT)配合使用,以帮助识别嵌入式编址信息的位置。
除了识别嵌入式编址信息外,应用检测功能还监控会话,以确定辅助信道的端口号。许多协议会打开辅助 TCP 或 UDP 端口以提高性能。某个已知端口上的初始会话用于协商动态分配的端口号。
应用程序检查功能监控这些会话、标识动态端口分配,并允许在特定会话持续时间内通过这些端口进行数据交换。多媒体和 FTP 应用程序展示了这种行为。
如果安全设备上未启用FTP检查,则会丢弃此请求,并且FTP会话不会传输任何请求的数据。
如果在ASA上启用FTP检查,则ASA监控控制信道并尝试识别打开数据信道的请求。FTP 协议将数据信道端口规范嵌入在控制信道流量中,并要求安全设备检查控制信道中是否进行了数据端口更改。
一旦ASA识别到请求,它会临时为会话期间持续的数据通道流量创建一个开口。通过这种方式,FTP 检查功能可监控控制信道、标识数据端口分配,并允许在会话持续时间内通过数据端口交换数据。
默认情况下,ASA通过global-inspection class-map检查FTP流量的端口21连接。安全设备还能识别出主动 FTP 会话与被动 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,目标端口则按照这些捕获后提到的步骤进行计算。
捕获内部接口,如图所示。
捕获外部接口,如图所示。
端口值使用最后两个输出进行计算(共六个)。剩下的4个元组是IP地址,2个元组是端口。如图所示,IP地址为192.168.1.5和241*256 + 159 = 61855。
捕获还显示,启用FTP检测时,端口命令的值会更改。Inside Interface Capture显示IP的实际值,而Client为服务器发送的端口为数据通道连接到客户端,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元组值,并且客户端会连接到该套接字以进行数据连接。
捕获内部接口,如图所示。
捕获外部接口,如图所示。
端口的计算方法保持不变。
如前所述,如果启用了FTP检测,则ASA会重写嵌入式IP值。此外,它还会为数据连接打开动态端口通道。
以下是连接详细信息,如果 FTP检测已禁用
连接:
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检测,当客户端位于Inside时,只有PASV命令起作用,因为没有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)#
验证
连接:
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 |
初始版本 |