您订阅的产品有更新,请实时查阅
审查详情
宣布时间:2020-11-02
本文作者:阿昌
小锐经常接到客户的反响是,防火墙安排好了可是营业照旧欠亨,往往一筹莫展。今天小锐,不藏着掖着了,把收藏多年的佳酿,故障小窍门拿出来让喜欢小锐的各人细品细品。
防火墙的清静检查特征
网络源于生涯却又高于生涯,作为网络天下大门的鼎鼎台甫的“清静检查官“下一代防火墙,有他自己特有的“清静属性”,遵守网络天下的“清静规则”,我们就能更好的在防火墙的故障排查历程中游刃有余。这些“清静属性”倒成了我们在实验防火墙历程中的“绊脚石”,虽然排查故障历程是痛苦的,解决问题后的快乐是永远铭刻值得回味的。
防火墙为了相信数据包是可信的,在收到数据包的时间设置了两个“清静检查点”:
1 反向路径检查Reverse Path Forwarding (RPF)
2 异步检查(asymroute,也就是各人常说的毗连完整性检查)
两项检查只有都切合,才会继续其他�?榧觳�,不然直接扬弃数据包,那针对这两个检查特征我们睁开聊聊:
反向路径检查
所谓反向路径检查,简朴举例,就是若是从内网口port31收到一个数据包,反向的回包必需从内网口port31回去,也就是要确保源进源出,反之以为此数据包为诱骗包执行扬弃行动。假设,防火墙收到数据包是src_addr_ip->dst_addr_ip为172.16.1.16->219.222.191.72,防火墙不会执行其他�?榧觳椋ㄕ庑┠?榛嵘婕暗皆茨康牡刂纷弧TM等),而是先执行反向路径检查,凭证反向流量219.222.191.72->172.16.1.16,在查找路由表后若是也是从port31出去的,说明流量是正常的,继续处置惩罚其他�?榧觳�;若是保存另一个路由通路好比从port32出去或者甚至没有查找到响应路由,这个将导致反向路径检查失败防火墙执行扬弃行动。
使用debug flow抓包下令,会发明有个提醒为:reverse path check fail, drop,特殊显眼,这个提醒就是因反向路径检查失败直接执行了扬弃行动了,这种情形建议是查一下防火墙上的路由设置问题。
异步路由检查
所谓异步路由检查,就是要确保往返路径要一致,包管数据毗连的完整性。如:tcp的三次握手的数据包都要过防火墙,正常的tcp三次握手交互历程如下:
若是泛起往返路径纷歧致的情形,防火墙以为报文有问题直接扬弃。
小锐现在就说说这流量转发那里泛起问题了,从流量转发来看PC1会见服务器的流量tcp syn报文转发路径是
PC1->RouterA->NGFW->RouterB->internet->Server,回包syn+ack的转发路径是Internet>RouterB>RouterA->PC1,未经由防火墙,ack报文PC1->RouterA->NGFW(扬弃报文不转发),防火墙发明会话状态不完整(我没有看到syn+ack,我不信任你),执行扬弃行动。
使用debug flow下令对数据流剖析一样平常会提醒为:“org dir, ack in state syn_sent, drop”

虽然这里尚有更为奇葩的数据转发路径,若是是syn包转发路径不过防火墙,syn+ack的回复报文经由防火墙,这种情形下防火墙是无法找到对应的会话(我没有看到syn,我压根就没有你的会话),直接扬弃,这种也属于异步路由的一种特殊场景。使用debug flow抓包下令,会发明有个提醒为:“no session matched”。
尚有一种就是往返的二层mac纷歧致问题也是异步路由检查的一种特例了,一样平常这种场景常见于防火墙透明模式安排的时间。也就是若是过防火墙的数据包是mac1->mac2[pc1->pc2],回包的时间是mac3->mac1[pc1->pc2],这种数据包也是有问题的防火墙不会允许过的。
那可能各人会问小锐,异步路由检查可以关闭吗,现实营业场景不建议关闭的,做法是找到导致往返路径纷歧致的缘故原由,将异步问题终结掉,由于防火墙关闭异步检查后,多链路出口的场景源进源出功效将不生效,代理防护类utm功效将无法正常事情。
要领是:
#config system settings
#set asymroute enable
#end
此下令就是允许防火墙保存异步,这样防火墙可以不检查数据包的毗连完整性了。
#config system settings
#set tcp-session-without-syn enable (默认disable)
#end
此下令是告诉防火墙若是不是syn的报文一样也可以建设会话。
数据包穿越防火墙处置惩罚历程详解
正常的数据包穿越防火墙,需要经由哪些历程呢?可以通过debug flow下令审查整个完整历程。
#diagnose debug enable //开启debug
#diagnose debug flow show console enable //启用debug flow显示打印,有些版本不需要敲
#diagnose debug flow show function-name enable //显示debug flow 功效名称,便于打印信息输出,有些版本可以不必敲
#diagnose debug flow filter addr 192.168.1.110 //过滤条件,阻止抓包无用信息过多,这里过滤地址,filter ?可以审查过滤哪些条件
#diagnose debug flow trace start 100 //最先抓100条数据流
下面是数据包穿越防火墙的所有历程,我们一起来看看
id=36871 trace_id=1 msg="vd-root received a packet(proto=6, 192.168.
1.110:51661->119.253.62.131:80) from internal. "id=36871 trace_id=1 msg="allocate a new session-00016920" //internal口收到数据,建设新会话
id=36871 trace_id=1 msg="find a route: gw-192.168.118.1 via wan1" //查找到路由表
id=36871 trace_id=1 msg="find SNAT: IP-192.168.118.28, port-43333" //检测保存NAT设置
id=36871 trace_id=1 msg="Allowed by Policy-1: SNAT" //匹配战略,ID1
id=36871 trace_id=1 msg="SNAT 192.168.1.110->192.168.118.28:43333"//做NAT
id=36871 trace_id=3 msg="vd-root received a packet(proto=6,
119.253.62.131:80->192.168.118.28:43333) from wan1." // Wan1口收到返回数据包
id=36871 trace_id=3 msg="Find an existing session, id-00016920, reply direction" //数据包匹配会话id-0001692
id=36871 trace_id=3 msg="DNAT 192.168.118.28:43333->192.168.1.110:51661" //做反向的DNAT
id=36871 trace_id=3 msg="find a route: gw-192.168.1.110 via internal" //查找路由,发送到internal口
id=36871 trace_id=5 msg="vd-root received a packet(proto=6,192.168.1.110:51661->119.253.62.131:80) frominternal." //internal口收到后续数据包
id=36871 trace_id=5 msg="Find an existing session, id-00016920, original direction" //匹配会话id-0001692
id=36871 trace_id=5 msg="enter fast path" //直接转发
id=36871 trace_id=5 msg="SNAT 192.168.1.110->192.168.118.28:43333" //NAT
抓完数据流后可以通过以下下令关闭。
#diagnose debug flow trace stop //阻止
#diagnose debug disable //关闭
#diagnose debug reset //重置
#diagnose debug flow filter clear //可以清空debug的过滤条件设置
通过debug flow下令我们可以看到一个数据包流入防火墙后,各个�?榈南晗复χ贸头G樾�,整理成数据包处置惩罚流程图如下:
下面也一并先容一些小锐经常遇到的debug flow要害信息提醒,现总结如下:
若是是战略拒绝了数据包会见,会看到“Denied by forward policy check”,需要重点确认是否是清静战略阻挡所致。

