Nginx安全加固,版本隐藏及HTTP请求头修改方法

1 隐藏nginx版本号

1.1 引言

nginx作为目前较为流行的http server软件,其相关的安全漏洞也非常多,攻击者可以根据我们的nginx版本来了解到相关的漏洞从而针对性的进行攻击。

图片

通过新版本的nginx都会修复一些老版本的已知漏洞,但有时候我们生产环境不好直接进行nginx版本升级,因此我们可以将nginx版本相关信息隐藏,来降低被攻击的风险。

1.2 server_tokens

server_tokens是nginx在ngx_http_core_module中提供的一个功能,可以用来隐藏nginx版本号信息,官方文档如下。

http://nginx.org/en/docs/http/ngx_http_core_module.html#server_tokens

我们可以给nginx新增一个安全相关的配置文件security.conf,文件内新增"server_tokens off;",再reload一下nginx服务即可。

[root@elk ~]# cat /etc/nginx/conf.d/security.conf
server_tokens off;  ##隐藏nginx版本信息

图片

2 隐藏nginx server头信息

2.1 介绍

上面的场景,我们只是隐藏了nginx的版本信息,在某些情况下,我们也希望能将http请求头中的"Server:nginx"也隐藏掉,这个就需要用到headers-more-nginx-module模块,模块官网如下。

https://github.com/openresty/headers-more-nginx-module

同时我们需要用到nginx的动态添加模块功能,该功能在nginx 1.9.11版本后支持

https://www.nginx.com/blog/compiling-dynamic-modules-nginx-plus/

图片

2.2 headers模块编译

下载对应版本的nginx源码,和headers-more-nginx-module模块源码,并进行编译。nginx源码下载地址如下

http://nginx.org/download/

[root@elk ~]# wget http://nginx.org/download/nginx-1.20.1.tar.gz ##下载nginx源码
[root@elk ~]# wget https://github.com/openresty/headers-more-nginx-module/archive/refs/tags/v0.34.tar.gz ##下载headers模块源码
[root@elk ~]# tar xf nginx-1.20.1.tar.gz
[root@elk ~]# tar xf v0.34.tar.gz
[root@elk ~]# ls
headers-more-nginx-module-0.34 nginx-1.20.1 nginx-1.20.1.tar.gz v0.34.tar.gz
[root@elk nginx-1.20.1]# cd /root/nginx-1.20.1/
[root@elk nginx-1.20.1]# /root/nginx-1.20.1/configure --with-compat --add-dynamic-module=/root/headers-more-nginx-module-0.34/ ##--with-compat参数用来兼容动态模块,--add-dynamic-module指定动态模块源码所在位置。

开始编译

图片

确认编译结果

[root@elk nginx-1.20.1]# echo $?

图片

编译模块

[root@elk nginx-1.20.1]# make modules

图片

编译完成后,会在nginx源码的objs目录,生成我们编译好的动态模块文件

图片

2.3 使用模块,验证nginx http请求头是否被隐藏

nginx目录下新建目录,用于存放模块

[root@elk nginx-1.20.1]# mkdir /etc/nginx/conf.d/modules
[root@elk nginx-1.20.1]# cp /root/nginx-1.20.1/objs/ngx_http_headers_more_filter_module.so /etc/nginx/conf.d/modules/

修改nginx配置文件,添加以下两部分内容。主配置中添加 load_module /etc/nginx/conf.d/modules/ngx_http_headers_more_filter_module.so; 一行,server容器中,添加 more_set_headers "Server: singless"; 一行,用来修改http请求头信息。

图片

图片

图片

 

图片

重载nginx服务,再次检查可以发现server头已经被修改了

[root@elk ~]# systemctl reload nginx

图片

 

图片

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

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

相关文章

二刷LeetCode--148. 排序链表(C++版本),必会题,思维题

思路,本题其实考察了两个点:合并链表、链表切分。首先从1开始,将链表切成一段一段,因为需要使用归并,所以下一次的切分长度应该是当前切分长度的二倍,每次切分,我们拿出两段,然后将第…

虚拟机与Java虚拟机介绍

1、虚拟机 所谓虚拟机(Virtual Machine),就是一台虚拟的计算机。它是一款软件,用来执行一系列虚拟计算机指令。大体上,虚拟机可以分为系统虚拟机和程序虚拟机。大名鼎鼎的Visual Box,VMware就属于 系统虚…

提示丢失vcomp140.dll怎么办?如何快速修复vcomp140.dll丢失问题

最近我遇到了一个程序启动失败的问题,错误提示显示缺少了vcomp140.dll文件。经过一番研究和尝试,我终于成功修复了这个问题。在这里,我将分享一下我的修复方法。 目录 vcomp140.dll是什么? 如何快速修复呢? vcomp140…

sCrypt编程马拉松于8月13日在复旦大学成功举办

继6月在英国Exeter大学成功举办了为期一周的区块链编程马拉松后,美国sCrypt公司创始人兼CEO刘晓晖博士带领核心团队成员王一强、郑宏锋、周全,于8月13日在复旦大学再次成功举办了一场全新的sCrypt编程马拉松。 本次活动由上海可一澈科技有限公司与复旦大…

