严格校验指启用rp_filter=2并配套禁用accept_source_route、accept_redirects、send_redirects和ip_forward,通过内核栈早期源地址验证与路径操控阻断实现ip欺骗防护。

Linux 启用严格的内核校验机制,核心是组合启用 rp_filter(反向路径过滤)并关闭一系列可被攻击者利用的路由相关功能。这不是单个参数开关,而是一组协同生效的内核级防护策略。
明确“严格校验”指什么
在 Linux 网络栈中,“严格校验”主要指对入站 IP 包源地址真实性的早期验证,最有效手段就是 rp_filter。它不是防火墙规则,而是在数据包进入协议栈极早期就做判断,开销低、拦截早。
-
rp_filter = 0:完全关闭校验,不安全 -
rp_filter = 1:宽松模式(推荐默认启用)——只要路由表存在任意路径可达该源 IP,就接受 -
rp_filter = 2:严格模式——要求回程路径必须与接收接口一致(进哪出哪),安全性最高,但易在多出口、策略路由或 Kubernetes 节点上误丢包
启用严格校验的三步操作
仅设 rp_filter 不够,必须配套禁用攻击者常利用的辅助路径操控机制:
- 设置全局和默认接口的
rp_filter:net.ipv4.conf.all.rp_filter = 2 net.ipv4.conf.default.rp_filter = 2
- 禁用源路由选项(防伪造路径):
net.ipv4.conf.all.accept_source_route = 0
- 禁用 ICMP 重定向(防路由篡改):
net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.all.send_redirects = 0
- 关闭 IP 转发(除非是路由器):
net.ipv4.ip_forward = 0
永久生效且真实验证
不能只写配置文件就认为完成,必须走完整流程:
- 把上述参数写入
/etc/sysctl.d/99-anti-spoof.conf(注意等号前后空格统一,无 tab,无中文符号) - 执行
sudo sysctl --system加载全部/etc/sysctl.d/下配置 - 逐项验证运行时值是否更新:
sysctl net.ipv4.conf.all.rp_filter sysctl net.ipv4.conf.all.accept_redirects sysctl net.ipv4.ip_forward
输出值必须与你配置的一致,而不是只看文件内容
上线前必须做的检查
严格模式(rp_filter = 2)可能影响业务连通性:
- 若服务器有多个公网出口、使用 BGP 多线、或部署在 Kubernetes Node 上,建议先试
= 1(宽松模式) - 如需坚持
= 2,务必确认所有外网接口(如ens192)也单独设置了:net.ipv4.conf.ens192.rp_filter = 2
- 观察业务日志和监控:是否出现大量连接超时、TCP 重传、ICMP 不可达等异常;如有,优先排查路由对称性,而非直接关掉防护











