修改web server的版本号甚至是名称,在一定程度上都可以起到伪装保护web服务器的作用,web server有很多种,比如常见的apache,nginx,IIS,以及国内外互联网大厂自己的GWS,BWS等等。这里介绍针对nginx的伪装成GWS的方法,总体方法是先修改nginx的源码包内的相关文件,然后再重新编译一次,最后我们验证一下结果即可。
1.修改源码包src/core/nginx.h 这个文件:
/* * Copyright (C) Igor Sysoev * Copyright (C) Nginx, Inc. */ #ifndef _NGINX_H_INCLUDED_ #define _NGINX_H_INCLUDED_ #define nginx_version 1010003 #define NGINX_VERSION "1.10.3" #define NGINX_VER "nginx/" NGINX_VERSION #ifdef NGX_BUILD #define NGINX_VER_BUILD NGINX_VER " (" NGX_BUILD ")" #else #define NGINX_VER_BUILD NGINX_VER #endif #define NGINX_VAR "NGINX" #define NGX_OLDPID_EXT ".oldbin" #endif /* _NGINX_H_INCLUDED_ */
我们可以看到
#define nginx_version #define NGINX_VERSION #define NGINX_VER
以上三行,前两个对应不同格式的版本号,以及最后一个定义软件名称,这里我不需要改变版本号,防止以后升级的时候忘记当前的版本号,只想改变对外显示的软件名称:
/* * Copyright (C) Igor Sysoev * Copyright (C) Nginx, Inc. */ #ifndef _NGINX_H_INCLUDED_ #define _NGINX_H_INCLUDED_ #define nginx_version 1010003 #define NGINX_VERSION "1.10.3" #define NGINX_VER "GWS" NGINX_VERSION #ifdef NGX_BUILD #define NGINX_VER_BUILD NGINX_VER " (" NGX_BUILD ")" #else #define NGINX_VER_BUILD NGINX_VER #endif #define NGINX_VAR "NGINX" #define NGX_OLDPID_EXT ".oldbin" #endif /* _NGINX_H_INCLUDED_ */
因此只修改define NGINX_VER
2.再修改源码包src/http/ngx_http_header_filter_module.c
static char ngx_http_server_string[] = "Server: nginx" CRLF;
改成
static char ngx_http_server_string[] = "Server: GWS" CRLF;
3.重新编译nginx
4.验证:
可以看到服务器已经变成了GWS
##########################2017-09-23 更新
遗漏的一点,如果没有使用自定义的404,503等页面,当服务器返回404,503等页面的时候还是会出现"nginx"的字样,所以需要将nginx源码包内src/http目录下面的http/ngx_http_special_response.c文件做修改,将:
static u_char ngx_http_error_tail[] = "<hr><center>nginx</center>" CRLF "</body>" CRLF "</html>" CRLF ;
改成
static u_char ngx_http_error_tail[] = "<hr><center>gws</center>" CRLF "</body>" CRLF "</html>" CRLF ;
当然,这些改动是在编译之前完成。