如何减轻对 AWS 的 DDOS 攻击?

如何减轻对 AWS 的 DDOS 攻击?

我有 Web 应用程序 (NodeJS),计划将其部署到 AWS。为了尽量降低成本,它将在单个 EC2 实例上运行。不过,我担心如果有人决定用 DDOS 攻击来祝福我,会发生什么,因此我有几个问题。现在,我做了相当多的研究,但由于我的理解显然不足,如果有些问题很愚蠢,我深表歉意:

  1. 我想避免有人对我的网站发起第 4 层攻击。将我的安全组设置为仅接受来自以下来源的流量(除 SSH 端口 22 外)是否足够:

    类型 HTTP

    协议 TCP

    端口范围 80

以上内容是否可以阻止 UDP 洪水和其他攻击我的 EC2 实例?

  1. 通过安全组,我将仅允许从我的静态 IP 地址到端口 22 的 SSH 连接。这样是否可以完全阻止攻击者攻击端口 22?

  2. 我的 EC2 实例将运行 Ubuntu。我想避免应用层攻击(第 7 层),并计划直接从我的应用程序中进行此操作,因此以某种方式检测某些 IP 是否淹没了特定的 URL,并在必要时阻止它们。然而,这似乎有点晚了,因为流量已经到达我的 Web 服务器,而我的服务器无论如何都必须完成这项工作。因此,我不直接从我的应用程序中执行此操作,而是在考虑是否可以使用 IP 表在任何可疑流量到达我的 Web 服务器之前阻止它们。是否有一些通用设置可以识别恶意行为并阻止违规者?我打算研究一下失败2ban希望这能简化流程。现在,我确实明白,如果到了那一步,它无论如何都会攻击我的 EC2 实例,但我想保护我的应用程序免受暴力攻击等。

  3. AWS CloudFront 能处理大多数 DDOS 第 4 层攻击吗?如果不能,那么使用免费的云Flare会有什么不同吗?

  4. 假设有人以某种方式淹没了我的网站,这导致流量超出了我的预期。有没有办法在某个时候停止收费?有账单警报,但我看不到任何方法可以在 AWS 上设置硬限制,并在带宽超出时让实例脱机。

我也意识到现在没有办法完全防止 DDOS 攻击,但我想至少防范基本的攻击。提前感谢您的帮助。

答案1

1) 设置安全组是简单而重要的安全层。如果您正在运行任何 Web 应用程序,那么端口 80/443 是向全世界开放的端口,而用于通过 ssh 远程访问服务器的端口 22 应该只允许从特定 IP 地址访问。除这 3 个端口外,所有流量都将被阻止。您可以使用端口扫描或 NMAP 工具进行测试。

2) 将 SSH 访问限制到您的静态 IP 地址,并且通过 ssh 访问 EC2 实例时需要密钥。如果攻击者以某种方式知道您的 IP 地址,他/她将无法在没有密钥的情况下访问您的服务器。

注意:- 如果您使用 CDN(CloudFlare),那么您的 EC2 静态 IP 已经被隐藏。

3)您可以限制从同一IP地址到您的服务器的并发连接数。

您可以使用 Linux 防火墙规则来实现这一点:-

iptables -I INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 10 -j DROP
iptables-save >/etc/iptables.up.rules

第一行将监视连接到 eth0 接口的 IP。第二行将检查连接是否在过去 60 秒内新建,以及数据包流量是否高于 10,如果是,则将断开连接。第三行将使规则在重新启动时持久生效。

要验证连接到服务器的所有客户端的并发连接数:-

 netstat -tn 2>/dev/null | grep :80 | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head 

它将按 IP 地址显示当前活动连接的列表,有问题的 IP 通常是具有大量连接的 IP。

12  10.1.1.1
160 162.19.17.93

在上面的例子中,第一个数字是连接数,后跟原始 IP 地址。

注意:在负载很重的服务器中,连接数可能超过 100,但在 DDOS 攻击期间,连接数会更高。对于普通主机,如果来自单个 IP 的连接数超过 30,则很有可能受到攻击。如果来自同一网络的此类 IP/主机连接数超过 5,则这是 DDOS 攻击的明显迹象。

lsofnetstat和的输出tcpdump对于检测此类问题非常有用。

现在您获得了客户端的 IP 地址,您可以使用 IPtables 来阻止该 IP 或使用 tcpkill 命令来执行此操作。TCPKILL 是 dsniff 包的一部分。

apt-get install dsniff

然后发出:-

tcpkill host x.x.x.x

上述方法很好,如果正确应用,它将帮助您减轻小型 DDOS 攻击。现在,如果您使用 CDN(CloudFlare),那么您只能在该级别阻止攻击者。您可以使用 CloudFlare API 来阻止 IP 地址。这样,流量就不会进入您的服务器。

阅读更多CloudFlare API 文档

参考上述方法并创建一个可以帮助您实现自动化的脚本。

4) 我认为 CloudFlare 比 CloudFront 更好。CloudFlare 易于设置,只需一个控制面板即可处理所有事情。即使您发现大量不必要的流量,CloudFlare 的“我受到攻击”模式也会在 5-10 秒内缓解它。

在 Cloudflare 博客中了解有关 DDOS 和“我处于攻击模式”的更多信息。

5)如果您的网络带宽超出限制,您可以设置 AWS 警报来停止/终止 EC2 实例。

AWS 警报示例

编辑:-一个重要的事情是尝试设置 Web 应用程序访问的监控工具(如 Nagios)和日志管理工具。这将帮助您找到瓶颈。

答案2

DDOS 攻击可以通过多种方式缓解:

  1. 通过修改架构(AWS 资源)
  2. 通过使用工具和实用程序(ec2 实例上的内置工具)

现在,如果你的 Web 服务器架构很复杂,我建议你修改一下架构。我写了一篇详细的博客,介绍了你应该使用哪些服务来缓解 AWS 上的 DDOS 攻击

如果你在单实例上遇到这样的问题,并且你不想在其他 AWS 资源上花费太多,那么我已经写了另一篇博客,它将演示如何无需使用任何第三方工具即可防止 EC2 实例上的 DDOS

我希望这会有所帮助,如果您需要对同一主题有更多了解,请告诉我。

相关内容