【NGINX--7】安全控制--2

1、HTTPS 重定向

将未加密的请求重定向到 HTTPS。

使用 rewrite 指令将所有 HTTP 流量发送到 HTTPS:

server {listen 80 default_server;listen [::]:80 default_server; server_name _;return 301 https://$host$request_uri;
}

此配置用于侦听 IPv4 和 IPv6 以及任何主机名的默认服务器的 80 端口。return 语句向使用同一主机和请求 URI 的 HTTPS 服务器返回 301 永久重定向。
详解
在适当的情况下始终重定向到 HTTPS,这是非常重要的。您可能会发现,不需要重定向所有请求,而只需要重定向在客户端和服务器之间传递敏感信息的请求。在这种情况下,您可能希望只将 return 语句放在特定的位置,例如/login。

2、在 NGINX 之前终止 SSL/TLS 后重定向到HTTPS

需要重定向到 HTTPS,然而,您已在 NGINX 之前的某个层终止了 SSL/TLS。

使用常见的 X-Forwarded-Proto 请求头确定是否需要重定向:

server {listen 80 default_server;listen [::]:80 default_server; server_name _;if ($http_x_forwarded_proto = 'http') { return 301 https://$host$request_uri;}
}

这种配置与 HTTPS 重定向十分相似。然而,在这个配置中,我们只在请求头X-Forwarded-Proto 与 HTTP 相同时进行重定向。
详解
在 NGINX 前面的某个层终止 SSL/TLS 是一种常见的做法,为的是节省计算成本。但是,您需要确保每个请求都是 HTTPS 请求,而终止 SSL/TLS 的层面不具有重定向能力。但它可以设置代理请求头。这种配置适用于 Amazon Web Services Elastic Load Balancer(AWS ELB)等层面,这些层可免费卸载 SSL/TLS。这是一个小技巧,可保护 HTTP 流量的安全。

3、HTTP 严格传输安全协议

指示浏览器永远不通过 HTTP 发送请求。

设置 Strict-Transport-Security 请求头,使用 HTTP 严格传输安全协议(HSTS)增强功能:

add_header Strict-Transport-Security max-age=31536000;

此配置将 Strict-Transport-Security 请求头的使用时间设置为最长一年。如 HTTP 请求尝试访问该域,这将指示浏览器始终进行内部重定向,这样所有请求都将通过 HTTPS 发出。
详解
对于某些应用来说,一个 HTTP 请求遭到中间人攻击就可能会摧毁整个公司。如果一个包含敏感信息的表单通过 HTTP 发送,势必会造成损害,就算是通过 NGINX 进行HTTPS 重定向也于事无补。这个可选的安全增强功能可指示浏览器,永远不要发出HTTP 请求,因此请求始终都在加密后发出。
参考资料
RFC HTTP 严格传输安全协议标准文档
OWASP HTTP 严格传输安全协议备忘单

4、提供多种安全方法

需要提供多种方法将安全性传递到封闭的站点。

使用 satisfy 指令,指示 NGINX 您想要满足所用的任何或所有安全方法:

location / {satisfy any;allow 192.168.1.0/24;deny all;auth_basic "closed site";auth_basic_user_file conf/htpasswd;
}

此配置告知 NGINX 请求 location/ 的用户需要满足其中一种安全方法:请求需要来自192.168.1.0/24 CIDR 代码块,或者必须能够提供可以在 conf/htpasswd 文件中找到的用户名和密码。satisfy 指令带两个选项:any 或 all。
详解
satisfy 指令是一个不错的方法,它提供了多种验证 Web 应用的方法。在 satisfy 指令中指定 any,代表用户必须满足其中一个安全要求。在 satisfy 指令中指定 all,代表用户必须满足所有安全要求。这个指令可以与【NGINX–6】安全控制–1 中详述的 http_access_module、【NGINX–5】身份验证-1 中详述的 http_auth_basic_module、、【NGINX–5】身份验证-2 中详述的http_auth_request_module 及、【NGINX–5】身份验证-3 中详述的 http_auth_jwt_module 一起使用。只有通过多层才能真正实现安全性。satisfy 指令可帮助您为需要深度安全规则的位置和服务器实现这个目标。

5、NGINX Plus 动态应用层 DDoS 防护

需要动态分布式拒绝服务(DDOS)防护解决方案。

使用 NGINX Plus 构建集群感知型速率限制和自动拦截列表:

   limit_req_zone $remote_addr zone=per_ip:1M rate=100r/s sync;# Cluster-aware rate limitlimit_req_status 429;keyval_zone zone=sinbin:1M timeout=600 sync; # Cluster-aware "sin bin" with # 10-minute TTLkeyval $remote_addr $in_sinbin zone=sinbin; # Populate $in_sinbin with # matched client IP addressesserver {listen 80;location / {if ($in_sinbin) {set $limit_rate 50; # Restrict bandwidth of bad clients}limit_req zone=per_ip; # Apply the rate limit hereerror_page 429 = @send_to_sinbin; # Excessive clients are moved to # this locationproxy_pass http://my_backend;}location @send_to_sinbin {rewrite ^ /api/3/http/keyvals/sinbin break; # Set the URI of the # "sin bin" key-valproxy_method POST;proxy_set_body '{"$remote_addr":"1"}';proxy_pass http://127.0.0.1:80;}location /api/ {api write=on;# directives to control access to the API}
}

