丢弃与拒绝

丢弃与拒绝

我在阻止专用服务器上的 DDOS 攻击时遇到了问题。我尝试了很多方法(mod_evasive、apf、ddos deflate、bfd……)。攻击规模非常大,来自许多不同的 IP,防火墙和保护措施都无法检测到它。

我制作了一个系统,它只允许某些 IP 并丢弃所有其他连接(白名单)iptables,丢弃所有输入。我知道它工作正常,如果我执行 ping,则不会像预期的那样得到响应。我读过一些关于 DROP 和 REJECT 的内容,但我不太理解。

问题在于,当攻击开始时,即使白名单处于活动状态,它仍会继续导致服务器延迟。为什么会发生这种情况?
Iptables 保存
PD 我有一个用 Python 编写的脚本,如果 .php 的 ips 不在列表中,它会将其添加到列表中。
我认为攻击是针对端口 25565(游戏服务器)的

答案1

丢弃与拒绝

我读过一些关于 DROP 和 REJECT 的内容,但我不太理解。

DROP和之间的区别在于REJECTDROP只是简单地丢弃数据包,就好像数据包一开始就没有到达一样,而REJECT会丢弃数据包并向源发送数据包被拒绝的原因。原因由用户定义,可以是 ICMP 消息或 TCP 重置。

使用哪一个不能一般性地回答,并且有很多讨论,例如一、解决这个问题。REJECT更容易调试,因为你知道防火墙丢弃了一个数据包。这样可以排除网络或路由问题。

我个人的看法是,这取决于你不想接收ACCEPT数据包的原因。如果它显然是一个伪造的数据包(例如带有伪造 IP 地址的数据包)到达你的内部网络,你应该LOG接收DROP该数据包,但在其他情况下,比如关闭未使用的端口,我会使用REJECT一些速率限制,因为这DROP会导致超时。

如果发生 DDoS 攻击,我肯定会使用DROP,因为这REJECT会给您的机器造成额外的负载,从而进一步放大攻击。

性能问题的可能原因

现在回到你的主要问题:为什么即使使用了 iptables,仍然会出现性能问题。这个问题很难回答,因为有很多潜在原因:

  1. 攻击规模实在太大。即使你过滤了坏数据包,它们仍会到达你的网络链路并填满缓冲区。如果攻击者的带宽足够大,可以充分利用你的网络链路容量,那么你就无能为力了。你应该联系你的服务提供商。他们也许能够过滤中间节点的攻击流量或采取其他措施,就像最近spamhaus.org 攻击,通过多播分发攻击流量。

  2. iptables 规则的数量可能太大。您说,您正在为白名单中的每个主机添加一条规则。如果有许多主机,则每个数据包都必须与每个主机的 IP 地址进行匹配。如果多个主机位于同一子网中,您可以尝试将它们分组,然后与子网进行匹配。

    iptables -A 输入 -s 1.2.3.0/24 -j 接受

这将允许从 1.2.3.0 到 1.2.3.255 的所有主机。或者您可以使用ipset为这个。这是目标

如果你想

  • 一次性存储多个IP地址或端口号,并通过iptables进行集合匹配;
  • 动态更新针对 IP 地址或端口的 iptables 规则,而不会影响性能;使用单个 iptables 规则表达基于复杂 IP 地址和端口的规则集,并受益于 IP 集的速度

似乎非常符合您的用例。

相关内容