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