Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何让nginx服务器抵御DDOS攻击

如何让nginx服务器抵御DDOS攻击

作者头像
timhbw
发布于 2018-05-02 04:29:31
发布于 2018-05-02 04:29:31
2.4K0
举报
文章被收录于专栏:Timhbw博客Timhbw博客

DDOS是一种通过大流量的请求对目标进行轰炸式访问,导致提供服务的服务器资源耗尽进而无法继续提供服务的攻击手段。一般情况下,攻击者通过大量请求与连接使服务器处于饱和状态,以至于无法接受新的请求或变得很慢。

应用层DDOS攻击的特征

应用层(七层/HTTP层)DDOS攻击通常由木马程序发起,其可以通过设计更好的利用目标系统的脆弱点。例如,对于无法处理大量并发请求的系 统,仅仅通过建立大量的连接,并周期性的发出少量数据包来保持会话就可以耗尽系统的资源,使其无法接受新的连接请求达到DDOS的目的。其他还有采用发送 大量连接请求发送大数据包的请求进行攻击的形式。因为攻击是由木马程序发起,攻击者可以在很短时间内快速建立大量的连接,并发出大量的请求。

以下是一些DDOS的特证,我们可以据此特征来抵抗DDOS(包括但不限于):

  • 攻击经常来源于一些相对固定的IP或IP段,每个IP都有远大于真实用户的连接数和请求数。 备注:这并不表明这种请求都是代表着DDOS攻击。在很多使用NAT的网络架构中,很多的客户端使用网关的IP地址访问公网资源。但是,即便如此,这样的请求数和连接数也会远少于DDOS攻击。
  • 因为攻击是由木马发出且目的是使服务器超负荷,请求的频率会远远超过正常人的请求。
  • User-Agent通常是一个非标准的值
  • Referer有时是一个容易联想到攻击的值

使用Nginx、Nginx Plus抵抗DDOS攻击

结合上面提到的DDOS攻击的特征,Nginx、Nginx Plus有很多的特性可以用来有效的防御DDOS攻击,可以从调整入口访问流量和控制反向代理到后端服务器的流量两个方面来达到抵御DDOS攻击的目的。

限制请求速度

设置Nginx、Nginx Plus的连接请求在一个真实用户请求的合理范围内。比如,如果你觉得一个正常用户每两秒可以请求一次登录页面,你就可以设置Nginx每两秒钟接收一个客户端IP的请求(大约等同于每分钟30个请求)。

  1. limit_req_zone $binary_remote_addr zone=one:10m rate=30r/m;
  2.     server {
  3.     ...
  4.     location /login.html {
  5.         limit_req zone=one;
  6.     ...
  7.     }
  8.     }
  9.    limit_req_zone 命令设置了一个叫one的共享内存区来存储请求状态的特定键值,在上面的例子中是客户端IP($binary_remote_addr)。location块中的`limit_req`通过引用one共享内存区来实现限制访问/login.html的目的。

限制连接数量

设置Nginx、Nginx Plus的连接数在一个真实用户请求的合理范围内。比如,你可以设置每个客户端IP连接/store不可以超过10个。

  1. limit_conn_zone $binary_remote_addr zone=addr:10m;
  2.      server {
  3.      ...
  4.      location /store/ {
  5.          limit_conn addr 10;
  6.          ...
  7.       }
  8.      }
  9.     `limit_conn_zone`命令设置了一个叫addr的共享内存区来存储特定键值的状态,在上面的例子中是客户端IP( $binary_remote_addr)。location块中`limit_conn`通过引用addr共享内存区来限制到/store/的最大连接数为10。

关闭慢连接

有一些DDOS攻击,比如Slowlris,是通过建立大量的连接并周期性的发送一些数据包保持会话来达到攻击目的,这种周期通常会低于正常的请求。这种情况我们可以通过关闭慢连接来抵御攻击。

client_body_timeout命令用来定义读取客户端请求的超时时间,client_header_timeout命令用来定于读取客户端请求头的超时时间。这两个参数的默认值都是60s,我们可以通过下面的命令将他们设置为5s:

  1. server {
  2.    client_body_timeout 5s;
  3.    client_header_timeout 5s;
  4.    ...
  5.    }

