如何防止对 Amazon EC2 的 DDOS 攻击?

如何防止对 Amazon EC2 的 DDOS 攻击?

我使用的其中一台服务器托管在 Amazon EC2 云上。每隔几个月,这台服务器似乎都会遭受 DDOS 攻击。这导致服务器速度极慢。大约 30 分钟后,有时需要重新启动,一切才会恢复正常。

亚马逊有安全组和防火墙,但我还应该在 EC2 服务器上采取什么措施来减轻或防止攻击?

从类似的问题中我了解到:

  • 通过 IP 表(或者可能是 UFW?)之类的工具限制特定 IP 地址每分钟(或秒)的请求速率
  • 拥有足够的资源来抵御此类攻击 - 或者 -
  • 可以构建具有弹性的 Web 应用程序/具有弹性负载均衡器,并且可以快速扩展以满足如此高的需求)
  • 如果使用 mySql,请设置 mySql 连接,以便它们按顺序运行,这样慢速查询就不会拖慢系统

我还缺少什么?我希望获得有关特定工具和配置选项(再次强调,这里使用 Linux)的信息,以及/或者任何特定于 Amazon EC2 的信息。

附言:关于 D​​DOS 监控的说明也受到欢迎 - 也许使用 nagios?;)

答案1

DDOS(甚至是 DOS)本质上是一种资源耗尽。你永远无法消除瓶颈,因为你只能将它们推得更远。

在 AWS 上,您很幸运,因为网络组件非常强大 - 如果上游链路饱和,那将非常令人惊讶。但是,CPU 以及磁盘 I/O 更容易被淹没。

最好的做法是启动一些监控(本地监控,例如 SAR,远程监控,使用 Nagios 和/或 ScoutApp)和一些远程日志记录工具(Syslog-ng)。通过这样的设置,您将能够确定哪些资源饱和(由于 Syn 泛滥导致的网络套接字;由于错误的 SQL 查询或爬虫导致的 CPU;由于……导致的 RAM)。不要忘记将日志分区(如果您没有启用远程日志记录)放在 EBS 卷上(以便稍后研究日志)。

如果攻击是通过网页发起的,访问日志(或同等内容)会非常有用。

答案2

您还可以通过将 EC2 实例置于 Elastic Load Balancer 后面并仅接受来自 ELB 实例的流量来进一步隔离它们。这让亚马逊承担了更多管理 DDOS 攻击的责任。

我假设您仍将 SSH 开放给所有人,因此您很可能仍会看到一些恶意流量进入,除非您可以将该端口锁定到某些静态 IP。您可以将 SSHd 端口更改为更隐蔽的端口(即 22 以外的端口),以进一步减少 DDOS 攻击(大多数机器人仅检查已知端口)。

我还会提到 fail2ban,它可以监控日志并临时修改您的 ip 表以阻止特定 IP(例如,如果从单个 IP 地址通过 SSH 进入您的主机的尝试失败了 6 次,它可以阻止该 IP 30 分钟左右)。请记住(正如 Jordan 敏锐地评论的那样)fail2ban 可能不适合阻止代理流量(例如来自 ELB 的流量),因为它将阻止代理的 IP,而不一定是原始远程 IP。

我没有使用过,但 Apache mod_evasive 也值得研究;然而,在基于 IP 的阻止方面,它可能具有与 fail2ban 相同的弱点。

答案3

如果你使用 Apache,我建议使用mod_security。由大多数供应商打包,核心规则集表现非常出色。

另一个强化步骤是在 Web 服务器级别限制请求。Nginx.,阿帕奇可以限制传入的请求。

答案4

我有偏见,因为我在内容交付网络担任安全售前工程师。

然而,在内容交付网络上利用 Ddos 缓解解决方案可确保您永远不会耗尽源头的资源。这类似于在您的网站前面放置一个 F5 负载平衡器,但分布在世界各地的数千个位置。

好的 CDN 允许您使用安装在 AWS 防火墙上的白名单来隐藏来源。因此,当攻击者对 Amazon 进行侦察时,您的 IP 地址将为空,因为所有内容都将被阻止。

因此,当流量到达尽可能靠近攻击者的节点时,Ddos 攻击就会被阻止。这可确保您尽可能远离要保护的资产缓解 Ddos 攻击。

好的 cdn 还可以执行健康检查并将流量故障转移到其他位置,例如 ass 上的另一个 ego、Azure、机架空间、软层、物理 dc 等。它还应该具有 WAF,以确保您可以阻止应用程序层耗尽攻击,如 RUDY、slowpost、slowloris 以及 sqli、xss、rfi、lfi 等。

默认情况下,cdn 还会阻止网络层攻击,如 Teardrop、ICMP 攻击、Synflood 等。cdn 能够缓解 Ddos 攻击,因为 trey 拥有大量容量来接受请求、过滤不良流量并传递良好流量。因此,可以阻止 ntp、DNS、ssdp、chargen 和 snmp 容量攻击等放大攻击。

迄今为止我见过的最大规模的攻击是 2014 年 7 月的 321gbps。在这次攻击期间,还发生了一次 20gbps 的 DNS 协议攻击。因此,您需要确保您的 DNS 基础设施也具有弹性,能够承受大量请求。

从您提供的描述来看,您似乎遭受了耗尽攻击,攻击者打开了大量线程,以至于所有线程都被 Web 服务器、应用服务器或防火墙消耗殆尽。它类似于 slowpost、slowloris 或 RUDY。

要阻止应用层耗尽攻击,您需要获得 Web 应用程序防火墙 (WAF)。典型的网络防火墙(包括亚马逊防火墙和下一代防火墙)无法阻止它。如今的 Sent Work 防火墙只能阻止目前所有攻击的 30% 左右(2014 年 11 月)。

相关内容