ICMP Redirect 报文导致TCP连接建立不起来的问题分析...

ICMP报文类型解析:从Ping到网络诊断的协议细节 本文深入解析ICMP报文类型及其在网络诊断中的应用,从基础的Ping操作到复杂的网络故障排查。详细介绍了ICMP协议的工作原理、报文格式以及常见类型如回显请求、可达报文、TTL超时等,帮助网络工程师高效诊断网络问题并优化性能。 阅读详情

文章出处:http://jasonccie.blog.51cto.com/2143955/391024


        今天碰到美国客户的一个问题,防火墙在升级了新release的os image后,如下客户拓扑环境所示,pc2可以访问pc1,但是pc1无法访问pc2,不过ping都可以通。



        实验室分析,发现原来是icmp redirect报文惹得祸,代码中的错误导致的。

        客户的配置:

        pc2配置了一条缺省路由,指向10.20.1.1,防火墙配置了一条静态路由,到目的地址10.20.2.0/24 的报文,下一跳为10.20.1.10。

        路由器上缺省路由指向10.20.1.1,pc1配置了缺省路由指向10.20.2.1。

       

        分析:

        (1)从pc2发向pc1的报文,根据路由会首先发送到防火墙接口10.20.1.1,根据icmp redirect规则,防火墙会发icmp redirect报文给pc1,指明从pc1去往目的地址10.20.2.20的下一跳网关是10.20.1.10,pc1的转发表里就会多一条到主机10.20.2.20的路由,之后的所有报文会直接发到10.20.1.10

        pc1可以正确收到pc2发过来的报文,并且pc1返回给pc2的报文,通过路由器直接送到10.20.1.20。从pc2到pc1的交互是没有问题的;

        (2)现在我们考虑从pc1主动发起到pc2的TCP连接。pc1会首先发一个TCP同步syn报文给pc2,当pc2收到这个报文后,pc2会回一个syn/ack报文给pc1,根据路由表这个syn/ack的报文会发到防火墙端口上。

        现在问题就来了!防火墙不同于路由器,防火墙有大量安全特性。当防火墙收到syn/ack报文时,在cache中却查询不到pc1发送的连接(syn)信息,我们的防火墙代码会丢弃这个报文,并且发送一个TCP RST报文给pc2,这样pc1就永远都没有办法与pc2建立起TCP连接了。


        解决办法:

        防火墙收到syn/ack的时候,丢弃报文,但是仍然会发一个icmp redirect报文给pc2。pc2中就有了一条主机路由。

        防火墙仍然再发送一个TCP RST报文给pc2。(这个可以商榷)

        现在pc1就可以主动与pc2建立起TCP连接了。


        总结:

        在设计拓扑环境的时候,必须考虑数据流动的两个方向,并且针对不同类型设备,要做不同的网络方案考虑。

        防火墙和路由器在很多方面不同,防火墙有很多4-7层的特性是必须要考虑的。

        !!!所以,在设计包含有防火墙设备的网络方案的时候,必须要考虑4层的各个方向的连通性,所以不能只通过ping / trace 工具做网络分析了,必须使用TCP ping工具做网络分析,iperf是很好的网络测试分析工具。

        !以下规则引用自TCP / IP 协议详解第一卷,主要针对4.4 BSD操作系统所做的分析,不一定与实际网络设备router实现一致。


        ICMP重定向报文的接收者必须查看三个IP地址:

        1.  导致重定向的IP地址,即ICMP重定向报文的数据位于IP数据报的首部;

        2.  发送重定向报文的路由器的IP地址,包含重定向信息的IP数据报中的源地址;

        3.  应该采用的路由器IP地址在ICMP报文中的4~7字节;


        关于ICMP重定向报文有很多规则:

        首先,重定向报文只能由路由器生成,而不能由主机生成。

        另外,重定向报文是为主机而不是为路由器使用的。假定路由器和其他一些路由器共同参与某一种选路协议,则该协议就能消除重定向的需要。重定向报文只会在主机上生成一条目的地址为32位主机的路由。路由器不会处理重定向报文。

        在4.4 BSD系统中,当主机作为路由器使用时,要进行下列检查,在生成ICMP重定向报文之前这些条件都要满足:

        1.  出接口必须等于入接口;

        2.  用于向外传送数据报的路由不能被ICMP重定向报文创建或修改过,而且不能是路由器的默认路由;

        3.  数据报不能用源站选路来转发;

        4.  内核必须配置成可发送重定向报文;


       另外,一台4.4 BSD主机收到 ICMP 重定向报文后,在修改路由表之前要做一些检查,这是为了防止路由器或主机的误操作,以及恶意用户的破坏,导致错误地修改系统路由表;

        1.  新的路由器必须直接与网络相连接;

        2.  重定向报文必须来自当前到目的地所选择的路由器;

        3.  重定向报文不能让主机本身作为路由器;

        4.  被修改过的路由必须是一个间接路由;


        关于重定向最后要指出的是,路由器应该发送的只是对主机的重定向,代码1 或 3, 而不是对网络的重定向。子网的存在使得难于准确指明何时应发送对网络的重定向而不是对主机的重定向,只当路由器发送了错误的类型时,一些主机才把收到的对网络的重定向当作对主机的重定向来处理。

        再举个例子分析上面的规则,如下拓扑所示,配置如上图的客户配置,但pc3发送报文到pc1的时候,根据规则,


