Apache2在Ubuntu上如何实现防盗刷
导读:Ubuntu上Apache2防盗刷的实用方案 一 核心思路与分层策略 在边缘或反向代理层优先拦截高频与恶意流量(如Cloudflare的WAF与速率限制),减少源站压力。 在Apache层叠加多层防护:按IP/会话的请求速率限制(mod_...
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
- 安装并启用mod_ratelimit,对全站或指定Location按请求速率限流(示例为每分钟60次,可按业务下调):
- 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’”
- 安装并启用ModSecurity(建议配合OWASP Core Rule Set),开启基础规则集,并可根据需要添加速率限制变量(示例为每IP每分钟5次、突发10,窗口60分钟):
- 日志分析与自动封禁
- 安装并配置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
- [DEFAULT]
- 重启:sudo systemctl restart fail2ban
- 安装并配置Fail2Ban,基于Apache日志自动封禁恶意IP(示例:10分钟窗口内3次失败即封600秒):
- 资源保护与访问控制
- 防盗链(仅允许本站与可信域名引用图片/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]
- RewriteEngine On
- 敏感路径加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
- <
Directory /var/www/html/admin>
- 基础安全头与信息泄露防护:
- 编辑 /etc/apache2/conf-enabled/security.conf:ServerTokens Prod;ServerSignature Off。
- 防盗链(仅允许本站与可信域名引用图片/CSS/JS等静态资源):
三 关键参数调优建议
- 速率限制:API/登录等敏感端点建议更严格(如每分钟30–60次),静态资源可适当放宽;突发(burst)用于容忍短时合法峰值,避免误杀正常用户。
- 封禁窗口:Fail2Ban 的 bantime/findtime/maxretry 建议从“短窗口+少重试”起步(如600/600/3),观察误报后再调整;对持续攻击可逐步加严。
- 日志与监控:持续观察 /var/log/apache2/access.log 与 error.log,结合 Fail2Ban 与监控告警,及时发现异常路径、UA、Referer 与来源IP的异常聚集。
四 验证与运维要点
- 验证规则生效:对限流与封禁策略,使用压测工具(如 ab/wrk)或脚本模拟高频请求,确认返回 429/403 或连接被拒;对防盗链,用外站页面引用资源验证是否被拦截。
- 避免误封:放行公司/合作方出口IP与健康检查IP;对搜索引擎与可信爬虫放行(可在 WAF/防火墙层做白名单)。
- 维护与升级:定期更新 Apache、模块与规则集(如OWASP CRS),并回放近期访问日志验证新规则的有效性与误报率。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Apache2在Ubuntu上如何实现防盗刷
本文地址: https://pptw.com/jishu/773946.html
