rp_filter 是什么
rp_filter(反向路径过滤)在内核收包时校验源地址是否在路由表中可达:如果回程路由不指向收到该包的接口,就直接丢弃。它用于缓解 IP 源地址欺骗,也顺带避免部分路由环路问题。CIS 基线建议 all 与 default 都启用严格模式,即取值为 1。
基本信息
| 基线值 | net.ipv4.conf.all.rp_filter = 1,default.rp_filter = 1 |
|---|---|
| 适用平台 | RHEL / CentOS 系与 Debian / Ubuntu 系 |
| 风险等级 | 中 |
| 取值含义 | 0 关闭、1 严格模式、2 松散模式 |
| 生效方式 | 写入 sysctl.d 后执行 sysctl --system |
典型使用场景
- 主机加固基线中的反欺骗检查项
- 排查伪造源地址的攻击流量
- 多上行链路环境中确认严格模式是否会误丢包
- 虚拟机与容器宿主机的网络加固
- 配置变更后按接口复核实际生效取值
核查取值
核查取值
sysctl net.ipv4.conf.all.rp_filter net.ipv4.conf.default.rp_filter # 全局与默认值
sysctl -a --pattern 'net.ipv4.conf.*.rp_filter' | head -20 # 按接口逐一查看
sysctl net.ipv4.conf.eth0.rp_filter # 单个接口的实际取值加固配置
加固配置
# /etc/sysctl.d/99-hardening.conf
net.ipv4.conf.all.rp_filter = 1 # 所有接口启用严格模式
net.ipv4.conf.default.rp_filter = 1 # 新建接口默认继承严格模式
# 保存后执行:sysctl --system取值含义
| 取值 | 含义 | 适用场景 |
|---|---|---|
| 0 | 完全关闭校验 | 仅在确认存在拓扑冲突时使用 |
| 1 | 严格模式,源地址必须在本接口的回程路由上 | 常规主机基线取值 |
| 2 | 松散模式,源地址在任意接口可达即通过 | 非对称路由下的折中方案 |
| all 与 default | 全局与新建接口的默认值 | 两项都应设置 |
| 接口级取值 | 各接口自身配置 | 与 all 和 default 共同决定最终行为 |
非对称路由场景(多上行链路、LVS DR 直连回包等)下严格模式会丢包:改动前先确认拓扑,必要时改用松散模式 2,而不是直接关成 0。
接口级取值与 all、default 是按取最大值的规则共同生效,改完配置要用 sysctl -a 按接口逐一复核,别只看全局那两个值。
云主机与虚拟化环境里,网关侧通常已经做了源地址校验,此时 rp_filter 属于纵深防御的一层;保持基线取值即可,不必为了压测之类的临时场景去改动它。