防ip欺骗最有效方式是启用内核级反向路径过滤(rp_filter=1)、禁用源路由(accept_source_route=0)、关闭icmp重定向和ip转发;需同时配置all、default及具体接口并验证生效。

防 IP 欺骗最有效的方式不是靠 iptables 封地址,而是激活内核自带的底层校验机制——它在数据包刚进入网络栈时就做判断,比防火墙早、更省资源、也更可靠。
启用反向路径过滤(rp_filter)
这是防御 IP 欺骗的核心参数,它检查入站包的源 IP 是否能通过接收该包的接口“原路返回”。值为 1(宽松模式)适合绝大多数服务器,值为 2(严格模式)安全性更高但易误丢合法包(如多出口、策略路由场景)。
- 临时启用(立即生效,重启失效):
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) - 永久生效:在 /etc/sysctl.d/99-secure.conf 中添加三行:
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.eth0.rp_filter = 1 - 务必同时设置 all、default 和具体接口,避免新创建的接口(如 Docker 网桥)漏防护
禁用源路由选项(accept_source_route)
源路由允许攻击者指定报文路径,绕过防火墙或伪装内网地址。设为 0 后,内核在网络栈入口直接丢弃含该选项的包,不进 iptables、不耗资源。
- 临时关闭:
sudo sysctl -w net.ipv4.conf.all.accept_source_route=0
sudo sysctl -w net.ipv4.conf.default.accept_source_route=0 - 永久配置(写入同一文件):
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0 - 不要依赖默认值——容器、定制镜像或内核更新可能使其回退为 1
关闭 ICMP 重定向与 IP 转发
非法 ICMP 重定向可篡改主机路由表,辅助中间人攻击;IP 转发若开启,服务器可能被当成跳板转发恶意流量。
- 在 /etc/sysctl.d/99-secure.conf 中追加:
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.ip_forward = 0 - 非路由器角色的服务器必须关闭这三项,否则会削弱 rp_filter 的防护效果
验证与收尾
配置完成后,必须确认内核当前值而非只看配置文件:
- 运行:
sysctl net.ipv4.conf.all.rp_filter net.ipv4.conf.eth0.rp_filter
sysctl net.ipv4.conf.all.accept_source_route net.ipv4.conf.default.accept_source_route
所有输出应为 = 1 或 = 0 - 加载全部配置:
sudo sysctl --system - 业务上线后观察连通性:若出现异常丢包,优先排查是否因严格模式(rp_filter=1)导致非对称路由误判,可尝试改为 2 并检查路由对称性