若是无法正常管理防火墙的时间,debug flow往往会泛起提醒,msg="iprope_in_check() check failed, drop",一样平常会有下列三种可能缘故原由所致:
1、当会见NGFW举行远程管理(ping, telnet, ssh ...)时,正在会见的服务未在接口上启用。
2、当会见NGFW举行远程管理时(ping, telnet, ssh ...),正在会见的服务在接口上启用,可是设置了受信任的主机,这些主机与入站数据包的源IP不匹配;
3、当通过统一NGFW的另一个接口会见用于远程管理的NGFW接口(ping,telnet,ssh ...)时,不保存防火墙战略。
战略行动拒绝,或掷中隐含战略, 数据包被拒绝,一样平常会提醒:msg="Denied by forward policy check"
若是涉及ALG相关会话(这类流量一样平常是动态多通道协议如ftp、sip等,此类协议较重大,小锐下次再跟各人分享,嘻嘻)将送至 session-helper �?榇χ贸头�,一样平常会提醒:msg="run helper-ftp(dir=original)"
看到这里,小锐相信您也和小锐一样get 了不少防火墙的抓包下令了吧?那么接下来我们继续深入看下进阶版案例剖析吧。
进阶案例展示一下下令有何等神奇^-^
现场反响的拓扑简朴形貌如下:
全新下一代防火墙做端口映射,部分ISP专网IP会见端口映射的营业欠亨�;〉纳柚眉觳橐裁挥锌闯鑫侍馑�,那接下来使用强盛的debug flow对其数据流举行捕获,在信息输出中发明防火墙外地回复了RST报文(也就是图中的...from local. flag [R]),这点甚是可疑,说明问题照旧出在防火墙的哪个�?榇χ贸头;方谏�。
那我们一起开动头脑思索一下什么情形下防火墙会自动发送RST包?
从数据包转发上我们注重到tcp syn将通过防火墙,可是当吸收到tcp syn / ack时,NGFW会将tcp rst发送回tcp syn / ack的始发者。
纵然保存允许流量通过NGFW的战略,设置过失的IPpool或VIP[l7] 也会为TCP毗连造成毗连问题。(名词诠释:这里的ippool一样平常是用在上网做源地址转换的时间,一个地址不敷用,可以把内网的源地址转换成一个地址段规模内的地址,VIP是防火墙的端口映射,也就是各人常说的目的地址转换关系)
一样平常这种问题的可能性是:外地有响应的IP地址(好比是源地址)了,由于没有对应的服务在监听,会去响应RST报文,凭证这种排查思绪去检查设置。
那我们把问题点锁定在IPPool或VIP上重点排查,通过设置审查找到了这个始作俑者。将对应过失的战略设置删除问题解决。
经确认现场源地址10.85.40.3也加到了虚拟ip映射里了。关于防火墙设置不太熟悉的往往可能会泛起这种希奇的设置,有时间战略一多真的用肉眼很欠悦目出问题出在哪儿。
一样平常泛起防火墙回复...from local. flag [R]的情形有如下三种:
1、将服务器地址设置到了IPpool里;
2、将客户端IP地址设置到了IPpool里;
3、将客户端IP地址设置到了VIP里。
总结
Debug flow下令是防火墙实验安排历程中使用频率极高,并且故障诊断问题定位率可达80%左右,真的是算上是爱说大真话的下令了,提醒什么缘故原由一样平常故障就定位出来 了,是小锐力荐需掌握的下令,学会了就是掌握了上乘武功了哦,一起修炼起来吧。
