温馨提示×

CentOS中Apache的安全设置有哪些

小樊
34
2025-12-03 17:37:11
栏目: 智能运维

CentOS 上 Apache 的安全设置清单

一 基础加固

  • 保持系统与软件为最新:执行 sudo yum update -y,及时修补漏洞。
  • 精简与禁用不必要的模块:如非必需,禁用 mod_cgi、mod_status、mod_userdir、autoindex 等,减少攻击面。
  • 隐藏版本与系统信息:在全局或主配置中设置 ServerTokens ProdServerSignature Off,避免泄露版本细节。
  • 禁用目录列表:在 中使用 Options -Indexes,防止目录内容被列举。
  • 限制 Web 根目录之外的访问:通过配置与权限策略,禁止访问 /etc、/var/log、/root 等敏感路径。
  • 运行身份最小化:确认以低权限用户/组运行(如 apache),避免使用 root。
  • 禁用或限制 .htaccess:在需要性能与安全时设置 AllowOverride None,仅在必要时启用。
  • 限制 HTTP 方法与请求体:使用 Limit/LimitExcept 仅允许 GET、POST 等必要方法;用 LimitRequestBody 限制上传大小,缓解滥用风险。

二 传输加密与端口管控

  • 启用 SSL/TLS:安装 mod_ssl,配置 *VirtualHost :443,设置 SSLEngine on、证书与链文件路径。
  • 获取可信证书:使用 Let’s Encrypt/Certbot 自动申请与部署证书,命令示例:sudo certbot --apache -d yourdomain.com
  • 防火墙放行:通过 firewalld 仅开放 80/443,示例:sudo firewall-cmd --permanent --add-service=http --add-service=https && sudo firewall-cmd --reload
  • 仅暴露必要端口:避免开放管理端口与调试端口到公网。

三 访问控制与请求限制

  • 基于 IP 的访问控制:在 中使用 Require all granted/deniedAllow from/Require ip 限制来源。
  • 禁用危险方法与限制大小:仅允许业务所需方法,配合 LimitRequestBody 控制 POST 数据上限。
  • 目录与文件粒度的权限控制:结合 Order/Allow/DenyRequire 指令,细化到目录、文件与位置。
  • 启用 mod_rewrite 做访问控制与跳转:如强制 HTTPS、阻断恶意路径、规范化 URL。
  • 防范 DoS 与暴力请求:部署 mod_evasive 检测并限制异常请求速率。

四 日志监控与运行时安全

  • 启用并合理配置日志:确保 ErrorLogCustomLog(combined) 正常记录,便于审计与入侵追踪。
  • 定期审计与监控:持续查看 /var/log/httpd/ 的访问与错误日志,结合监控告警异常流量与状态码。
  • 启用 SELinux 并正确配置:优先使用 setseboolchcon 调整策略(如日志写入、目录上下文),避免直接关闭 SELinux。
  • 部署 WAF:使用 ModSecurity 等 Web 应用防火墙,缓解 XSS、SQL 注入、文件上传 等常见漏洞。
  • 备份与变更管理:变更前备份配置(如 /etc/httpd/conf/httpd.conf),变更后校验并保留回滚方案。

五 最小化示例配置片段

# 隐藏版本与签名
ServerTokens Prod
ServerSignature Off

# 目录访问与禁用索引
<Directory "/var/www/html">
    Options -Indexes
    AllowOverride None
    Require all granted
</Directory>

# 仅允许 GET/POST,限制 POST 大小(示例:10MB)
<LimitExcept GET POST>
    Require all denied
</LimitExcept>
LimitRequestBody 10485760

# 强制 HTTPS(需启用 mod_rewrite)
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [L,R=301]

以上为常用安全项的精简示例,需结合实际虚拟主机与业务需求调整,并在修改后执行 sudo systemctl restart httpd 使配置生效。

0