1

我正在考虑网络安全,然后这个想法突然出现在我的脑海中。

说有一个讨厌我并且知道如何编程的混蛋。我正在管理一个拥有大量流量的漂亮网站/博客。然后那个混蛋创建了一个程序,一遍又一遍地自动请求我的网站。

因此,如果我在共享托管服务提供商上托管我的网站,那么显然我的网站将停止响应。

这种类型的攻击可能并不常见,但如果有人在我的网站上尝试类似的事情,我必须采取一些措施。我不认为像 wordpress 或 drupal 这样流行的 CMS 对这种类型的攻击有什么作用。

我的假设是;

如果用户x在 1 分钟内请求多次(比如说 50 次),则阻止该用户。(停止回应)

我的问题是;

  1. 我的假设可以吗?如果不是怎么办?

  2. 谷歌、Facebook、Youtube 等网站是否会对此类攻击采取措施。

4

4 回答 4

3

您面临的是DoS。[拒绝服务]攻击。一个系统试图继续向您的网络服务器发送数据包并使其无响应。

你提到了一个混蛋,如果同一个混蛋有很多朋友,那么DDoS [分布式 DoS ] 攻击来了。好吧,这是无法避免的。


来自 Apache Docs 的针对DoS但不是针对DDoS的快速修复 ...

所有网络服务器都可能受到拒绝服务攻击,这些攻击试图通过占用服务器的资源来阻止对客户端的响应。完全防止此类攻击是不可能的,但您可以采取某些措施来缓解它们造成的问题。

通常最有效的反 DoS 工具是防火墙或其他操作系统配置。例如,大多数防火墙可以配置为限制来自任何单个 IP 地址或网络的同时连接数,从而防止一系列简单的攻击。当然,这对分布式拒绝服务攻击 (DDoS) 没有帮助。

资源

于 2013-08-19T11:31:35.323 回答
1

问题一方面是拒绝不良流量,另一方面是提高您自己代码的性能。

被恶意攻击过多的流量称为拒绝服务攻击。这个想法是用流量访问站点,使服务器无法应对负载,停止响应,因此没有人可以通过并且站点脱机。

但是,您也可能仅仅因为您的网站变得流行而受到过多流量的打击。这很容易在一夜之间毫无预警地发生,例如,如果有人在另一个受欢迎的网站上发布了指向您网站的链接。这种流量实际上可能是真实的并且需要(数百个额外的销售!耶!),但如果您没有准备好,可能会对您的服务器产生相同的影响。

正如其他人所说,配置您的 Web 服务器以应对高流量非常重要;我会让其他答案不言自明,这是很重要的一点,但是您也可以在自己的代码中做一些事情来改进事情。

服务器无法应对增加的负载的主要原因之一是请求所花费的处理时间。

你的web服务器一次只能处理一定数量的请求,但是这里的关键词是“同时”,减少同时请求数量的关键是减少你的程序运行所需的时间.

想象一下,您的服务器可以同时处理十个请求,而您的页面加载需要一秒钟。

如果您每秒最多收到十个请求,那么一切都会无缝运行,因为服务器可以处理它。但是如果你稍微超过了一点,那么第十一个请求要么失败,要么必须等到其他十个请求完成。然后它将运行,但会吃掉下一秒的十个请求。十秒过去了,你的响应时间已经缩短了一秒,而且只要请求保持在同一水平,它就会变得更糟。服务器很快就会不堪重负,即使它只是超出其容量的一小部分。

现在想象可以优化同一个页面以减少时间,比如说半秒。您的同一台服务器现在每秒可以处理 20 个请求,这仅仅是因为 PHP 代码更快。而且,它会更容易从过多的流量水平中恢复过来。而且由于 PHP 代码的运行时间更短,因此任何两个给定请求同时发生的可能性都较小。

简而言之,随着您减少处理请求所需的时间,服务器处理高流量的能力会大大增加。

所以这是一个网站在高流量激增中幸存下来的关键:让它运行得更快。

  • 缓存:像 Drupal 和 Wordpress 这样的 CMS 内置了缓存。确保它已启用。为了获得更好的性能,请考虑使用 Varnish 等服务器级缓存系统。对于您不会过多更改页面内容的 CMS 类型系统,这是您可以做的最重要的事情,以提高您的性能。

  • 优化您的代码:虽然不能指望您修复 Drupal 等第三方软件的性能问题,但您可以分析自己代码的性能(如果有的话)。自定义 Drupal 模块,也许吧?使用分析器工具来查找您的瓶颈。很多时候,这种分析可以揭示单个瓶颈占页面加载时间的 90%。不要费心优化小东西,但如果你能像这样找到并修复一两个大瓶颈,它会产生巨大的影响。

希望有帮助。

于 2013-08-19T12:19:25.930 回答
1

这些类型的攻击称为 (D)DoS(分布式拒绝服务)攻击,通常由托管 PHP 应用程序的网络服务器阻止。由于 apache 使用最多,我发现了一篇您可能会感兴趣的文章:http ://www.linuxforu.com/2011/04/securing-apache-part-8-dos-ddos-attacks/ 。

文章指出,apache 有多个专门用于防止 (D)DoS 攻击的 mods。这些仍然需要安装和配置以满足您的需求。

我确实相信 Facebook、Google 等都有自己的类似实现来防止 DoS 攻击。我知道如果很多搜索请求来自同一个网络,Google 搜索引擎会使用验证码。

为什么在 PHP 脚本中阻止 DoS 是不明智的,因为每当发出请求时仍需要启动 PHP 处理器,这会导致大量开销。通过为此使用网络服务器,您将拥有更少的开销。

编辑: 正如另一个答案中所述,还可以通过配置服务器的防火墙来防止常见的 DoS 攻击。使用防火墙规则检查攻击发生在网络服务器受到攻击之前,因此那里的开销更少。此外,您还可以检测对其他端口的攻击(例如端口扫描)。我相信两者的结合效果最好,因为两者相得益彰。

于 2013-08-19T11:23:30.903 回答
0

在我看来,防止 DoS 的最佳方法是将防火墙设置为较低级别:在服务器入口处。通过使用iptables设置一些网络防火墙配置,您可以丢弃来自发送者的数据包,这些数据包对您的服务器造成的打击太大。

这将比通过 PHP 和 Apache 更有效,因为它们需要使用大量(相对)进程来进行检查,并且即使您检测到攻击者,它们也可能会阻止您的网站。

您可以查看此主题以获取更多信息:https ://serverfault.com/questions/410604/iptables-rules-to-counter-the-most-common-dos-attacks

于 2013-08-19T11:35:16.673 回答