{{< details >}}

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

{{< /details >}}

为了防止数据丢失和泄露的风险,极狐GitLab 管理员现在可以使用出站请求过滤控件来限制极狐GitLab 实例发出的某些出站请求。

安全的 webhook 和集成

至少拥有维护者角色的用户可以设置 webhook,当项目或群组中发生特定变化时触发。当触发时,会向一个 URL 发送一个 POST HTTP 请求。webhook 通常配置为将数据发送到特定的外部网络服务,这些服务以适当的方式处理数据。

然而,webhook 可以配置为内部网络服务的 URL,而不是外部网络服务。当 webhook 被触发时,运行在极狐GitLab 服务器或其本地网络中的非极狐GitLab 网络服务可能会被利用。

Webhook 请求是由极狐GitLab 服务器本身发出的,并使用每个钩子的单个可选密钥进行授权,而不是:

  • 用户令牌。
  • 仓库专用令牌。

因此,这些请求可能拥有比预期更广泛的访问权限,包括访问托管 webhook 的服务器上运行的所有内容,包括:

  • 极狐GitLab 服务器。
  • API 本身。
  • 对于某些 webhooks,网络访问其他服务器在该 webhook 服务器的本地网络中,即使这些服务在其他情况下受到保护并且从外部世界无法访问。

Webhooks 可以用于触发使用不需要身份验证的网络服务的破坏性命令。这些 webhooks 可以让极狐GitLab 服务器向删除资源的端点发出 POST HTTP 请求。

允许从 webhooks 和集成向本地网络发出请求

先决条件:

  • 您必须拥有实例的管理员访问权限。

为了防止不安全的内部网络服务被利用,所有 webhook 和集成请求到以下本地网络地址是不允许的:

  • 当前极狐GitLab 实例服务器地址。
  • 私有网络地址,包括 127.0.0.1::10.0.0.010.0.0.0/8172.16.0.0/12192.168.0.0/16,以及 IPv6 站点本地 (ffc0::/10) 地址。

要允许访问这些地址:

  1. 在左侧边栏底部,选择 管理员
  2. 选择 设置 > 网络
  3. 展开 出站请求
  4. 选择 允许从 webhooks 和集成向本地网络发出请求 复选框。

防止从系统钩子向本地网络发出请求

先决条件:

  • 您必须拥有实例的管理员访问权限。

系统钩子 默认情况下可以向本地网络发出请求。要防止系统钩子请求向本地网络发出请求:

  1. 在左侧边栏底部,选择 管理员
  2. 选择 设置 > 网络
  3. 展开 出站请求
  4. 清除 允许从系统钩子向本地网络发出请求 复选框。

强制执行 DNS 重绑定攻击保护

先决条件:

  • 您必须拥有实例的管理员访问权限。

DNS 重绑定是一种使恶意域名解析为内部网络资源以绕过本地网络访问限制的技术。极狐GitLab 默认启用了对此攻击的保护。要禁用此保护:

  1. 在左侧边栏底部,选择 管理员
  2. 选择 设置 > 网络
  3. 展开 出站请求
  4. 清除 强制执行 DNS 重绑定攻击保护 复选框。

过滤请求

{{< history >}}

  • 在极狐GitLab 15.10 中引入。

{{< /history >}}

先决条件:

  • 您必须拥有极狐GitLab 实例的管理员访问权限。

通过阻止许多请求来过滤请求:

  1. 在左侧边栏底部,选择 管理员
  2. 选择 设置 > 网络
  3. 展开 出站请求
  4. 选择 阻止所有请求,除非是允许列表中定义的 IP 地址、IP 范围和域名 复选框。

选中此复选框后,以下请求仍然不会被阻止:

  • 核心服务如 Geo、Git、极狐GitLab Shell、Gitaly、PostgreSQL 和 Redis。
  • 对象存储。
  • 允许列表中的 IP 地址和域名。

此设置仅由极狐GitLab 主应用程序遵循,因此其他服务如 Gitaly 仍然可以发出违反规则的请求。此外,极狐GitLab 的某些区域不遵循出站过滤规则。

允许向特定 IP 地址和域名发出出站请求

先决条件:

  • 您必须拥有实例的管理员访问权限。

要允许向特定 IP 地址和域名发出出站请求:

  1. 在左侧边栏底部,选择 管理员
  2. 选择 设置 > 网络
  3. 展开 出站请求
  4. 钩子和集成可以访问的本地 IP 地址和域名 中,输入您的 IP 地址和域名。

条目可以:

  • 用分号、逗号或空格(包括换行)分隔。
  • 采用不同格式,如主机名、IP 地址、IP 地址范围。支持 IPv6。包含 Unicode 字符的主机名应使用应用程序中的国际化域名 (IDNA) 编码。
  • 包含端口。例如,127.0.0.1:8080 只允许连接到 127.0.0.1 的 8080 端口。如果未指定端口,则允许该 IP 地址或域上的所有端口。IP 地址范围允许该范围内所有 IP 地址上的所有端口。
  • 条目数不超过 1000 个,每个条目不超过 255 个字符。
  • 不包含通配符(例如,*.example.com)。

例如:

example.com;jihulab.example.com
127.0.0.1,1:0:0:0:0:0:0:1
127.0.0.0/8 1:0:0:0:0:0:0:0/124
[1:0:0:0:0:0:0:1]:8080
127.0.0.1:8080
example.com:8080

故障排除

当过滤出站请求时,您可能会遇到以下问题。

配置的 URL 被阻止

您只能选择 阻止所有请求,除非是允许列表中定义的 IP 地址、IP 范围和域名 复选框,如果没有配置的 URL 会被阻止。否则,您可能会收到一条错误消息,指出 URL 被阻止。

如果您无法启用此设置,请执行以下操作之一:

  • 禁用 URL 设置。
  • 配置另一个 URL,或将 URL 设置留空。
  • 将配置的 URL 添加到 允许列表

公共 runner 发布 URL 被阻止

大多数极狐GitLab 实例的 public_runner_releases_url 设置为 https://gitlab.com/api/v4/projects/gitlab-org%2Fgitlab-runner/releases,这可能会阻止您 过滤请求

要解决此问题,配置极狐GitLab 不再从 JihuLab.com 获取 runner 版本数据

极狐GitLab 订阅管理被阻止

当您 过滤请求时,极狐GitLab 订阅管理 被阻止。

要解决此问题,将 customers.gitlab.com:443 添加到 允许列表

极狐GitLab 文档被阻止

当您 过滤请求时,您可能会收到错误消息,指出 帮助页面文档基本 URL 被阻止:请求到不在允许列表中的主机和 IP 地址被拒绝。要解决此错误:

  1. 恢复更改,以便不再出现错误消息 帮助页面文档基本 URL 被阻止
  2. 添加 docs.gitlab.com,或 重定向帮助文档页面 URL允许列表
  3. 选择 保存更改