rp_filter是Linux内核反向路径过滤参数,值0关闭校验,1为严格模式(入接口必须等于最佳回程接口),2为宽松模式(源地址可达任一接口即可)。

在Linux中用nmcli配置网络接口的自动反向路径校验(rp_filter),核心是通过内核参数控制入向包的源地址验证,防止IP欺骗和伪造流量进入系统。它不改变路由本身,而是让内核在转发或接收前检查“回程路径是否合理”,从而提升边界防护能力。
确认当前rp_filter状态并理解取值含义
rp_filter有三个常用值:
- 0:关闭反向路径校验(默认不安全)
- 1:启用严格模式(strict)——要求最佳返回路径必须与入向接口一致
- 2:启用宽松模式(loose)——只要存在任一接口能到达源地址即通过
查看当前设置:
sysctl net.ipv4.conf.all.rp_filter
sysctl net.ipv4.conf.enp0s3.rp_filter(将enp0s3换成你的实际接口名)
使用nmcli为指定连接持久化启用严格rp_filter
NetworkManager可通过ipv4.route-metric和connection.interface-name间接影响rp_filter行为,但真正生效需配合sysctl规则。nmcli的作用在于绑定配置到具体连接,避免全局误配:
- 为关键业务连接(如enp0s3)添加自定义sysctl规则文件:
echo 'net.ipv4.conf.enp0s3.rp_filter = 1' > /etc/sysctl.d/99-rpfilter-enp0s3.conf - 确保该连接不被NetworkManager覆盖:
nmcli connection modify "Wired connection 1" connection.autoconnect yes
nmcli connection modify "Wired connection 1" ipv4.ignore-auto-routes yes - 重载并应用:
sysctl --system
nmcli connection reload
nmcli connection down "Wired connection 1" && nmcli connection up "Wired connection 1"
区分all与单接口策略,避免策略冲突
全局设置(net.ipv4.conf.all.rp_filter)会覆盖单接口设置,因此推荐只设接口级规则:
- 禁用全局校验,仅对隔离网段接口启用:
echo 'net.ipv4.conf.all.rp_filter = 0' > /etc/sysctl.d/99-rpfilter-global.conf - 对DMZ或管理口等高风险接口单独强化:
echo 'net.ipv4.conf.enp0s8.rp_filter = 1' > /etc/sysctl.d/99-rpfilter-enp0s8.conf - 验证生效:
sysctl net.ipv4.conf.enp0s8.rp_filter 应返回 1
配合路由与防火墙形成纵深防御
rp_filter只是第一道检查,需与静态路由、nftables协同:
- 若某接口专用于访问192.168.200.0/24,则添加精确路由:
nmcli connection modify "DMZ-Conn" +ipv4.routes "192.168.200.0/24 192.168.200.1" - 再加nftables丢弃非预期源进来的包:
nft add rule inet filter input iifname "enp0s8" ip saddr != 192.168.200.0/24 drop - 重启后测试:
从非192.168.200.0/24地址ping该接口IP,应无响应


















