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

cwd*_*cwd 49 linux firewall configuration ddos amazon-ec2

我使用的其中一台服务器托管在 Amazon EC2 云上。每隔几个月,我们似乎就会对这台服务器进行一次 DDOS 攻击。这会令人难以置信地减慢服务器的速度。大约 30 分钟后,有时会重新启动,一切都恢复正常。

Amazon 有安全组和防火墙,但我还应该在 EC2 服务器上安装什么来减轻或防止攻击?

从我学到的类似问题中:

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

我还缺少什么?我希望了解有关特定工具和配置选项(再次在此处使用 Linux)和/或任何特定于 Amazon EC2 的信息。

ps:关于监视 DDOS 的注释也将受到欢迎 - 也许使用 nagios?;)

小智 37

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

在 AWS 上,您很幸运,因为网络组件非常强大 - 得知上游链路已饱和会非常令人惊讶。但是,CPU 以及磁盘 I/O 更容易泛滥。

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

如果攻击来自网页,则访问日志(或等效文件)可能非常有用。


jst*_*ell 24

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

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

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

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

  • 请注意,如果您在 ELB 后面,fail2ban 将不起作用——因为它通常通过在 iptables 中阻止 IP 来发挥作用。但是 IP 始终是您的 ELB 的 IP。我意识到在尝试将 fail2ban 添加到我的设置后。如果用户仅通过 ELB 访问,则它不起作用。 (2认同)

小智 5

如果您使用 Apache,我建议使用mod_security。大多数供应商打包的核心规则集做得非常出色。

另一个强化步骤是限制网络服务器级别的请求。Nginx ., Apache可以节流和限制传入请求。