速率限制

速率限制是一种用于提高 Web 应用程序的安全性和持久性的常用技术。

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

  • 恶意的。
  • 冷漠的
  • 只是一个 bug。

您的应用程序和基础架构可能无法应对负载。有关更多详细信息,请参阅拒绝服务攻击。 大多数情况可以通过限制来自单个 IP 地址的请求速率来缓解。

大多数蛮力攻击同样可以通过速率限制得到缓解。

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

可配置的限制

您可以在实例的管理中心设置以下速率限制:

您可以使用 Rails 控制台设置以下速率限制:

Git 和容器镜像库的身份验证禁止失败

如果在 3 分钟内从单个 IP 地址收到 30 个失败的身份验证请求,极狐GitLab 会在 1 小时内返回 HTTP 状态代码 403。这仅适用于:

  • Git 请求
  • 容器镜像库 (/jwt/auth) 请求:

此限制:

  • 由成功验证的请求重置。例如,29 个失败的身份验证请求后跟 1 个成功的请求,然后再有 29 个失败的身份验证请求不会触发禁令。
  • 不适用于通过 gitlab-ci-token 验证的 JWT 请求。
  • 默认禁用。

没有提供响应 headers。

要避免被限制,您可以:

对于配置信息,查看Omnibus 极狐GitLab 配置选项

不可配置的限制

  • 对于 :user_id/status:id/following:id/followers:user_id/keysid/keys/:key_id:id/gpg_keys:id/gpg_keys/:key_id 端点的速率限制引入于极狐GitLab 17.1,使用名为 rate_limiting_user_endpoints功能标志。默认禁用。
此功能的可用性受控于功能标志。更多信息,可查看历史。这些端点仅未测试所用,还未生产就绪。 <!– ### 使用 SSH 的 Git 操作
  • 引入于 14.7 版本。功能标志为 rate_limit_gitlab_shell。默认禁用。
  • 在 SaaS 和私有化部署版上启用于 14.8 版本。

极狐GitLab 限制用户账户和项目使用 SSH 的 Git 操作速率。如果用户对项目的 Git 操作请求超过速率限制,系统会丢弃该用户对该项目的进一步连接请求。

速率限制适用于 Git 命令 (plumbing) 级别。 每个命令的速率限制为每分钟 600 次。 例如:

  • git push 的速率限制为每分钟 600 次。
  • git pull 有自己的每分钟 600 次的速率限制。

因为 git-upload-packgit pullgit clone 共享相同的命令,所以它们共享一个速率限制。

此速率限制的每分钟请求阈值不可配置。私有化部署版用户可以通过禁用功能标志 Feature.disable(:rate_limit_gitlab_shell) 来禁用此速率限制。 –>

仓库归档

下载仓库归档的速率限制可用。该限制适用于项目以及通过 UI 或 API 启动下载的用户。

速率限制是每个用户每分钟 5 个请求。

Webhook 测试

测试 Webhook 有一个速率限制,可防止滥用 Webhook 功能。

速率限制是每个用户每分钟 5 个请求。

用户注册

/users/sign_up 端点上的每个 IP 地址都有一个速率限制。这是为了减轻滥用端点的尝试,例如,大量发现正在使用的用户名或电子邮件地址。

速率限制是每个 IP 地址每分钟 20 次调用。

用户状态

:user_id/status 端点上有一个速率限制。这是为了降低对该端点进行滥用的风险。

速率限制 是每个 IP 地址每分钟 240 次调用。

用户跟随

对于 :id/following 端点的每个 IP 地址有速率限制。这是为了减轻滥用端点的尝试。

速率限制 是每个 IP 地址每分钟 100 次调用。

用户跟随者

对于 :id/followers 端点的每个 IP 地址有速率限制。这是为了减轻滥用端点的尝试。

速率限制 是每个 IP 地址每分钟 100 次调用。

用户 keys

对于 :user_id/keys 端点的每个 IP 地址有速率限制。这是为了减轻滥用端点的尝试。

速率限制 是每个 IP 地址每分钟 120 次调用。

用户指定的 key

对于 id/keys/:key_id 端点的每个 IP 地址有速率限制。这是为了减轻滥用端点的尝试。

速率限制 是每个 IP 地址每分钟 120 次调用。

用户 GPG keys

对于 :id/gpg_keys 端点的每个 IP 地址有速率限制。这是为了减轻滥用端点的尝试。

速率限制 是每个 IP 地址每分钟 120 次调用。

用户指定 GPG keys

对于 :id/gpg_keys/:key_id 端点的每个 IP 地址有速率限制。这是为了减轻滥用端点的尝试。

速率限制 是每个 IP 地址每分钟 120 次调用。

更新用户名

对于用户名更改的频率是有速率限制的。此限制是为了防止滥用该功能,例如,大规模发现哪些用户名正在使用。

速率限制 是每个用户每分钟 10 次调用。

用户名存在

对于内部端点 /users/:username/exists 有速率限制,用于在注册时检查所选用户名是否已被占用。这是为了降低滥用该功能的风险,例如,大规模发现哪些用户名正在使用。

速率限制 是每个 IP 地址每分钟 20 次调用。

项目作者 API 端点

  • 引入于极狐GitLab 15.7,使用名为 ci_enforce_rate_limits_jobs_api功能标志。默认禁用。
  • 在极狐GitLab 16.0 中 GA。功能标志 ci_enforce_rate_limits_jobs_api 被移除。

对于 project/:id/jobs 端点有速率限制,实施此限制是为了防止对该端点的滥用。

速率限制 默认为每个用户每分钟 600 次调用。您可以配置速率限制

AI 操作

  • 引入于极狐GitLab 16.0。

对于 GraphQL aiAction 突变存在速率限制,实施此限制是为了防止对该端点的滥用。

速率限制 是每 8 小时每个用户 160 次调用。

使用 API 删除成员

  • 引入于极狐GitLab 16.0。

对于使用 API 端点移除项目或群组成员有速率限制,/groups/:id/members/project/:id/members

速率限制 是每分钟 60 次删除。

通知邮件

  • 引入于极狐GitLab 17.1,使用名为 rate_limit_notification_emails 的功能标志。默认禁用。
  • 在极狐GitLab 17.2 中 GA。功能标志 rate_limit_notification_emails 被移除。

对于与项目或群组相关的通知邮件有速率限制。

速率限制 是每个项目或群组每 24 小时每个用户 1,000 个通知。

FogBugz 导入

  • 引入于极狐GitLab 17.6。

针对从 FogBugz 导入项目的速率限制。

速率限制 是每个用户每分钟 1 次导入。

故障排查

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 命令禁用。

  1. 或者,将 IP 加入白名单,防止它再次被列入黑名单。