网络协议头部加固是通过校验机制、字段约束和语义检查实现报文自验身,ip/tcp校验和、关键字段合法性、urpf及分片与扩展头管控共同构建协议层可信边界。

网络协议头部加固不是加一层外壳,而是让报文自己“会验身”——通过校验机制、字段约束和语义检查,使非法或异常报文在进入核心处理前就被识别并丢弃。关键不在拦截,而在“不信任任何输入”,从协议层就建立可信边界。
IP/TCP校验和验证:堵住篡改入口
IP头和TCP头的校验和是基础但极易被忽视的防线。攻击者常伪造报文绕过简单过滤,而校验和验证能直接让篡改包失效。
- IP层校验和仅覆盖IP头部(不含载荷),用于检测路由过程中头部被意外或恶意修改的情况;实现时需按16位累加、回卷求反,对齐字节、处理奇数长度等细节必须严格,否则可能漏判
- TCP校验和覆盖伪头部(源/目的IP、协议号、TCP长度)+ TCP头 + 数据载荷,确保端到端完整性;伪头部设计防止IP地址欺骗后仍能通过校验,是抵御中间人篡改的关键
- 实战建议:在协议栈收包路径早期(如netif_receive_skb之后、协议分发之前)强制校验;校验失败直接kfree_skb并计数,不交由上层处理
关键字段合法性检查:拒绝“长得像”的畸形包
很多攻击不靠加密或洪泛,而是利用协议字段的模糊解释空间——比如超长IP选项、非法TCP标志组合、异常分片偏移。头部加固需做语义级校验。
- IP头部:检查ihl是否≥5(最小20字节)、总长度是否≥ihl×4、片偏移与MF标志逻辑一致、TTL是否在合理范围(如0–255,但生产环境通常≥1)
- TCP头部:禁止SYN+FIN、SYN+RST等非法标志组合;检查数据偏移是否≥5且≤(tcp_len−20)/4;确认窗口大小非负,紧急指针在有效范围内
- 实战建议:在ip_rcv()和tcp_v4_do_rcv()入口处插入字段校验逻辑;对违反规则的报文记录类型(如“LAND包”“Teardrop偏移”)并丢弃,避免日志刷屏可设速率限制
反向路径验证(URPF):掐断源地址欺骗
IP源地址伪造是多数反射攻击、扫描和跳板渗透的基础。URPF不是加密技术,而是路由层面的“身份核验”,强制报文入接口与路由表反查结果一致。
- 严格模式(Strict URPF):报文入接口必须是去往源IP的最佳出接口;适合末梢网络(如企业出口),但要求路由对称
- 松散模式(Loose URPF):只要存在一条去往源IP的路由即可;适用于多出口或BGP环境,配合ACL可增强效果
- 实战建议:在核心路由器/防火墙启用urpf strict,同时配置“允许本地子网直连路由例外”;Linux可通过rp_filter=1(strict)或rp_filter=2(loose)启用,配合src_valid_mark标记优化性能
分片与扩展头管控:防CPU耗尽型攻击
攻击者常构造海量异常分片或嵌套IPv6扩展头,迫使设备反复重组、解析、校验,最终拖垮CPU。头部加固需主动限流与提前终结。
- IPv4分片:限制单个源IP单位时间内的分片数量;对offset=0但MF=0的“假首片”、重复offset、超大分片总数(>65535字节)直接丢弃
- IPv6扩展头:禁止未知类型扩展头;限制逐跳头(Hop-by-Hop)和路由头(Routing Header)嵌套深度≤2;对类型0路由头(已废弃)全量拦截
- 实战建议:在Netfilter的raw表PREROUTING链部署xt_iprange+xt_limit匹配异常分片;交换机侧开启anti-attack fragment car cir 8000(华为)或ip verify unicast reverse-path(思科)











