我有一个奇怪的问题 – 在一个高stream量的网站上(每月有数百万的访问者),每天我们得到大约20个左右的情况,一个主机开始不断请求同一页面,每秒多次 – 从几分钟到一整天的任何时间长度。
这个攻击显然不是恶意的,因为我已经回溯了IP地址,并将其与我采访过的一些注册用户进行了匹配。 他们说,当发生这种情况时,我们网站上的JavaScript计数器“保持清爽”,他们的计算机变得很慢,但是否则可用。 这不会发生在每一页的负载,而是零星的。
日志命中有以下特点:
我们终于明白如何处理这件事。 一个简单的DoSfilter是不合适的 – 我们拥有这个filter,触发它的阈值远高于单个页面请求(没有相关的图像,CSS等)。
该堆栈是LAMP,Redhat安装,PHP 5.2,Apache 2.2.3,带有作为软件负载平衡器的NGINX盒子。
这是粉碎我们的网站 – 请帮助! 在没有好的想法的情况下,我们要求写一个虚拟filter,在memcached中存储一个IP + URI的密钥,并递增每个页面的请求。 一旦在一定的时间内超过了一定的门槛,我们还会有403个请求。 但是,我不认为这是networking堆栈中处理这个问题的适当的地方。
感谢您的贡献!
从你自己的描述中,我build议你先去掉那个柜台,看看是否真的有所作为。 这很容易testing,我很惊讶,你还没有这样做。
寻找命中和发送403只是真的掩盖了这个问题。 听起来像一个更好的方法来解决这个问题将是修复有问题的页面上的错误的JavaScript。
memcached解决scheme的问题在于你仍然得到命中,但是你正在计划避免任何密集的工作来检查memcached并确定这是否是一个错误的请求。 这是本身的工作,虽然当然,它可能会保存您的networking服务器或数据库服务器一些CPU。
为此,使用memcached的另一种方法是计算该URI的响应,如果它对于IP是唯一的,则将由IP + URI键入的响应存储在memcached中,如果不是仅通过具有任何其他唯一请求的URI会改变响应的参数。 然后使用任何小于X秒的caching响应来回答所有请求。 现在你还在每X秒重新计算一次,但是这比一秒钟的关系还要less。 我相信memcache意识代理或networking服务器将能够configuration这样做,而不写任何额外的,分别说MemProxy ,或Nginx的 。
获得不良行为的主要原因将是可取的。 如果它与JavaScript相关,则可能是JavaScript与您网页上的特定广告相关联。 您需要有一个开发机制来重新加载每个可能的广告页面。 如果您没有这个function,那么您最终无法抓住正在发生几个用户问题的广告。