解决不对称流量经过JUNIPER防火墙,tcp连接重置丢失问题
2017-02-27 18:33
295 查看
背景:公司网络增加一台JUNIPER防火墙,用于外网网关使用,其实配置上网配置很简单,配置完成后,外网连接测试也都正常,但在特殊的测试环境中会出现一种情况,该环境如图所示:
现象:当PC机的网关指定为防火墙的内网接口后(而不是核心交换机地址),当pc在telnet或者ssh连接10.10.2.*网段的服务器(网关在核心交换机上)等时,tcp连接均会在20s后重置。我的环境中其实存在一些问题的,就是流经防火墙的流量并不对称,其中pc→服务器的流量经过防火墙,而服务器→pc的流量不经过防火墙,造成的流量往返路径不一致。
问题排查:
① 在pc上通过wireshark进行抓包,会发现在20s到来的时候,会收到一个tcp的rst报文,tcp_rst报文源地址为连接的10.10.2.*的目标主机所发。这个现象很奇怪,为什么目标服务器会无缘无故的发送rst报文,我再次在服务器上进行抓包,但是发现一个奇怪的问题,抓包的结果发现,服务器并没有发送tcp_rst报文,所以先将问题定位到juniper防火墙上。
② 在防火墙的network>zones>edit选项中存在一个“If TCP non SYN, send RESET back”选项,系统默认是开启的。该选项的功能是,tcp在3次握手建立连接时,如果防火墙没有检测到完整的3次握手报文,将认为该连接时不安全或者不完整的,防火墙将在tcp的连接time_out时间到达后,代替目标服务器发送一个tcp_rst的报文(报文源ip封装的为服务器的地址)。。
③ 将上文中的功能勾选去掉,但我在下面的测试中又遇到了其他的问题,虽然tcp的连接不会再提示重置,但连接在20s后,会卡死在连接状态,无法输入输出设备。没办法继续查。。。在juniper的web管理页面寻找无果,所以登录到命令行模式,查找有关tcp的参数配置命令,其中发现三条有意思的命令:unset flow no-tcp-seq-check ;set flow tcp-syn-check ;unset flow tcp-syn-bit-check ;其中set flow tcp-syn-check命令是默认开启的,我通过“unset flow tcp-syn-check”命令,关闭该功能后,发现问题解决,tcp连接不会再出现重置或者卡死的情况。
④ set flow tcp-syn-check的作用是,正常tcp在建立连接时需要进行3次握手,而我的测试环境中,流量出入防火墙的路径并不匹配,所以导致3次握手中的第2个报文没有经过防火墙,所以该命令告诉防火墙这是一个不严谨的tcp连接,防火墙将拒绝这种不严谨的tcp连接,过滤到相关的通信报文。“unset flow tcp-syn-check”将不再做tcp syn 3次握手的检查,因为该命令是在全局配置下配置的,所以关闭后这个防火墙的所有zones都将关闭该功能,从而降低了防火墙的安全性。但是启用NAT的接口则一定会做syn的检查。
问题回顾:
到现在基本的问题已经解决,至于tcp连接为什么会在20s重置或者卡死,应该是其他相关参数的配置,在哪里配置我没有找到。我在网上查到一条相关命令:set security screen ids-option untrust-screen tcp syn-flood timeout 20 这一条其意义是:TCP 连接的建立必须在20秒内完成,否则该连接请求将被丢弃。该命令是用于防范syn泛洪攻击的。我防火墙的版本是6.2.0r5.0,并没有在配置中找到该配置,并且也无法配置该命令。
在这里吐槽一下juniper的防火墙,能配置的内容太多了,对于新手来说真的不太容易。自定义服务(并指定tcp连接的超时时间);对于不同zones指定相关的防护功能(Security>screening>screen);配置同zones内的互访规则(只需要在zones配置中勾选);配置同接口下一个网段内用户的互访(接口下配置进行勾选)。。。不过juniper的确是我用过的安全性和多功能性最强大的企业级防火墙了。
现象:当PC机的网关指定为防火墙的内网接口后(而不是核心交换机地址),当pc在telnet或者ssh连接10.10.2.*网段的服务器(网关在核心交换机上)等时,tcp连接均会在20s后重置。我的环境中其实存在一些问题的,就是流经防火墙的流量并不对称,其中pc→服务器的流量经过防火墙,而服务器→pc的流量不经过防火墙,造成的流量往返路径不一致。
问题排查:
① 在pc上通过wireshark进行抓包,会发现在20s到来的时候,会收到一个tcp的rst报文,tcp_rst报文源地址为连接的10.10.2.*的目标主机所发。这个现象很奇怪,为什么目标服务器会无缘无故的发送rst报文,我再次在服务器上进行抓包,但是发现一个奇怪的问题,抓包的结果发现,服务器并没有发送tcp_rst报文,所以先将问题定位到juniper防火墙上。
② 在防火墙的network>zones>edit选项中存在一个“If TCP non SYN, send RESET back”选项,系统默认是开启的。该选项的功能是,tcp在3次握手建立连接时,如果防火墙没有检测到完整的3次握手报文,将认为该连接时不安全或者不完整的,防火墙将在tcp的连接time_out时间到达后,代替目标服务器发送一个tcp_rst的报文(报文源ip封装的为服务器的地址)。。
③ 将上文中的功能勾选去掉,但我在下面的测试中又遇到了其他的问题,虽然tcp的连接不会再提示重置,但连接在20s后,会卡死在连接状态,无法输入输出设备。没办法继续查。。。在juniper的web管理页面寻找无果,所以登录到命令行模式,查找有关tcp的参数配置命令,其中发现三条有意思的命令:unset flow no-tcp-seq-check ;set flow tcp-syn-check ;unset flow tcp-syn-bit-check ;其中set flow tcp-syn-check命令是默认开启的,我通过“unset flow tcp-syn-check”命令,关闭该功能后,发现问题解决,tcp连接不会再出现重置或者卡死的情况。
④ set flow tcp-syn-check的作用是,正常tcp在建立连接时需要进行3次握手,而我的测试环境中,流量出入防火墙的路径并不匹配,所以导致3次握手中的第2个报文没有经过防火墙,所以该命令告诉防火墙这是一个不严谨的tcp连接,防火墙将拒绝这种不严谨的tcp连接,过滤到相关的通信报文。“unset flow tcp-syn-check”将不再做tcp syn 3次握手的检查,因为该命令是在全局配置下配置的,所以关闭后这个防火墙的所有zones都将关闭该功能,从而降低了防火墙的安全性。但是启用NAT的接口则一定会做syn的检查。
问题回顾:
到现在基本的问题已经解决,至于tcp连接为什么会在20s重置或者卡死,应该是其他相关参数的配置,在哪里配置我没有找到。我在网上查到一条相关命令:set security screen ids-option untrust-screen tcp syn-flood timeout 20 这一条其意义是:TCP 连接的建立必须在20秒内完成,否则该连接请求将被丢弃。该命令是用于防范syn泛洪攻击的。我防火墙的版本是6.2.0r5.0,并没有在配置中找到该配置,并且也无法配置该命令。
在这里吐槽一下juniper的防火墙,能配置的内容太多了,对于新手来说真的不太容易。自定义服务(并指定tcp连接的超时时间);对于不同zones指定相关的防护功能(Security>screening>screen);配置同zones内的互访规则(只需要在zones配置中勾选);配置同接口下一个网段内用户的互访(接口下配置进行勾选)。。。不过juniper的确是我用过的安全性和多功能性最强大的企业级防火墙了。
相关文章推荐
- sql server 2000下的关于“provider: TCP 提供程序, error: 0 - 远程主机强迫关闭了一个现有的连接”问题的解决
- 重置TCP/IP协议解决Windows Server 2008连接中断问题
- MySQL远程连接丢失问题解决方法(Lost connection to MySQL server)
- 客户端无法tcp连接上本地虚拟机的问题(最后是linux防火墙问题)
- Nginx 504 问题解决 ---- 由 tcp_timestamps 导致的连接问题
- 如何解决 Windows XP 的 TCP/IP 连接问题
- lvs & keepalived的tcp 长连接的问题解决办法
- tcp短连接TIME_WAIT问题解决方法大全(3)——tcp_tw_recycle
- 多进程解决datasnap支持的tcp长连接数量少的问题
- 解决ICS的冲突问题,ICF(Internet 连接防火墙)当前在 windows2003 上启用, 要配置RR
- tcp短连接TIME_WAIT问题解决方法大全(5)——tcp_max_tw_buckets
- tcp短连接TIME_WAIT问题解决方法大全(1)——高屋建瓴
- tcp短连接TIME_WAIT问题解决方法大全(3)——tcp_tw_recycle
- 无法自动进入单步执行服务器。未能连接到服务器计算机“×.×.×.×”。调试器无法连接到远程计算机。原因是远程计算机不存在或防火墙阻止与远程计算机通信。请参阅”帮助“以协助解决问题
- 如何解决 Windows Server 2003 和 Windows XP 中丢失网络连接图标的问题
- 解决Ubuntu8.10下Firefox经常显示连接被重置的问题
- tping一个好用的TCP检测工具,外加win7 x64下解决msvcr71.dll丢失引起tping无法使用的问题
- SqlServer2005 provider: TCP 提供程序, error: 0 - 由于目标计算机积极拒绝,无法连接。) (Microsoft SQL Server,错误: 10061)问题解决
- 解决VMM 0x80338029 代理连接丢失问题
- 解决MySQL建立连接问题,快速回收复用TCP的TIME_WAIT