{{< details >}}

  • Tier: 基础版, 专业版, 旗舰版
  • Offering: 私有化部署

{{< /details >}}

{{< alert type=”note” >}}

对于 JihuLab.com,可以查看JihuLab.com 的速率限制

{{< /alert >}}

限速是一种常用的技术,用于提高 Web 应用程序的安全性和耐用性。

例如,一个简单的脚本每秒可以发出数千次 Web 请求。这些请求可能是:

  • 恶意的。
  • 冷漠的。
  • 只是一个错误。

您的应用程序和基础设施可能无法应对这种负载。大多数情况下,可以通过限制来自单个 IP 地址的请求速率来缓解。

大多数暴力破解攻击同样可以通过限速来缓解。

{{< alert type=”note” >}}

API 请求的限速不会影响前端发出的请求,因为这些请求始终被计为 Web 流量。

{{< /alert >}}

可配置的限制

您可以在实例的管理员区域设置这些限速:

您可以使用 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 可能会阻止您的负载均衡器。在这种情况下,您必须:

  1. 配置 nginx[real_ip_trusted_addresses]。 这可以防止用户的 IP 被列为负载均衡器 IP。
  2. 将负载均衡器的 IP 地址列入白名单。
  3. 重新配置极狐GitLab:

    sudo gitlab-ctl reconfigure
    

使用 Redis 从 Rack Attack 中移除被阻止的 IP

要移除被阻止的 IP:

  1. 在生产日志中查找被阻止的 IP:

    grep "Rack_Attack" /var/log/gitlab/gitlab-rails/auth.log
    
  2. 由于黑名单存储在 Redis 中,您必须打开 redis-cli

    /opt/gitlab/embedded/bin/redis-cli -s /var/opt/gitlab/redis/redis.socket
    
  3. 您可以使用以下语法移除阻止,替换 <ip> 为被列入黑名单的实际 IP:

    del cache:gitlab:rack::attack:allow2ban:ban:<ip>
    
  4. 确认不再显示包含 IP 的键:

    keys *rack::attack*
    

    默认情况下,keys 命令被禁用

  5. 可选地,将 IP 添加到白名单 以防止其再次被列入黑名单。