linux防ip欺骗核心是内核级校验而非iptables,关键启用rp_filter(设为1或2)、禁用accept_source_route和accept_redirects/send_redirects,并关闭ip_forward及secure_redirects。

Linux服务器防IP欺骗,核心不是靠iptables规则堵,而是靠内核自身对数据包路径和选项的合法性校验。只要配置得当,系统会在网络栈最底层直接丢弃伪造源IP的包,比防火墙过滤更早、更高效。
启用反向路径过滤(rp_filter)
这是防IP欺骗最关键的参数,它检查收到的数据包的源IP是否能通过同一接口“原路返回”:
- 设为1(宽松模式):只要路由表中存在任意一条路径能到达该源IP,就接受——适合大多数服务器环境,推荐作为起点
- 设为2(严格模式):必须能通过接收该包的**同一接口**返回源IP,否则丢弃——安全性更高,但可能影响非对称路由场景(如多ISP出口)
- 执行命令统一启用:
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 1 > /proc/sys/net/ipv4/conf/eth0/rp_filter(把eth0换成你实际的外网接口名) - 永久生效:在/etc/sysctl.conf中添加
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.eth0.rp_filter = 1,然后运行sysctl -p
禁用IPv4源路由(accept_source_route)
源路由允许发送方指定报文路径,攻击者常借此绕过防火墙或伪装跳转节点。Linux默认已关闭,但仍需确认:
- 执行命令关闭:
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
echo 0 > /proc/sys/net/ipv4/conf/eth0/accept_source_route - 永久生效:在/etc/sysctl.conf中添加
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.eth0.accept_source_route = 0 - 设为0后,含源路由选项的IP包会被内核直接丢弃,不进入iptables链
禁用ICMP重定向(accept_redirects & send_redirects)
非法ICMP重定向可被用于篡改主机路由表,是中间人攻击的常见入口。非路由器角色的服务器必须关闭:
- 关闭接收和发送(IPv4):
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0 - 同步关闭IPv6重定向(勿遗漏):
net.ipv6.conf.all.accept_redirects = 0
net.ipv6.conf.default.accept_redirects = 0 - 验证是否生效:sysctl -a | grep redirect | grep = 0
补充加固项(防绕过)
单独关闭重定向或源路由还不够,还需配合其他参数形成纵深防御:
- net.ipv4.conf.all.secure_redirects = 0:禁用已过时且易绕过的“安全重定向”校验
- net.ipv4.ip_forward = 0:除非明确需要做路由转发,否则必须关闭,避免被用作跳板
- 若使用Docker或Kubernetes,注意这些参数默认只作用于host网络命名空间;容器内需额外配置或依赖CNI插件策略











