1.1 调整隐藏Nginx软件版本号信息
一般来说,软件的漏洞和版本有关,因此,我们应该隐藏或消除web服务对访问用户显示显示各类敏感信息(例如web软件名称及版本号等信息),这样恶意的用户就很难猜到他攻击的服务器所用的是否有特定漏洞的软件,或者是否有对应漏洞的某一些特定版本,从而加强web服务安全性。
**想要了解使用软件的版本号,linux下最简单的方法就是执行curl命令:**
[root@lb01 nginx-1.10.3]# curl -I 10.0.0.5
HTTP/1.1 200 OK
Server: nginx/1.10.3 #<==这里很清晰的暴露了web版本号(1.10.3)
Date: Mon, 18 Sep 2017 14:16:26 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Mon, 18 Sep 2017 14:12:29 GMT
Connection: keep-alive
ETag: "59bfd44d-264"
Accept-Ranges: bytes
在windows客户端上,通过浏览器访问web服务时,如找不到页面,默认报错的信息:
以上虽然是不同的客户端,但是都获得了Nginx软件名称,而且查到了Nginx的版本号,这就使得Nginx web服务的安全存在一定的风险,因此,应该隐藏掉这些敏感信息或用一个其他的名字将其替代。
事实上,还可以通过配置文件加参数来隐藏Nginx版本号。
在Nginx配置文件nginx.conf 中的http 标签段内加入“server_tokens off; ”参数,如下:
此参数放置在http标签内,作用是控制http response header内的web服务版本信息的显示,以及错误信息中web服务版本的显示。
配置完此参数后保存,重新加载配置文件,在此通过curl查看,结果如下:
[root@lb01 nginx-1.10.3]# curl -I 10.0.0.5
HTTP/1.1 200 OK
Server: nginx #<==此时版本号码已消失啦!!
Date: Mon, 18 Sep 2017 15:01:32 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Mon, 18 Sep 2017 14:12:29 GMT
Connection: keep-alive
ETag: "59bfd44d-264"
Accept-Ranges: bytes
*1.2更改源码隐藏Nginx软件名及版本号
隐藏了版本号后,可以通过一些手段把web服务软件的名称也隐藏起来,来迷惑黑客。但软件名字的隐藏修改,一般情况下不会有配置参数入口,Nginx也不例外。因此此处需要更改Nginx源代码,具体的解决方法如下。
第一步是一次修改3个Nginx源码文件
修改的第一个文件为/nginx-1.10.3/src/core/nginx.h 如下:
[root@lb01 core]# sed -n '13,17p' nginx.h
#define NGINX_VERSION "2.10.10" #<==将此处的版本号改成你想要的。
#define NGINX_VER "OWS/" NGINX_VERSION #<==还有这里。
修改第二个文件是nginx-1.10.3/src/http/ngx_http_header_filter_module.c
通过sed替换: sed -i 's#Server: nginx#Server: OWS#g' ngx_http_header_filter_module.c
修改第三个配置文件是:nginx-1.10.3/src/http/ngx_http_special_response.c
[root@lb01 http]# sed -n '21,31p' ngx_http_special_response.c
static u_char ngx_http_error_full_tail[] =
"
" OWS "" CRLF #<==将此处修改为“OWS”
"
" CRLF "