《安全配置从默认开始》
第4章 Web服务器安全配置(Apache)
4、Web服务器安全配置(Apache)
Apache HTTP Server 是全球使用最广泛的 Web 服务器软件之一。然而,默认安装的 Apache 往往存在诸多安全隐患,如信息泄露、目录遍历、不必要的模块加载等。本课程将带您从默认配置出发,逐步加固 Apache 服务器,构建一个安全、可靠的 Web 服务环境。
4.1 Apache默认配置风险
Apache 在默认安装后,会开启许多不必要的功能和服务,这些功能在方便开发的同时,也为攻击者提供了可乘之机。以下是常见的默认配置风险:
⚠️ 主要风险点
- 默认页面存在:
It works!页面暴露服务器类型 - 目录列表开启:访问无索引文件的目录时,会列出所有文件
- 服务器状态页面:
/server-status可能未限制访问 - CGI 脚本示例:
/cgi-bin/目录下的测试脚本可能被利用 - 符号链接跟随:
Options +FollowSymLinks可能导致越权访问
💡 安全建议:安装 Apache 后,应立即删除默认页面文件
/var/www/html/index.html(或根据发行版调整),并检查 httpd.conf 或 apache2.conf 中的配置项。
4.2 目录权限设置
合理的目录权限设置是 Web 安全的第一道防线。Apache 通过 <Directory> 指令控制目录的访问行为,错误的配置可能导致敏感文件泄露或代码执行。
核心配置原则
| 配置项 | 推荐值 | 说明 |
|---|---|---|
Options |
-Indexes -FollowSymLinks |
禁用目录列表和符号链接跟随 |
AllowOverride |
None |
禁止 .htaccess 覆盖配置,提升性能和安全 |
Require |
Require all denied(默认) |
拒绝所有访问,再按需开放 |
安全配置示例
<Directory /var/www/html>
Options -Indexes -FollowSymLinks
AllowOverride None
Require all granted
</Directory>
# 保护敏感目录
<Directory /var/www/html/admin>
Require ip 192.168.1.0/24
</Directory>
# 禁止访问 .git 等隐藏目录
<DirectoryMatch "^/.*/\.">
Require all denied
</DirectoryMatch>
4.3 隐藏版本信息
Apache 默认会在 HTTP 响应头中发送版本信息(如 Server: Apache/2.4.57 (Unix)),这为攻击者提供了精确的漏洞利用目标。隐藏版本信息是安全加固的基本操作。
🔧 配置方法
在 Apache 主配置文件(httpd.conf 或 apache2.conf)中添加或修改以下指令:
# 隐藏 Apache 版本和操作系统信息 ServerTokens Prod ServerSignature Off
参数说明:
ServerTokens Prod:仅返回Apache,不包含版本号和操作系统ServerSignature Off:关闭错误页面底部的版本信息
🔍 验证方法:使用
curl -I http://your-server.com 查看响应头中的 Server 字段,确认不再显示详细版本号。
4.4 禁用不必要的模块
Apache 默认加载了许多模块,其中不少模块在实际业务中并不需要。每个加载的模块都可能成为攻击面,因此应遵循“最小权限原则”,只启用必要的模块。
常见危险模块
| 模块名称 | 风险说明 | 禁用方法 |
|---|---|---|
mod_info |
泄露服务器配置信息 | a2dismod info |
mod_status |
暴露服务器状态和活动连接 | a2dismod status |
mod_autoindex |
目录列表功能,信息泄露 | a2dismod autoindex |
mod_userdir |
允许用户目录访问,扩大攻击面 | a2dismod userdir |
模块管理命令
# 查看已启用的模块 apache2ctl -M # 禁用模块(Debian/Ubuntu) a2dismod info status autoindex userdir # 禁用模块(RHEL/CentOS) # 编辑 /etc/httpd/conf.modules.d/ 下的配置文件,注释掉不需要的 LoadModule 行
4.5 HTTPS配置基础
HTTPS 通过 SSL/TLS 协议加密通信,防止数据在传输过程中被窃听或篡改。为 Apache 配置 HTTPS 是保障 Web 安全的基本要求。
配置步骤
- 获取 SSL 证书:可从 Let's Encrypt 免费获取,或购买商业证书
- 启用 SSL 模块:
a2enmod ssl - 配置虚拟主机:监听 443 端口,指定证书路径
- 强制 HTTPS 重定向:将 HTTP 请求重定向到 HTTPS
- 测试配置:
apache2ctl configtest
HTTPS 虚拟主机配置示例
<VirtualHost *:443>
ServerName www.example.com
DocumentRoot /var/www/html
# SSL 配置
SSLEngine on
SSLCertificateFile /etc/ssl/certs/example.com.crt
SSLCertificateKeyFile /etc/ssl/private/example.com.key
SSLCertificateChainFile /etc/ssl/certs/chain.crt
# 安全协议和加密套件
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite HIGH:!aNULL:!MD5:!3DES
SSLHonorCipherOrder on
<Directory /var/www/html>
Options -Indexes
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
# HTTP 自动跳转 HTTPS
<VirtualHost *:80>
ServerName www.example.com
Redirect permanent / https://www.example.com/
</VirtualHost>
🔒 安全加分项:使用
mod_security(WAF)和 mod_evasive(防DDoS)进一步增强 Apache 安全性。定期使用 sslscan 或 testssl.sh 检查 SSL 配置强度。
📌 总结:Apache 安全配置应从默认开始,逐步收紧权限、隐藏信息、精简模块、启用加密。安全是一个持续的过程,请定期审查配置并关注安全公告。
专注课程资料整理