C++笔记之花括号和圆括号初始化区别,列表初始化和初始化列表区别

C笔记之花括号和圆括号初始化区别,列表初始化和初始化列表区别 code review! 文章目录 C笔记之花括号和圆括号初始化区别,列表初始化和初始化列表区别1.花括号{}进行初始化和圆括号()进行初始化2.列表初始化(list initialization&#xff0…

Vitis高层次综合学习——FPGA

高层次综合 什么是高层次综合?就是使用高级语言(如C/C)来编写FPGA算法程序。 在高层次综合上并不需要制定微架构决策,如创建状态机、数据路径、寄存器流水线等。这些细节可以留给 HLS 工具,通过提供输入约束&#xff…

专访阿里云席明贤,视频云如何运用大模型与小模型来破茧升级2.0

不久前,LiveVideoStack与阿里云视频云负责人席明贤(花名右贤)展开一场深度的对话,一个是圈内专业的社区媒体,一个是20年的IT老兵,双方有交集、有碰撞、有火花。 面对风云变幻的内外环境,阿里云…

未来数字银行的样子

对银行长期发展来讲,这意味着将关闭和减少 低效率的实体分行,加速向数字化发展。实现成本节省和 IT 预算提效的需求,将为数字柜台和银行代理点创造新的机遇。 一个崭新的世界:未来数字银行趋势图 现在是银行迎头赶上并为客户提供超…

拿来即用,自己封装的 axios

文章目录 一、需求二、分析1. 安装axios2. 新建一个 ts 文件,封装 axios3. store 存放 token 信息4. 使用5. 文件 type.js 一、需求 在日常开发中,我们会经常用到 axios ,那么如何在自己的项目中自己封装 axios 二、分析 1. 安装axios np…

jenkins使用

安装插件 maven publish over ssh publish over ssh 会将打包后的jar包,通过ssh推送到指定的服务器上,,在jenkins中设置,推送后脚本,实现自动部署jar包,, 装了这个插件之后,可以在项…

非计算机科班背景者顺利转码计算机领域:策略与前景展望

方向一:如何规划才能实现转码? 对于非计算机科班背景的人想要顺利转码进入计算机领域,规划是至关重要的。以下是一些建议,可以帮助你在转码过程中更加顺利: 自我评估和目标设定: 首先,你需要明…

Weak Session IDs (弱会话)

Weak Session IDs (弱会话) 当用户登录后,在服务器就会创建一个会话(session),叫做会话控制,接着访问页面的时候就不用登录,只需要携带Sesion去访问。 sessionID作为特定用户访问站点所需要的唯一内容。如果能够计算或轻易猜到该…

深入理解 Flutter 图片加载原理

作者:京东零售 徐宏伟 来源:京东云开发者社区 前言 随着Flutter稳定版本逐步迭代更新,京东APP内部的Flutter业务也日益增多,Flutter开发为我们提供了高效的开发环境、优秀的跨平台适配、丰富的功能组件及动画、接近原生的交互体验…

用对角线去遍历矩阵

声明 该系列文章仅仅展示个人的解题思路和分析过程,并非一定是优质题解,重要的是通过分析和解决问题能让我们逐渐熟练和成长,从新手到大佬离不开一个磨练的过程,加油! 原题链接 用对角线遍历矩阵https://leetcode.c…

wsl2(debian)安装python的不同版本例如3.8

要在Debian上安装 Python 3.8,可以按照以下步骤操作: 1.确保你的 Debian 系统已经更新到最新版本,可以使用以下命令更新: sudo apt update sudo apt upgrade2.安装 Python 3.8 的依赖项,以及构建 Python 时需要的工具…

django中实现事务的几种方式

1.实现事务的三种方式 1.1 全局开启事务---> 全局开启事务,绑定的是http请求响应整个过程 DATABASES {default: {#全局开启事务,绑定的是http请求响应整个过程ATOMIC_REQUESTS: True, }} from django.db import transaction# 局部禁用事务 transac…

数据结构——栈(C语言)

需求:无 栈的概念: 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端为栈底。栈中的数据元素遵守后进先出(LIFO)原则。压栈&…

GPIO 配置 和 PINCTRL有啥区别

GPIO(通用输入/输出)和 PINCTRL(引脚控制器)是在嵌入式系统中用于管理和控制硬件引脚的关键概念。它们在硬件层面上起着不同的作用。 GPIO配置: GPIO 是一种通用的硬件接口,用于控制和读取数字信号。每个 …

自动驾驶——驶向未来的革命性技术

自动驾驶——驶向未来的革命性技术 自动驾驶的组件自动驾驶的优势自动驾驶的应用自动驾驶的未来中国的自动驾驶 自动驾驶是一种技术,它允许车辆在没有人类驾驶员的情况下自主地进行行驶。它利用各种传感器、计算机视觉、人工智能和机器学习算法来感知和理解周围环境…

.net连接mysql,提示找不到请求的 .Net Framework Data Provider。可能没有安装

开发完成的.net程序需要连接mysql数据库,在个人电脑上运行没问题,别人运行时提示“提示找不到请求的 .Net Framework Data Provider。可能没有安装”。经过查询,安装Connector/NET 8.1.0,下载地址如下所示: https://d…