3.5 ICMP不可达报文的处理

TCP处理ICMP不可达报文的机制
本文探讨了在TCP三次握手过程中,当遇到ICMP“目的不可达”报文时的情况。两种典型场景包括:client端发送SYN请求后未找到server端对应处理,以及client端在SYN|ACK响应后崩溃。Linux内核中的TCP在接收到ICMP错误报文后,会通过tcp_protocol数据结构及时调整TCP状态机,如设置为TCP_CLOSE并释放资源,确保连接资源的有效回收。

  在三次握手阶段有两种情况TCP会收到ICMP“目的不可达”报文:

1、client端通过connect系统调用发送SYN请求到server端后,server没有进程在相应的地址或端口处理请求,这时client端会收到ICMP不可达报文

2、client端通过connect系统调用发送SYN请求后崩溃,server端收到SYN后发送SYN|ACK,client端收到SYN|ACK后会给server发送ICMP不可达报文

  TCP在收到ICMP目的不可达报文后是如何处理的呢?Linux的TCP在系统启动时会向IP层注册一个数据结构——tcp_protocol:

1552 static const struct net_protocol tcp_protocol = {
1553     .early_demux    =   tcp_v4_early_demux,
1554     .handler    =   tcp_v4_rcv,    
1555     .err_handler    =   tcp_v4_err,
1556     .no_policy  =   1,   
1557     .netns_ok   =   1,   
1558 };
  其中,tcp_v4_rcv是TCP协议入口函数,而tcp_v4_err则是ICMP报文在TCP层的处理函数:

 326 void tcp_v4_err(struct sk_buff *icmp_skb, u32 info)
 327 {       
 328     const struct iphdr *iph = (const struct iphdr *)icmp_skb->data;
 329     struct tcphdr *th = (struct tcphdr *)(icmp_skb->data + (iph->ihl << 2));
 330     struct inet_conn
<think>好的,用户想了解ICMP不可达报文攻击的工作原理及防御方法。首先,我需要回顾一下ICMP协议的基本知识。ICMP(Internet Control Message Protocol)用于在IP网络中传递控制消息,比如错误报告或状态查询。ICMP不可达报文通常用于通知发送方数据包无法到达目的地或端口。 接下来,攻击原理方面,ICMP不可达报文攻击属于网络层的拒绝服务攻击(DoS)。攻击者可能伪造这些报文,误导目标主机或路由器中断现有连接或阻止新连接。例如,攻击者可以发送虚假的ICMP不可达报文,声称目标主机不可达,导致合法用户无法访问服务。根据引用[2]提到的,攻击者可能使用自定义的数据包构造工具来生成这些伪造的报文,绕过IDS或防火墙的检测。 然后,防御方法需要考虑多个层面。首先是入口过滤,防止IP地址伪造,这可以通过配置路由器实现,如RFC 2827推荐的uRPF(单播反向路径转发)。其次是网络设备配置,限制ICMP不可达报文的发送频率,避免被滥用。引用[4]提到的Apache模块配置阈值的方法,类似思路可以应用在网络设备上设置速率限制。此外,部署IDS/IPS系统实时检测异常ICMP流量,引用[1]中的攻击检测和过滤策略在此适用。另外,网络分段和QoS策略也能有效隔离和优先处理关键流量,减少攻击影响。 用户可能需要更详细的配置示例或具体工具推荐,但根据现有引用,可能需要结合设备文档。同时,相关问题部分需要涵盖攻击影响、检测工具、协议漏洞、DDoS中的角色等,确保全面性。最后,确保回答结构清晰,分点说明,并正确引用相关材料。</think>### ICMP不可达报文攻击原理及防御方法 #### 一、攻击原理 1. **报文伪造** 攻击者伪造ICMP Type 3(目标不可达报文,通过修改源IP地址伪装成路由器或目标主机,向通信双方发送虚假错误通知。例如: - Type 3 Code 3(端口不可达) - Type 3 Code 0(网络不可达) 此类报文可能导致TCP连接被强制中断(若攻击目标是TCP RST)或阻止新连接建立[^2]。 2. **攻击效果** - **会话劫持**:中断已建立的TCP会话 - **服务拒绝**:阻止用户访问特定服务(如HTTP/SSH) - **路由欺骗**:误导流量路径,引发网络拥塞或黑洞路由 #### 二、防御方法 1. **入口过滤(Ingress Filtering)** 在边界路由器配置uRPF(单播反向路径转发),阻断源IP地址伪造的流量。例如Cisco设备命令: ```bash interface GigabitEthernet0/0 ip verify unicast source reachable-via rx ``` 2. **ICMP速率限制** 限制设备生成ICMP不可达报文的频率。以华为设备为例: ```bash icmp rate-limit unreachable 100 # 每秒最多发送100个不可达报文 ``` 3. **IDS/IPS检测** 部署入侵检测系统识别异常ICMP流量特征: - 高频ICMP Type 3报文(如>1000个/秒) - 源IP与拓扑不符的不可达报文 引用[1]中提到的“攻击检测和过滤”策略可直接应用[^1]。 4. **协议加固** - 禁用不必要的ICMP响应(如仅允许Type 8/0用于Ping) - 使用IPsec或TCP MD5签名验证关键流量完整性 5. **网络分段与QoS** 通过VLAN或SDN隔离敏感业务流量,并配置QoS优先级策略,确保关键服务不受ICMP泛洪影响[^4]。 --- ### 相关问题 1. ICMP不可达报文攻击如何影响TCP状态机? 2. 如何通过Wireshark检测伪造的ICMP不可达报文3.ICMP Type 3外,还有哪些ICMP类型易被滥用? 4. ICMP攻击在DDoS中的具体作用是什么? --- ### 引用说明 [^1]: 防御策略需覆盖攻击前、中、后全周期,如入口过滤(攻击前)、IDS检测(攻击中) : 攻击者可能使用Scapy等工具构造伪造报文 : QoS策略可参考Apache Mod_qos的阈值控制思想
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值