Nginx防御机制

文章目录

    • 1.访问控制
      • 1.1基于 IP 的访问限制
      • 1.2基于用户认证的访问控制
    • 2.防止 DDoS 攻击
      • 2.1连接数限制
      • 2.2请求速率限制
    • 3.缓存机制
      • 3.1内容缓存
    • 4.安全协议与加密
      • 4.1SSL/TLS 加密
      • 4.2HTTP/2 支持
    • 5.防 SQL 注入和 XSS 攻击
      • 5.1输入验证与过滤
    • 6.防盗链
      • 6.1基于 Nginx 的防盗链配置方法
      • 6.2防盗链的应用场景和局限性


1.访问控制

1.1基于 IP 的访问限制

  • 原理:通过限制特定 IP 地址或 IP 段的访问来防止恶意攻击。可以使用 Nginx的allow和deny指令来实现。例如,只允许来自特定 IP 地址192.168.1.100的访问,而拒绝其他所有 IP地址访问某个特定目录。

  • 配置示例:

location /admin {deny all;allow 192.168.1.100;
}
  • 应用场景:适用于保护敏感的管理后台区域,只允许授权的管理员 IP 访问,防止未经授权的用户尝试登录后台进行恶意操作。

1.2基于用户认证的访问控制

  • 原理:要求用户提供有效的用户名和密码才能访问特定的资源。Nginx 可以使用httpauth_basic模块与外部的密码文件或者认证后端(如 LDAP)配合来实现用户认证。
  • 配置示例(使用密码文件):
    首先,创建一个密码文件(例如使用htpasswd工具):
htpasswd -c /etc/nginx/.htpasswd user1

这会创建一个名为.htpasswd的密码文件,并添加一个名为user1的用户,然后会提示输入密码。

  • 在 Nginx 配置中使用密码文件:
location /private {auth_basic "Restricted Area";auth_basic_user_file /etc/nginx/.htpasswd;
}
  • 应用场景:对于一些包含敏感信息的区域,如用户个人资料修改页面、内部文档存储区域等,通过用户认证来确保只有合法用户能够访问。

2.防止 DDoS 攻击

2.1连接数限制

  • 原理:限制每个客户端 IP 的同时连接数,防止恶意攻击者通过大量建立连接来耗尽服务器资源。Nginx 可以使用limit_conn模块来实现连接数限制。
  • 配置示例:
    首先定义一个共享内存区域来存储连接数状态:
http {limit_conn_zone $binary_remote_addr zone=addr:10m;
}
  • 然后在服务器或特定位置块中设置连接数限制:
server {location / {limit_conn addr 10;}
}
  • 应用场景:当网站遭受 DDoS 攻击,攻击者尝试使用大量 IP 地址建立连接时,这种机制可以有效地减少连接数,保证服务器正常服务其他合法用户。

2.2请求速率限制

  • 原理:限制每个客户端 IP 在单位时间内的请求次数,避免单个 IP 过度频繁地请求服务器资源。通过limit_req模块来实现。
  • 配置示例:
    同样先定义一个共享内存区域来存储请求速率状态:
http {limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
}
  • 在服务器或位置块中设置请求速率限制:
server {location / {limit_req zone=one;}
}
  • 应用场景:如果攻击者使用自动化脚本频繁请求某个页面(如登录页面、搜索页面等),请求速率限制可以防止服务器被大量无效请求淹没。

3.缓存机制

3.1内容缓存

  • 原理:Nginx 可以缓存经常访问的静态资源(如 HTML 文件、图片、CSS 和 JavaScript 文件等),当客户端再次请求相同的资源时,Nginx 直接从缓存中提供数据,而不需要再次向后端服务器请求,从而减轻后端服务器的负载,提高响应速度,同时也能减少恶意请求对后端服务器的冲击。
  • 配置示例:
