与许多其他网站管理员一样,我面临着 DDOS 攻击的问题。我曾尝试从 htaccess 文件中拒绝有问题的 IP 地址并使用更大更好的主机,但由于使用了新的 IP 地址,我无法阻止攻击。
有没有办法阻止 DDOS 攻击?
如果您运行的网站受到攻击,则应考虑使用 Cloudflare 等服务。
Cloudflare 和其他 CDN 在设计时考虑了 DDoS 攻击 - 流量在到达您的网络之前会通过 Cloudflare 的网络。由于 Cloudflare 会过滤 DDoS 流量,因此只有干净的流量才会到达您。
另一方面,如果攻击小到不会使您的端口饱和,并且您对自己处理它感到很自在,请考虑在您的 Apache 实例前将 Nginx 作为反向代理运行。由于 epoll 架构,Nginx 旨在比 Apache 更好地处理洪水。
Cloudflare 等服务的工作方式是 1) 缓解设备和 2) 拥有大量容量。
缓解设备会查看流量中的异常情况,并将流量与过去已知的攻击签名进行匹配,以区分合法流量和 DDoS 流量。“脏”流量被丢弃,而干净的流量被传递。
如果您的端口已饱和(想象一下向只能处理 10gbps 的目标发送 11gbps),世界上最好的缓解措施也无济于事。无论您的过滤有多好,您都会离线,因为您的端口无法处理超过 10gbps 的速度。CloudFlare 等服务(实际上是任何 CDN 或 DDoS 缓解提供商)从传输提供商那里购买大量容量,以处理巨大的流量洪水——由于大量流量(想想 50gbps+)而无法在服务器级别处理的事情)
有几种类型的分布式拒绝服务攻击,缓解技术可以针对每种情况:
体积攻击
一些计算机发送大量流量,阻塞受害者的网络并阻止合法连接到达它。在这个类别中,我们可以看到:
- UDP 攻击:在随机端口上使用 UDP 协议会强制服务器检查是否有应用程序在该端口上侦听。您可以通过严格的防火墙规则来缓解这种情况。
- ICMP Floods:这个想法是发起一个回显请求并且永远不会完成握手,从不同的主机上频繁地这样做会使受害者无法响应合法请求。缓解技术包括阻止碎片化的 ping 请求。
应用层
这种类型的最常见攻击针对 HTTP 和 DNS 服务,您基本上请求资源的次数如此之多,以至于处理请求的服务器使用了所有可用资源。特别是关于 HTTP,这通常很难与正常的 http 请求区分开来,缓解通常包括 IP 信誉、跟踪异常活动以及有时需要执行 javascript。
状态疲惫
每个设备都有一个存储每个连接状态的表(如果你运行netstat你可以看到这个“表”),这种类型的攻击旨在使用该表中的每个条目,直到无法添加新连接。(有关此攻击的示例,请参见“slowloris”)。缓解通常包括超时未完成的请求以快速释放资源。
当然有一些服务可以帮助预防和减轻这些类型的攻击,CloudFlare 甚至免费提供这项服务,但我相信还有其他服务。一般来说,深度防御的概念在这里适用,拥有多个安全层有助于降低与 DDoS 攻击相关的风险,但请记住,我们谈论的是缓解措施,即使Github 也是 DDoS 版,并且拥有庞大的基础设施和他们看到他们的服务受到了影响
如果您目前受到攻击,我会联系 CloudFlare 并询问他们可以为您提供哪些选择,然后尽快开始规划预防策略。现在看来你是措手不及所以祝你好运
这是来自 arbornetworks的一个很好的资源
如果您的 Web 服务器运行 Windows,您可以设置某些注册表值来防止 DoS(显然也是 DDoS):
hkey_local_machine \system \currentcontrolset \services \tcpip \parameters \synattackprotect=1 REG_DWORD(值为1启用SYN泛洪攻击保护)
hkey_local_machine \system \currentcontrolset \services \tcpip \parameters \tcpmaxconnectresponseretransmissions=2 REG_DWORD (这个键有2个用途。第一,当该值设置为2时,它与上述注册表键一起启用SYN泛洪攻击。第二,它控制TCP 重传到未应答的 SYN-ACK 的次数。因此,它不会重传超过两次。)
hkey_local_machine \system \currentcontrolset \services \tcpip \parameters \tcpmaxdataretransmissions=3 REG_DWORD(此键控制 TCP 在现有连接中重新传输未确认数据段的次数。)
hkey_local_machine \system \currentcontrolset \services \tcpip \parameters \enablepmtudiscovery=0 REG_DWORD(根据 Microsoft,值 0 表示“TCP 对本地子网之外的计算机的所有连接使用 576 字节的 MTU”。这确保了数据包大小不会攻击者将其降低到 576b 以下以降低性能。)
对于 Linux,这是一个很好的资源。