设置IP黑名单

如果确定攻击来源于某些IP地址,我们可以将其加入黑名单,Nginx就不会再接受他们的请求。比如,你已经确定攻击来自于从123.123.123.1到123.123.123.16的一段IP地址,你可以这样设置:

  1. location / {
  2.   deny 123.123.123.0/28;
  3.   ...
  4.   }

或者你确定攻击来源于123.123.123.3、123.123.123.5、123.123.123.7几个IP,可以这样设置:

  1. location / {
  2.   deny 123.123.123.0/28;
  3.   ...
  4.   }

设置IP白名单

如果你的网站仅允许特定的IP或IP段访问,你可以结合使用allow和deny命令来限制仅允许你指定的IP地址访问你的网站。如下,你可以设置仅允许192.168.1.0段的内网用户访问:

  1. location / {
  2.  allow 192.168.1.0/24;
  3.  deny all;
  4.  ...
  5.  }
  6. deny命令会拒绝除了allow指定的IP段之外的所有其他IP的访问请求。

使用缓存进行流量削峰

通过打开Nginx的缓存功能并设置特定的缓存参数,可以削减来自攻击的流量,同时也可以减轻对后端服务器的请求压力。以下是一些有用的设置:

  1. proxy_cache_use_stale的updating参数告诉Nginx什么时候该更新所缓存的对象。只需要到后端的一个更新请求,在缓存有效期间客户端对该对象的请求都无需访问后端服务器。当通过对一个文件的频繁请求来实施攻击时,缓存功能可极大的降低到后端服务器的请求。
  2. proxy_cache_key命令定义的键值通常包含一些内嵌的变量(默认的键值$scheme$proxy_host$request_uri包含了三个变量)。如果键值包含$query_string变量,当攻击的请求字符串是随机的时候就会给Nginx代理过重的缓存负担,因此我们建议一般情况下不要包含$query_string变量。

识别DDOS攻击

到目前为止,我们都是集中在如何是用Nginx、Nginx Plus来减轻DDOS攻击带来的影响。如何才能让Nginx、Nginx Plus帮助我们识别DDOS攻击呢?Nginx Plus Status module提供了到后端服务器流量的详细统计,可以用来识别异常的流量。Nginx Plus提供一个当前服务状态的仪表盘页面,同时也可以在自定义系统或其他第三方系统中通过API的方式获取这些统计信息,并根据历史趋势分析识别非正常的流量进而发出告警。

总结

Nginx和Nginx Plus可以作为抵御DDOS攻击的一个有力手段,而且Nginx Plus中提供了一些附加的特性来更好的抵御DDOS攻击并且当攻击发生时及时的识别到。

