在阿里云 ECS 上设置 IP 访问频率限制,通常有以下几种主流方案,可根据业务场景选择:
✅ 方案一:使用 安全组 + 云防火墙(推荐用于基础防护)
- 适用场景:简单限流、防扫描/暴力破解。
- 操作方式:
- 登录 阿里云控制台 → 进入目标 ECS 实例 → 安全组。
- 添加一条入方向规则,协议选
TCP/UDP,端口设为应用端口(如 80/443)。 - 源地址填具体 IP 或 CIDR,但安全组本身不支持“频率限制”(仅支持白名单/黑名单)。
⚠️ 注意:安全组无法实现“每分钟 N 次请求”这类频率控制,需结合其他工具。
✅ 方案二:在 Web 服务器层做限流(最常用 & 灵活)
▶ Nginx 限流(以 limit_req 为例)
http {
# 定义限流区域:10MB 内存,按 IP 区分,1 秒内允许 5 个请求
limit_req_zone $binary_remote_addr zone=ip_limit:10m rate=5r/s;
server {
listen 80;
server_name example.com;
location / {
limit_req zone=ip_limit burst=10 nodelay;
# 可选:返回自定义错误页
limit_req_status 429;
proxy_pass http://backend;
}
}
}
✅ 优点:轻量、无需额外服务;
❌ 缺点:重启 Nginx 生效,多节点需统一配置。
▶ Apache 限流(mod_ratelimit / mod_evasive)
# 安装 mod_evasive
a2enmod evasive
# /etc/apache2/conf-available/evasive.conf
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
</IfModule>
重启后生效:systemctl restart apache2
✅ 方案三:使用 WAF(Web 应用防火墙)—— 阿里云官方推荐
- 优势:
- 图形化配置 IP 频率策略(如:单 IP 1 分钟 ≤ 60 次请求)
- 自动识别异常流量(CC 攻击防护)
- 支持地域/IP 段聚合规则
- 与 CDN 联动,边缘节点即拦截
- 操作步骤:
- 开通 WAF(免费版含基础 CC 防护)
- 将域名接入 WAF(CNAME 解析)
- 进入「防护策略」→「CC 防护」→ 创建规则:
- 匹配条件:IP =
$client_ip - 动作:限流(如:1 分钟内最多 100 次)
- 处置:返回 403 / 验证码 / 跳转
- 匹配条件:IP =
- 启用并测试
💡 提示:若 ECS 直接暴露公网 IP(无域名),可配合 SLB + WAF 或 API 网关 实现类似效果。
✅ 方案四:脚本级限流(适合临时/开发环境)
- 用 Python/Shell 监控
/var/log/nginx/access.log,发现某 IP 高频则动态封禁:# 示例:每 10 秒检查一次,单 IP 超过 100 次/分钟则加入 iptables 黑名单 while true; do awk '{print $1}' access.log | sort | uniq -c | while read count ip; do if [ "$count" -gt 100 ]; then iptables -A INPUT -s "$ip" -j DROP fi done sleep 10 done⚠️ 注意:生产环境慎用,易误伤;建议结合 Redis 做分布式计数。
🔒 最佳实践建议
| 场景 | 推荐方案 |
|---|---|
| 个人博客/小站 | Nginx limit_req |
| 企业官网/API | WAF CC 防护 + Nginx 二级限流 |
| 高并发 API 服务 | API 网关限流 + Redis 令牌桶算法 |
| 防暴力破解 SSH | 安全组 + fail2ban(非 HTTP 限流) |
需要我帮你生成一份针对你具体技术栈(如:Nginx 版本、是否用 K8s、是否已接 CDN)的完整配置模板吗?
CLOUD技术笔记