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 的系统,您可以使用 yumdnf 一次性安装所有必要的开发工具和库。

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 服务器对外显示的名称。

  1. 定位文件:

    # 假设您的源码目录是 httpd-2.4.66
    cd httpd-2.4.66/include/
    sudo vi ap_release.h
    
  2. 修改定义宏:

    找到文件大约第 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"
    

三、配置、编译与安装

完成源码修改后,我们进行标准的配置和编译流程。

  1. 返回源码根目录并配置:

    使用 –prefix 指定安装路径,并开启常用的模块(如 DSO, rewrite, SSL)。

    Bash

    cd .. # 回到 httpd-2.4.66 目录
    ./configure --prefix=/usr/local/apache2.4.66 \
                --enable-so \
                --enable-rewrite \
                --enable-ssl
    
  2. 编译与安装:

    使用-j N参数可以加速编译过程(N 为 CPU 核心数)。

    make -j 4
    sudo make install
    

四、启动自定义服务器并验证

安装完成后,我们启动新的服务器实例,并检查 HTTP 响应头。

  1. 启动服务器:

    进入安装目录的 bin 文件夹,并启动 Apache 控制脚本 apachectl

    Bash

    cd /usr/local/apache2.4.66/bin/
    sudo ./apachectl start
    
  2. 验证结果:

    使用 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安全优化之隐藏版本号