我在cloudflare后面有4个网络服务器和一个负载均衡器,nginx是网络服务器,php-fpm管理php页面。我不知道如何阻止简单的 dos 攻击...
我可以使用 nginx 中的 http_limit_req 模块来检测此攻击 http://wiki.nginx.org/HttpLimitReqModule
但这根本无法阻止攻击,是的,这可以缓解攻击,但网络服务器会再次受到攻击,php-fpm 会达到 80%,一分钟后网站将无法访问。
我正在尝试找到一种方法来阻止此类请求。
我知道如何使用 nginx 阻止某些 IP 地址或某些用户代理,但我想自动执行此操作。我认为我无法使用 iptables 阻止 ip,因为请求来自负载均衡器:( 但我仍然能够使用 nginx 的 set_real_ip_from 和 real_ip_header X-Forwarded-For 检测正确的 ip 地址。
我的日志文件 (error.log) 中填充了正确的 IP 地址,如您所见:
2012/03/27 18:34:02 [错误] 31234#0: *1283 按区域“staging”限制连接,客户端:XX.XX.XX.XXX,服务器:www.xxxxxxx.com,请求:“HEAD /it HTTP/1.1”,主机:“www.xxxxxxx.com”
有人有主意可以教我如何自动屏蔽这个ip吗?
有几种技术可以减轻 nginx 中的 DDoS 攻击:
查看博客缓解 DDoS 攻击。
其他一些例子:
# forbid empty header
if ($http_user_agent = "") {
return 403;
}
# forbid various agents & crawlers containing forbidden keyword
if ($http_user_agent ~* (java|resty|python|http-client|httpClient|curl|TestBot) ) {
return 403;
}
# deny/allow IP access
location / {
deny 5.39.218.201; # deny single IP
deny 45.146.166.0/24; # deny range 45.146.166.0 - 45.146.166.255
#allow 10.20.30.40; # allow single IP
#allow 10.20.30.0/24; # allow range 10.20.30.0 - 10.20.30.255
}
# deny access to specific directories
location ~ ^/(protected|framework|themes/\w+/views|wp-|feed|xmlrpc) {
deny all;
}
要测试特定标头,请使用 ie。卷曲或 wget:
> curl -I -L -k -H "User-agent: BadBot" http://tested.site
# flags: -H = header, -L = follow redirects http->https, -k = dont verify SSL cert
> wget --user-agent "BadBot" http://127.0.0.1