当客户端连接到Apache服务器的时候,Apache一般会返回服务器版本、非缺省模块等信息,例如:
Server: Apache/2.2.0 (Unix) mod_perl/1.26
解决:
你可以在Apache的配置文件里面作如下设置让它返回的关于服务器的信息减少到最少:
ServerTokens Prod
注意:
这样设置以后Apache还会返回一定的服务器信息,比如:
Server: Apache
但是这个不会对服务器安全产生太多的影响,因为很多扫描软件是扫描的时候是不顾你服务器返回的头部信息的。你如果想把服务器返回的相关信息变成:
Server: It iS a nOnE-aPaCHe Server
那么你就要去修改源码了。
方法:
代码:
修改几个Apache的几个源代码文件,然后自己编译
操作:
一、文件操作
file: include/ap_release.h
#define AP_SERVER_BASEVENDOR"这里填写开发组织名,例如:Microsoft Corp."
#defineAP_SERVER_BASEPRODUCT"这里填写服务器软件名,例如:Microsoft-IIS"
#defineAP_SERVER_MAJORVERSION "主版本,例如:5"
#defineAP_SERVER_MINORVERSION "次版本,例如:0"
#defineAP_SERVER_PATCHLEVEL "修正版本,例如:1"
file: os/os2/os.h
#define PLATFORM "这里填写操作系统的名称,例如:Win32"
二、编译操作
代码:
按照一般正常步骤编译安装
修改webserver的header伪装服务器
一般在Linux下查询一个网站链接返回的header信息,用
引用:
curl -I 链接
或
curl --head 链接
即可
好了开始正题
修改header信息
一、Apache
引用:
修改
include/ap_release.h
中
#define AP_SERVER_BASEVENDOR "Apache Software Foundation"
这里填写开发组织名,例如:Microsoft Corp.
#define AP_SERVER_BASEPROJECT "Apache HTTP Server"
这里填写服务器软件名
#define AP_SERVER_BASEPRODUCT "Apache"
这里填写服务器软件名
#define AP_SERVER_MAJORVERSION_NUMBER 2
主版本
#define AP_SERVER_MINORVERSION_NUMBER 2
次版本
#define AP_SERVER_PATCHLEVEL_NUMBER 14
修正版本修改
os/os2/os.h
中
#define PLATFORM "OS/2"
这里填写操作系统的名称
二、Nginx
引用:
两种方法任选其一即可
1、修改
src/core/nginx.h
2、修改
src/http/ngx_http_header_filter_module.c
中
static char ngx_http_server_string[] = "Server: nginx" CRLF;
static char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;
三、IIS
引用:
需要用16进制编辑器编辑
SYSTEM32/INETSRV/W3SVC.DLL
四、Tomcat 6.0.20
引用:
在
java/org/apache/coyote/http11/Constants.java
和
java/org/apache/coyote/ajp/Constants.java
这两个文件中查找
public static final byte[] SERVER_BYTES =
ByteChunk.convertToBytes("Server: Apache-Coyote/1.1" + CRLF);
然后修改红色部分
五、Cherokee
引用:
修改
cherokee/version.c
中包含有
Cherokee web server
的部分