http {proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m;
}
server {location / {proxy_cache my_cache;proxy_cache_valid 200 302 60m;proxy_cache_valid 404 10m;proxy_pass http://backend_server;}
}
  • 应用场景:对于高流量的网站,缓存机制可以大大提高网站的性能和稳定性,特别是对于一些更新频率不高的页面,如产品展示页面、新闻列表页面等。

4.安全协议与加密

4.1SSL/TLS 加密

  • 原理:使用 SSL(Secure Sockets Layer)或 TLS(Transport Layer Security)协议对传输的数据进行加密,确保数据在客户端和服务器之间传输的安全性。Nginx 可以配置为终止 SSL 连接,然后与后端服务器通过普通的 HTTP 或者再次建立 SSL 连接进行通信。
  • 配置示例(简单的单域名 SSL 配置):
server {listen 443 ssl;ssl_certificate /etc/nginx/ssl/cert.pem;ssl_certificate_key /etc/nginx/ssl/key.pem;location / {proxy_pass http://backend_server;}
}
  • 应用场景:对于涉及用户登录、支付等敏感信息传输的网站,SSL/TLS 加密是必不可少的,可以防止中间人窃取用户的账号密码、信用卡信息等。

4.2HTTP/2 支持

  • 原理:HTTP/2 是新一代的 HTTP 协议,相比 HTTP/1.1,它具有更高的性能和安全性。Nginx 支持 HTTP/2,可以通过简单的配置启用。HTTP/2 采用二进制格式传输数据,并且支持多路复用、头部压缩等特性,能够有效提高网站的性能和安全性。
  • 配置示例:
server {listen 443 ssl http2;ssl_certificate /etc/nginx/ssl/cert.pem;ssl_certificate_key /etc/nginx/ssl/key.pem;location / {proxy_pass http://backend_server;}
}
  • 应用场景:适用于所有需要高性能和高安全性的现代网站,尤其是那些对页面加载速度和用户体验要求较高的网站。

5.防 SQL 注入和 XSS 攻击

5.1输入验证与过滤

  • 原理:在 Nginx 层面,可以对客户端提交的请求参数进行初步的过滤和验证。例如,通过设置ngx_http_real_ip_module模块来获取客户端真实 IP 地址,然后对请求中的参数进行检查,防止恶意用户通过 SQL 注入或 XSS(跨站脚本攻击)等方式攻击后端服务器。
  • 配置示例(简单的参数过滤):
server {location / {if ($arg_param1 ~* "union") {return 403;}proxy_pass http://backend_server;}
}
  • 应用场景:对于所有接受用户输入的网站应用,如表单提交页面、搜索功能页面等,通过在 Nginx 层面进行初步过滤可以减轻后端应用程序的安全负担。

6.防盗链

防盗链是一种防止其他网站非法引用本网站资源(如图片、视频、文件等)的机制。其原理是通过检查请求资源的来源(即引用页面的
URL),判断请求是否合法。如果请求来自未经授权的域名,就拒绝提供资源。

6.1基于 Nginx 的防盗链配置方法

  • 简单的基于 HTTP Referer 检查的防盗链配置
  • 配置示例:
location ~* \.(jpg|jpeg|png|gif|mp4)$ {valid_referers none blocked yourdomain.com;if ($invalid_referer) {return 403;}
}
  • 解释:

location ~* .(jpg|jpeg|png|gif|mp4)$:这个location块使用了正则表达式来匹配以.jpg、.jpeg、.png、.gif、.mp4结尾的请求,也就是针对常见的图片和视频文件类型进行防盗链设置。

valid_referers none blocked yourdomain.com;:定义了合法的引用来源。none表示允许直接访问(例如用户在浏览器地址栏直接输入资源的 URL),blocked表示允许空的Referer头(有些浏览器可能会出于隐私原因不发送Referer),yourdomain.com是允许引用这些资源的域名,你需要将其替换为自己的域名。

if ($invalid_referer) {return 403;}:如果Referer不符合上述合法的引用来源,就返回403 Forbidden状态码,拒绝提供资源。

  • 使用更复杂的防盗链配置(结合 IP 和 Referer)
  • 配置示例:
map $http_referer $valid_referer {default         0;"~^https?://yourdomain.com" 1;
}
map $remote_addr $valid_ip {default         0;"192.168.1.0/24" 1;
}
location ~* \.(jpg|jpeg|png|gif|mp4)$ {if ($valid_referer = 0) {if ($valid_ip = 0) {return 403;}}
}
  • 解释:
这里使用了两个map指令。第一个map指令map $http_referer $valid_referer根据Referer头的值来判断是否是合法的引用。default 0表示默认情况下是不合法的,"~^https?://yourdomain.com"是一个正则表达式,用于匹配以http://或https://开头且域名是yourdomain.com的Referer,如果匹配成功则$valid_referer的值为1,表示合法。
第二个map指令map $remote_addr $valid_ip根据客户端的 IP 地址来判断是否合法。这里default 0表示默认不合法,"192.168.1.0/24"是一个 IP 段示例,你可以将其替换为允许访问资源的 IP 范围,如果客户端 IP 在这个范围内,$valid_ip的值为1,表示合法。
在location块中,先检查$valid_referer的值,如果为0(即不合法的引用),再检查$valid_ip的值,如果也为0(即不合法的 IP),就返回403 Forbidden状态码,拒绝提供资源。

6.2防盗链的应用场景和局限性

  • 应用场景:

对于有版权的内容网站,如图片素材网站、在线视频网站等,防盗链可以有效防止其他网站未经授权使用自己的资源,保护版权所有者的利益。
对于提供付费资源的网站,防止未付费用户通过其他网站的链接访问资源,保证只有合法付费用户能够使用这些资源。

  • 局限性:

有些浏览器插件或者工具可以修改Referer头,使得基于Referer检查的防盗链机制可能被绕过。不过这种情况相对较少,并且可以结合其他安全机制(如用户认证、IP 限制等)来增强防盗链的效果。
对于合法的搜索引擎爬虫等工具,可能会因为防盗链机制而无法正常抓取资源。在这种情况下,可以通过配置将搜索引擎的爬虫 IP 添加到合法的 IP 范围或者在valid_referers中添加搜索引擎的域名来允许它们正常访问。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/60732.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

lua除法bug

故事背景,新来了一个数值,要改公式。神奇的一幕出现了,公式算出一个非常大的数。排查是lua有一个除法bug,1除以大数得到一个非常大的数。 function div(a, b)return tonumber(string.format("%.2f", a/b)) end print(1/73003) pri…

代码管理之Gitlab

文章目录 Git基础概述场景本地修改未提交,拉取远程代码修改提交本地,远程已有新提交 GitIDEA引入Git拉取仓库代码最后位置 Git基础 概述 workspace 工作区:本地电脑上看到的目录; repository 本地仓库:就是工作区中隐…

嵌入式系统应用-LVGL的应用-智能时钟 part 3

智能时钟 part 3 6 光强传感器6.1 光敏电阻介绍6.2 电路图介绍 7 ADC模块7.1 ADC模块介绍7.2 adc 转化流程7.3 规则通道和注入通道7.4 DMA 搬运7.5 TIM触发ADC和DMA搬运数据的原理 8 代码8.1 配置头文件8.2 初始化ADC 和DMA8.3 创建线程读取 值8.4 演示效果 由于丢失温湿度传感…

跨平台应用开发框架(1)----Qt(组件篇)

目录 1.Qt 1.Qt 的主要特点 2.Qt的使用场景 3.Qt的版本 2.QtSDK 1.Qt SDK 的组成部分 2.安装 Qt SDK 3.Qt SDK 的优势 3.Qt初识 1.快速上手 widget.cpp mian.cpp widget.h Helloworld.pro 2.对象树 3.坐标系 4.信号和槽 1. 信号和槽的基本概念 2. 信号和槽的…

架构-微服务-服务治理

文章目录 前言一、服务治理介绍1. 什么是服务治理2. 常见的注册中心 二、nacos简介三、nacos实战入门1. 搭建nacos环境2. 将商品微服务注册到nacos3. 将订单微服务注册到nacos 四、实现服务调用的负载均衡1. 什么是负载均衡2. 自定义实现负载均衡3. 基于Ribbon实现负载均衡 五、…

AWS的流日志

文章目录 一、aws如何观察vpc的日志?二、aws观测其vpc的入口日志三、 具体配置3.1、配置你的存储神器 S33.2、建立子网的流日志 一、aws如何观察vpc的日志? 排查问题的时候除了去抓包看具体的端口信息的时候,还可以根据其所在的vpc的子网信息…

万物皆可Docker,在NAS上一键部署最新苹果MacOS 15系统

万物皆可Docker,在NAS上一键部署最新苹果MacOS 15系统 哈喽小伙伴们还,我是Stark-C~ 最近苹果Mac mini 2024款在政府补贴的加持下,仅需3500块钱左右就能到手确实挺香的。我看很多评论区的小伙伴跃跃欲试,但是也有不少之前从未体…

函数模板(进阶)

机甲为婚纱,银河为殿堂,爆炸为礼炮,见证了只属于他们的婚礼,樱花树下,再续前缘,鹤望兰无凋零之时,比翼鸟永世长存。 我们这一篇博客紧接我们前面的函数模板(初阶)这一篇博…

全面解析:HTML页面的加载全过程(五)--浏览器渲染之布局Layout

理解一些概念: 盒子模型 页面中的所有元素都被看作一个矩形盒子 内边距(padding)是内容区周围的空间。 边框(border)会在内边距外侧增加一条框线,这条框线可以是实线、虚线或点划线。 外边距(margin),外边距是围绕在盒子可见…

AI 驱动的个性化推荐系统设计

文章目录 摘要引言推荐系统的核心原理推荐系统的类型个性化推荐中的挑战 基于协同过滤的推荐系统设计设计流程系统架构设计 示例代码模块1:数据准备模块2:相似度计算模块3:推荐生成模块4:整体调用与展示 QA 环节总结参考资料 摘要…

基于springboot + vue-element-plus-admin开发的MES系统源码,制造执法系统MES源码;支持app,小程序,H5,后台

MES系统(Manufacturing Execution System,制造执行系统)的生产计划管理功能是其核心功能之一,旨在将企业的生产计划转化为实际的生产操作,并通过实时监控和调整来确保生产活动的顺利进行。 MES系统技术栈:…

Java后端如何进行文件上传和下载 —— 本地版

简介: 本文详细介绍了在Java后端进行文件上传和下载的实现方法,包括文件上传保存到本地的完整流程、文件下载的代码实现,以及如何处理文件预览、下载大小限制和运行失败的问题,并提供了完整的代码示例。 大体思路 1、文件上传 …

深入理解结构化学习:从结构化感知器到条件随机场

摘要 结构化学习是一类能够处理复杂输出空间问题的机器学习方法,被广泛应用于自然语言处理、图像分析等领域。本文将从三个经典模型——结构化感知器、隐马尔可夫模型 (HMM) 和条件随机场 (CRF) 入手,详细解析其理论基础、算法实现及应用案例&#xff0c…

C#基础题总结

16.一张单据上有一个5位数的号码为6**42,其中百位数和千位数已模糊不清,但知道该数能被 57 和 67 除尽。设计一个算法,找出该单据所有可能的号码。 17.编程序求2~10000以内的完全数。一个数的因子(除了这个数本身&…

Docker3:docker基础1

欢迎来到“雪碧聊技术”CSDN博客! 在这里,您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者,还是具有一定经验的开发者,相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导,我将…

详细探索xinput1_3.dll:功能、问题与xinput1_3.dll丢失的解决方案

本文旨在深入探讨xinput1_3.dll这一动态链接库文件。首先介绍其在计算机系统中的功能和作用,特别是在游戏和输入设备交互方面的重要性。然后分析在使用过程中可能出现的诸如文件丢失、版本不兼容等问题,并提出相应的解决方案,包括重新安装相关…

Golang项目:实现一个内存缓存系统

要求 支持设定过期时间,精确到秒支持设定最大内存,当内存超过时做出合适的处理支持并发安全按照以下接口安全 type Cache interface{//size : 1KB 100KB 1MB 2MB 1GBSetMaxMemory(size string )bool//将value写入缓存Set(key string, val interface{},e…

计算机网络复习笔记(湖科大教书匠)

课程链接:【计算机网络微课堂(有字幕无背景音乐版)】 https://www.bilibili.com/video/BV1c4411d7jb/?p61&share_sourcecopy_web&vd_sourcecd12864239c2976e9f2bce4b307393f0 一、基础概念 信息交换方式 电路交换 电话交换机接通…

C语言菜鸟入门·关键字·int的用法

目录 1. int关键字 1.1 取值范围 1.2 符号类型 1.3 运算 1.3.1 加法运算() 1.3.2 减法运算(-) 1.3.3 乘法运算(*) 1.3.4 除法运算(/) 1.3.5 取余运算(%) 1.3.6 自增()与自减(--) 1.3.7 位运算 2. 更多关键字 1. int关键字 int 是一个关键字&#xff0…

神经网络(系统性学习三):多层感知机(MLP)

相关文章: 神经网络中常用的激活函数 神经网络(系统性学习一):入门篇 神经网络(系统性学习二):单层神经网络(感知机) 多层感知机(MLP) 多层感…