详解
该解决方案通过使用同步键值(key-value)存储来使用同步速率限制,以动态响应DDoS 攻击并减轻其影响。提供给 limit_req_zone 和 keyval_zone 指令的 sync 参数将共享内存区与 NGINX Plus active-active 集群中的其他机器同步。上面的示例标识了每秒发送超过 100 个请求的客户端 —— 无论哪个 NGINX Plus 节点接收请求。当客户端超过速率限制时,将通过调用 NGINX Plus API 将其 IP 地址添加到“sin bin”键值存储中。集群内的 sin bin 是同步的。无论哪个 NGINX Plus 节点接收请求,来自 sin bin 中的客户端的其他请求都会面临非常低的带宽限制。限制带宽比直接拒绝请求更可取,因为它不会向客户端清楚地表明 DDoS 防护已生效。10 分钟后,客户端将自动从sin bin 中移除。

6、安装和配置 NGINX Plus 的 NGINX App Protect WAF 模块

安装和配置 NGINX App Protect WAF 模块。

请参考《NGINX App Protect WAF 管理指南》。请不要跳过有关从单独的仓库中安装NGINX App Protect WAF 签名的部分。
确保 NGINX App Protect WAF 模块由 NGINX Plus 在 main 上下文中使用 load_module 指令动态加载,并使用 app_protect_* 指令启用:

user nginx; 
worker_processes auto;
load_module modules/ngx_http_app_protect_module.so;
# ... Other main context directives 
http {app_protect_enable on;app_protect_policy_file "/etc/nginx/AppProtectTransparentPolicy.json"; app_protect_security_log_enable on;app_protect_security_log "/etc/nginx/log-default.json" syslog:server=127.0.0.1:515;# ... Other http context directives
}

在该示例中,app_protect_enable 指令设置为 on,启用了当前上下文的模块。该指令以及下面所有指令在 http 上下文,以及 HTTP 的 server 和 location 上下文中都是有效的。app_protect_policy_file 指令指向一个 NGINX App Protect WAF 策略文件,接下来我们将对其进行定义;如果没有定义,则使用默认策略。接下来配置了安全日志,并需要远程日志服务器。例如,我们将其配置为本地系统日志(Syslog)侦听器。app_protect_security_log 指令带两个参数,第一个参数是一个定义了日志设置的 JSON 文件,第二个参数是日志数据流目的地。日志设置文件将稍后在本节展示。

构建一个 NGINX App Protect WAF 策略文件,将其命名为 /etc/nginx/AppProtect
TransparentPolicy.json:

{"policy": {"name": "transparent_policy","template": { "name": "POLICY_TEMPLATE_NGINX_BASE" },"applicationLanguage": "utf-8","enforcementMode": "transparent"}
}

该策略文件通过使用模板来配置默认的 NGINX App Protect WAF 策略,将策略名称设置为 transparent_policy,将 enforcementMode 设置为 transparent,这表示 NGINX Plus 将记录日志但不会拦截日志。透明(transparent)模式非常适合在新策略实施之前对其进行测试。

将 enforcementMode 改为 blocking,启用拦截模式。该策略文件可以命名为 /etc/nginx/AppProtectBlockingPolicy.json。要在两个文件之间切换,请在 NGINX Plus 配置中更新 app_protect_policy_file 指令:

{"policy": {"name": "blocking_policy","template": { "name": "POLICY_TEMPLATE_NGINX_BASE" },"applicationLanguage": "utf-8","enforcementMode": "blocking"}
}

要启用 NGINX App Protect WAF 的某些保护特性,需启用一些违规行为:

{"policy": {"name": "blocking_policy","template": { "name": "POLICY_TEMPLATE_NGINX_BASE" },"applicationLanguage": "utf-8","enforcementMode": "blocking","blocking-settings": {"violations": [{"name": "VIOL_JSON_FORMAT","alarm": true,"block": true},{"name": "VIOL_PARAMETER_VALUE_METACHAR","alarm": true,"block": false}]}}
}

