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

图片

图片

猜你喜欢

转载自blog.csdn.net/ensp1/article/details/132339474