有一种工具叫绿巨人(Http 无法承受负载之王)。它是一种 Web 服务器拒绝服务工具。它旨在在 Web 服务器上生成大量唯一且模糊的流量,绕过缓存引擎,从而攻击服务器的直接资源池。
我已经在 Nginx 上测试过这个,它在几秒钟内就关闭了 Nginx。下面是我测试的日志片段。
192.168.1.10 - - [17/May/2013:16:37:35 +0800] "GET /?UDY=CLZFTJP HTTP/1.1" 200 199265 "http://www.usatoday.com/search/results?q=BZWVGQ" "Opera/9.80 (Windows NT 5.2; U; ru) Presto/2.5.22 Version/10.51"
192.168.1.10 - - [17/May/2013:16:37:35 +0800] "GET /?YGNBNQK=BEPPWCSMKJ HTTP/1.1" 200 199272 "http://www.google.com/?q=PJCSSRQLT" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1; .NET CLR 2.0.50727; InfoPath.2)"
192.168.1.10 - - [17/May/2013:16:37:35 +0800] "GET /?XETRTJ=LFV HTTP/1.1" 200 199264 "http://www.usatoday.com/search/results?q=QHDEEM" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1; .NET CLR 2.0.50727; InfoPath.2)"
192.168.1.10 - - [17/May/2013:16:37:35 +0800] "GET /?JYJHZB=ZHIB HTTP/1.1" 200 199265 "http://www.mywebsite.com/UPHIBL" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.1) Gecko/20090718 Firefox/3.5.1"
192.168.1.10 - - [17/May/2013:16:37:35 +0800] "GET /?VHXLKAIB=NCU HTTP/1.1" 200 199266 "http://www.mywebsite.com/KIPQLJH" "Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US)"
192.168.1.10 - - [17/May/2013:16:37:36 +0800] "GET /?IGCQSNG=BNKSM HTTP/1.1" 200 199267 "http://engadget.search.aol.com/search?q=POZWPGSTV" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1; .NET CLR 2.0.50727; InfoPath.2)"
192.168.1.10 - - [17/May/2013:16:37:36 +0800] "GET /?HUL=BMZAQXXXF HTTP/1.1" 200 199267 "http://www.usatoday.com/search/results?q=KUQNRADOUP" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; SV1; .NET CLR 2.0.50727; InfoPath.2)"
192.168.1.10 - - [17/May/2013:16:37:36 +0800] "GET /?ZWOWYGEZ=PBEAVXZF HTTP/1.1" 200 199271 "http://engadget.search.aol.com/search?q=FXWHN" "Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US)"
我的测试服务器(CentOS 6.4 64位)配置了Varnish,但正如工具所说,它绕过了Varnish的缓存。
我可以安装 fail2ban,但我该如何为这种请求定义正则表达式?或者有没有办法配置 Nginx 来防止这种攻击?也许是重写规则之类的?
答案1
我刚刚看到这个帖子,发现它有 2 个反对票。无论如何,我只想发布我阻止 HULK 请求的方法。
在/etc/nginx/conf.d/default.conf
(或类似)。我在块内添加了以下内容server
:
if ($args ~* "(.{1,})=(.{1,})" ){
rewrite ^/$ /444_rewrite?;
}
location /444_rewrite {
return 444;
}
它能做什么?
由于该网站使用友好 URL,并且没有一个网站 URL 以 和 开头?
,=
我可以将所有这些奇怪的 GET 请求重定向到 444。该参数(.{1,})=(.{1,})
告诉 Nginx 重定向所有在它们之间有任何字符的 GET 请求=
。