温馨提示×

CentOS Apache安全设置

小樊
40
2025-12-17 13:04:00
栏目: 智能运维

CentOS 上 Apache 的安全加固清单

一 基础与系统防护

  • 保持系统与应用为最新:执行 yum update -y 定期更新;为关键目录建立备份与变更留痕。
  • 运行身份最小化:在 /etc/httpd/conf/httpd.conf 设置 User/Group 为专用低权限账户(如 apache),避免使用 rootnobody
  • 最小权限原则:为 /etc/httpd/conf/usr/sbin/httpd 等设置严格的文件系统权限与属主,仅授权维护人员访问。
  • 防火墙放行必要流量:启用 firewalld,仅开放 HTTP/HTTPS(端口 80/443)。
  • 入侵防护:部署 Fail2ban 监控 /var/log/httpd/error_log,自动封禁暴力访问来源。
  • 安全基线:禁用不必要的模块(如 autoindex、status、cgi、userdir、info、proxy_* 等),减少攻击面。

二 核心 Apache 配置

  • 隐藏版本与标识:在 httpd.conf 设置 ServerTokens ProdServerSignature Off,降低信息泄露风险。
  • 禁止目录浏览:在站点或全局 中将 Options 中的 Indexes 移除(如:Options -Indexes +FollowSymLinks)。
  • 限制 HTTP 方法:在需要保护的路径加入方法限制,仅允许 GET/POST(示例见下)。
  • 根目录防护:对 / 设置 AllowOverride NoneRequire all denied,防止通过 .htaccess 覆盖与越权访问。
  • 访问控制:基于 IP/网段 限制管理后台等敏感路径(示例见下)。
  • 请求体大小限制:在 httpd.conf 的全局作用域设置 LimitRequestBody(示例见下)。
  • 错误页面处理:为常见错误码(如 400、403、404、500)统一跳转到静态错误页,避免泄露堆栈与路径信息。
  • 示例片段(按需合并到对应 VirtualHost 或 Directory):
    • 方法限制与根目录防护
      <Directory />
          AllowOverride None
          Require all denied
      </Directory>
      
      <Directory "/var/www/html/admin">
          Require ip 192.168.1.0/24
          Require not ip 192.168.1.116
      </Directory>
      
      <LimitExcept GET POST>
          Require all denied
      </LimitExcept>
      
    • 请求体限制(10KB)
      LimitRequestBody 10240
      
    以上做法分别对应于隐藏版本、禁用目录列表、方法限制、访问控制、根目录防护与请求体限制等安全基线要求。

三 加密与认证

  • 启用 TLS:安装 mod_ssl,部署有效证书(生产建议使用 Let’s Encrypt)。
    • 安装与签发(CentOS 7/8 常见做法):
      sudo yum install -y epel-release
      sudo yum install -y certbot python2-certbot-apache
      sudo certbot --apache -d www.example.com
      
  • 强制 HTTPS:在 80 虚拟主机或 .htaccess 中使用 mod_rewriteHTTP→HTTPS
  • 基本认证:对管理后台等路径启用 htpasswd 认证。
    sudo htpasswd -c /etc/httpd/conf/.htpasswd admin
    
    在对应 中加入:
    AuthName "Restricted"
    AuthType Basic
    AuthUserFile /etc/httpd/conf/.htpasswd
    Require valid-user
    
  • 传输安全与证书管理:优先使用 TLS 1.2/1.3,定期轮换证书与密钥,确保链文件完整。

四 PHP 与上传目录安全(如启用 PHP)

  • 降低信息泄露:在 /etc/php.ini 设置 expose_php = Off
  • 禁用危险函数:如 exec、shell_exec、system、popen、proc_open、phpinfo 等。
  • 运行与请求安全:关闭 register_globalsallow_url_include,开启 session.cookie_httponly = 1,生产环境关闭 display_errors
  • 上传目录防护:禁止解析 PHP,仅允许静态资源。
    <Directory "/var/www/html/uploads">
        php_flag engine off
        Require all granted
    </Directory>
    
  • 原则:可写目录不解析脚本,解析目录保持只读,分离用户上传与代码执行路径。

五 日志监控与维护

  • 访问与错误日志:确保开启并落盘 ErrorLogCustomLog(combined),便于审计与溯源。
  • 请求体日志(按需):在排查阶段可临时加载 mod_dumpio 记录 POST 数据,用完即关闭以降低性能与隐私风险。
    LoadModule dumpio_module modules/mod_dumpio.so
    LogLevel dumpio:trace7
    DumpIOInput On
    
  • 变更与验证:每次修改后执行 httpd -t 校验语法,再 systemctl reload httpd;定期审计日志与基线合规性,持续更新补丁。

0