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 NATTwice 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路由查找。