温馨提示×

CentOS Apache2安全配置技巧

小樊
37
2025-12-13 14:03:05
栏目: 智能运维

CentOS 上 Apache HTTP Server 的安全加固清单

一 基础与系统层加固

  • 保持系统与软件为最新:执行yum update -y定期更新,及时修补漏洞;变更前备份配置。
  • 仅开放必要端口与服务:使用firewalld放行HTTP/HTTPS,避免暴露管理端口与无用服务。
  • 启用并正确配置SELinux:优先采用“最小权限”策略,必要时用setseboolchcon/semanage为 Web 目录与端口设置合适上下文与布尔值,避免直接关闭 SELinux。
  • 运行身份最小化:确认httpd.conf中的User/Group为低权限专用账户(如apache),避免使用rootnobody
  • 启动与开机自启:使用systemctl enable --now httpd确保服务受控启动。

二 Apache 服务层加固

  • 隐藏版本与系统标识:在主配置设置ServerTokens ProdServerSignature Off,减少信息泄露面。
  • 禁用目录列表:在**中使用Options -Indexes**,防止目录遍历泄露文件结构。
  • 精简与禁用不必要模块:注释不需要的LoadModule(如mod_autoindex、mod_info、mod_userdir、mod_cgi、mod_status等),降低攻击面。
  • 限制请求方法:仅允许GET/HEAD/POST等业务必需方法,其他方法返回405
  • 访问控制:对管理后台、敏感目录使用Require ipAllow from限制来源 IP;对静态资源可进一步细化策略。
  • 禁用或严格管控**.htaccess**:在不需要分布式配置时设置AllowOverride None,由主配置统一管理以降低风险。
  • 运行身份与权限:确保进程以apache等非特权用户运行,目录与文件权限遵循“最小权限”。

三 加密传输与证书管理

  • 启用TLS/HTTPS:安装mod_ssl,配置SSLEngine on,正确设置SSLCertificateFile/SSLCertificateKeyFile,必要时配置SSLCertificateChainFile
  • 获取可信证书:优先使用Let’s Encrypt自动化签发与续期(如certbot --apache -d yourdomain.com),避免自签名证书在生产环境长期使用。
  • 防火墙放行:确保firewalld已放行443/tcp,对外仅暴露必要端口。

四 进阶防护与运维

  • 部署WAF(mod_security + OWASP CRS):安装mod_securityOWASP Core Rule Set,为常见SQLi/XSS/文件上传等攻击提供规则拦截;上线前充分回归测试,避免误报。
  • 防暴力与异常拦截:结合Fail2ban监控Apache 访问/错误日志modsec_audit.log,自动封禁恶意来源 IP。
  • 日志与监控:集中收集并轮转**/var/log/httpd/access_logerror_log**,设置告警规则关注4xx/5xx异常比例、扫描特征与暴力请求。
  • 变更与验证:任何配置变更先执行httpd -t语法检查,再systemctl reload httpd平滑生效,保留回滚方案。

五 最小化配置示例

# /etc/httpd/conf.d/security.conf
ServerTokens Prod
ServerSignature Off

# 禁用目录列表
<Directory "/var/www/html">
    Options -Indexes +FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

# 仅允许 GET/HEAD/POST
<LimitExcept GET HEAD POST>
    Require all denied
</LimitExcept>

# 示例:限制管理后台仅内网访问(按实际网段调整)
<Location "/admin">
    Require ip 192.168.1.0/24 127.0.0.1
</Location>
  • 启用 SSL(/etc/httpd/conf.d/ssl.conf 片段)
LoadModule ssl_module modules/mod_ssl.so
<VirtualHost *:443>
    ServerName yourdomain.com
    SSLEngine on
    SSLCertificateFile /etc/pki/tls/certs/your_domain.crt
    SSLCertificateKeyFile /etc/pki/tls/private/your_domain.key
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
  • 变更验证与生效
httpd -t && systemctl reload httpd

0