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

时间:2015-10-28 01:51:08

标签: linux sockets network-programming firewall denial-of-service

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

在上述情况下,如何根据源IP地址实现过滤?

我看到两个解决方案放置这个源IP过滤逻辑:

  1. 在recvfrom()调用后在应用程序本身中实现它。
  2. 在防火墙中安装默认放置策略,然后让应用程序安装防火墙规则,以便将合法IP地址动态列入白名单。
  3. 每种解决方案都有利弊。我想到了一些:

    1. iptables最终会出现O(n)过滤复杂性(con for iptables)
    2. iptables在它们到达套接字缓冲区之前丢弃数据包(pro for iptables)
    3. iptables可能不是非常便携(con for iptables)
    4. 我的应用程序中的iptables可能会干扰其他可能也会安装iptables规则的应用程序(con for iptables)
    5. 如果我的应用程序安装了iptables规则,那么它可能会成为攻击媒介本身(con for iptables)
    6. 您将在哪里实施源IP过滤?为什么?

      您是否可以命名遵循约定#2的任何应用程序(管理员手动安装静态防火墙规则不计算在内)?

2 个答案:

答案 0 :(得分:1)

My recommendation (with absolutely no authority behind it) is to use iptables to do rate-limiting to dampen any DoS attacks and do the actual filtering inside your application. This will give you the least-bad of both worlds, allowing you to use the performance of iptables to limit DoS throughput as well as the ability to change which addresses are allowed without introducing a potential security hole.

If you do decide to go about it with iptables alone, I would create a new chain to do the application-specific filtering so that the potential for interference is lowered.

Hope this helps.

答案 1 :(得分:-3)

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