Nginx防御机制

embedded/2024/11/26 18:23:06/

文章目录

    • 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.ppmy.cn/embedded/140683.html

相关文章

KMeans实验(以鸢尾花为例)

KMeans实验是一个经典的聚类分析实验,它利用KMeans算法将数据集中的样本分成K个簇,使得同一簇内的样本尽可能相似,而不同簇的样本尽可能不同。以下是以常用数据集(如鸢尾花数据集)为例的KMeans实验详细过程和内容&…

基于FPGA(现场可编程门阵列)的SD NAND图片显示系统是一个复杂的项目,它涉及硬件设计、FPGA编程、SD卡接口、NAND闪存控制以及图像显示等多个方面

文章目录 0、前言 1、目标 2、图片的预处理 3、SD NAND的预处理 4、FPGA实现 4.1、详细设计 4.2、仿真 4.3、实验结果 前言 在上一篇文章《基于FPGA的SD卡的数据读写实现(SD NAND FLASH)》中,我们了解到了SD NAND Flash的相关知识&am…

Flink学习连载第二篇-使用flink编写WordCount(多种情况演示)

使用Flink编写代码,步骤非常固定,大概分为以下几步,只要牢牢抓住步骤,基本轻松拿下: 1. env-准备环境 2. source-加载数据 3. transformation-数据处理转换 4. sink-数据输出 5. execute-执行 DataStream API开发 //n…

基于YOLOv8深度学习的智慧课堂教师上课行为检测系统研究与实现(PyQt5界面+数据集+训练代码)

随着人工智能技术的迅猛发展,智能课堂行为分析逐渐成为提高教学质量和提升教学效率的关键工具之一。在现代教学环境中,能够实时了解教师的课堂表现和行为,对于促进互动式教学和个性化辅导具有重要意义。传统的课堂行为分析依赖于人工观测&…

python oa服务器巡检报告脚本的重构和修改(适应数盾OTP)有空再去改

Two-Step Vertification required: Please enter the mobile app OTPverification code: 01.因为巡检的服务器要双因子认证登录,也就是登录堡垒机时还要输入验证码。这对我的巡检查服务器的工作带来了不便。它的机制是每一次登录,算一次会话…

conda下载与pip下载的区别

一、conda下载与pip下载的区别 最重要是依赖关系: pip安装包时,尽管也对当前包的依赖做检查,但是并不保证当前环境的所有包的所有依赖关系都同时满足。 当某个环境所安装的包越来越多,产生冲突的可能性就越来越大。conda会检查当…

CentOS环境上离线安装python3及相关包

0. 准备操作系统及安装包 准备操作系统环境: 首先安装依赖包,安装相应的编译工具 [rootbigdatahost bin]# yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-d…

Vscode 删除键删除失效

在使用vscode时,对代码进行某些操作后使得键盘无法正确编辑代码,类似于启用了windows中的insert键且光标变粗。 此时造成这种情况的原因很有可能是由于插件冲突,禁用插件即可解决。我是把这个插件直接删除掉