温馨提示×

如何在Ubuntu上配置Apache防盗刷

小樊
38
2025-12-03 04:47:03
栏目: 智能运维

Ubuntu上配置Apache防盗刷的实用方案

一 核心思路与适用场景

  • 目标是抑制刷接口、撞库、爬虫抓取、资源盗链等行为,建议采用“速率限制 + 异常拦截 + 身份校验 + 资源保护”的多层策略,既减少误杀,又提升拦截效率。

二 快速落地步骤

  • 启用速率限制模块并配置全局速率

    • 安装模块:sudo apt-get install libapache2-mod-ratelimit
    • 在虚拟主机或全局配置中加入:
      <IfModule mod_ratelimit.c>
          # 每个客户端IP每分钟最多 60 次请求
          SetEnv rate-limit 60/minute
      </IfModule>
      
    • 说明:该方式对整站或特定 Location 生效,适合作为第一道“闸门”。
  • 安装并配置 mod_evasive 防刷与防DoS

    • 安装:sudo apt-get install libapache2-mod-evasive
    • 配置(/etc/apache2/mods-enabled/evasive.conf 或相应 Include 文件):
      <IfModule mod_evasive20.c>
          DOSHashTableSize    3097
          DOSPageCount        2      # 同一页面在 DOSPageInterval 内的请求上限
          DOSSiteCount        50     # 同一站点在 DOSSiteInterval 内的请求上限
          DOSPageInterval     1      # 单位:秒
          DOSSiteInterval     1      # 单位:秒
          DOSBlockingPeriod   600    # 封禁时长:单位秒(建议至少 10 分钟)
      </IfModule>
      
    • 启用并重启:sudo a2enmod evasive && sudo systemctl restart apache2
    • 说明:对“短时间高频访问同一资源”的场景非常有效。
  • 部署 Fail2Ban 自动封禁恶意来源

    • 安装:sudo apt-get install fail2ban
    • 配置 /etc/fail2ban/jail.local:
      [DEFAULT]
      bantime  = 600
      findtime = 600
      maxretry = 3
      
      [apache-auth]
      enabled  = true
      filter   = apache-auth
      action   = iptables-multiport[name=Apache, port="http,https", protocol=tcp]
      logpath  = /var/log/apache2/access.log
      
    • 重启:sudo systemctl restart fail2ban
    • 说明:基于日志的自动化封禁,可与 mod_evasive 形成互补。
  • 保护敏感接口与后台

    • HTTP 基本认证(示例对 /var/www/html/protected 目录):
      <Directory /var/www/html/protected>
          AuthType Basic
          AuthName "Restricted Area"
          AuthUserFile /etc/apache2/.htpasswd
          Require valid-user
      </Directory>
      
      创建用户:sudo htpasswd -c /etc/apache2/.htpasswd username
    • 验证码(reCAPTCHA,适用于登录/注册/评论等表单)
      • 前端表单加入:
        <div class="g-recaptcha" data-sitekey="YOUR_SITE_KEY"></div>
        <script src="https://www.google.com/recaptcha/api.js" async defer></script>
        
      • 服务端校验(PHP 示例):
        $response = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=YOUR_SECRET_KEY&response=".$_POST['g-recaptcha-response']);
        $data = json_decode($response);
        if ($data->success) { /* 处理业务 */ } else { /* 拒绝请求 */ }
        
    • 说明:对“撞库、批量提交”类刷单行为效果显著。
  • 资源防盗链(保护图片、视频、下载)

    • 启用模块:sudo a2enmod rewrite
    • 在虚拟主机或 .htaccess 中加入:
      RewriteEngine On
      RewriteCond %{HTTP_REFERER} !^https?://(www\.)?yourdomain\.com [NC]
      RewriteCond %{HTTP_REFERER} !^https?://(www\.)?cdn\.yourdomain\.com [NC]
      RewriteRule \.(jpg|jpeg|png|gif|ico|css|js)$ - [F,L]
      
    • 说明:Referer 可被伪造,建议仅作为辅助手段,关键资源使用签名URL/临时令牌更安全。

三 进阶可选方案

  • 使用 ModSecurity(WAF) 做更细粒度策略与速率限制
    • 安装:sudo apt-get install libapache2-mod-security2
    • 启用:sudo a2enmod security2 && sudo systemctl restart apache2
    • 可在 CRS 或自定义规则中加入速率限制与异常特征拦截,适合对应用层攻击与刷量做深度防护。

四 调参与运维建议

  • 阈值设置遵循“先宽后严、逐步收敛”原则:上线初期将速率与封禁时间设得宽松(如每分钟几十次、封禁10 分钟),观察 /var/log/apache2/access.log 与业务指标后再逐步收紧,避免误杀搜索引擎或正常用户。
  • 对 CDN 或反向代理部署:真实客户端 IP 通常在 X-Forwarded-For 头中,需确保 Fail2Ban/应用层规则正确识别真实 IP,避免被伪造来源绕过。
  • 对高并发场景优先使用“边缘限流 + 源站兜底”(如 CDN/WAF 自带速率限制),源站再用 mod_ratelimit/mod_evasive 做第二道防护,降低源站压力。

0