rp_filter是linux内核防范ip欺骗的核心机制,值0关闭校验、1为严格模式(要求反向路径与入接口一致)、2为宽松模式(任一接口可达即可);推荐全局设为1并逐接口确认,同时禁用accept_source_route。

反向路径过滤(rp_filter)是 Linux 内核防范 IP 地址欺骗最直接有效的机制,它不依赖 iptables 规则匹配,而是在数据包进入协议栈早期就做源地址合法性判断。正确配置 rp_filter 能拦截大量伪造源 IP 的入站流量,比如私有地址冒充、跨网段地址伪造等典型欺骗行为。
理解 rp_filter 的三种模式
rp_filter 控制内核如何验证收到的数据包源 IP 是否可信:
- 0:完全关闭检查,任何源地址都放行——不推荐用于生产环境
- 1(严格模式):要求数据包必须能从**接收该包的同一网卡**反向路由到源 IP,否则丢弃。适合单出口、对称路由明确的服务器
- 2(宽松模式):只要系统任意网卡存在通往源 IP 的路由,就允许通过。比模式 1 更兼容非对称路由,但防欺骗能力略弱
推荐配置方式与范围
为兼顾安全与兼容性,应分层设置,避免遗漏:
- 全局启用:
net.ipv4.conf.all.rp_filter = 1——兜底策略,覆盖所有接口 - 逐接口确认:
net.ipv4.conf.eth0.rp_filter = 1、net.ipv4.conf.eth1.rp_filter = 1——确保关键业务网卡不被默认值绕过 - 回环接口可设为 0:
net.ipv4.conf.lo.rp_filter = 0——因本地通信无需反向路径校验
写入 /etc/sysctl.conf 后执行 sysctl -p 生效。运行 sysctl -a | grep rp_filter 可快速核对是否全部生效。
必须同步禁用源路由功能
攻击者常利用 IPv4 源路由选项(Source Route)指定报文路径,绕过常规路由和防火墙策略。rp_filter 对含源路由选项的包无效,因此需额外关闭:
- 设
net.ipv4.conf.all.accept_source_route = 0 - 同样为每个业务网卡单独设置,如
net.ipv4.conf.eth0.accept_source_route = 0
该参数生效后,内核会在 IP 层直接丢弃所有带源路由选项的数据包,比任何 iptables 规则都早、更彻底。
配合 iptables 做补充过滤
rp_filter 解决的是“路径可信”,iptables 则可封禁明显非法的源地址段:
- 丢弃来自私有地址段的外部入包(如
10.0.0.0/8、172.16.0.0/12、192.168.0.0/16) - 拒绝源地址为本机出口公网 IP 的入包(防反射攻击)
- 屏蔽已知恶意地址或扫描器常用源段
注意:这类规则应放在 INPUT 链靠前位置,且仅作为 rp_filter 的增强,不能替代它。










