在过去的2个月中,我一直在使用以下技术构buildPHP Web应用程序:
我刚刚得到了我的专用服务器运行Ubuntu 10.4 LTS x64与以下硬件:
Web应用程序的静态内容是(未压缩的,未压缩的)总共200kb。 PHP Web应用程序需要可扩展性,它可以在开始时获得大量的stream量。
现在我有几个问题:
防止DDOS可能是困难的,因为ISP的资源耗尽(有状态的防火墙或带宽)的一大部分时间,并将沉没你的IP块。
如果你期待DDOS,然后select一个可以提供DDOS预防和知道如何处理高stream量负载的ISP,请他们的例子和系统,他们已经到位,可以帮助。 把你关掉不是一个答案。
准备好用iptables或者你自己的上游防火墙来阻止积极的ddos机器的networking数据块或实际的ddosnetworking数据块。
如果只有几个IP使用了超过90%的资源,请阻止它们。
开发检测滥用客户端的方法(访问某些脚本或页面,奇怪的请求,乱序的页面请求等等,并阻止它们)。
考虑使用入站/出站qos来公平地控制出站带宽给客户端。
考虑将数据库,应用程序逻辑和Web服务分解到不同的硬件上。
考虑一个带有一些牛肉caching节点的负载均衡器来吸收小型攻击者。 但是要小心进入与攻击者的资源战争并不是最好的主意,他们会赢的! 🙁
考虑在你的应用程序和数据库之间添加一个caching层,这应该保持你的数据库服务器的重载请求
如果ddos的目标是静态内容,而不是需要数据库资源的网页脚本,那么可以考虑一些类似于CDN(云闪)的技术,它可以将实际的IP地址隐藏在互联网的其他地方,并有助于在地理上分配负载。 你得到更快的内容交付给你的用户,作为副作用,你得到一些ddos保护。
如果你不需要UDP,让你的ISP阻止边界的stream量。 如果你只需要端口80和443,那么让你的ISP在他们的networking许可证上阻止这个。 如果您的ISP不知道什么UDP或端口得到一个新的… :-)。
在不同的基础设施上托pipe你的dns,有一个可以处理ddos的大的dns。 如果您必须自己托pipeDNS,请将其放在单独的基础架构和不同的networking上。
如果您使用SSL,请确保您可以处理SSL握手的CPU命中。 SSL加速器非常昂贵。 也许开发一个系统,只有付费客户或注册authentication客户可以通过SSL连接。 端口80连接也一样,请确保您的用户在访问应用程序之前进行了注册。 可以阻止深入的ddos攻击到您的应用程序。
无论如何,听起来很有趣。 你要做什么?
评论和其他答案是完全合理的,但我也build议将Varnish作为静态内容(以及一些dynamic)的caching,以及反向代理。 NGINX也是这样做的,但是这两个区域的清漆比较好。
这基本上描述了我的老公司,在那里我们运行PHP和Rails应用程序的设置。