防火墙仍然会产生一个icmp redirect 单播报文,这个报文会经路由器转发到pc3。

但是pc3不会根据这个icmp redirect报文生成一条主机路由,因为下一跳不在直连网络中。





ICMPTCP 协议层对比:3 种防火墙策略导致 Telnet 通 Ping 本文深入解析ICMPTCP协议层的差异,探讨三种防火墙策略如何导致Telnet通而Ping通的现象。通过分析Windows防火墙、Linux iptables和云平台安全组配置,揭示协议处理机制的同,并提供实战排查指南和安全最佳实践,帮助网络运维人员快速定位和解决此类问题 阅读详情

相关推荐

协议簇:ICMP 解析

简介 ICMP 是 Internet Control Message Protocol 的简写. 它主要用来调试网络通信环境中存在的问题. 比如,当 IP 数据包总是无法正常的发送到目的地址, 当网关没有足够的 buffer 来转发对应的数据包 等问题. 值得一提的是,它属于网络层,属于传输层. 也就是说它和 IP 协议处于同一层次,而并是与 TCP/UDP 处于同一层次. 消息格式 IC...

Useless Programmer 的专栏 1159

ICMP重定向(ICMP redirect)实验分析

ICMP基本概念和ICMP重定向攻击的实验分析

记录学习,一起进步 1738

ICMP重定向介绍,ICMP重定向介绍

ICMP重定向介绍ICMP重定向介绍ICMP重定向介绍

ICMP redirect

这要从一个问题说起 公司有一台设备,在联网并从同一个cdn节点上获取数据,发现用着用着从cdn节点上获取数据就失败了,但是这时设备在ping百度以及上其它网还是正常的,在当时这还是很令人费解的。在分析app,设备网络特性以及公司网络架构后发现了这一问题的原因是icmp redirect导致问题ICMP重定向消息是路由器发现主机针对某个目的ip有一个更好的路由策略,其使用ICMP re

shichaog的专栏 1万+

优化网络传输效率的秘密武器——ICMP Redirect揭秘!

ICMP Redirect是一种由路由器生成并发送给主机的控制消息。其作用是告知主机发送数据包时选择更优路径,以提高网络性能和优化数据传输。当路由器接收到一个数据包,发现有更短的路径可以到达目标地址时,它会发送ICMP Redirect消息给发送方主机,告知其修改路由表,选择更优的下一跳路由路径。

m0_72410588的博客 1002

