业务系统经常定期做渗透测试,对外提供Web服务,时常因版本信息泄露,导致过时版本存在安全漏洞,因此要做些基础安全加固。

编译安装Ningx前提条件,是需要安装GCC编译环境

1 安装编译环境

Terminal window
koevn@localhost:~$ sudo apt update
koevn@localhost:~$ sudo apt install gcc g++ make wget # 安装编译环境
koevn@localhost:~$ sudo wget https://nginx.org/download/nginx-1.20.2.tar.gz
koevn@localhost:~$ tar -xvf nginx-1.20.2.tar.gz
koevn@localhost:~$ cd nginx-1.20.2

2 修改Nginx源码包

2.1.0 修改ngx_http_header_filter_module.c文件

vim src/http/ngx_http_header_filter_module.c

修改文件49行左右 static u_char ngx_http_server_string[] = "Server: nginx" CRLF; 改为 static u_char ngx_http_server_string[] = "Server: " CRLF;

2.2.0 修改ngx_http_special_response.c文件

vim src/http/ngx_http_special_response.c

修改文件36行左右 "<hr><center>nginx</center>" CRLF 改为 "<hr><center></center>" CRLF

2.3.0 修改nginx.h文件

vim src/core/nginx.h

修改文件13和14行 #define NGINX_VERSION "1.28.0" #define NGINX_VER "nginx/" NGINX_VERSION 改为 #define NGINX_VERSION "" #define NGINX_VER "/" NGINX_VERSION

3 添加headers-more-nginx模块

这是第三方模块,作用是把Response Headers里的Server字段移除掉,上面第二步骤只是隐藏了Nginx信息,但是Server字段值显示为空,看着还是有点奇怪,干脆直接移除该字段。

Terminal window
koevn@localhost:~$ sudo wget https://github.com/openresty/headers-more-nginx-module/archive/refs/tags/v0.38.tar.gz \
-O headers-more-nginx-module.tar.gz
koevn@localhost:~$ sudo tar -xvf headers-more-nginx-module.tar.gz

编译安装Nginx时,添加--add-module=../headers-more-nginx-module参数即可。

4 编辑Nginx配置文件

编辑nginx.conf配置文件

Terminal window
http {
#------ 其他配置省略 ------#
more_clear_headers Server; #添加这段即可
#------ 其他配置省略 ------#
}

编辑主机配置文件conf.d/site.conf

Terminal window
server {
#------ 其他配置省略 ------#
proxy_hide_header X-Powered-By; #添加这段即可
#------ 其他配置省略 ------#
}

5 测试结果