生产环境Apache安全模块启用核心是按需启用、最小权限、白名单优先:必须启用mod_headers、mod_rewrite、mod_ssl、mod_authz_core、mod_authz_host、mod_unique_id;谨慎启用mod_cgi、mod_php等需白名单约束的模块;禁用mod_info、mod_status等非必要高危模块。
生产环境 apache 的安全模块启用,核心是“按需启用、最小权限、白名单优先”——不盲目加载所有模块,只启用业务真正需要的模块,并通过配置明确控制其行为边界。
必须启用的基础安全模块
以下模块是现代 Apache 安全架构的基石,应默认启用:
- mod_headers:用于精细化控制响应头(如 CORS、X-Content-Type-Options、Strict-Transport-Security)
- mod_rewrite:实现 URL 重写与请求过滤(如强制 HTTPS、屏蔽恶意路径、拦截扫描器 User-Agent)
- mod_ssl(或 mod_tls 在新版中):提供 TLS 1.2/1.3 支持,禁用 SSLv2/v3 和弱密码套件
- mod_authz_core 与 mod_authz_host:支撑 IP 白名单/黑名单、目录级访问控制
- mod_unique_id:为每个请求生成唯一 ID,便于日志追踪与 WAF 关联分析
谨慎启用的高风险模块(需白名单显式授权)
这些模块功能强大但易被误用或滥用,启用前必须满足两个条件:业务强依赖 + 配置白名单约束:
-
mod_cgi / mod_cgid:仅允许指定脚本路径(如
<Directory "/var/www/cgi-bin/app">),禁用全局执行 -
mod_php(或 php-fpm 配合 mod_proxy_fcgi):PHP 执行应限制在特定虚拟主机或目录,禁用
php_admin_flag allow_url_fopen on等危险指令 -
mod_userdir:若必须启用,仅允许特定系统用户(如
UserDir disabled root+UserDir public_html+ 白名单用户名列表) -
mod_include(SSI):仅对可信静态内容目录开启,且禁用 exec 命令:
Options +IncludesNoExec
应明确禁用或卸载的非必要模块
以下模块在绝大多数生产场景中无业务价值,反而扩大攻击面,建议直接移除或注释掉 LoadModule 行:
- mod_info、mod_status:暴露服务器内部状态,除非在内网监控专用 vhost 中严格限制 IP 白名单访问
-
mod_version:已由更安全的
<IfVersion>指令替代,无需独立加载 -
mod_proxy_ajp、mod_proxy_balancer:若未使用 AJP 或负载均衡,不应启用;启用时须配合
ProxyRequests off和明确的<Proxy>白名单 - mod_dav、mod_dav_fs:WebDAV 功能极易引发路径遍历与权限绕过,除非明确需要且已做细粒度 ACL 控制
模块启用后的白名单加固实践
启用模块只是起点,关键在于用配置将其作用范围收缩到最小可信域:
- 所有涉及动态执行或外部调用的模块(如 rewrite、cgi、proxy),应在
<VirtualHost>或<Directory>块内单独配置,避免全局生效 - 使用
Require ip或Require expr实现 IP 白名单,例如:Require ip 10.10.0.0/16 192.168.5.100Require expr %{HTTP_HOST} =~ m/^api\.(prod|staging)\.example\.com$/ - 对敏感指令(如
AllowOverride、Options)设为None或显式白名单值,禁止 .htaccess 覆盖关键安全策略 - 定期运行
httpd -M | grep -E "(loaded|shared)"核对实际加载模块清单,与运维文档中的白名单清单比对,确保无意外模块残留


















