我有 Web 应用程序 (NodeJS),计划将其部署到 AWS。为了尽量降低成本,它将在单个 EC2 实例上运行。不过,我担心如果有人决定用 DDOS 攻击来祝福我,会发生什么,因此我有几个问题。现在,我做了相当多的研究,但由于我的理解显然不足,如果有些问题很愚蠢,我深表歉意:
我想避免有人对我的网站发起第 4 层攻击。将我的安全组设置为仅接受来自以下来源的流量(除 SSH 端口 22 外)是否足够:
类型 HTTP
协议 TCP
端口范围 80
以上内容是否可以阻止 UDP 洪水和其他攻击我的 EC2 实例?
通过安全组,我将仅允许从我的静态 IP 地址到端口 22 的 SSH 连接。这样是否可以完全阻止攻击者攻击端口 22?
我的 EC2 实例将运行 Ubuntu。我想避免应用层攻击(第 7 层),并计划直接从我的应用程序中进行此操作,因此以某种方式检测某些 IP 是否淹没了特定的 URL,并在必要时阻止它们。然而,这似乎有点晚了,因为流量已经到达我的 Web 服务器,而我的服务器无论如何都必须完成这项工作。因此,我不直接从我的应用程序中执行此操作,而是在考虑是否可以使用 IP 表在任何可疑流量到达我的 Web 服务器之前阻止它们。是否有一些通用设置可以识别恶意行为并阻止违规者?我打算研究一下失败2ban希望这能简化流程。现在,我确实明白,如果到了那一步,它无论如何都会攻击我的 EC2 实例,但我想保护我的应用程序免受暴力攻击等。
AWS CloudFront 能处理大多数 DDOS 第 4 层攻击吗?如果不能,那么使用免费的云Flare会有什么不同吗?
假设有人以某种方式淹没了我的网站,这导致流量超出了我的预期。有没有办法在某个时候停止收费?有账单警报,但我看不到任何方法可以在 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 攻击的明显迹象。
lsof
、netstat
和的输出tcpdump
对于检测此类问题非常有用。
现在您获得了客户端的 IP 地址,您可以使用 IPtables 来阻止该 IP 或使用 tcpkill 命令来执行此操作。TCPKILL 是 dsniff 包的一部分。
apt-get install dsniff
然后发出:-
tcpkill host x.x.x.x
上述方法很好,如果正确应用,它将帮助您减轻小型 DDOS 攻击。现在,如果您使用 CDN(CloudFlare),那么您只能在该级别阻止攻击者。您可以使用 CloudFlare API 来阻止 IP 地址。这样,流量就不会进入您的服务器。
参考上述方法并创建一个可以帮助您实现自动化的脚本。
4) 我认为 CloudFlare 比 CloudFront 更好。CloudFlare 易于设置,只需一个控制面板即可处理所有事情。即使您发现大量不必要的流量,CloudFlare 的“我受到攻击”模式也会在 5-10 秒内缓解它。
在 Cloudflare 博客中了解有关 DDOS 和“我处于攻击模式”的更多信息。
5)如果您的网络带宽超出限制,您可以设置 AWS 警报来停止/终止 EC2 实例。
编辑:-一个重要的事情是尝试设置 Web 应用程序访问的监控工具(如 Nagios)和日志管理工具。这将帮助您找到瓶颈。
答案2
DDOS 攻击可以通过多种方式缓解:
- 通过修改架构(AWS 资源)
- 通过使用工具和实用程序(ec2 实例上的内置工具)
现在,如果你的 Web 服务器架构很复杂,我建议你修改一下架构。我写了一篇详细的博客,介绍了你应该使用哪些服务来缓解 AWS 上的 DDOS 攻击
如果你在单实例上遇到这样的问题,并且你不想在其他 AWS 资源上花费太多,那么我已经写了另一篇博客,它将演示如何无需使用任何第三方工具即可防止 EC2 实例上的 DDOS。
我希望这会有所帮助,如果您需要对同一主题有更多了解,请告诉我。