为什么服务器突然回复RST——小心网络中的安全设备
RST产生原因
一般情况下导致TCP发送RST报文的原因有如下3种:
1、 SYN数据段指定的目的端口处没有接收进程在等待。
2、TCP想放弃一个已经存在的连接。
3、TCP接收到一个数据段,但是这个数据段所标识的连接不存在。
对于第一种情况,常见的例子是终端访问服务器未开放的端口,服务器回复RST报文。比如,访问Web服务器的21端口(FTP),如果该端口服务器未开放或者阻断了到该端口的请求报文,则服务器很可能会给终端SYN报文回应一个RST报文。因此,服务器对终端的SYN报文响应RST报文在很多时候可以作为端口扫描器判断目标端口未开放的一个可靠依据。当然,在大多数场景下,服务器对到达自身未监听端口的报文进行丢弃而不响应是一种更为安全的实现。
第二种情况比较好理解,正常拆除一个已有TCP连接的方式是发送FIN,FIN报文会在所有排队数据都发出后才会发送,正常情况下不会有数据丢失,因此,这也被称为是有序释放。另外一种拆除已有TCP连接的方式就是发送RST,这种方式的优点在于无需等待数据传输完毕,可以立即终结连接,这种通过RST拆除连接的方式被称为异常释放。大多数时候服务器需要针对两种不同的拆链方式提供不同的处理方法,也有很多服务器无法识别RST方式的拆链,这时候就需要格外小心,因为一旦出现这种情况,尤其是大量终端使用RST方式拆链,可能会导致服务器侧连接无法得到有效释放,影响其正常业务侧处理能力。
最后一种情况,TCP通过4元组(源目IP,源目端口)唯一的标识一个连接,由于TCP状态机的存在,触发TCP连接建立的第一个报文标志位一定是SYN置位,因此,当服务器接收到一个新四元组(服务器本地没有这个连接)的非SYN首包就会丢弃该报文并向终端响应一个RST报文。最后一种情况,TCP通过4元组(源目IP,源目端口)唯一的标识一个连接,由于TCP状态机的存在,触发TCP连接建立的第一个报文标志位一定是SYN置位,因此,当服务器接收到一个新四元组(服务器本地没有这个连接)的非SYN首包就会丢弃该报文并向终端响应一个RST报文。
问题现象
通过终端登录Web,输入用户名密码后Web页面显示连接被重置。抓包报文如下:

终端10.153.47.104访问服务器10.153.42.65的8051端口,三次握手建立完成后,终端向服务器发送认证请求,提交用户名和密码,而后服务器立即回应RST拆除已有连接。
问题分析
通过对比前述3种情况,发现只能匹配上原因2,但从原因2来看也只是说明服务器在这个位置确实可以回复RST报文,无法解释为什么服务器要回复RST。
这个时候我们需要考虑一个问题:这个RST报文是不是真的是服务器回复的?从RST报文的seq来看确实可以和前序报文对应得上(由于SYN标志位在逻辑上占用1字节序号,所以RST报文的序号是第二个报文的序号加1)。一个很好的判断一条流是否是同一个服务器发送的方法是对比同一个方向的报文的IP头中的TTL值。由于TCP对乱序非常敏感,而网络设备逐包转发数据会引入更严重的乱序,因此网络中的设备一般都是逐流转发(按五元组,源目IP、源目端口、协议),所以,大部分情况下,在捕获的数据流中,同一条流的同一个方向的报文总是有相同的TTL值,我们基于这个判断来看一下上方截图中的第二个和第五个报文的TTL值:
第二个报文的TTL值为251:

第五个报文的TTL为122:

因此,基本可以判断RST报文为中间传输设备发出。排查流量路径上的安全设备,在IPS中找到对应的日志:

