新睿云

> DDoS高防云服务器 > nginx大法好,抗DDoS的神器

nginx大法好,抗DDoS的神器

作者/来源:新睿云小编 发布时间:2019-07-03

什么是DDoS?

在我们继续采取防止DDoS攻击的步骤之前,让我们看看DDoS是什么。

DDoS(分布式拒绝服务)攻击通过使用来自多台计算机的过多流量来使系统过载而使系统饱和,因此服务器无法处理它。

DDoSnginx.png

因此,它会导致服务停机,网络拥塞,口碑受损,财务损失等等。

在这里,我们的托管工程师会检查包含有关原始IP地址,地理位置等信息的服务器日志。因此,这让我们了解问题的根源。

想了解更多关于DDoS传送门——《简单利用路由黑洞解决DDOS流量攻击

Nginx DDoS预防 - 以下是如何做到这一点

现在让我们看看我们的专用支持工程师使用的不同的Nginx DDoS预防方法来缓解这种攻击。

1)软件防火墙

Nginx DDoS预防的最简单方法之一是使用CSF,iptables,UFW,APF等软件防火墙。

例如,在iptables中,我们的托管工程师使用以下命令限制端口80上的连接数。

/sbin/iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 -j REJECT --reject-with tcp-reset

并且,如果连接数超过连接限制,则IP将在服务器中被阻止。

同样,大多数Web主机在其cPanel服务器中使用CSF防火墙。在这里,我们调整CT_LIMIT,CT_BLOCK_TIME,CT_INTERVAL等参数来限制连接。

同样,Ubuntu服务器具有默认防火墙UFW(简单防火墙)。UFW的默认规则是拒绝所有传入连接并允许所有传出连接。因此,用户只能在服务器上启用所需的端口和IP,从而减少服务器暴露于DDoS攻击的风险。

2)调整Nginx参数

我们的支持工程师调整各种Nginx参数以防止大规模DDoS攻击。让我们详细讨论它们中的每一个。

a)Nginx工作进程

我们调整的一个重要参数是Nginx配置文件/etc/nginx/nginx.conf中的工作进程数和工作者连接数。

我们将逐步将工作进程和工作者连接调整为更高的值来处理DDoS攻击。例如,我们像这样在Nginx配置文件中调整工作者连接。

events { worker_connections 50000; }

此设置允许每个工作进程处理多达50000个连接。

最重要的是,我们的支持工程师会在增加这些值之前检查服务器资源,因为未优化的值可能会破坏整个服务器。

除此之外,我们还使用系统打开文件限制来限制连接数。换句话说,我们在/etc/sysctl.conf中修改参数fs.file-max

fs.file-max = 50000

另外,设定每个用户的开放文件限制数。例如,我们在/etc/security/limits.conf文件中设置Nginx工作进程的打开文件限制。

b)限制请求率

速率限制是防止Nginx中DDoS的最佳方法之一。

它可以限制在特定时间段内可以从特定客户端IP地址发出的请求数。并且,如果超出此限制,Nginx会拒绝这些请求。

因此,这是我们的托管工程师在服务器强化过程中调整的最重要参数之一。

我们调整Nginx配置文件中的limit_req_zone指令以限制请求。例如,请参阅以下代码:

limit_req_zone $binary_remote_addr zone=one:10m rate=30r/m;

此命令创建一个名为one的内存区域,最多可容纳160,000个(1m = 16000个IP)唯一IP,30r /m表示每分钟只允许30个请求。

类似地,我们使用limit_req指令来限制与特定位置或文件的连接。

c)限制连接速率

此外,我们的Nginx Experts速率限制了从单个IP地址进行的连接数。

换句话说,我们调整limit_conn_zonelimit_conn指令以限制每个IP地址的连接数。

limit_conn_zone $binary_remote_addr zone=one:20m; server { location /admin/ { limit_conn addr 20; }}

d)Nginx超时参数

同样,与服务器的慢速连接使这些连接长时间保持对服务器的开放。因此,服务器无法接受新连接。

在这种情况下,我们的技术支持专家调整Nginx的超时参数,如client_body_timeoutclient_header_timeout较低值。

server { client_body_timeout 10s; client_header_timeout 10s; }

这里,client_body_timeout指令定义了Nginx在客户端主体写入之间等待的时间和client_header_timeout意味着Nginx在客户端头的写入之间等待了多长时间。

e)限制HTTP请求大小

同样,大缓冲区值或大HTTP请求大小使DDoS攻击更容易。因此,我们限制Nginx配置文件中的以下缓冲区值以减轻DDoS攻击。

client_body_buffer_size 200K; client_header_buffer_size 2k; client_max_body_size 200k; large_client_header_buffers 3 1k;

f)限制与后端服务器的连接

当Nginx用作负载均衡器时,我们的托管工程师会调整Nginx参数以限制每个后端服务器处理的连接数。

例如,请参阅以下代码:

upstream domain { server 192.125.168.2:80 max_conns=100; server 192.125.168.3:80 max_conns=100; queue 20 timeout=10s; }

所以,这里max_conns指令指定Nginx可以为服务器打开的连接数。该队列指令限制时,该组中的所有服务器已达到连接限制已排队的请求数。最后,timeout指令指定可以在队列中保留请求的时间。

除了上述参数之外,我们还将Nginx配置为根据请求URL,User-Agent,Referer,Request标头等阻止连接。

3)在服务器上安装Fail2ban

Fail2ban是一款出色的入侵检测软件,可以阻止连接到服务器的可疑IP。这会扫描服务器日志以查找可疑访问权限并在防火墙中阻止此类IP。

例如,我们创建一个fail2ban jail/etc/fail2ban/jail.local并添加以下代码来监控对Nginx的请求数。

[nginx-req-limit] enabled = true filter = nginx-req-limit action = iptables-multiport[name=ReqLimit, port=”http,https”, protocol=tcp] logpath = /var/log/nginx/*error.log findtime = 200 bantime = 2600 maxretry = 20

这将扫描Nginx日志文件并阻止IP与服务器建立过多连接。

4)启用基于sysctl的保护

另外,我们在Nginx服务器上调整内核和系统变量。我们在/etc/sysctl.conf文件中启用了syn cookie,泛洪速率限制,每IP限制。

最重要的是,我们关注以下参数。

net.ipv4.conf.all.rp_filter = 1 net.ipv4.tcp_syncookies = 1

第一个参数可以防止IP欺骗,第二个参数允许TCP SYN cookie保护。

本文作者为Lakshmi Vijayakumar

热门标签
new year
联系客服
在线客服   
反馈意见
返回顶部
{{item.description}}

—您的烦恼我们已经收到—

我们会将处理结果发送至您的手机

请耐心等待