假设我的应用程序具有侦听UDP套接字,并且它知道它可以从哪些IP地址接收UDP数据报。来自其他IP地址的任何内容都将被视为恶意数据报,应尽早丢弃以防止DoS攻击。最困难的部分是这些合法IP地址的集合可以动态改变应用程序的生命周期(即通过在控制通道上动态接收它们)。应该在应用层本身实现源IP地址过滤还是由应用委托给防火墙
如何在上述情况下基于源IP地址实施过滤?
我看到了两个解决方案,其中把这个源IP筛选逻辑:
- 它recvfrom的()调用后,应用程序本身实现。
- 在防火墙中安装默认的丢弃策略,然后让应用程序安装可动态将白名单合法IP地址列入白名单的防火墙规则。
每种解决方案都有优点和缺点。一些来我的脑海:
- 的iptables可以用O(n)的滤波的复杂性(CON iptables的)
- 的iptables丢弃数据包之前,他们甚至得到套接字缓冲区(亲iptables的)最终
- iptables的可能不是非常便携(CON iptables的)从我的应用程序
- iptables的可能与可能也将安装iptables规则(CON iptables的)
- ,如果我的应用程序安装的iptables规则,那么它可能成为其他应用程序攻击矢量本身(con for iptables)
你会在哪里实现源IP过滤,为什么?
你可以命名遵循约定#2的任何应用程序(管理员手动安装静态防火墙规则不计数)吗?
iptables是内核级别,应用程序是用户空间。那里存在显着差异。我期望一个tcpwrapper像实现,如果你在用户空间做的事情..但通常有它的共同基础设施,如Apache允许/拒绝规则的全部原因。 –