我目前遇到了 DDoS 问题。我的 Web 服务器位于反向代理 (cloudflare) 后面,我知道不应该依赖他们的免费计划。Cloudflare 处于攻击模式,这会导致访问者完成浏览器检查。通过直接 IP 访问网站只会重定向他们。我正在使用 nginx 的请求限制功能,但这似乎没有帮助,因为攻击者使用了一个巨大的代理列表。请求中没有巨大的危险信号,所以我不确定 WAF 是否有帮助。不过,有趣的是,当我查看错误日志时;我看到导致 DOS 的是以下错误(文件中完全充满了该错误)
2015/09/03 19:22:12 [crit] 3427#0: accept4() failed (24: Too many open files)
我现在认为他们正在通过直接 IP 进行攻击,但重定向不足以阻止他们让我达到打开文件数限制。我能做些什么来阻止这种情况?
谢谢
编辑:我不相信他们直接攻击 IP,因为我在网站上运行的软件仍然检测到攻击者造成的大量流量。
编辑:以下是他发送的几行垃圾邮件。cloudflare 的现成 WAF 会阻止此行为吗?
87.135.112.116 - - [05/Sep/2015:14:47:53 +0200] "GET /index.php HTTP/1.0" 200 15767 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; Media Center PC 6.0)"
113.22.35.98 - - [05/Sep/2015:14:47:53 +0200] "GET /index.php HTTP/1.0" 200 15767 "-" "Opera/9.80 (X11; Linux i686; Ubuntu/14.10) Presto/2.12.388 Version/12.16"
2.50.56.236 - - [05/Sep/2015:14:47:54 +0200] "GET /index.php HTTP/1.0" 200 15767 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36"
93.170.133.26 - - [05/Sep/2015:14:47:54 +0200] "GET /index.php HTTP/1.0" 200 15767 "-" "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0"
答案1
打开的文件过多意味着您已达到默认定义的 nginx ulimit 变量/etc/nginx/nginx.conf
(如果使用基于 RHEL 的 Linux)。这意味着 nginx 打开的连接过多,无法再处理任何请求。您可以通过增加以下变量来纠正此问题:
worker_rlimit_nofile <enter value here>;
您可以将尖括号中的信息替换为新值(默认值为 1024)。这将增加您打开的文件数(因此也增加您打开的连接数,因为每个连接都是一个文件)。
三件事:
确定你的服务器的限制(这取决于你的 CPU 数量和 RAM 数量)。
它
worker_rlimit_nofile
位于配置文件顶部,紧邻“worker_processes”变量下方。一旦在文件中设置变量,就需要重新启动 nginx。