Nginx/Nginx Plus:DDoS攻击的克星,让你的网站稳如泰山!
专注网络安全领域,包括安全岗位招聘,红蓝队建设,实战攻防,内网渗透,社工,CTF
,安全技术分享等。
想象一下,你的网站突然像被成千上万只饥饿的蚂蚁围攻,它们疯狂地请求访问,导致服务器不堪重负,最终瘫痪… 这就是DDoS攻击,一种让网站管理员闻风丧胆的网络威胁。
DDoS攻击,全称分布式拒绝服务攻击(Distributed Denial of Service),就像一场有组织的“网络踩踏”事件。攻击者操控大量“肉鸡”(被黑客控制的电脑或服务器),向目标服务器发起海量请求,耗尽其资源,使其无法正常提供服务。
应用层DDoS攻击:更隐蔽、更狡猾
应用层(第七层/HTTP层)DDoS攻击尤其阴险,它们通常由木马程序发起,专门针对目标系统的薄弱环节。例如,如果某个系统无法处理大量并发请求,攻击者只需建立大量连接,并时不时发送少量数据包来“续命”,就能让系统资源耗尽,无法响应正常请求。
DDoS攻击的蛛丝马迹
虽然DDoS攻击来势汹汹,但我们仍能从一些蛛丝马迹中发现端倪:
-
IP地址扎堆:
攻击流量往往来自少数几个IP地址或IP段,每个IP的连接数和请求数远超正常用户。
-
当然,这并不绝对。在NAT网络架构中,多个客户端可能共用一个公网IP。但即使如此,其请求数和连接数也远不及DDoS攻击。
-
请求频率异常:
攻击流量的请求频率远高于正常人的操作速度。
-
User-Agent古怪:
User-Agent通常是一个非标准值。
-
Referer可疑:
Referer有时会包含一些与攻击相关的可疑信息。
Nginx/Nginx Plus:DDoS防御利器
面对DDoS攻击,Nginx和Nginx Plus这对“黄金搭档”能助你一臂之力。它们拥有众多特性,可有效防御DDoS攻击,主要体现在两个方面:
-
入口流量管控:
限制请求速度、连接数,关闭慢连接,设置IP黑/白名单。
-
反向代理流量控制:
使用缓存削峰,屏蔽特定请求,限制到后端服务器的连接数。
实战技巧:Nginx/Nginx Plus配置详解
- 限制请求速度
假设你认为正常用户每2秒请求一次登录页面是合理的,那么可以设置Nginx每2秒接收一个客户端IP的请求(约等于每分钟30个请求):
```nginx
limit_req_zone $binary_remote_addr zone=one:10m rate=30r/m;
server {
…
location /login.html {
limit_req zone=one;
…
}
}
```
代码解读:
-
limit_req_zone
:创建一个名为
one
的共享内存区域,用于存储请求状态信息,这里以客户端IP($binary_remote_addr
)作为键值。 -
location /login.html
:指定限制请求速度的URL路径。
-
limit_req zone=one
:引用共享内存区域
one
,实现对/login.html
的请求速度限制。 -
限制连接数量
假设你希望限制每个客户端IP到 /store
的连接数不超过10个:
```nginx
limit_conn_zone $binary_remote_addr zone=addr:10m;
server {
…
location /store/ {
limit_conn addr 10;
…
}
}
```
代码解读:
-
limit_conn_zone
:创建一个名为
addr
的共享内存区域,用于存储连接状态信息,这里以客户端IP($binary_remote_addr
)作为键值。 -
location /store/
:指定限制连接数的URL路径。
-
limit_conn addr 10
:引用共享内存区域
addr
,限制到/store/
的最大连接数为10。 -
关闭慢连接
有些DDoS攻击(如Slowlris)会建立大量连接,并以极低的频率发送数据包,以此来“霸占”服务器资源。我们可以通过关闭慢连接来应对:
nginx server { client_body_timeout 5s; client_header_timeout 5s; ... }
代码解读:
-
client_body_timeout
:设置读取客户端请求体的超时时间,默认值为60秒,这里设置为5秒。
-
client_header_timeout
:设置读取客户端请求头的超时时间,默认值为60秒,这里设置为5秒。
-
IP黑名单
如果你确定攻击来自某些IP地址或IP段,可以将它们加入黑名单:
nginx location / { deny 123.123.123.0/28; ... }
或者:
nginx location / { deny 123.123.123.3; deny 123.123.123.5; deny 123.123.123.7; ... }
* IP白名单
如果你的网站只允许特定IP或IP段访问,可以结合使用 allow
和 deny
指令:
nginx location / { allow 192.168.1.0/24; deny all; ... }
代码解读:
-
allow 192.168.1.0/24
:允许来自
192.168.1.0/24
网段的IP地址访问。 -
deny all
:拒绝所有其他IP地址的访问。
-
缓存削峰
开启Nginx的缓存功能,并设置合适的参数,可以有效减少攻击流量对后端服务器的冲击:
-
proxy_cache_use_stale updating
:告诉Nginx何时更新缓存对象。在缓存有效期内,客户端对同一对象的请求无需访问后端服务器,只需一个更新请求即可。这对于应对频繁请求同一文件的攻击非常有效。
-
proxy_cache_key
:定义缓存键值,通常包含一些内置变量。注意: 建议不要包含
$query_string
变量,因为如果攻击请求的查询字符串是随机的,会给Nginx代理带来过重的缓存负担。 -
屏蔽特定请求
可以设置Nginx/Nginx Plus屏蔽特定类型的请求:
- 针对特定URL的请求
- User-Agent不常见的请求
- Referer包含可疑信息的请求
- 其他请求头包含可疑信息的请求
例如,屏蔽针对 /foo.php
的请求:
nginx location /foo.php { deny all; }
屏蔽User-Agent包含 foo
或 bar
的请求:
nginx location / { if ($http_user_agent ~* foo|bar) { return 403; } ... }
代码解读:
-
$http_user_agent
:引用请求头中的User-Agent字段。
-
~* foo|bar
:使用正则表达式匹配User-Agent中是否包含
foo
或bar
(不区分大小写)。 -
return 403
:如果匹配成功,返回403 Forbidden错误。
-
限制到后端服务器的连接数
Nginx/Nginx Plus可以处理比后端服务器更多的并发请求。在Nginx Plus中,你可以限制到每个后端服务器的连接数:
nginx upstream website { server 192.168.100.1:80 max_conns=200; server 192.168.100.2:80 max_conns=200; queue 10 timeout=30s; }
代码解读:
-
upstream website
:定义一个名为
website
的上游服务器组。 -
server 192.168.100.1:80 max_conns=200
:设置Nginx Plus与
192.168.100.1:80
这台后端服务器建立的最大连接数为200。 -
queue 10 timeout=30s
:当后端服务器达到最大连接数时,设置请求队列的大小为10,超时时间为30秒。
-
处理特定类型的攻击
有一种攻击会发送包含超大值的请求头,导致服务器缓冲区溢出。Nginx/Nginx Plus对此类攻击也有防御措施,详情请参考:Using NGINX and NGINX Plus to Protect Against CVE-2015-1635
* Nginx性能优化
DDoS攻击通常会带来高负载压力。通过一些调优参数,可以提升Nginx/Nginx Plus的处理性能,硬抗DDoS攻击。详情请参考:Tuning NGINX for Performance
如何识别DDoS攻击?
除了防御,Nginx Plus还能帮你识别DDoS攻击。Nginx Plus Status module
提供了详细的后端服务器流量统计信息,可用于识别异常流量。Nginx Plus提供了一个实时状态仪表盘,你也可以通过API获取这些统计信息,并结合历史趋势分析,及时发现并告警异常流量。
总结
Nginx和Nginx Plus是抵御DDoS攻击的强大武器。Nginx Plus更是在此基础上提供了更多高级特性,助你更好地防御DDoS攻击,并在攻击发生时及时识别。
接下来我将给各位同学划分一张学习计划表!
学习计划
那么问题又来了,作为萌新小白,我应该先学什么,再学什么?
既然你都问的这么直白了,我就告诉你,零基础应该从什么开始学起:
阶段一:初级网络安全工程师
接下来我将给大家安排一个为期1个月的网络安全初级计划,当你学完后,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web渗透、安全服务、安全分析等岗位;其中,如果你等保模块学的好,还可以从事等保工程师。
综合薪资区间6k~15k
1、网络安全理论知识(2天)
①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)
2、渗透测试基础(1周)
①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等
3、操作系统基础(1周)
①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)
4、计算机网络基础(1周)
①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现
5、数据库基础操作(2天)
①数据库基础
②SQL语言基础
③数据库安全加固
6、Web渗透(1周)
①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)
那么,到此为止,已经耗时1个月左右。你已经成功成为了一名“脚本小子”。那么你还想接着往下探索吗?
阶段二:中级or高级网络安全工程师(看自己能力)
综合薪资区间15k~30k
7、脚本编程学习(4周)
在网络安全领域。是否具备编程能力是“脚本小子”和真正网络安全工程师的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力。
零基础入门的同学,我建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习
搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP,IDE强烈推荐Sublime;
Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,没必要看完
用Python编写漏洞的exp,然后写一个简单的网络爬虫
PHP基本语法学习并书写一个简单的博客系统
熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选)
了解Bootstrap的布局或者CSS。
阶段三:顶级网络安全工程师
如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!
学习资料分享
当然,只给予计划不给予学习资料的行为无异于耍流氓,这里给大家整理了一份【282G】的网络安全工程师从入门到精通的学习资料包,可点击下方二维码领取哦。