用nginx阻止HTTP 1.0

我的服务器受到严重攻击。 大多数请求都是这样来的:

46.43.84.214 - - [15/May/2012:11:21:45 +0400] "GET / HTTP/1.0" 200 65859 "2r4k68998q24ay.ru" "Mozilla/4.0 (compatible; MSIE 4.01; Vonna.com bot)" 

所有这些请求的HTTP协议版本是相同的。 我可以以某种方式阻止Web服务器级别的HTTP 1.0请求吗? 我试图消除这个攻击(redirect到一个空文件):

 if ($server_protocol ~* "HTTP/1.0") { rewrite ^/ http://example.com/white.txt; } 

似乎没有太大的帮助,我没有看到日志中的任何这样的redirect。 我使用nginx 1.0.9作为Apache 2.2.3的反向代理。

任何帮助表示赞赏。

你可以使用这样的东西

 if ($http_user_agent ~* "Vonna.com" ) { return 444; } 

444将closures连接而不返回任何东西,确保尽可能低的影响。 虽然如果你想通知可能的合法用户,也许使用类似400的东西。

此外,也许阻止引荐,虽然大多数机器人也很容易恶搞。

就阻塞整个HTTP 1.0而言,你应该先检查一下 。 如果您仍然希望将该块作为临时解决scheme实施,则应该这样做。

 if ($server_protocol ~* "HTTP/1.0") { return 444; } 

基本上你有同样的事情,除了没有重写 – 如果我正确的阅读,你的使用使它只是停留在一个永久的循环。

使用正确的variables: $server_protocol而不是$http_user_agent

这对Nginx 1.8有帮助。

 if ($server_protocol = HTTP/1.0) { return 444; } 

我做这件事的理由是不同的。 Qualys威胁报告检测到CVE-2000-0649“允许远程攻击者通过HTTP 1.0请求获取服务器的内部IP地址”。 我有这样做的自由,因为我们的网站只支持有限的浏览器。