温馨提示×

Apache2在Ubuntu上如何实现防盗刷

小樊
31
2025-12-17 00:25:47
栏目: 智能运维

Ubuntu上Apache2防盗刷的实用方案

一 核心思路与分层策略

  • 在边缘或反向代理层优先拦截高频与恶意流量(如Cloudflare的WAF与速率限制),减少源站压力。
  • 在Apache层叠加多层防护:按IP/会话的请求速率限制(mod_ratelimit、mod_evasive)、应用层规则与异常请求拦截(ModSecurity/WAF)、对敏感路径的身份认证与访问控制。
  • 对资源滥用与内容盗用,使用防盗链User-Agent基础过滤;对暴力破解与异常登录,结合日志分析自动封禁(Fail2Ban)。

二 推荐组合与配置步骤

  • 边缘与CDN层
    • 使用Cloudflare开启“Under Attack Mode”、速率限制与WAF规则,隐藏源站IP,显著降低刷量与CC攻击到达源站的概率。
  • 速率限制与突发控制
    • 安装并启用mod_ratelimit,对全站或指定Location按请求速率限流(示例为每分钟60次,可按业务下调):
      • 安装与启用:sudo apt-get update && sudo apt-get install libapache2-mod-ratelimit && sudo a2enmod ratelimit && sudo systemctl restart apache2
      • 配置示例(放在 VirtualHost 或 Location 中):
        • Ratelimit on RatelimitRequests 60 RatelimitInterval 60
    • 安装并启用mod_evasive,对单页/整站在短时间窗口内的高频请求进行封禁(示例阈值可按业务调小):
      • 安装与启用:sudo apt-get install libapache2-mod-evasive && sudo a2enmod evasive && sudo systemctl restart apache2
      • 配置示例(/etc/apache2/mods-enabled/evasive.conf 或 conf-available/evasive.conf 后 a2enconf evasive):
        • DOSHashTableSize 3097 DOSPageCount 2 DOSSiteCount 50 DOSPageInterval 1 DOSSiteInterval 1 DOSBlockingPeriod 10
  • Web应用防火墙与协议异常拦截
    • 安装并启用ModSecurity(建议配合OWASP Core Rule Set),开启基础规则集,并可根据需要添加速率限制变量(示例为每IP每分钟5次、突发10,窗口60分钟):
      • 安装与启用:sudo apt-get update && sudo apt-get install libapache2-mod-security2 && sudo a2enmod security2 && sudo systemctl restart apache2
      • 规则示例(在 modsecurity.conf 或自定义规则中按需启用):
        • SecAction “id:1000001,phase:1,nolog,pass,ctl:ruleEngine=On,setvar:‘ip.req_rate_limit=5/m’,setvar:ip.req_rate_limit_burst=10,expirevar:‘ip.req_rate_limit=60m’”
  • 日志分析与自动封禁
    • 安装并配置Fail2Ban,基于Apache日志自动封禁恶意IP(示例:10分钟窗口内3次失败即封600秒):
      • 安装: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
  • 资源保护与访问控制
    • 防盗链(仅允许本站与可信域名引用图片/CSS/JS等静态资源):
      • 启用模块:sudo a2enmod rewrite
      • 虚拟主机或 .htaccess 示例:
        • RewriteEngine On
          RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?yourdomain.com [NC]
          RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?trusted.com [NC]
          RewriteCond %{HTTP_REFERER} !^$
          RewriteRule .(jpg|jpeg|png|gif|ico|css|js)$ - [F,L]
    • 敏感路径加HTTP基本认证(示例保护 /var/www/html/admin):
      • 创建密码文件:sudo htpasswd -c /etc/apache2/.htpasswd admin
      • 配置:
        • <Directory /var/www/html/admin>
          AuthType Basic
          AuthName “Restricted Area”
          AuthUserFile /etc/apache2/.htpasswd
          Require valid-user
    • 基础安全头与信息泄露防护:
      • 编辑 /etc/apache2/conf-enabled/security.conf:ServerTokens Prod;ServerSignature Off。

三 关键参数调优建议

  • 速率限制:API/登录等敏感端点建议更严格(如每分钟30–60次),静态资源可适当放宽;突发(burst)用于容忍短时合法峰值,避免误杀正常用户。
  • 封禁窗口:Fail2Ban 的 bantime/findtime/maxretry 建议从“短窗口+少重试”起步(如600/600/3),观察误报后再调整;对持续攻击可逐步加严。
  • 日志与监控:持续观察 /var/log/apache2/access.logerror.log,结合 Fail2Ban 与监控告警,及时发现异常路径、UA、Referer 与来源IP的异常聚集。

四 验证与运维要点

  • 验证规则生效:对限流与封禁策略,使用压测工具(如 ab/wrk)或脚本模拟高频请求,确认返回 429/403 或连接被拒;对防盗链,用外站页面引用资源验证是否被拦截。
  • 避免误封:放行公司/合作方出口IP与健康检查IP;对搜索引擎与可信爬虫放行(可在 WAF/防火墙层做白名单)。
  • 维护与升级:定期更新 Apache、模块与规则集(如OWASP CRS),并回放近期访问日志验证新规则的有效性与误报率。

0