我们在 Web 前端框中制定了以下 iptables 规则来防止 IP 欺骗:
-A INPUT -s 255.0.0.0/8 -j LOG --log-prefix "Spoofed source IP"
-A INPUT -s 255.0.0.0/8 -j DROP
-A INPUT -s 0.0.0.0/8 -j LOG --log-prefix "Spoofed source IP"
-A INPUT -s 0.0.0.0/8 -j DROP
我们现在想添加以下规则来进一步加强 IP 欺骗预防
-A INPUT -s 224.0.0.0/3 -j LOG --log-prefix "Spoofed source IP"
-A INPUT -s 255.0.0.0/8 -j DROP
-A INPUT –s 169.254.0.0/16 -j LOG --log-prefix "Spoofed source IP"
-A INPUT -s 169.254.0.0/16 -j DROP
-A INPUT –s 240.0.0.0/5 -j LOG --log-prefix "Spoofed source IP"
-A INPUT -s 240.0.0.0/5 -j DROP
您是否建议在运行 Apache httpd 作为反向代理的生产设备中添加上述规则?此生产设备位于 F5 负载均衡器后面。
另外,我们是否需要启用以下内核参数才能使上述规则有效发挥作用?
net.ipv4.conf.all.rp_filter=1
net.ipv4.conf.all.log_martians=1
net.ipv4.conf.default.log_martians=1
答案1
您添加的规则是“货物崇拜”的很好例子。
网关(路由器)应采取反欺骗措施;网关是合适的设备,因为它们实际上具有路由信息。服务器通常没有这些信息。通常服务器只有一个通道和指向它的默认路由。如果他们碰巧收到请求,他们应该提供该请求,除非他们有一些 ACL(“这些 URL 只能从该 IP 范围访问”等等)。另一方面,当服务器有公共和私有网络并且有策略将这些网络分开时,rpfilter
可以用来自动实现它。请注意,现在netfilter
也有这样的扩展,但这sysctl
并不是实现它的唯一方法。
IP 欺骗通常用于 DoS 攻击。攻击者使用受害者的 IP 地址作为源,向网络“注入”发起数据包。他们的目的是让你的服务器响应并向受害者发送答案。您的服务器将无法发现它收到的请求中是否存在欺骗 IP;它不会是任何像0.2.3.4
您的防火墙规则过滤掉的奇怪 IP。如果你的服务器收到了来自互联网的欺骗请求,通常这不是你可以在“最后一英里”解决的问题,除非你确切知道它是被欺骗的并且通常您只能知道自己的公共 IP 是否被用作源。
欺骗本身并不是“嘿,看,他们0.2.3.4
在请求中使用了源 IP,现在如果我们不丢弃这样的数据包,我们就完了”的问题。
答案2
我看到的唯一问题是,如果来自 240.0.0.0 的请求曾是合法,它会阻止它,不允许它到达服务器。
对于 IP 欺骗,很难知道它是否是欺骗,因为人们可以生成一个合法地址(作为一名程序员)。
唯一更“安全”的选择是仅阻止淹没您的服务器的特定地址。