linux中rp_filter通过sysctl控制内核反向路径过滤,取值0/1/2分别表示关闭、严格模式(进哪出哪)、宽松模式(任一接口可达即通过),配置优先级为接口级>全局级>默认级,需结合多网卡与策略路由场景合理选用。

Linux中配置反向路径过滤(RPF,即 rp_filter)本质是调整内核对入站数据包源IP合法性的验证方式,不是传统“路由命令”操作,而是通过 sysctl 接口控制网络栈行为。它发生在路由查找之后、iptables之前,属于内核级防护,配置不当容易导致业务不通,尤其在多网卡或非对称路由场景下。
理解 rp_filter 的三种取值含义
该参数决定内核如何验证数据包源地址是否可信:
- 0:完全关闭校验。所有入包跳过反向路径检查,适合调试或复杂策略路由环境,但会暴露于IP欺骗风险。
-
1(严格模式):要求“进哪出哪”。若数据包从
eth0进来,内核查路由表发现回包应走eth1,则直接丢弃。适用于单出口、对称路由的Web服务器等场景。 -
2(宽松模式):只要源IP在本机任意接口上有可达路由(比如有
192.168.1.0/24和10.0.2.0/24两个网段),就允许通过。适合多ISP、多宿主或多网卡网关设备。
关键配置位置与优先级关系
rp_filter 可在三个层级设置,生效时遵循“接口级 > 全局级 > 默认级”的覆盖规则:
-
/proc/sys/net/ipv4/conf/all/rp_filter:作用于所有已有及未来新增接口,是全局开关。 -
/proc/sys/net/ipv4/conf/eth0/rp_filter:仅控制指定接口(如eth0),优先级高于all。 -
/proc/sys/net/ipv4/conf/default/rp_filter:作为新创建接口的初始值,不影响已存在接口。
例如:即使 all 设为 1,单独把 eth1 设为 0,那 eth1 就不受RPF限制。
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
临时启用与永久保存方法
临时生效(重启后失效):
- 开启全局严格模式:
sudo sysctl -w net.ipv4.conf.all.rp_filter=1 - 同时为外网接口单独启用:
sudo sysctl -w net.ipv4.conf.eth0.rp_filter=1 - 查看当前值:
sysctl net.ipv4.conf.all.rp_filter net.ipv4.conf.eth0.rp_filter
永久生效(推荐写入独立配置文件,避免污染默认 sysctl.conf):
- 新建
/etc/sysctl.d/99-rpfilter.conf,写入:
net.ipv4.conf.eth0.rp_filter = 1
net.ipv4.conf.eth1.rp_filter = 2
- 加载配置:
sudo sysctl --system
多网卡与策略路由下的实用建议
当服务器有多个公网IP、使用策略路由或做负载分担时,盲目设为 1 很可能中断连接:
- 先确认业务流量是否对称。可用
ip route get <client-ip></client-ip>检查回程路径是否和入接口一致。 - 若不一致,优先尝试宽松模式(
rp_filter=2),它兼顾安全与兼容性。 - 若必须用严格模式且存在非对称需求,可配合
net.ipv4.conf.all.src_valid_mark = 1,让标记过的包绕过RPF检查(需配合 iptables MARK 使用)。 - 禁用可能干扰的选项:
net.ipv4.conf.all.accept_redirects = 0、net.ipv4.conf.all.accept_source_route = 0,防止攻击者利用这些特性绕过RPF。










