Nginx安全防护与HTTPS部署
一、安全防护与HTTPS概念
一、安全防护与HTTPS概念
为什么要隐藏版本号?
当访问网站时,能从响应标头查看到server的信息,这里面就包含了是什么web应用及其版本为你提供的服务。如果不隐藏server的版本,会导致别有用心的人知晓服务的版本号,从而针对该版本进行攻击。
PS:浏览器中按F12,选择网络,在最上面点击你访问的网页(例如百度,会显示www.baidu.com)找到这个并点击它,选择标头-响应标头,这里面有一行为server,会跟上web应用程序及版本。
限制不安全的请求方式,能更好保护nginx服务器。常见的危险请求方法包括TRACE(易引发XST攻击)、PUT/DELETE(文件修改风险)、CONNECT(代理滥用)。通过在配置文件中添加正则表达式来匹配请求方法即可拒绝不安全的请求方式。
CC攻击介绍
CC攻击(Challenge Collapsar攻击)是一种常见的网络攻击方式,通过大量合法或伪造的小流量请求来耗尽服务器资源,导致正常用户无法访问网站。也称为连接数攻击或请求速率限制攻击。
面对CC攻击的处理方式
使用nginx的limit_req模块来限制请求速率
压力测试介绍
压力测试是指通过快速大量的访问来评估服务器在并发访问下的性能表现,包括响应时间、吞吐量等关键指标。
盗链介绍
简单解释:
网站B盗用网站A的静态资源,通过网站A来解析网站B盗走内容用户的请求,网站B无需付出静态资源以及性能上的消耗。
详细解释:
一般来说,用户浏览一个完整的页面并不是一次性全部传送到客户端的。如果所请求的页面带有图片或其他信息,那么第一个HTTP请求传送的是这个页面的文本,然后通过客户端的浏览器对这段文本进行解释执行。如果发现其中还有图片,那么客户端的浏览器会再次发送一条HTTP请求,当这个请求被处理后这个图片文件才会被传送到客户端,最后浏览器会将图片安放到页面的正确位置,就这样一个完整的页面要经过多次发送HTTP请求才能够被完整的显示。基于这样的机制,就会产生盗链问题:如果一个网站中没有其页面中所说图片信息,那么它完全可以链接到其他网站的图片信息上。这样,没有任何资源的网站利用了其他网站的资源来展示给浏览者,提高了自己的访问量,而大部分浏览者又不会很容易地发现。一些不良网站为了不增加成本而扩充自己站点内容,经常盗用其他网站的链接。一方面损害了原网站的合法利益,另一方面又加重了服务器的负担。
防盗链介绍
防盗链是用于防止未经授权的用户盗用网站(静态)资源。
动态黑名单介绍
动态黑名单是nginx中一种实时拦截恶意请求的安全机制,它允许在不重启服务的情况下,动态更新需要封禁的IP地址或网段。动态黑名单更灵活高效,适用于高并发、多变的攻击防护场景。
https介绍
HTTPS,全称HyperText Transfer Protocol over Secure Socket Layer,设计初衷是为了保证数据传输安全。
http是客户端浏览器与web服务器之间的通信协议,而https协议可以认为是HTTP+SSL/TLS,在http之下tcp之上加了ssl一层,用于对应用层数据的加解密。
如图
HTTP
SSL/TSL
TCP
IP
SSL:由Netscape公司开发,专门用于保护web通讯。SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为SSL记录协议(SSL Record Protocol)和SSL握手协议(SSL Handshake Protocol)两层。
TLS:是IETF(Internet Engineering Task Force,互联网工程任务组)制定的一种新的协议,它建立在SSL3.0协议规范之上,是SSL3.0的后续版本。TLS是当前主流的网络安全协议。
http为什么不安全?
http是明文传输,主要存在三大风险:窃听风险、篡改风险、冒充风险。
窃听风险:
中间人可以获取到通信内容,由于内容是明文,所以获取明文后有安全风险。
客户机 -> 中间人(窃听,不修改) -> 服务器
篡改风险:
中间人可以篡改报文内容后再发送给对方,风险极大。
客户机 -> 中间人(窃听且修改) -> 服务器
冒充风险:
比如你以为是在和某宝通信,但实际上是在和一个钓鱼网站通信。
客户机 -> <- 中间人(直接冒充服务器,让客户机以为自己在和服务器通信) 服务器
HTTPS是为了解决以上三大风险而存在的。
安全的通信需包含四个原则:机密性、完整性、身份认证和不可否认。
机密性:对数据加密,解决了窃听风险,因为即使被中间人窃听,由于数据是加密的,他也拿不到明文。
完整性:数据在传输过程中没有被篡改,不多不少,保持原样,中途如果哪怕改了一个标点符号,接收方也能识别出来,从来判定接收报文不合法。
身份认证:确认对方的真实身份,即证明我是我的问题,这样就解决了冒充风险,用户不用担心访问的是某宝结果却在和钓鱼网站通信的问题。
不可否认:不可否认已发生的行为,比如小明向小红借了100元,但没有打借条,或者打了借条但没有签名,就会造成小红的资金损失。
HTTPS通信原理简述
HTTPS使用对称加密和非对称加密以及数字证书。对称加密是指加解密的密钥相同,非对称加密是指有公钥和私钥,公钥加密的只有私钥能解开,私钥加密的只有公钥能验证。使用非对称加密来对对称加密的密钥进行加密,这时候传递非对称加密的密钥需要借助数字证书来传递。在数字证书中添加上公钥即可。到这里,公钥和对称加密的密钥都有了,就可以开始传输了。
PS:非对称加密,公加私解用于信息加密 私加公解用于身份验证。
nginx配置文件解释
worker_processes 1; # 工作进程数,与cpu内核数有关。进程拆分为线程供cpu的核>心来处理,一个内核一次处理一个线程。
events {
worker_connections 1024; # 每个工作进程能处理的最大连接数。
}
二、nginx配置演示
隐藏版本号浏览器中按F12,选择网络,在最上面点击你访问的网页(例如百度,会显示www.baidu.com)找到这个并点击它,选择标头-响应标头,这里面有一行为server,会跟上web应用程序及版本。vim nginx.confserver_tokens off; # 表示关闭nginx的版本号,在http响应头中看不到nginx的版本。此时查看server发现没有版本号了。
隐藏危险请求方法if ($request_method !~ ^(GET|HEAD|POST)$) { # 如果请求方式不是GET|HEAD|POST,会返回666状态码。return 666;}验证:
curl -XPUT -I 192.168.10.101
curl:(52) Empty reply from server查看日志
192.168.10.102 - - [11/Mar/2025:11:30:11 +0800] "PUT /HTTP/1.1" 666 0 "-" "curl/8.4.0"
请求限制(CC攻击防御)limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s; # $binray_remote_addr 获取二进制的客户端ip地址,remote_addr表示远程IP,在http里代表>
客户端地址。 req_limit:10m 表示10兆,用于存储客户端的ip和连接。 rate=10r/s 表示每个IP可以发起的请求次数。limit_req zone=req_limit burst=20 nodelay; # zone=req_limit 绑定到预
定义的共享内存区 burst=20 类似于等候区,超出并发数的请求会到等候区,等候区占
满后,多余的请求会立即返回503 nodelay表示立即处理突发请求而不延迟,相当于立即
处理等候区的请求,多余的请求会立刻返回503客户机:
for i in $(seq 150);do curl 192.168.10.101; done服务器:
cat access.log发现有大量503的回应。
防盗链
客户机(101):
cat aaa.html
<html><body><h1> aaa<img src="http://192.168.10.101/kgc.png"/> 盗取192.168.10.101的图片,ip可换域名</h1></body>
</html>浏览器访问192.168.10.102会显示192.168.10.101的图片。服务器(101):location ~* \.(jpg|jpeg|png|bmp|swf|flv|mp4|webp|ico)$ { # ~* \.(jpg|gif|swf)$ 表示匹配不区分大小写,以.jpg或.gif或.swf结尾的文件;root html;valid_referers ooos.com *.ooos.com; # 访问网址为ooos.com的
访问网址为*(所有的开头).ooos.com的if ($invalid_referer) { # 如果链接的来源域名不在valid_refe
rers所列出的列表中,$invalid_referer为1,则执行后面的操作,即进行重写或返回99
9。return 999;}客户机:
vim /etc/hosts
192.168.10.101 www.ooos.com浏览器访问192.168.10.102不显示图片,状态码为404。输入192.168.10.101也不显示图片,状态码为404。访问www.ooos.com会显示图片。(开头也可以是aaa、bbb、ccc等等)
动态黑名单[root@localhost conf]# cat blockips.conf
192.168.1.0/24 1;
192.168.10.102 1;[root@localhost conf]# vim nginx.conf
geo $block_ip { # Nginx内置模块指令,专门用于处理ip地址相关的逻辑,基
于客户端ip地址生成一个变量值,用于后续的访问控制判断。 $block_ip是自定义的变>量名,存储计算结果(通常为0或1) default 0 是默认值,表示不在黑名单中的ip允许
访问。 default 0; # 默认允许访问include /usr/local/nginx/conf/blockips.conf; # 包含黑名单}server {listen 80;server_name localhost;if ($block_ip) { # 判断标记值,变量值为1时触发封禁逻辑return 666; # 封禁动作}客户端验证[root@localhost html]# curl -I 192.168.10.101
HTTP/1.1 666
Server: nginx/1.26.3
Date: Tue, 29 Apr 2025 02:41:35 GMT
Content-Length: 0
Connection: keep-alive脚本实现动态黑名单
[root@localhost conf]# vim /root/a.sh # 将此脚本加入定时任务中,可实现定时防护。
#!/bin/bash
awk '{print $1}' /usr/local/nginx/logs/access.log | sort | uniq -c | sort -nr| awk '{if ($1 > 100) print $2 " 1;" }' > /usr/local/nginx/conf/blockips.con
f
# sort 用于排序 sort -nr n表示依照数值大小来排序,数值小的在上。 r表示以相反>的顺序来排序。 uniq -c用于在每列旁边显示该行重复出现的次数。
# 如果$1出现次数大于100,那么将它打印出来并加上1; 表示拒绝该ip,将结果重定向>覆盖输出到blockips.conf文件中[root@localhost conf]# for i in $(seq 166); do curl 192.168.10.101;done # 大量访问以触发条件$1>100这里就简单的运行一次来验证脚本。
[root@localhost ~]# bash a.sh
[root@localhost ~]# cd /usr/local/nginx/conf/
[root@localhost conf]# cat blockips.conf
192.168.10.101 1;
[root@localhost conf]# curl 192.168.10.101
<html><body><h1>ooos!<img src="kgc.png"/></h1></body>
</html>
[root@localhost conf]# nginx - s reload # 可将此步加到脚本中。[root@localhost conf]# curl -I 192.168.10.101
HTTP/1.1 666
Server: nginx/1.26.3
Date: Tue, 29 Apr 2025 03:17:37 GMT
Content-Length: 0
Connection: keep-alive
https配置
[root@localhost conf]# openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx-selfsigned.key -out /etc/nginx/ssl/nginx-selfsigned.crt -subj "/C=CN/ST=Beijing/L=Beijing/O=MyOrg/CN=localhost" # 生成证书req表示请求。
-x509表示生成自签名证书(x509是证书类型)
-nodes表示不加密私钥(无密码保护)。
-days 365表示证书有效期一年。
-newkey rsa:2048 表示生成2048位的RSA密钥。
-keyout 表示将私钥输出到指定位置。
-out 表示将证书文件输出到指定位置
-subj 表示证书主题信息,C=CN是指国家为中国,ST=Beijing表示省份 L=Beijing表示市 O=Myorg表示证书机构(这里是自定义的名字) CN=localhost是主机名。[root@localhost conf]# vim nginx.confserver {listen 443 ssl; # 监听HTTPS端口server_name localhost; # 域名或IP# 指定证书和私钥路径ssl_certificate /etc/nginx/ssl/nginx-selfsigned.crt;ssl_certificate_key /etc/nginx/ssl/nginx-selfsigned.key;# SSL协议和加密套件配置(可选,提升安全性)ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers
ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;ssl_prefer_server_ciphers on;#charset koi8-r;#access_log logs/host.access.log main;location / {root html;index index.html index.htm;}# 将HTTP请求重定向到HTTPSserver {listen 80;server_name localhost;return 301 https://$host$request_uri;}[root@localhost conf]# firewall-cmd --add-service=https
success浏览器访问https://192.168.10.101 提示证书不安全,选择高级-继续前往或信任该证书-访问成功。
访问http://192.168.10.101 会跳转到https://192.168.10.101,因为之前信任了证书,所以未提示证书不安全。
相关文章:
Nginx安全防护与HTTPS部署
一、安全防护与HTTPS概念 一、安全防护与HTTPS概念 为什么要隐藏版本号? 当访问网站时,能从响应标头查看到server的信息,这里面就包含了是什么web应用及其版本为你提供的服务。如果不隐藏server的版本,会导致别有用心的人知晓…...
C语言_程序的段
在 C 语言程序中,内存通常被分为多个逻辑段,每个段存储不同类型的数据。理解这些段的结构和功能,有助于你更高效地编写、调试和优化程序。以下是 C 语言程序中主要的内存段及其特点: 1. 代码段(Text Segment) 存储内容:编译后的机器指令(程序代码)。特性: 只读:防止…...

OSPF综合实验实验报告
OSPF综合实验实验报告 一、实验拓扑 二、实验要求 1.R5为ISP,其上只能配置IP地址;R4作为企业边界路由器, 出口公网地址需要通过PPP协议获取,并进行chap认证 2,整个OSPF环境IP基于172.16.0.0/16划分; 3&…...

vue3+ant design vue + Sortable实现多级表格列拖动
1、最近遇到个需求,需使用vue3ant design vue Sortable实现多级表格的表头允许用户拖拽移动。即当用户拖拽一级表头时,其对应的子级表头及数据应同步移动,并且只允许一级非固定表头允许拖拽。 2、代码 <a-table:data-source"rowDat…...

基于开源链动2+1模式AI智能名片S2B2C商城小程序的分销价格管控机制研究
摘要:本文聚焦开源链动21模式AI智能名片S2B2C商城小程序在分销体系中的价格管控机制,通过解析其技术架构与商业模式,揭示平台如何通过"去中心化裂变中心化管控"双轨机制实现价格统一。研究显示,该模式通过区块链存证技术…...

阿里云 SLS 多云日志接入最佳实践:链路、成本与高可用性优化
作者:裘文成(翊韬) 摘要 随着企业全球化业务的扩展,如何高效、经济且可靠地将分布在海外各地的应用与基础设施日志统一采集至阿里云日志服务 (SLS) 进行分析与监控,已成为关键挑战。 本文聚焦于阿里云高性能日志采集…...

体育培训的实验室管理痛点 质检LIMS如何重构体育检测价值链
在竞技体育与全民健身并行的时代背景下,体育培训机构正面临双重挑战:既要通过科学训练提升学员竞技水平,又需严格把控运动安全风险。作为实验室数字化管理的核心工具,质检LIMS系统凭借其标准化流程管控与智能化数据分析能力&#…...
第二节:Vben Admin 最新 v5.0 对接后端登录接口(上)
文章目录 前言一、登录页面调整二、登录表单调整三、后端接口(Python)对接对接准备1. Flask项目介绍2. User模型创建3. 迁移模型4. Token创建5. 编写蓝图6. 注册蓝图四、测试登录总结前言 这里是Vben Admin V5版本实战体验,上一节我们前端已正常运行,但是没有实现登录。本节…...

设计模式【cpp实现版本】
文章目录 设计模式1.单例模式代码设计1.饿汉式单例模式2.懒汉式单例模式 2.简单工厂和工厂方法1.简单工厂2.工厂方法 3.抽象工厂模式4.代理模式5.装饰器模式6.适配器模式7.观察者模式 设计模式 1.单例模式代码设计 为什么需要单例模式,在我们的项目设计中&…...

阿维塔汽车CAN总线数据适配技术解析与免破线数据采集实践
在智能电动汽车快速迭代的背景下,阿维塔凭借其高度集成的电子电气架构成为行业焦点。昨天我们经过实测,适配了该车型CAN总线数据适配的核心技术,从硬件接口定位、无损伤接线方案到关键动力系统数据解码进行系统性剖析,为智能诊断、…...

用纯HTML和CSS仿写知乎登录页面
这是知乎的官方的登录页面 这是我的登录页面,使用 HTML CSS 进行编写。我觉得这是一个供前端新手练手的一个不错的小项目, 在这个系列,我将会用 HTML CSS 编写各大知名网站的登录界面,欢迎大家交流探讨。 源码展示: body{ba…...
数据库故障排查全攻略:从实战案例到体系化解决方案
一、引言:数据库故障为何是技术人必须攻克的 "心腹大患" 在数字化时代,数据库作为企业核心数据资产的载体,其稳定性直接决定业务连续性。据 Gartner 统计,企业每小时数据库 downtime 平均损失高达 56 万美元࿰…...
MySQL如何优雅的执行DDL
一、概述 在MySQL中,DDL(数据定义语言)语句用于定义和管理数据库结构,包括创建、修改和删除数据库对象(如表、索引等)。执行DDL操作时,需要谨慎处理,以避免对生产环境的稳定性和性能…...
Django异步任务处理方式总结
在 Django 中实现异步任务处理是优化性能和用户体验的关键。以下是几种常见的异步任务处理方式及详细说明: 1. Celery(最主流方案) 适用场景:需要可靠、分布式、复杂任务队列的项目(如定时任务、重试机制、多节点部署…...
类加载机制详解:双亲委派模型与打破它的方式
在复杂的 Java 系统中,类加载是最基础却常被忽略的一环。理解 JVM 的类加载机制,特别是 双亲委派模型(Parent Delegation Model),是我们深入掌握热部署、插件机制、ClassLoader 隔离、ClassNotFound 错误等问题的关键。…...

【Redis】C++如何使用redis
文章目录 1. redis客户端2. 使用通用命令3. 使用string命令3. 使用list命令4. 使用set命令5. 使用hash命令6. 使用zset命令 1. redis客户端 在前面的学习种,我们都是使用redis命令行客户端手动执行操作的;但是更多的时候,需要使用redis的api…...
2025年现代职业教育质量提升计划(植保无人机实训室)解决方案
一、项目背景 1.1 现代职业教育发展趋势 现代职业教育正朝着多元化、技术化、智能化方向发展,以满足社会对高素质技术技能人才的迫切需求。随着科技的飞速进步,职业教育课程体系不断优化,实训教学环节的重要性愈发凸显。据教育部统计&#…...

考研系列-408真题计算机组成原理篇(2010-2014)
写在前面 此文章是本人在备考过程中408真题计算机组成原理部分(2010年-2014年)的易错题及相应的知识点整理,后期复习也常常用到,对于知识提炼归纳理解起到了很大的作用,分享出来希望帮助到大家~ # 2010年 1.DRAM芯片的排列和编址方式 这个区别于多体交叉编址:这个可以理…...
【BUG】‘DetDataSample‘ object has no attribute ‘_gt_sem_seg‘
问题: 使用mmdetection框架使用COCO格式训练自定义数据集时,其中模型使用HTC模型时出现如下问题: AttributeError: ‘DetDataSample’ object has no attribute ‘_gt_sem_seg’. Did you mean: ‘gt_sem_seg’? results self(**data, mode…...

47.电压跌落与瞬时中断干扰的防护改善措施
电压跌落与瞬时中断干扰的防护改善措施 1. 电压跌落与瞬时中断的影响机理2. 解决措施 1. 电压跌落与瞬时中断的影响机理 跌落发生的常见场景如下: (1)电源插头接触不良,瞬态中断即刻恢复; (2)电…...

极狐Gitlab 里程碑功能介绍
极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 里程碑 (BASIC ALL) 极狐GitLab 中的里程碑是一种跟踪议题和合并请求的方法,这些请求是为了在特定时间段内实现更…...

一次Android Fragment内存泄露的bug解决记录|Fragment not attach to an Activity
Bug描述 前些天出现了一个 bug。Activity 页面里放了一个 ViewPager2,其中的每一页是一个 Fragment。其中第一页的 Fragment 实现了一个监听器,当事件发生和首次添加到监听器管理者 listener manager 时,manager 会通知所有监听者࿰…...
基于深度学习的交通标志识别系统
基于深度学习的交通标志识别系统 项目简介 本项目实现了一个基于深度学习的交通标志识别系统,使用卷积神经网络(CNN)对交通标志图像进行分类识别。系统包含数据预处理、模型训练与评估、结果可视化和用户交互界面等模块。 数据集 项目使用德国交通标志识别基准数…...

LVGL图像导入和解码
LVGL版本:8.1 概述 在LVGL中,可以导入多种不同类型的图像: 经转换器生成的C语言数组,适用于页面中不常改变的固定图像。存储系统中的外部图像,比较灵活,可以通过插卡或从网络中获取,但需要配置…...
Vite Proxy配置详解:从入门到实战应用
Vite Proxy配置详解:从入门到实战应用 一、什么是Proxy代理? Proxy(代理)是开发中常用的解决跨域问题的方案。Vite内置了基于http-proxy的代理功能,可以轻松配置API请求转发。 二、基础配置 在vite.config.js中配置…...
oracle goldengate非并行进程转换为并行进程
oracle goldengate非并行进程转换为并行进程 在上一期的文章中写道了直接创建并行进程的方式对大事务进行分解,这对于新建立同步进程的时候提前规划是很有帮助的,但是如果对已经进行了同步的进程重新建立需要耗时比较长,Oracle提供了非并行进…...
VBA将PDF文档内容逐行写入Excel
VBA是无法直接读取PDF文档的,但结合上期我给大家介绍了PDF转换工具xpdf-tools-4.05,先利用它将PDF文档转换为TXT文档,然后再将TXT的内容写入Excel,这样就间接实现了将PDF文档的内容导入Excel的操作。下面的代码将向大家演示如何实…...

project从入门到精通(五)
目录 创建资源的基本信息 在project中创建资源工作表 编辑信息详解 最大单位 标准费率与加班费率 每次使用成本 成本累算 基准日历 三类资源工作表的总结——不同的资源必须要设置的属性 除了资源名称是必须设置的之外,剩余的资源的可设置选项如下图所…...

第3.2.3节 Android动态调用链路的获取
3.2.3 Android App动态调用链路 在Android应用中,动态调用链路指的是应用在运行时的调用路径。这通常涉及到方法调用的顺序和调用关系,特别是在应用的复杂逻辑中,理解这些调用链路对于调试和性能优化非常重要。 1,动态调用链路获…...

亿级流量系统架构设计与实战(六)
微服务架构与网络调用 当某个业务从单体服务架构转变为微服务架构后,多个服务之间会通过网络调用形式形成错综复杂的依赖关系。 在微服务架构中 , 一个微服务正常工作依赖它与其他微服务之间的多级网络调用。 网络是脆弱的 , RPC 请求有较大的概率会遇到超时 、 抖动 、 断…...