原文:https://www.nginx.com/blog/mitigating-ddos-attacks-with-nginx-and-nginx-plus/(运维帮译)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-03-070,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
『学习笔记』配置 Nginx 实现站点限流与防止 DDOS 攻击
🎈今日推荐——https://cloud.tencent.com/developer/article/2472492
二一年冬末
2024/12/01
4260
Nginx如何配置网络防攻击策略(DDoS)
DDoS:Distributed Denial of Service,即分布式拒绝服务攻击。借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDoS攻击,从而成倍地提高拒绝服务攻击的威力。通常,攻击者使用一个偷窃帐号将DDoS主控程序安装在一个计算机上,在一个设定的时间主控程序将与大量代理程序通讯,代理程序已经被安装在网络上的许多计算机上。代理程序收到指令时就发动攻击。利用客户/服务器技术,主控程序能在几秒钟内激活成百上千次代理程序的运行。
一个风轻云淡
2024/07/19
6180
nginx通过配置防止DDoS攻击
DDoS攻击是Distributed Denial of Service的缩写,翻译成中文就是分布式拒绝服务。即不法黑客组织通过控制服务器等资源,发动对包括国家骨干网络、重要网络设施、政企或个人网站在内的互联网上任一目标的攻击,致使目标服务器断网,最终停止提供服务。
我的小熊不见了丶
2019/05/22
3.6K0
nginx关于限制请求数和连接数
nginx轻巧功能强大,能承受几百并发量,ddos攻击几乎没有影响到nginx自身的工作,但是,太多的请求就开始影响后端服务了。所以必须要在nginx做相应的限制,让攻击没有到后端的服务器。这里阐述的是能在单位时间内限制请求数的ngx_http_limit_req_module模块和nginx限制连接数的ngx_http_limit_conn_module模块。安装模块这些简单的步骤这里就不介绍了,就介绍一下配置的参数,希望对大家有用。
一夕如环
2018/08/08
1.9K0
nginx防止DDOS攻击配置(一)
防御DDOS是一个系统工程,攻击花样多,防御的成本高瓶颈多,防御起来即被动又无奈。DDOS的特点是分布式,针对带宽和服务攻击,也就是四层流量攻击和七层应用攻击,相应的防御瓶颈四层在带宽,七层的多在架构的吞吐量。对于七层的应用攻击,我们还是可以做一些配置来防御的,例如前端是Nginx,主要使用nginx的http_limit_conn和http_limit_req模块来防御。ngx_http_limit_conn_module 可以限制单个IP的连接数,ngx_http_limit_req_module 可以限制单个IP每秒请求数,通过限制连接数和请求数能相对有效的防御CC攻击。下面是配置方法:
后端技术探索
2018/08/09
6.9K0
解密Nginx限流机制:有效应对DDoS攻击与高并发流量
你是否曾经经历过服务器因突发流量而瘫痪的场景?或者是遭受过DDoS攻击而无法正常运行?这些情况都可能给我们的服务带来灾难性的后果。但是,有了Nginx限流技术,就像给服务加上了一道坚固的防护罩,能够有效地控制访问速度,保护服务器免受过载的困扰。现在,让我们一起来揭开Nginx限流的神秘面纱,探索它的魅力所在!
一只牛博
2025/05/30
1980
解密Nginx限流机制:有效应对DDoS攻击与高并发流量
Nginx 安全性能配置 & DDOS 防范
最近看了一些 Nginx 的配置的文章主要和性能有关,包括一些安全上的配置,并不对所有设备适用,总结下来觉得有用的可以自取,另外是加深自己对服务器的理解。其中有一些有关 DDOS 的配置。内容参考了两篇文章和自己的一些安全理解。文章地址如下:
iMike
2019/08/02
1.5K0
[ES三周年]Nginx攻击方式和解决方案
可能我的读者多少了解过Nginx,我先给不了解的同学简单说一下原理。已经了解的跳到第二节。
宇宙无敌暴龙战士之心悦大王
2023/03/15
8710
通过Nginx对API进行限速
API 限速的主要目的是控制对 API 的访问频率和数据使用量,以保护 API 和后端服务的稳定性和可靠性。当接收到大量请求时,可能导致服务器过载或响应时间变慢,限制 API 的访问速率可以避免这种情况的发生。此外,API 限速还可以保护 API 免受恶意攻击,如 DDoS 攻击和暴力攻击。另一个原因是,API 提供者可能想要限制 API 的数据使用量,以确保他们的 API 不被滥用或过度使用。可以通过限制每个用户可以请求的数据量,达到该目的,以便 API 提供者可以控制服务的成本和资源使用率。综上所述,API 限速是一种有效的措施,可以确保 API 的稳定性和可靠性,防止 API 被恶意攻击和滥用。Nginx 是当前非常受欢迎的 Web 服务器和反向代理服务器。在高并发、高负载的 Web 场景中,Nginx 的高性能、稳定性和可扩展性优势得到了广泛认可,因此 Nginx 在这些场景下往往是最佳选择。Nginx 也支持 HTTP、HTTPS、SMTP、POP3 等多种协议,以及负载均衡、缓存、反向代理、安全控制等多种功能,使得它可以适用于各种不同的 Web 代理场景。
小阑本阑
2023/07/27
5530
通过Nginx对API进行限速
Nginx - 请求\上传下载速率_流控小妙招
限流(Rate Limiting)是一种有效的系统保护机制,通过控制系统的输入和输出流量来缓解潜在的压力和风险。在网站运行于公网环境时,面对用户正常访问、网络爬虫、恶意攻击或突发大流量等情况,系统可能会面临过载的风险,从而导致响应延迟甚至系统崩溃的问题。
小小工匠
2024/05/26
1.4K0
五分钟学Nginx 限速原理与配置
Nginx的limit_req模块用于限制客户端对服务器的请求速率,以防止服务器过载或恶意攻击。这个模块允许你设置每个客户端可以发送的请求数的上限。
五分钟学SRE
2023/11/17
3.6K0
五分钟学Nginx 限速原理与配置
如何对服务器做IP限流
前几天公司的统计出现了问题:大致是我们自己统计模块的数据和第三方的数据出现了比较大的偏差——公司的统计量级异常的大。我们怀疑有人直接拿上报接口去刷量,如果服务器性能撑的过去的话数据不准了还好,但万一刷量过大,击垮了服务器,这就是典型的ddos啊。于是我们把这个问题排上了日程。
OwenZhang
2021/12/07
2.6K0
『学习笔记』Nginx 作为 API 网关的配置与使用
🎈今日推荐——https://cloud.tencent.com/developer/article/2473731
二一年冬末
2024/12/05
9800
『学习笔记』Nginx 作为 API 网关的配置与使用
Nginx限制访问速率和最大并发连接数模块--limit (防止DDOS攻击)
具体连接请参考 http://tengine.taobao.org/document_cn/http_limit_req_cn.html
拓荒者
2019/03/15
4.7K0
Nginx学习之如何防止流量攻击
使用场景 最近,报告查询系统负载均衡集群相关配置已经完成,两种实现方式分别是基于Ehcache和Redis的session管理策略。 大家都知道服务器资源有限的,但是客户端来的请求是无限的(不排除恶意攻击), 为了保证大部分的请求能够正常响应,不得不放弃一些客户端来的请求,所以我们会采用Nginx的限流操作, 这种操作可以很大程度上缓解服务器的压力, 使其他正常的请求能够得到正常响应。 如何使用Nginx实现基本的限流,比如单个IP限制每秒访问50次。通过Nginx限流模块,我们可以设置一旦并发连接数超过我
小柒2012
2018/04/13
3K0
前端工程师不可不知的Nginx知识
互联网的全球化导致了互联网的数据量快速增长,加上在本世纪初摩尔定律在单核 CPU 上的失效,CPU 朝着多核方向发展,而 Apache 显然并没有做好多核架构的准备,它的一个进程同一时间只能处理一个连接,处理完一个请求后才能处理下一个,这无疑不能应对如今互联网上海量的用户。况且进程间切换的成本是非常高的。在这种背景下,Nginx 应运而生,可以轻松处理数百万、上千万的连接。
童欧巴
2020/08/25
4950
前端工程师不可不知的Nginx知识
如何优雅地使用 Nginx 限流
这个算法的核心是:缓存请求、匀速处理、多余的请求直接丢弃。 相比漏桶算法,令牌桶算法不同之处在于它不但有一只“桶”,还有个队列,这个桶是用来存放令牌的,队列才是用来存放请求的。
Bug开发工程师
2020/04/20
3.5K0
如何优雅地使用 Nginx 限流
006.Nginx访问控制
HTTP是建立在TCP, 一次HTTP请求需要先建立TCP三次握手(称为TCP连接),在连接的基础上再进行HTTP请求。
木二
2020/07/13
9510
一文详解Nginx安全加固
在当今数字化的世界中,网络安全已成为每一个组织和个人不可忽视的重要议题。作为最流行的Web服务器之一,Nginx不仅因为其高性能而被广泛使用,还因为它能够提供强大的安全保障。然而,默认配置下的Nginx可能无法抵御所有潜在的安全威胁。为了确保您的网站和应用程序能够在互联网上稳健运行,对Nginx进行适当的安全加固显得尤为重要。
zhouzhou的奇妙编程
2025/02/05
1.2K0
DDoS攻击与防御:从原理到实践
出于打击报复、敲诈勒索、政治需要等各种原因,加上攻击成本越来越低、效果特别明显等特点,DDoS攻击已经演变成全球性网络安全威胁。
0xtuhao
2022/06/21
1.8K0
DDoS攻击与防御:从原理到实践
相关推荐
『学习笔记』配置 Nginx 实现站点限流与防止 DDOS 攻击
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档