首页/系统/Linux 内核与性能调优速查/net.ipv4.conf.all.rp_filter 反向路径过滤
sysctl 内核参数72 条

net.ipv4.conf.all.rp_filter 反向路径过滤

校验入包源地址是否可经同一接口回程;0 关闭、1 严格、2 松散(任意接口可达即可),是反地址欺骗的加固项。

反向路径过滤是什么

rp_filter 是内核的入向源地址校验:收到数据包后,用源地址反查路由,确认回程是否走同一块网卡。取值 0 关闭、1 严格模式(回程必须走同一接口才放行)、2 松散模式(源地址经任意接口可达即放行)。它主要用来阻断源地址欺骗,同时也会在非对称路由、策略路由与多出口环境下误伤正常流量。这个参数既有全局的 all 项,也有按接口的独立项,两者共同决定实际行为。

基本信息

参数net.ipv4.conf.all.rp_filter 与 net.ipv4.conf.<接口>.rp_filter
取值0 关闭 / 1 严格模式 / 2 松散模式
生效规则对某接口校验时取 all 与接口值中较大的一个
默认值多数通用发行版为 0;部分企业发行版默认开启严格模式
影响场景非对称路由、策略路由、多出口与容器网络
可观测性丢弃计数不易直接读到,通常靠对比试验与抓包确认

典型使用场景

  • 安全加固:阻断伪造源地址的流量,减少反射类攻击的利用面
  • 多出口主机排障:回包走另一条链路时被严格模式丢弃,业务表现为单向不通
  • 容器与虚拟网络:叠加虚拟接口后校验路径变化,容易出现丢包
  • 策略路由环境:按源或按业务分流时,回程路径与预期不一致会被拦
  • 变更前后对照:用临时关闭或改为松散模式验证是否为该参数引起

查看与调整

查看与调整
sysctl net.ipv4.conf.all.rp_filter              # 全局值
sysctl net.ipv4.conf.eth0.rp_filter             # 指定接口的值
for i in /proc/sys/net/ipv4/conf/*/rp_filter; do echo -n "$i "; cat $i; done   # 逐接口核对
sysctl -w net.ipv4.conf.all.rp_filter=2         # 改为松散模式(需与接口值一起改)
sysctl -w net.ipv4.conf.eth0.rp_filter=2        # 接口值也要同步,否则取较大者
ip route get 10.0.0.9 from 10.0.0.5             # 反查路由,验证回程路径

模式与适用面

取值校验方式适用与风险
0不校验源地址非对称路由环境可用,但放弃了反欺骗能力
1回程必须走入包接口防护最强,多出口与非对称路径下容易误伤
2源地址经任意接口可达即放行兼顾路由灵活性,防护强度弱于严格模式
all 与接口同时存在取两者较大值只改一处等于没改,是最高频的配置陷阱
放宽过滤会降低反地址欺骗的能力,属于安全性与兼容性的取舍。遇到非对称路由导致的丢包时,先确认确实是该参数引起,再考虑改为松散模式,并同步评估其他层面的防护措施。
虚拟接口与网桥也会参与校验判断:容器网桥、隧道接口与浮动地址都会改变回程路径。排查时应当把相关接口的值全部列出来,而不是只检查主网卡。

易错点

  • 只改 all 或只改接口值:生效值取两者较大者,一处没改就等于没调整
  • 把非对称路由丢包当成网络设备故障:先临时放宽校验做对照试验,方向更快锁定
  • 在容器或隧道环境照搬物理机配置:虚拟接口改变了回程路径,校验行为随之变化
  • 忽略校验无日志这一点:丢弃不写内核日志,必须靠对照试验与接口计数定位
  • 为图省事关掉全部校验:反欺骗能力被放弃,长期会放大伪造源地址类风险

数据来源与参考

  • Linux 内核 Documentation/networking/ip-sysctl.rst
  • RFC 3704(Ingress Filtering)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