ratelimit POST请求

我正在运行一个大的WordPress多用户网站。 我在WordPress应用程序服务器前有一个清漆caching。 由于cachingPOST请求是没有意义的,所以我很容易被DDoS使用大量的POST对varnishcaching服务器。

我试着设置一个只接受来自每个客户端的20个同时连接的防火墙规则,但是这对那些坐在共享代理之后的用户以及同一个网关后面的许多用户的学校有影响。

Varnish没有速率限制POST数量的选项,我想在达到应用程序服务器之前执行速率限制。 有一个小的透明代理可以完成这项工作吗?

目前Varnish正在接受约100-150点/秒,代理至less应该能够处理这个负载。

我打算把这个作为答案,因为它会很长。 正如你相当准确地说,阻止来自1个IP的超过20个并发请求将不会成功。 你必须设定“更聪明”的标准。 我会尽可能地说,在代理和应用程序服务器之间放置另一个代理并不优雅也不实用。

我不知道为什么你想要打apache之前的速度限制,因为你错过了fail2banmod_qosmod-antiloris (高度具体)和其他解决scheme。 而且,我不知道POST请求是否是您在DDoS方面唯一的问题。

cachingPOST请求回复是可能的,也是有意义的。 除非您每次都提供dynamic内容。 这当然不意味着你可以caching经过身份validation的页面。

如果请求花费了5秒以上,您可以为POST申请超时。 尽pipe连接速度慢的用户将无法发布任何内容。 您也可以结合上述规则,在每个url的基础上应用规则。 这是有道理的,因为用户在file upload页面上POST 1000kb是合理的,但是在login页面上不行。 正如我所说创build“更聪明”的标准。 他们可能会很长,可能需要一些时间来制定他们,但他们会为您提供一个可持续的解决scheme,因为我不知道在这种情况下的一个规模。

另一个可以结合的解决scheme是应用程序防火墙。 可能超过你的需要,但它也可以让你远离许多其他的事情。 这里是一个包含build议和相关wiki 的owasp页面

编辑:我不得不承认,我没有任何经验与configuration( varnishantiloris )。 迟早有很多清漆可以caching(虽然它是高度“可编程的”)。 你可以做的主要事情是知道使用模式和偏离规范的时间。 如果你只是想防止这种特殊types的攻击,那么为Varnish写更好的规则应该做到这一点。 然而,只要你有适当的mods / confs,Apache可以告诉什么时候请求是合法的,因此处理它,什么时候不处理。 阻止来自每个客户端的X个连接不是一件好事,除非你确实可以将这个IP列入黑名单。 你可以通过fail2ban(regex)或mod_qos在apache上做到这一点

我认为清漆,正确configuration将做到这一点。

我对wordpress不太了解,但是我认为它是一个有效的文章,会有一个会话variables,无论是cookie还是forms参数。 如果是这样,你想要限制的是重复POST的相同的价值,或POST没有这样的价值。

我在这里做了一个博客文章: http : //blog.dansingerman.com/post/4604532761/how-to-block-rate-limited-traffic-with-varnish基于IP地址或URL参数的速率限制; 它应该是简单的定制它的POST和基于一个表单variables或一个cookievariables。