ASA-数据包处理流程
一、理解数据包处理流程
数据包的处理流程是配置和排错的重要前提,避免在设计网络和配置安全策略的时候出现问题。当集成多项技术时,数据包的处理顺序显得尤为重要,也是编写NAT和ACL的关键前提。
二、数据包处理流程
1、Ingress Interface
数据包抵达入接口网卡,input计数器随之递增,CPU定期查询该信息。
2、Locate Connection
检查conn table中是否有已存在的连接:
连接存在,步骤跳至Stateful Inspection。
连接不存在,执行NAT Untranslate。
3、NAT Untranslate
根据NAT规则检查数据包,生成NAT转换表(show nat divert-table查看),但是此步骤不会对数据包执行NAT转换,仅为ACL检查提供依据。
4、ACL Check
连接的First Package才会执行ACL Check,换句话说对于TCP SYN和UDP报文会进行ACL Check,对于TCP非SYN数据包会直接Drop。如果有NAT的情况,放行的是真实IP,而不是转换IP。连接的First Package被匹配中的ACE放行,hitcnt就会递增。
hitcnt=0并不是代表该ACE可以删除,需要进一步检查conn table中连接是否存在,如果不存在则可以将其拆除,如果存在一般为长连接。如果贸然将其拆除,长连接使用者不知道该特性,继续使用该连接发包,会被ASA丢弃。
如果被匹配中的ACE拒绝,就会Drop并记录日志。
5、Stateful Inspection
状态监控主要确保TCP/UDP/ICMP等协议级别的合规性,当然ASA ALG可以上升到Layer 7,比如DNS、FTP、SIP等。对于具有第二连接的,比如FTP,ACL打孔也是这一步完成的。状态监控丢弃的数据包不会记录到ASP中(通常记录到syslogs和debugs)。
6、NAT IP Header
如果是NAT则转换IP首部中的源目IP地址,如果是PAT则转换IP首部中的源目IP地址和TCP首部中的端口地址。随后重新计算IP首部校验和。
地址转换有两种配置模式,分别是Object NAT和Twice NAT。Object NAT是地址转换的一种配置模式,将主机、网络、服务、协议定义为对象并在Inside-NAT(Static NAT和Dynamic NAT)或Outside-NAT(Static NAT和Dynamic NAT)中调用。
Twice NAT是地址转换的另一种配置模式,基于对象的NAT基础上将Inside-NAT和Outside-NAT整合成一条具备双向的NAT。
ASA支持同时配置这两种NAT,两种NAT所生成的NAT转换表项有顺序之分,Twice NAT优于Object NAT,Object NAT中的Static NAT优于Dynamic NAT。
show nat
7、Egress Interface
根据NAT规则或者conn table中的现有连接选择出接口。如果NAT没有定义出接口,那么就会根据全局路由表来确定出接口。
8、L3 Route Lookup
Once at egress interface, an interface route lookup is performed。一旦确定出接口,就会查询接口路由表。接口路由表是指route inside/route outside,基于接口配置的路由所形成的路由表。例如确定出接口是Outside,就会查route Outside里有没有正确的路由,确定出接口是Inside,就会查route Inside里有没有正确的路由。这也是为什么多运营商接入时,需要为不同的运营商写不同AD的默认路由的原因。如果L3 Route Lookup查询失败,会记录系统日志:
9、L2 Address Lookup
一旦查询到出接口路由的下一跳IP,就需要通过ARP查询下一跳IP的MAC地址:
L2查询成功:重新封装L2首部源目MAC部分
L2查询失败:不记录系统日志;show arp不显示L3的MAC,且debug arp显示未收到ARP response。
10、Transmit Packet
数据包封装完成后会被扔到物理链路上,可能会有种情况:
正常情况下,output计数器会随之增加。
流量突发情况下,超过出接口超额订购比的流量将被Drop,underruns计数器增加。
总结ASA处理数据包的步骤:先conn table查询有无连接,有连接直接状态化监控是否合规,无连接执行NAT、首包ACL检查、状态化监控,随后执行NAT转换以及L3路由查找。
评论