Apache 生产环境安全加固配置方法

Apache HTTP Server 自 1995 年运行至今,承载了全球约四分之一的网站,在企业基础设施中应用极为广泛。它的成熟既是优势也是隐患:服务器本身经过充分验证、文档完善,但默认配置更多考虑的是向后兼容,而非现代安全需求。
生产环境加固 Apache,核心在于系统性地关闭那些在 2005 年合理、如今却成为负担的默认设置。配置加固只是一半工作,还应定期扫描 Web 服务器版本和模块对应的已知 CVE——底层二进制未打补丁,配置文件再完美也无济于事。
注意:
Debian/Ubuntu 系在 /etc/apache2/apache2.conf 中配置,红帽/CentOS 系在 /etc/httpd/conf/httpd.conf 中配置;
PHP 配置不在 Apache 文件里,需改 php.ini(Debian/Ubuntu 通常为 /etc/php/版本/apache2/php.ini,红帽/CentOS 通常为 /etc/php.ini)
一、信息泄露防护
1.1 关闭服务器签名
Apache 默认会在 HTTP 响应头和错误页面中暴露版本号:
Server: Apache/2.4.57 (Ubuntu) OpenSSL/3.0.10
这等于直接告诉攻击者该用哪些漏洞。关闭方法:
ServerTokens Prod ServerSignature Off
ServerTokens Prod 将 Server 头缩减为仅“Apache”,ServerSignature Off 从错误页面移除版本信息。
1.2 关闭目录列表
目录中没有索引文件时,Apache 默认会列出文件清单,暴露目录结构、文件名及敏感文件:
<Directory /var/www/html> Options -Indexes </Directory>
1.3 删除默认内容
Apache 自带的欢迎页、文档和示例配置在生产服务器上应全部删除。它们没有实际价值,反而会泄露 Apache 版本和模块信息。
1.4 隐藏 PHP 及其他头部信息
若 Apache 后端运行 PHP,默认会添加 X-Powered-By 头:
X-Powered-By: PHP/8.2.1
在 php.ini 中关闭:
expose_php = Off
同时检查并关闭 Apache 后端任何应用框架的技术披露头。
二、模块安全
2.1 禁用不必要的模块
Apache 默认加载大量模块,每个模块都会增加攻击面。不用的模块应禁用:
# 查看已启用模块 apachectl -M # 禁用模块 a2dismod autoindex a2dismod status a2dismod cgi a2dismod userdir
除非确有必要,以下模块通常应禁用:
- mod_autoindex(目录列表);
- mod_status(服务器状态页);
- mod_cgi(CGI 脚本执行);
- mod_userdir(用户主目录);
- mod_info(服务器信息页);
- mod_include(服务端包含)。
2.2 加固 mod_status
如需用mod_status做监控,必须限制访问:
<Location /server-status> SetHandler server-status Require ip 10.0.0.0/8 Require ip 127.0.0.1 </Location>
绝不能将 mod_status 暴露到互联网,它会泄露服务器性能、配置和已连接客户端的详细信息。
2.3 加固 mod_proxy
Apache 作为反向代理时,需谨慎配置 mod_proxy:
ProxyRequests Off <Proxy *> Require all denied </Proxy> <Location /api> ProxyPass http://backend:8080/api ProxyPassReverse http://backend:8080/api Require all granted </Location>
ProxyRequests Off关闭正向代理功能,防止被用于匿名浏览或 SSRF 攻击。
三、TLS 配置
3.1 使用现代协议
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384 SSLHonorCipherOrder on
3.2 启用 HSTS
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"
3.3 启用 OCSP Stapling
SSLUseStapling on SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"
3.4 HTTP 跳转 HTTPS
<VirtualHost *:80> ServerName example.com Redirect permanent / https://example.com/ </VirtualHost>
四、访问控制
4.1 IP 限制
管理接口和内部服务应做 IP 限制:
<Location /admin> Require ip 10.0.0.0/8 </Location>
4.2 请求限制
限制请求体大小,防止拒绝服务攻击:
LimitRequestBody 1048576 LimitRequestFields 50 LimitRequestFieldSize 8190 LimitRequestLine 4094
4.3 超时配置
合理设置超时,防范慢速攻击:
Timeout 60 KeepAliveTimeout 5 MaxKeepAliveRequests 100
五、安全响应头
Header always set X-Content-Type-Options "nosniff" Header always set X-Frame-Options "DENY" Header always set Referrer-Policy "strict-origin-when-cross-origin" Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()" Header always set Content-Security-Policy "default-src 'self'"
六、文件系统安全
6.1 拒绝访问敏感文件
<FilesMatch "(^\.ht|\.git|\.env|\.bak|\.old|\.sql)"> Require all denied </FilesMatch>
6.2 限制文档根目录
<Directory /> Require all denied Options None AllowOverride None </Directory> <Directory /var/www/html> Require all granted Options -Indexes -FollowSymLinks AllowOverride None </Directory>
原则是先拒绝所有访问,再显式放行文档根目录。禁用 FollowSymLinks 可防止符号链接攻击。
6.3 禁用 .htaccess
若不需要按目录覆盖配置,应关闭.htaccess处理:
AllowOverride None
.htaccess文件在每次请求该目录时都会被处理,禁用后可提升性能,并防止能向文档根目录写入文件的攻击者篡改 Apache 配置。
七、日志记录
启用全面日志:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D %{SSL_PROTOCOL}x" combined_ssl
CustomLog /var/log/apache2/access.log combined_ssl
ErrorLog /var/log/apache2/error.log
LogLevel warn
日志中应包含 TLS 协议版本和请求耗时,便于安全分析。同时将日志转发至 SIEM 平台,用于告警和调查。
以上关于Apache 生产环境安全加固配置方法的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » Apache 生产环境安全加固配置方法
微信
支付宝