{{< details >}}
- Tier: 基础版, 专业版, 旗舰版
- Offering: 私有化部署
{{< /details >}}
{{< alert type=”note” >}}
对于 JihuLab.com,可以查看JihuLab.com 的速率限制。
{{< /alert >}}
限速是一种常用的技术,用于提高 Web 应用程序的安全性和耐用性。
例如,一个简单的脚本每秒可以发出数千次 Web 请求。这些请求可能是:
- 恶意的。
- 冷漠的。
- 只是一个错误。
您的应用程序和基础设施可能无法应对这种负载。大多数情况下,可以通过限制来自单个 IP 地址的请求速率来缓解。
大多数暴力破解攻击同样可以通过限速来缓解。
{{< alert type=”note” >}}
API 请求的限速不会影响前端发出的请求,因为这些请求始终被计为 Web 流量。
{{< /alert >}}
可配置的限制
您可以在实例的管理员区域设置这些限速:
- 导入/导出限速
- 议题限速
- 备注限速
- 受保护路径
- 原始端点限速
- 用户和 IP 限速
- 软件包注册表限速
- Git LFS 限速
- Git SSH 操作限速
- 文件 API 限速
- 弃用的 API 限速
- 极狐GitLab Pages 限速
- 流水线限速
- 事件管理限速
- 项目 API 限速
- 群组 API 限速
- 用户 API 限速
- 组织 API 限速
您可以使用 ApplicationSettings API 设置这些限速:
您可以使用 Rails 控制台设置这些限速:
Git 和容器注册表的身份验证失败禁令
极狐GitLab 返回 HTTP 状态码 403
持续 1 小时,如果在 3 分钟内从单个 IP 地址接收到 30 次身份验证失败请求。此限制仅适用于组合:
- Git 请求。
- 容器注册表 (
/jwt/auth
) 请求。
此限制:
- 通过成功身份验证的请求重置。例如,29 次身份验证失败请求,紧接着 1 次成功请求,然后又 29 次失败请求,将不会触发禁令。
- 不适用于通过
gitlab-ci-token
进行身份验证的 JWT 请求。 - 默认情况下禁用。
未提供响应头。
为了避免限速,您可以:
- 错开自动流水线的执行。
- 为身份验证失败尝试配置指数退避和重试。
有关配置信息,请参见Linux 软件包配置选项。
不可配置的限制
仓库存档
下载仓库存档有一个限速。该限制适用于项目和通过 UI 或 API 启动下载的用户。
限速为每用户每分钟 5 次请求。
Webhook 测试
测试 webhooks有一个限速,以防止滥用 webhook 功能。
限速为每用户每分钟 5 次请求。
用户注册
/users/sign_up
端点有一个每个 IP 地址的限速。这是为了减轻企图滥用该端点的行为。例如,大规模发现用户名或使用中的电子邮件地址。
限速为每个 IP 地址每分钟 20 次调用。
更新用户名
用户名更改频率有一个限速。此限制是为了减轻滥用该功能的行为。例如,大规模发现使用中的用户名。
限速为每个经过身份验证的用户每分钟 10 次调用。
用户名存在
内部端点 /users/:username/exists
有一个限速,用于在注册时检查所选用户名是否已被使用。这是为了减轻滥用风险,例如大规模发现使用中的用户名。
限速为每个 IP 地址每分钟 20 次调用。
项目作业 API 端点
{{< history >}}
- 引入于极狐GitLab 15.7,使用名为
ci_enforce_rate_limits_jobs_api
的功能标志。默认禁用。 - 在极狐GitLab 16.0 中 GA。功能标志
ci_enforce_rate_limits_jobs_api
被移除。
{{< /history >}}
端点 project/:id/jobs
有一个限速,以减少检索作业时的超时。
限速默认为每个经过身份验证的用户 600 次调用。您可以配置限速。
AI 操作
{{< history >}}
- 引入于极狐GitLab 16.0。
{{< /history >}}
GraphQL aiAction
变异有一个限速,以防止滥用此端点。
限速为每个经过身份验证的用户每 8 小时 160 次调用。
使用 API 删除成员
{{< history >}}
- 引入于极狐GitLab 16.0。
{{< /history >}}
使用 API 端点删除项目或群组成员 /groups/:id/members
或 /project/:id/members
有一个限速。
限速为每分钟 60 次删除。
通知邮件
{{< history >}}
- 引入于极狐GitLab 17.1,使用名为
rate_limit_notification_emails
的功能标志。默认禁用。 - 在极狐GitLab 17.2 中 GA。功能标志
rate_limit_notification_emails
被移除。
{{< /history >}}
与项目或群组相关的通知邮件有一个限速。
限速为每个项目或群组每个用户每 24 小时 1,000 次通知。
FogBugz 导入
{{< history >}}
- 引入于极狐GitLab 17.6。
{{< /history >}}
从 FogBugz 触发项目导入有一个限速。
限速为每个用户每分钟 1 次触发导入。
提交差异文件
展开提交差异文件 (/[group]/[project]/-/commit/[:sha]/diff_files?expanded=1
) 有一个限速,以防止滥用此端点。
限速为每个用户(经过身份验证)或每个 IP 地址(未经身份验证)每分钟 6 次请求。
变更日志生成
:id/repository/changelog
端点每个用户每个项目有一个限速。这是为了减轻企图滥用该端点的行为。限速在 GET 和 POST 操作之间共享。
限速为每个用户每个项目每分钟 5 次调用。
故障排除
Rack Attack 将负载均衡器列入黑名单
如果所有流量似乎都来自负载均衡器,Rack Attack 可能会阻止您的负载均衡器。在这种情况下,您必须:
-
配置
nginx[real_ip_trusted_addresses]
。 这可以防止用户的 IP 被列为负载均衡器 IP。 - 将负载均衡器的 IP 地址列入白名单。
-
重新配置极狐GitLab:
sudo gitlab-ctl reconfigure
使用 Redis 从 Rack Attack 中移除被阻止的 IP
要移除被阻止的 IP:
-
在生产日志中查找被阻止的 IP:
grep "Rack_Attack" /var/log/gitlab/gitlab-rails/auth.log
-
由于黑名单存储在 Redis 中,您必须打开
redis-cli
:/opt/gitlab/embedded/bin/redis-cli -s /var/opt/gitlab/redis/redis.socket
-
您可以使用以下语法移除阻止,替换
<ip>
为被列入黑名单的实际 IP:del cache:gitlab:rack::attack:allow2ban:ban:<ip>
-
确认不再显示包含 IP 的键:
keys *rack::attack*
默认情况下,
keys
命令被禁用。 -
可选地,将 IP 添加到白名单 以防止其再次被列入黑名单。