Nginx安全防护与HTTPS部署实战

核心安全配置

高级防护

一:核心安全配置

2.隐藏版本号

在生产环境中,需要隐藏 Nginx 的版本号,以避免泄漏 Nginx 的版本,使攻击者不能针对特定版本进行攻击。在隐藏版本号之前,可以使用 Fiddler 工具抓取数据包,查看Nginx 版本,也可以在 0penEuler 中使用命令 curl -Ihttp://192.168.10.202/查看

修改配置文件

3.限制危险请求方法

不安全的请求方式,是潜在的安全风险,TRACE(易引发XST 攻击)、PUT/DELETE(文件修改风险)、CONNECT(代理滥用),通过正则表达式匹配请求方法,非白名单方法返回 444(无响应关闭连接)

修改配置文件

测试 PUT/DELETE 请求

查看 access.log

4.请求限制(CC攻击防御)

CC 攻击(Challenge Collapsar 攻击)是一种常见的网络攻击方式,通过大量合法或伪造的小流量请求来耗尽服务器资源,导致正常用户无法访问网站。要在 Nginx 中有效防止 CC 攻击,可以采用多种策略和方法。CC攻击,也称为连接数攻击或请求速率限制攻击,通过模拟大量用户访问来消耗服务器资源,从而使得正常用户无法正常访问网站。为了防止此类攻击,可以使用 Nginx 提供的模块来限制请求速率和并发连接数

(1)使用 Nginx的 limit reg 模块限制请求速率

编辑配置文件

关键参数说明:

  • limit req zone 定义共享内存区
  • $binary_remote_addr 是一个内置变量,用于表示客户端 IP 地址的二进制格式
  • zone=req limit:10m 创建名为 req_limit 的共享内存区,大小 10M,用来存储客户端IP
  • rate=10r/s 限制并发数,每个 IP 每秒可以发起的请求次数
  • limit req 实施速率限制
  • zone=req_limit 绑定到预定义的共享内存区
  • burst=20 类似与等候区,超出并发数的请求会到等候区,等候区占满后,多余的请求会立刻返回 503
  • nodelay立即处理突发请求而不延迟,相当于立即处理等候区的请求,多余的请求会立刻返回 503

(2)压力测试验证

安装 ab 测试工具

ApacheBench(简称 ab)是 Apache HTTP 服务器白带的一个轻量级、易用的HTTP 服务器性能测试工具。它主要用于评估服务器在并发访问下的性能表现,包括响应时间、乔吐量等关键指标。

发起测试请求

共发起 300 个请求,每次发起 30 个请求

查看 access.log 发现大量请求日志状态码 503

5.防盗链

防盗链是一种重要的安全设置,旨在防止未经授权的用户盗用网站(静态)资源。盗链行为不仅侵犯了内容创作者的版权,还可能导致原网站带宽和资源的过度消耗,影响正常用户的访问速度和体验。

资源清单

本实验需要两台主机

|-----------|-----------|----------------|------|
| 操作系统 | 域名 | IP | 服务 |
| OpenEuler | www.a.com | 192.168.10.101 | 源主机 |
| OpenEuler | www.b.com | 192.168.10.102 | 盗链主机 |

(1)修改 Windows 的C:\Windows\System32\drivers\etc\hosts 文件,设置域名和 IP 映射关系

(2)修改两台 Cent0s 的 hosts 文件,设置域名和 IP 映射关系

(3)把图片 logo.jpg 放到源主机(www.aaa.com)的工作目录下

(4)编辑原网站首页文件

(5)测试访问源网站

(6)编辑盗链网站首页文件

(7)测试访问盗链网站(盗链成功)

(8)配置 Nginx防盗链

  • ~*\.(jpg|gif|swf)$:这段正则表达式表示匹配不区分大小写,以.jpg或.gif 或.swf 结尾的文件;
  • Valid referers:设置信任的网站,可以正常使用图片;
  • 后面的网址或者域名:referer 中包含相关字符串的网址;
  • If 语句:如果链接的来源域名不在valid referers 所列出的列表中,
  • $invalid referer 为1,则执行后面的操作,即进行重写或返回 403 页面

(9)测试访问盗链网站(盗链失败 403)

二.高级防护

1:动态黑名单

动态黑名单是 Nginx 中一种实时拦截恶意请求的安全机制,它允许在不重启服务的情况下,动态更新需要封禁的 IP地址或网段。相比静态配置的 allow/deny指令,动态黑名单更灵活高效,适用于高并发、多变的攻击防护场景。

(1)编辑黑名单配置文件

(2)编辑主配置文件

  • geo:Nginx 内置模块指令,专门用于处理P 地址相关的逻辑。基于客户端地址生成一个变量值,用于后续的访问控制判断
  • $block ip:自定义的变量名,存储计算结果(通常为0或1)。
  • default 0:默认值,表示不在黑名单中的 IP 允许访问
  • if($block ip):当变量值为1时触发封禁逻辑