在上面的示例中,向策略添加了两种违规行为。注意,VIOL_PARAMETER_VALUE_METACHAR 未设置为 block,而只是设置为 alarm;而 VIOL_JSON_FORMAT 设置为block 和 alarm。当设置为 blocking 时,该功能允许重写默认的 enforcementMode。当enforcementMode 设置为 transparent 时,将优先使用默认的强制设置。

构建一个 NGINX Plus 日志文件,将其命名为 /etc/nginx/log-default.json:

{"filter":{"request_type":"all"},"content":{"format":"default","max_request_size":"any","max_message_size":"5k"} 
}

该文件由 app_protect_security_log 指令在 NGINX Plus 配置中定义,并且是 NGINX App Protect WAF 日志的必要文件。
详解
该解决方案演示了使用 NGINX App Protect WAF 模块配置 NGINX Plus 的基础知识。NGINX App Protect WAF 模块支持完整的 Web 应用防火墙(WAF)定义。这些定义源自 F5 高级应用安全防护功能。这套全面的 WAF 攻击签名已得到广泛的实践测试和证明。通过在 NGINX Plus 安装过程中添加这些签名,可同时获得强大的 F5 应用安全防护功能以及 NGINX 平台的敏捷性。

安装并启用该模块后,大多数配置都在策略文件中完成。本节中的策略文件展示了如何启用主动拦截、被动监控和透明模式,并解释了如何在出现违规时重写该功能。违规行为只是所提供的其中一种防护措施。其他防护措施包括 HTTP 合规、规避技术、攻击特征、服务器技术、数据保护等等。要追踪 NGINX App Protect WAF 日志,需要使用 NGINX Plus 日志格式,并将日志发送到远程侦听服务、文件或 /dev/stderr。
如果您正在使用 NGINX Controller ADC4,那么您可以通过 NGINX Controllers App Security 组件启用 NGINX App Protect WAF 功能,并通过 Web 界面查看 WAF 指标。
参考资料
《NGINX App Protect WAF 管理指南》
《NGINX App Protect WAF 配置指南》
《NGINX Controller App Security 指南》
《NGINX App Protect DoS 部署指南》

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

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

相关文章

Linux文件操作应用及open和fork

1.文件操作的应用: 1).打开一个文件并往里面写入hello: #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <fcntl.h> #include <assert.h> int main() { int fdopen("file.txt",O_WRONLY|O_CREAT,0600); …

NJU操作系统公开课笔记(2)

上期目录&#xff1a; NJU操作系统公开课笔记&#xff08;1&#xff09;https://blog.csdn.net/jsl123x/article/details/134431343?spm1001.2014.3001.5501 目录 一.处理器与寄存器 二.中断 三.中断系统 四.进程 五.线程与多线程技术概述 六.处理器调度算法 一.处理器…

完美的输出打印 SQL 及执行时长[MyBatis-Plus系列]

导读 Hi,大家好,我是悟纤。过着爱谁谁的生活,活出不设限的人生。 在我们日常开发工作当中,避免不了查看当前程序所执行的SQL语句,以及了解它的执行时间,方便分析是否出现了慢SQL问题。 MyBatis-Plus提供了两种SQL分析打印的方式,用于输出每条SQL语句及其执行时间,针…

上游任务和下游任务

起源多任务学习中的定义理解结合定义分析例子示例 1&#xff1a;计算机视觉示例 2&#xff1a;自然语言处理示例 3&#xff1a;语音处理示例 4&#xff1a;强化学习总结 起源 "上游任务"和"下游任务"这两个术语在深度学习领域中通常用来描述一种 多任务学…

FLASK博客系列6——数据库之谜

我们上一篇已经实现了简易博客界面&#xff0c;你还记得我们的博客数据是自己手动写的吗&#xff1f;但实际应用中&#xff0c;我们是不可能这样做的。大部分程序都需要保存数据&#xff0c;所以不可避免要使用数据库。我们这里为了简单方便快捷&#xff0c;使用了超级经典的SQ…

​无人机石油管道巡检方案新亮点:灵活准确又高效

在当前石油工业的安全管理中&#xff0c;无人机技术逐渐成为一种不可或缺的工具。随着我国油气管道里程的持续增长&#xff0c;确保这些关键基础设施的安全运行变得越来越重要。传统的巡检方法已经无法满足现代油气行业的需求&#xff0c;而无人机石油管道巡检技术的应用提供了…

目标检测YOLO实战应用案例100讲-基于改进YOLO深度学习模型的烟支外观质量检测(续)

目录 基于YOLOv5烟支外观缺陷检测研究 4.1本章引言 4.2YOLOv5s模型 4.2.1 输入端 4.2.2 Backbone部分

【LeeCode】*76. 最小覆盖子串

给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串&#xff0c;则返回空字符串 "" 。 注意&#xff1a; 对于 t 中重复字符&#xff0c;我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。 如…

2023.11.27如何使用内网穿透工具实现Java远程连接操作本地Elasticsearch搜索引擎

