在过去的两个月中,我一直在使用以下技术构建 PHP Web 应用程序:
- PHP 5.3.4
- MongoDB
- MySQL的
我刚刚获得了运行 Ubuntu 10.4 LTS x64 的专用服务器,其硬件如下:
- 100Mbit 网络速度
- 120GB 固态硬盘
- 16GB 内存 @ 1600 MHZ
- AMD FX 6100 6 核 CPU @ 每核 1400 MHZ(总共 3600 MHz)
- Linux 内核 2.6.33(支持 SSD 修剪)
- Ubuntu 10.4 LTS x64
Web 应用程序的静态内容(未压缩、未缩小)总计 200kb。PHP Web 应用程序需要可扩展性,它在开始时可能会获得大量流量。
现在我有几个问题:
- 我应该在 DDOS 保护方面进行哪些配置,我没有竞争对手,该项目是地下的和未知的,那么我应该考虑什么?什么对我有帮助,因为周围有很多东西,例如使用 Nginx mod 或使用 Iptables?我该如何配置这些?
- 我如何计算带宽以及服务器可以处理多少流量?
答案1
防范 DDOS 可能很困难,因为您的 ISP 大部分时间都会耗尽资源(状态防火墙或带宽),并会破坏您的 IP 块。
如果您预计会遭受 DDOS 攻击,请选择能够提供 DDOS 防护并知道如何处理高流量负载的 ISP,向他们询问示例和他们已建立的可以提供帮助的系统。关闭您的服务并不是解决办法。
准备好使用 iptables 或您自己的上游防火墙来阻止攻击性 ddos 机器的网络块或事实上的 ddos 网络块。
如果只有少数 IP 使用了超过 90% 的资源,请阻止它们。
开发检测滥用客户端的方法(访问某些脚本或页面、奇怪的请求、无序的页面请求等并阻止它们)。
考虑使用入站/出站 qos 来公平地控制客户端的出站带宽。
考虑将数据库、应用程序逻辑和网络服务拆分到不同的硬件上。
考虑使用带有一些牛肉缓存节点的负载平衡器来吸收小型攻击者。但要注意与攻击者进行资源战争并不是最好的主意,他们会赢!:-(
考虑在应用程序和数据库之间添加一个缓存层,这样可以减轻数据库服务器的重复请求负载
如果 ddos 针对的是静态内容,而不是需要数据库资源的 Web 脚本,请考虑使用 CDN(cloud flare)之类的东西,它可以向互联网的其余部分隐藏您的实际 IP 地址,并有助于在地理上分配负载。您可以更快地向用户提供内容,并且作为副作用,您会获得一些 ddos 保护。
如果您不需要 UDP,请让您的 ISP 在其边界阻止流量。如果您只需要端口 80 和 443,请让您的 ISP 在其网络许可方阻止这些端口。如果您的 ISP 不知道什么是 UDP 或端口,请获取一个新的... :-)。
将您的 DNS 托管在单独的基础设施上,并委托一些能够处理 DDoS 的大型机构。如果您必须自己托管 DNS,请将其放置在单独的基础设施和不同的网络上。
如果您使用 SSL,请确保您可以处理 SSL 握手的 CPU 负载。SSL 加速器价格昂贵。也许可以开发一个系统,只有付费客户或经过注册的认证客户才能通过 SSL 连接。端口 80 连接也是如此,请确保您的用户在访问应用程序之前已注册。可以阻止对您的应用程序的深度 DDoS 攻击。
无论如何,听起来很有趣。你在做什么?
答案2
评论和其他答案完全正确,但我还建议将 Varnish 放在前面作为静态内容(和一些动态内容)的缓存以及反向代理。 NGINX 也可以做到这一点,但 Varnish 在这两个方面更胜一筹。
这基本上描述了我以前公司的基础设施,我们在那里为 PHP 和 Rails 应用程序运行该设置。