开启rp_filter是防范ip源欺骗最有效、最底层的手段;其取值0关闭校验、1为宽松模式(推荐生产环境)、2为严格模式;需配合禁用accept_source_route、accept_redirects、send_redirects及ip_forward等参数。

直接开启 rp_filter 是防范 IP 源欺骗最有效、最底层的手段——它在数据包进入网络协议栈早期就做源地址合法性判断,比 iptables 规则更早、更省资源。
理解 rp_filter 的三个取值
这个参数控制内核如何校验入站包的源 IP 是否“可信”:
- 0:完全关闭校验,所有源 IP 包都放行(不安全,生产环境禁用)
- 1(宽松模式):只要系统路由表中存在任意一条路径能到达该源 IP,就接受该包。适合绝大多数服务器,包括单网卡或多出口但无严格对称路由的场景
- 2(严格模式):要求源 IP 的最佳回程路径必须和接收该包的接口一致(即“进哪出哪”)。安全性更高,但若存在策略路由、多 ISP 出口或 Oracle RAC 等架构,易误丢合法包
临时启用(立即生效,重启失效)
以 root 权限执行以下命令,推荐从宽松模式(1)起步:
echo 1 | sudo tee /proc/sys/net/ipv4/conf/all/rp_filter-
echo 1 | sudo tee /proc/sys/net/ipv4/conf/eth0/rp_filter(把eth0换成你实际的外网接口名,如ens192、enp0s3) - 务必同时设置
all和具体接口,避免某接口未启用导致防护缺口
永久生效(写入配置并加载)
编辑 /etc/sysctl.conf 或新建 /etc/sysctl.d/99-anti-spoof.conf:
- 添加以下三行(覆盖全局、默认接口和常用外网接口):
net.ipv4.conf.all.rp_filter = 1net.ipv4.conf.default.rp_filter = 1-
net.ipv4.conf.eth0.rp_filter = 1(按需替换接口名) - 保存后运行
sudo sysctl -p或sudo sysctl --system加载全部配置
配套必须关闭的参数
仅开 rp_filter 不够,还需同步禁用攻击者常利用的其他路径操控机制:
-
net.ipv4.conf.all.accept_source_route = 0(丢弃含源路由选项的包) -
net.ipv4.conf.all.accept_redirects = 0和net.ipv4.conf.all.send_redirects = 0(防 ICMP 重定向篡改路由) -
net.ipv4.ip_forward = 0(除非是路由器,否则关闭转发,避免被当跳板)
这些参数共同构成内核级反欺骗基础。配置完成后,可用 sysctl net.ipv4.conf.all.rp_filter 验证是否为 1,再结合业务连通性观察是否出现异常丢包——如有,优先考虑将特定接口设为 rp_filter = 2 或检查路由对称性。