文章目录 前言1. Windows 安装 Cpolar2. 创建Elasticsearch公网连接地址3. 远程连接Elasticsearch4. 设置固定二级子域名 前言 简单几步,结合Cpolar内网穿透工具实现Java远程连接操作本地Elasticsearch。 什么是elasticsearch&#xff1f;一个开源的分布式搜索引擎&#xff0…

解决:AttributeError: module ‘os’ has no attribute ‘mknod’

解决&#xff1a;AttributeError: module ‘os’ has no attribute ‘mknod’ 文章目录 解决&#xff1a;AttributeError: module os has no attribute mknod背景报错问题报错翻译报错位置代码报错原因解决方法今天的分享就到此结束了 背景 在使用之前的代码时&#xff0c;报错…

element table滚动条失效

问题描述:给el-table限制高度之后滚动条没了 给看看咋设置的&#xff1a; <el-table:data"tableData"style"width: 100%;"ref"table"max-height"400"sort-change"changeSort">对比了老半天找不出问题&#xff0c;最后…

sizeHint() 是一个用于获取部件(widget)的建议大小的函数,它是在许多 GUI 框架中都存在的常见函数之一

sizeHint() 是一个用于获取部件&#xff08;widget&#xff09;的建议大小的函数&#xff0c;它是在许多 GUI 框架中都存在的常见函数之一。 具体来说&#xff0c;sizeHint() 函数用于返回部件在没有特定约束条件时所建议的最佳尺寸。这个建议的尺寸通常基于部件的内容、布局和…

使用opencv的matchTemplate进行银行卡卡号识别

![字体文件](https://img-blog.csdnimg.cn/3a16c87cf4d34aceb0778c4b20ddadb2.png#pic_center import cv2 import numpy as npdef show_img(img, name"temp"):img cv2.resize(img, (0, 0), fx3, fy3)cv2.imshow(name, img)cv2.waitKey(0)cv2.destroyAllWindows()de…

sed笔记231127

-e基本正则,-E扩展版正则 -E, -r, --regexp-extended 在脚本中使用扩展正则表达式&#xff08;为保证可移植性使用 POSIX -E&#xff09;。-e或 --expression 接基本正则表达式, 可多次使用,多次过滤-f 或 --file 选项接脚本文件, 注意是脚本文件, 而不是输入文件 -e可以不写…

excel单元格内换行按什么快捷键

如果我们使用excel软件的时候&#xff0c;因为一些日常的操作太过繁琐想要简化自己的操作步骤的话&#xff0c;其实是有很多快捷方式在其中的。那么对excel单元格内换行按什么快捷键这个问题&#xff0c;据小编所知我们可以在表格中使用Alt Enter来进行换行。详细内容就来看下…

C语言入门---位操作

目录 1. 两个数不同的二进制位个数 2.原码、反码、补码 3.不创建临时变量实现两个数的交换 4.求一个整数存储在内存中的二进制中1的个数 5. 特例-1 6.将指定的位置置1 7.将指定位置置1 8.a与a 9.||与&& 10.逗号表达式 11.srand与rand 12.sizeof 13.结构体初始…

操作系统 选择题 期末试题 考研真题 + 参考答案

1.&#xff08;考研真题&#xff0c;单项选择题&#xff09;单道批处理系统的主要缺点是&#xff08; &#xff09;。 A. CPU利用率不高 B.失去了交互性 C.不具备并行性 D.以上都不是 【参考答案】A 【解析】单道批处理系统的内存中只有一道程序&#xff0c;当该程序…

JVM字节码- long/double类型的比较

在 Java 虚拟机&#xff08;JVM&#xff09;字节码中&#xff0c;对于 double 和 long 类型的比较&#xff0c;没有直接等价于 iflt&#xff08;用于整型比较&#xff09;这样的指令。相反&#xff0c;比较 double 和 long 类型的值涉及到一些不同的步骤和指令。下面是如何在 J…

Node——Node.js基础

对Node.js中的基础知识进行讲解&#xff0c;包括全局变量、全局对象、全局函数以及用于实现模块化编程的exports和module对象等内容&#xff0c;这些知识是学习Node.js应用开发的基础。 1、Node.js全局对象 全局&#xff0c;即程序中任何地方都可以使用&#xff0c;Node.js内…

华为OD机试 - 分月饼(Java JS Python C)

题目描述 中秋节,公司分月饼,m 个员工,买了 n 个月饼,m ≤ n,每个员工至少分 1 个月饼,但可以分多个, 单人分到最多月饼的个数是 Max1 ,单人分到第二多月饼个数是 Max2 ,Max1 - Max2 ≤ 3 ,单人分到第 n - 1 多月饼个数是 Max(n-1),单人分到第n多月饼个数是 Max(n)…