icmp 重定向 Linux,ICMP重定向(ICMP redirect

实验目的:验证ICMP Redirect的两种情况:一路由器收到数据包接口正是去往目的地的出口时,会向源发送ICMP重定向,通告源直接将数据包发向自己的下一跳。二数据包的源地址和自己的下一跳在同一网段时,会向源发送ICMP重定向,通告源直接将数据包发向自己的下一跳。实验拓扑:实验说明:本实验,R4模拟内部服务器,R1的默认网关指向R3。配置:R1:interface FastEthernet0/0...

weixin_36296444的博客 824

ICMP重定向(ICMP Redirect

网络中的路由器通过相互之间的共同努力,将用户的数据包转发到目的地。通常情况下,主机都会将去往远程网络的数据包发送到路由器,路由器再尽最大努力转发数据。但是在某些情况下,收到数据包的路由器可能并是去往目的地的最优选择,也就是说该路由器并在源与目标的路径当中,或者说数据源应该将数据交给其它路由器来转发。如果某台路由器真的发现自己应该为用户转发数据,而希望让用户选择其它路由...

weixin_34410662的博客 1785

ICMP Redirect Attack Lab(SEED实验)

本篇实验比较简单,所以并无重点总结。需要注意的是,这种改写与之前的ARP实验相同,缓存内容会被定时刷新,因此应当写有自动化程序代以实施。但是本次实验中由于作者也提出了的容器原因,当且仅当受害者执行ping时才能进行转向,因此本实验验证的攻击方式真正的可行性与适用性还应在真实环境下重新验证。再加上本实验的漏洞已经被各大系统所弥补(参见Task 1首部中sysctl的设置),所以这种攻击的可行性并高。

l4kjih3gfe2dcba1的博客 3626

Attacks on TCP/IP Protocols (Task2) ICMP Redirect Attack

Task2:  ICMP Redirect Attack

我有一颗五角星 2327

Linux内核网络栈1.2.13-icmp.c概述

参考资料 <<linux内核网络栈源代码情景分析>> icmp协议 在实现的过程中, ICMP协议工作再IP协议之上,但又TCP协议工作再一级,而是在下一级,在一般ICMP模块处理完后,还需要进一步调用TCP协议进行处理。该协议的目的主要是用于通报错误或者探测远端主机信息。 ICMP的主要流程 icmp_send函数 该函数主要是发送一个ICMP错误通报数据包 /*...

qq_33339479的博客 609

ICMP 协议深度解析:从 Ping 到 Traceroute 的 5 种报文类型实战

本文深入解析ICMP协议,从Ping到Traceroute的5种报文类型实战,详细介绍了ICMP报文结构、Echo Request/Reply、Time Exceeded、Destination Unreachable等核心类型及其应用场景。通过Python代码示例展示如何构造和解析ICMP报文,帮助读者掌握网络诊断工具的实现原理与安全实践。

dianchaozong3657的博客 406

linux iptables icmp重定向redirect

最近防火墙要使用icmp重定向这个功能,所以事先看了看介绍下面自己来谈一谈它的使用原理      网络中的路由器通过相互之间的共同努力,将用户的数据包转发到目的地。通常情况下,主机都会将去往远程网络的数据包发送到路由器,路由器再尽最大努力转发数据。但是在某些情况下,收到数据包的路由器可能并是去往目的地的最优选择,也就是说该路由器并在源与目标的路径当中,或者说数据源应该将数据交给其它路由器来

我心如水 9346

ICMP Redirect

故障二:ICMP Redirect   这是个什么问题呢?首先给大家描述一下。虽然路由器在运行时没有出现明显的异常现象,但是却经常看到这样的日志:    Jul 09 15:54:21 %ACL_LOG-I-PERMIT, ACL [out]   on "uplink" ICMP 209.24.79.200 -> 219.157.38.52   Jul 09 ...

weixin_33967071的博客 342

网络ICMP 协议详解

ICMP 的全称是Internet Control Message Protocol(互联网控制协议),它是一种互联网套件,它用于IP 协议中发送控制消息。也就是说,ICMP 是依靠 IP 协议来完成信息发送的,它是 IP 的主要部分,但是从体系结构上来讲,它位于 IP 之上,因为 ICMP 报文是承载在 IP 分组中的,就和 TCP 与 UDP 报文段作为 IP 有效载荷被承载那样。

白话机器学习 2万+

ICMP

Linux内核ICMP报文的会话建立 2014-04-12 14:30:31 分类: LINUX         在Linux内核中数据包会有连接跟踪的功能,Linux内核根据数据包的五元组创建连接跟踪表。但对于有些数据包是建立连接的,本篇文章介绍了ICMP的回应报文reply,就会在内核中创建连接会话。我们知道会话的建立是在NF_IP_PRE_ROUTING的

H002399的专栏 659

TCP/IP详解学习笔记

1 基本概念 为什么会有TCP/IP协议 在世界上各地,各种各样的电脑运行着各自同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别。就好像圣经中上帝打乱了各地人的口音,让他们无法合作一样。计算机使用者意识到,计算机只是单兵作战并会发挥太大的作用。只有把它们联合起来,电脑才会发挥出它最大的潜力。于是人们就想方设法的用电线把电脑连接到了一起。

Let it go 1706
上一篇: 虚拟网卡TUN/TAP设备使用实例
下一篇: 纳格算法
ixidof
博客等级 码龄19年 222粉丝 2原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值