(3)使用封禁 ip 测试访问

2.nginx https配置
2.1 https 概念

HTTPS,全称HyperText Transfer Protocol over Secure Socket Layer,设计初衷是为了保证数据传输安全。国内大型互联网巨头在 2016 开始大力推行https,期间关于 https 的重大事件有:

众所周知,http(超文本传输协议)是客户端浏览器与 web 服务器之间的通信协议,而 https 协议可以认为是 HTTP + SSL/TLS,在 http 之下 tcp 之上加了ss1 一层,用于对应用层数据的加解密。如下图所示。

|---------|
| HTTP |
| SSL/TSL |
| TCP |
| IP |

2.1.1 HTTP 为什么不安全

HTTP 由于是明文传输,主要存在三大风险:窃听风险、篡改风险、冒充风险
窃听风险

中间人可以获取到通信内容,由于内容是明文,所以获取明文后有安全风险

篡改风险

中间人可以篡改报文内容后再发送给对方,风险极大。

冒充风险

比如你以为是在和某宝通信,但实际上是在和一个钓鱼网站通信

2.1.2 安全通信的四大原则

不难猜到 HTTPS 就是为了解决上述三个风险而生的,一般我们认为安全的通信需要包括以下四个原则: 机密性、完整性,身份认证和不可否认。
机密性 :即对数据加密,解决了窃听风险,因为即使被中间人窃听,由于数据是加密的,他也拿不到明文;
完整性:指数据在传输过程中没有被篡改,不多不少,保持原样,中途如果哪怕改了一个标点符号,接收方也能识别出来,从来判定接收报文不合法;

身份认证:确认对方的真实身份,即证明"你妈是你妈"的问题,这样就解决了冒充风险,用户不用担心访问的是某宝结果却在和钓鱼网站通信的问题;

不可否认:即不可否认已发生的行为,比如小明向小红借了1000元,但没打借条,或者打了借条但没有签名,就会造成小红的资金损失。

2.1.3 HTTPS 通信原理简述

既然 HTTP 是明文传输的,那我们给报文加密不就行了,既然要加密,我们肯定需要通信双方协商好密钥吧。一种是通信双方使用同一把密钥,即对称加密的方式来给报文进行加解密

2.2 nginx 配置 https 证书

由于 ss1 证书需要向 CA 组织申购,实验采用自签名证书(也就是自己给自己签名并颁发证书,当然这种证书是不被信任的)

2.2.1 使用生成证书和私钥生成证书和私钥openssl

创建证书存储目录

  • -x509:生成自签名证书(而非 CSR)。
  • nodes:不加密私钥(无密码保护)。
  • days 365:证书有效期1年。
  • newkey rsa:2048:生成2048 位的 RSA 私钥。
  • subj:证书主题信息(按需修改字段)。

Ps

CA 签名证书:

需要由受信任的第三方证书颁发机构(CA)签发。流程如下:

1.用户生成私钥和 CSR(证书签名请求)。

2.将 CSR 提交给 CA(如 Let's Encrypt、DigiCert 等)

3.CA 机构验证身份后,用CA的私钥对证书签名,生成最终证书。

自签名证书:

证书的颁发者(Issuer)和主体(Subject)是同一个实体(即自己)

无需第三方 CA 参与,直接用工具(如 0penSSL)生成私钥和证书。

签名时使用自己的私钥,而不是 CA 的私钥。

适用于测试、内部环境或无需公开信任的场景。

2.2.2 nginx 启用 https

编辑 nginx 配置文件

2.2.2 通过浏览器验证

相关推荐
fruge1 小时前
Ubuntu服务器已下载Nginx安装包的安装指南
服务器·nginx·ubuntu
siriuuus2 小时前
Linux Tomcat 简单使用及 Nginx 反向代理
linux·nginx·tomcat
忧郁的橙子.3 小时前
十六、kubernetes 1.29 之 集群安全机制
安全·容器·kubernetes
2501_916007474 小时前
iOS 混淆工具链实战,多工具组合完成 IPA 混淆与加固(iOS混淆|IPA加固|无源码混淆|App 防反编译)
android·ios·小程序·https·uni-app·iphone·webview
li3714908905 小时前
nginx报400bad request 请求头过大异常处理
java·运维·nginx
雪兽软件5 小时前
SaaS 安全是什么以及如何管理风险
网络·安全
white-persist6 小时前
CSRF 漏洞全解析:从原理到实战
网络·python·安全·web安全·网络安全·系统安全·csrf
samroom6 小时前
iframe实战:跨域通信与安全隔离
前端·安全
渗透测试老鸟-九青6 小时前
网络安全之揭秘APT Discord C2 以及如何取证
安全·web安全·网络安全学习路线
隐语SecretFlow7 小时前
【隐语SecretFlow用户案例】亚信科技构建统一隐私计算框架探索实践
科技·算法·安全·隐私计算·隐私求交·开源隐私计算