源 IP 地址过滤应该在应用层本身实现还是由应用层委托给防火墙

Should source IP address filtering be implemented in the Application layer itself or delegated by Application to the Firewall

假设我的应用程序侦听 UDP 套接字并且它知道它可以从哪些 IP 地址接收 UDP 数据报。来自其他 IP 地址的任何内容都将被视为恶意数据报,应尽早丢弃以防止 DoS 攻击。困难的部分是这些合法 IP 地址的集合可以在应用程序的生命周期内动态变化(即通过控制通道动态接收它们)。

在上述情况下,您将如何实现基于源 IP 地址的过滤?

我看到两个解决方案,将此源 IP 过滤逻辑放在哪里:

  1. 在 recvfrom() 调用后在应用程序本身中实现它。
  2. 在防火墙中安装默认丢弃策略,然后让应用程序安装防火墙规则,动态地将合法 IP 地址列入白名单。

每种解决方案都各有利弊。我想到的一些:

  1. iptables 的过滤复杂度可能为 O(n)(iptables 的缺点)
  2. iptables 在数据包到达套接字缓冲区之前就丢弃数据包(iptables 专业版)
  3. iptables 可能不是很便携(iptables 的缺点)
  4. 我的应用程序中的 iptables 可能会干扰其他可能也会安装 iptables 规则的应用程序(对 iptables 来说是个骗局)
  5. 如果我的应用程序安装了 iptables 规则,那么它本身可能会成为攻击媒介(iptables 的骗局)

您将在哪里实施源 IP 过滤,为什么?

你能说出任何遵循约定 #2 的应用程序吗(管理员手动安装静态防火墙规则不算在内)?

Hope this link help you 网络层防火墙或数据包过滤器在 TCP/IP 协议栈上运行,不允许数据包通过防火墙,除非它们符合管理员定义或默认应用的既定规则集。现代防火墙可以根据许多数据包属性过滤流量,例如源 IP 地址、源端口、目标 IP 地址或端口,或目标服务,如 WWW 或 FTP。它们可以根据协议、TTL 值、发起者的网络块、源的网络块以及许多其他属性进行过滤。 应用层防火墙在 TCP/IP 堆栈的应用层工作,拦截所有进出应用程序的数据包,阻止不需要的外部流量到达受保护的机器,而无需发送方确认。额外的检查标准可能会增加将数据包转发到目的地的额外延迟。 强制访问控制 (MAC) 过滤或沙盒通过根据允许连接到特定网络的特定设备的 MAC 地址允许或拒绝访问来保护易受攻击的服务。 代理服务器或服务可以 运行 在专用硬件设备上或作为软件在 general-purpose 机器上,响应输入数据包(例如连接请求),同时阻止其他数据包。滥用内部系统不一定会导致安全漏洞,尽管 IP 欺骗等方法可以将数据包传输到目标网络。 网络地址转换 (NAT) 功能允许通过使用 "private address range" 中的地址对受保护设备的 IP 地址进行编号来隐藏受保护设备的 IP 地址,如 RFC 1918 中所定义。此功能可防御网络侦察

我的建议(绝对没有任何权威支持)是使用 iptables 进行速率限制以抑制任何 DoS 攻击并在您的应用程序内部进行实际过滤。这将为您提供两全其美的方法,让您可以使用 iptables 的性能来限制 DoS 吞吐量,并能够在不引入潜在安全漏洞的情况下更改允许的地址。

如果您决定单独使用 iptables,我会创建一个新链来执行特定于应用程序的过滤,从而降低干扰的可能性。

希望对您有所帮助。