Help us learn about your current experience with the documentation. Take the survey.

过滤出站请求

  • Tier: Free, Premium, Ultimate
  • Offering: GitLab Self-Managed, GitLab Dedicated

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

安全的 Webhook 和集成

拥有至少 Maintainer 角色的用户可以设置 webhooks,当项目或组发生特定更改时触发。触发后,会向 URL 发送一个 POST HTTP 请求。Webhook 通常配置为将数据发送到特定的外部 Web 服务,该服务会以适当的方式处理数据。

但是,Webhook 也可以配置为使用内部 Web 服务的 URL,而不是外部 Web 服务。当 Webhook 被触发时,运行在您的 GitLab 服务器或其本地网络中的非 GitLab Web 服务可能被利用。

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

  • 用户令牌
  • 仓库特定的令牌

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

  • GitLab 服务器
  • API 本身
  • 对于某些 Webhook,对该 Webhook 服务器本地网络中其他服务器的网络访问权限,即使这些服务在其他方面受到保护且无法从外部世界访问

Webhook 可以用于触发使用不需要身份验证的 Web 服务的破坏性命令。这些 Webhook 可以让 GitLab 服务器向删除资源的端点发送 POST HTTP 请求。

允许 Webhook 和集成访问本地网络

先决条件:

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

为防止不安全的内部 Web 服务被利用,不允许向以下本地网络地址发送 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. 选中 允许 Webhook 和集成访问本地网络 复选框。

防止系统钩子访问本地网络

先决条件:

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

System hooks 默认可以向本地网络发送请求。要防止系统钩子向本地网络发送请求:

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

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

先决条件:

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

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

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

过滤请求

先决条件:

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

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

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

选中此复选框后,对以下内容的请求仍不会被阻止:

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

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

允许出站请求访问特定的 IP 地址和域名

先决条件:

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

要允许出站请求访问特定的 IP 地址和域名:

  1. 在左侧边栏底部,选择 管理员
  2. 选择 设置 > 网络
  3. 展开 出站请求
  4. Webhook 和集成可以访问的本地 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;gitlab.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 被阻止

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

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

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

公共运行程序发布 URL 被阻止

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

要解决此问题,配置 GitLab 不再从 GitLab.com 获取运行程序发布版本数据

GitLab 订阅管理被阻止

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

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

GitLab 文档被阻止

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

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

GitLab Duo 功能被阻止

当您 过滤请求 时,尝试使用 GitLab Duo 功能 时可能会看到 401 错误。

当不允许向 GitLab 云服务器发送出站请求时,可能会发生此错误。要解决此错误:

  1. https://cloud.gitlab.com:443 添加到 允许列表
  2. 选择 保存更改
  3. 在 GitLab 能够访问 云服务器 后,手动同步您的许可证

有关更多信息,请参阅 GitLab Duo 代码建议故障排除文档