Apache安全优化之自定义版本号
在生产环境中,出于安全和品牌需求,我们经常需要隐藏或修改 Web 服务器在 HTTP 响应头中暴露的真实软件信息。本文将指导您如何通过源码编译 Apache HTTP Server(httpd),将其默认的标识(如 Apache/2.4.x)替换为您自定义的品牌名称和版本号。
通过本教程,我们将把服务器标识修改为 Server: PWS/2.4.66 (Unix)。
一、准备环境与安装依赖
在进行源码编译之前,我们需要安装 Apache 编译所需的工具和库(如 APR, PCRE, OpenSSL 等)。
对于基于 RHEL/CentOS/Rocky Linux 的系统,您可以使用 yum 或 dnf 一次性安装所有必要的开发工具和库。
Bash
# 安装编译工具链、C/C++ 编译器 (gcc)
sudo yum groupinstall "Development Tools" -y
# 安装 Apache 核心依赖库 (APR, PCRE)
sudo yum install apr-devel apr-util-devel pcre-devel zlib-devel openssl-devel -y
二、修改源码文件:定义自定义版本号
这是关键步骤。在您解压的 Apache 源码目录中,找到 include/ap_release.h 文件。这个文件定义了 Apache 服务器对外显示的名称。
定位文件:
# 假设您的源码目录是 httpd-2.4.66 cd httpd-2.4.66/include/ sudo vi ap_release.h修改定义宏:
找到文件大约第 40 行左右的以下宏定义,并将其修改为您需要的自定义名称:
原始定义 (Apache) 修改后的定义 (PWS) 作用 #define AP_SERVER_BASEVENDOR "Apache Software Foundation"#define AP_SERVER_BASEVENDOR "Panda Software Foundation"厂商名称 #define AP_SERVER_BASEPROJECT "Apache HTTP Server"#define AP_SERVER_BASEPROJECT "Panda HTTP Server"项目全称 #define AP_SERVER_BASEPRODUCT "Apache"#define AP_SERVER_BASEPRODUCT "PWS"对外显示的服务器产品简称 修改后文件片段如下:
40 #define AP_SERVER_BASEVENDOR "Panda Software Foundation" 41 #define AP_SERVER_BASEPROJECT "Panda HTTP Server" 42 #define AP_SERVER_BASEPRODUCT "PWS"
三、配置、编译与安装
完成源码修改后,我们进行标准的配置和编译流程。
返回源码根目录并配置:
使用 –prefix 指定安装路径,并开启常用的模块(如 DSO, rewrite, SSL)。
Bash
cd .. # 回到 httpd-2.4.66 目录 ./configure --prefix=/usr/local/apache2.4.66 \ --enable-so \ --enable-rewrite \ --enable-ssl编译与安装:
使用
-j N参数可以加速编译过程(N 为 CPU 核心数)。make -j 4 sudo make install
四、启动自定义服务器并验证
安装完成后,我们启动新的服务器实例,并检查 HTTP 响应头。
启动服务器:
进入安装目录的
bin文件夹,并启动 Apache 控制脚本apachectl。Bash
cd /usr/local/apache2.4.66/bin/ sudo ./apachectl start验证结果:
使用 curl 命令检查 HTTP 响应头。注意观察 Server 字段是否已被成功替换。
curl -I http://192.168.217.137/验证输出:
HTTP/1.1 200 OK ... Server: PWS/2.4.66 (Unix) # ← 成功替换! ...
五、后续安全优化 (可选)
尽管我们已经修改了服务器名称,但为了更彻底地隐藏信息,您应该在 /usr/local/apache2.4.66/conf/httpd.conf 中设置:
可参考我的另外一篇文章:Apache安全优化之隐藏版本号