由于用户名和密码都是admin且明文传输,因此触发了Web用户登录弱口令的防御规则,连接被重置,IPS冒充服务器向终端发送RST报文拆链,如果在IPS设备抓包,可以看到IPS也同时冒充终端发送了RST给服务器。
在很多环境中,中间安全设备通过RST拦截报文时初始TTL一般是64、128、255,这时候根据终端抓包的TTL就能反推出进行拦截的安全设备所处的位置。当然也有一些安全设备进行拦截的时候TTL初始值无迹可寻,这时候只能逐跳排查了。
为什么服务器突然回复RST——小心网络中的安全设备的更多相关文章
- 阿里云VPC服务器通过ClassicLink访问经典网络服务器
VPC中的服务器名称是 vpc-ecs1 , 经典网络中的服务器名称是 classic-ecs2 ,要实现 vpc-ecs1 通过内网访问 classic-ecs2 . VPC 网段是 10.0.0. ...
- 通过python基于netconf协议获取网络中网元的配置数据,助力企业网络控制自动化轻松实现!
摘要:在当今信息化时代,大多数企业都需要网络支撑企业的ICT运行,提升企业运行效率,针对企业网络中的网元设备(包括交换机,路由器,防火墙等),很多企业希望根据自身的业务特点定制网络管理,比如可以实现网 ...
- 客户也可以申请它使用的最后一个IP地址。如果该客户所在的网络中此IP仍然可用,服务器就可以准许该申请。
http://baike.baidu.com/item/IP地址 公有地址 公有地址(Public address)由Inter NIC(Internet Network Information Ce ...
- DDos攻击的一些领域知识——(流量模型针对稳定业务比较有效)不稳定业务采用流量成本的检测算法,攻击发生的时候网络中各个协议的占比发生了明显的变化
在过去,很多防火墙对于DDoS攻击的检测一般是基于一个预先设定的流量阈值,超过一定的阈值,则会产生告警事件,做的细一些的可能会针对不同的流量特征设置不同的告警曲线,这样当某种攻击突然出现的时候,比如S ...
- Android 从网络中获取数据时 产生部分数据乱码的解决
产生部分数据乱码的解决 标签: android部分中文乱码 2014-04-12 23:24 12366人阅读 评论(10) 收藏 举报 分类: [Android 基础](15) 版权声明:本文为博主 ...
- 网络中两台主机的通信过程(TCP)
两台主机通信有两种情况:1.在同一网段中 2.不在同一网段中 (1.)在同一网段的通信过程 主机在应用层上的操作: TCP/IP协议上tcp的端口对应的各种应用程序,客户机要访问某个应用程序就会要求打 ...
- http报文在网络中是明文传输的,所以不安全。HTtp必然来临
HTTP数据在网络中裸奔 HTTP明文协议的缺陷,是导致数据泄露.数据篡改.流量劫持.钓鱼攻击等安全问题的重要原因.HTTP协议无法加密数据,所有通信数据都在网络中明文“裸奔”.通过网络的嗅探设备及一 ...
- Sun开发的JINI技术在网络中的应用
一.概述 Sun公司开发的Jini系统是一种创新技术,听说它的人很多但较少被人理解.Jini系统可利用Java扩展网络计算的范围,并有可能成为最佳解决方案. Jini是Sun公司的研究与开发项目,它能 ...
- Windows Azure 虚拟网络中虚拟机的网络隔离选项
最近我们发布了一份<Windows网络安全白皮书>(单击此处下载),文中深入说明了客户可以如何利用该平台的本地功能,为他们的信息资产提供最好的保护. 由首席顾问Walter Myer ...
随机推荐
- Android自定义控件:图形报表的实现(折线图、曲线图、动态曲线图)(View与SurfaceView分别实现图表控件)
图形报表很常用,因为展示数据比较直观,常见的形式有很多,如:折线图.柱形图.饼图.雷达图.股票图.还有一些3D效果的图表等. Android中也有不少第三方图表库,但是很难兼容各种各样的需求. 如果第 ...
- 大前端技术系列:TWA技术+TensorFlow.js => 集成原生和AI功能的app
大前端技术系列:TWA技术+TensorFlow.js => 集成原生和AI功能的app ( 本文内容为melodyWxy原作,git地址:https://github.com/melodyWx ...
- Spring Cloud gateway 网关四 动态路由
微服务当前这么火爆的程度,如果不能学会一种微服务框架技术.怎么能升职加薪,增加简历的筹码?spring cloud 和 Dubbo 需要单独学习.说没有时间?没有精力?要学俩个框架?而Spring C ...
- super()函数的作用
1.super()调用父类方法,并重写>>>>>>减少代码量(Square类实现) 2.它允许您在子类中调用超类的方法. 这种情况的主要用例是扩展继承方法的功能. ...
- LNMP+Redis
如果要让php支持redis需要安装php-redis模块.可以再github上下载哦. https://github.com/phpredis/phpredis 配置lnmp环境,太简单了就不演示了 ...
- 微服务SpringCloud之GateWay服务化和过滤器
Spring Cloud Gateway 提供了一种默认转发的能力,只要将 Spring Cloud Gateway 注册到服务中心,Spring Cloud Gateway 默认就会代理服务中心的所 ...
- 建议收藏备用:.net core使用QRCoder生成普通二维码和带Logo的二维码详细使用教程,源码已更新至开源模板
随着互联网越来越生活化,二维码的使用越来越普遍,不论是扫码支付还是扫码关注引流,似乎我们总是离不开二维码,那么很多需要推广的文章或社区想要自己的二维码,那么你是不是需要在网站直接提供给用户呢?很多开发 ...
- 使用Typescript重构axios(一)——写在最前面
0.系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三)- ...
- python手册学习笔记3
笔记3 > http://www.pythondoc.com/pythontutorial3/datastructures.html 装饰器 def log(text): def decorat ...
- 必知必会的JavaJDK工具
JDK中有很多用于监控诊断的系统工具,对于Java程序员来说,无疑是用来了解自己程序运行时性能好坏的强大工具. 在JDK的bin目录下就可以找到这些工具. JPS 在Linux有一个命令叫做ps,可以 ...