如何缓解AWS上的DDOS攻击?

我有Web应用程序(NodeJS),我打算将其部署到AWS。 为了最小化成本,它将在单个EC2实例上运行。 我担心,如果有人决定保佑我DDOS攻击,会有什么事情发生,因此几乎没有问题。 现在,我做了一些相关的研究,但是由于我的理解显然很缺乏,所以如果有些问题很愚蠢,我很抱歉:

  1. 我想避免人们用第4层攻击淹没我的网站。 把我的安全组设置为只接受stream量(除了SSH端口22以外)是否足够:

    inputHTTP

    协议TCP

    端口范围80

以上将停止UDP洪水和其他人击中我的EC2实例?

  1. 通过安全组,我只允许SSH连接到端口22从我的静态IP地址。 这会让攻击者远离攻击端口22吗?

  2. 我的EC2实例将运行Ubuntu。 我希望避免应用层攻击(第7层),并计划直接从我的应用程序中执行此操作,以便以某种方式检测某个IP是否淹没特定的URL,并在必要时阻止它们。 然而,这似乎有点晚了,因为stream量已经到达了我的Web服务器,我的服务器无论如何都要做这个工作。 所以,不是直接从我的应用程序这样做,我想如果有可能使用IP表来阻止任何stream氓交通之前,我的networking服务器。 是否有一些能够识别stream氓行为和阻止犯罪者的常见设置? 我正计划研究fail2ban ,希望能够简化这个过程。 现在,我明白,如果它达到这么远,它会打我的EC2实例,但我想保护我的应用程序也从例如暴力攻击。

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

  4. 说有人淹没我的网站,这导致更多的stream量,然后我预料。 有什么办法可以停止收费吗? 有计费警报,但我看不到任何方式来设置AWS的硬限制,并说如果带宽超过实例脱机。

我也意识到,现在有办法完全防止DDOS攻击,但是我至less要防止基本的尝试。 预先感谢您的任何帮助。

1)设置安全组是安全容易和重要的一个层面。 如果您正在运行任何Web应用程序而不是端口80/443,那么这个应用程序只能通过特定的IP地址被允许通过ssh远程访问服务器。 除了这3个端口,所有的stream量都将被阻塞。 您可以使用端口扫描或NMAP工具进行testing。

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秒内是否是新的,并且如果数据包stream量高于10,并且如果是这样,它将丢弃连接。 第三行将在重启的情况下使规则保持不变。

validation连接到您的服务器的所有客户端的并发连接数量:

  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多个连接,你有可能受到攻击。 如果超过5个这样的IP /主机从同一个networking连接,这是一个非常明显的DDOS攻击的迹象。

lsofnetstattcpdump输出在检测这类问题时非常有用。

现在你得到客户端的IP地址,你可以使用IPtables来阻止那个IP或者tcpkill命令来这样做。 TCPKILL是dsniff软件包的一部分。

apt-get install dsniff

然后问题: –

tcpkill host xxxx

上述方法很好,如果正确应用,它将有助于缓解小型DDOS攻击。 现在,如果您使用CDN(CloudFlare),则只能在该级别阻止攻击者。 您可以使用CloudFlare API来阻止IP地址。 在这个stream量不会来到你的服务器。

在CloudFlare API Doc阅读更多信息

参考上面的方法,并创build一个脚本,将帮助你在自动化。

4)我认为CloudFlare比CloudFront更好。 CloudFlare易于安装,从一个控制面板可以处理一切。 即使你发现大量不必要的stream量比cloudflare“我受到攻击”模式将在5-10秒内减轻它。

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

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

AWS报警示例

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

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

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

现在,当你为web服务器build立一个复杂的体系结构时,我会build议你去修改你的体系结构。 我已经写了一个详细的博客,您应该使用哪些服务来缓解AWS上的DDOS攻击

如果您的单实例存在这样的问题,并且您不想花费其他AWS资源,那么我已经编写了另一个博客,它将演示如何在不使用任何第三方工具的情况下阻止EC2实例上的DDOS 。

我希望这可以帮助,让我知道如果你需要更多的同一主题的见解。