过滤出站请求 (BASIC SELF)
为了防止数据丢失和暴露的风险,极狐GitLab 管理员现在可以使用出站请求过滤控件,限制极狐GitLab 实例发出的某些出站请求。
安全的 Webhook 和集成
至少具有维护者角色的用户,可以设置在项目或群组中发生特定更改时触发的 Webhook。触发时,会向 URL 发送一个 POST
HTTP 请求。Webhook 通常配置为将数据发送到特定的外部 Web 服务,该服务以适当的方式处理数据。
但是,可以使用内部 Web 服务而不是外部 Web 服务的 URL 配置 Webhook。 当 Webhook 被触发时,运行在极狐GitLab 服务器或其本地网络中的非极狐GitLab Web 服务可能会被利用。
Webhook 请求由极狐GitLab 服务器本身发出,每个钩子使用一个可选的 secret 令牌进行授权,而不是:
- 用户令牌。
- 特定仓库的令牌。
因此,这些请求可能具有比预期更广泛的访问权限,包括对托管 Webhook 的服务器上运行的所有内容的访问权限,包括:
- 极狐GitLab 服务器。
- API 本身。
- 对于某些 Webhook,网络访问该 Webhook 服务器的本地网络中的其他服务器,即使这些服务受到保护并且无法从外部访问。
Webhook 可用于不需要身份验证的 Web 服务触发破坏性命令。这些 Webhook 可以让极狐GitLab 服务器向删除资源的端点发出 POST
HTTP 请求。
允许来自 Webhook 和集成对本地网络的请求
先决条件:
- 您必须具有实例的管理员访问权限。
为防止利用不安全的内部 Web 服务,不允许对以下本地网络地址的所有 Webhook 请求:
- 当前极狐GitLab 实例服务器地址。
- 私网地址,包括
127.0.0.1
、::1
、0.0.0.0
、10.0.0.0/8
、172.16.0.0/12
、192.168.0.0/16
和 IPv6 站点本地(ffc0::/10
)地址。
要允许访问这些地址:
- 在左侧边栏中,选择 搜索或转到。
- 选择 管理中心。
- 在左侧边栏中,选择 设置 > 网络。
- 展开 出站请求。
- 选中 允许来自 Webhook 和集成对本地网络的请求 复选框。
阻止系统钩子对本地网络的请求
先决条件:
- 您必须具有实例的管理员访问权限。
系统钩子默认允许向本地网络发出请求,因为它们是由管理员设置的。要阻止系统钩子请求到本地网络:
- 在左侧边栏中,选择 搜索或转到。
- 选择 管理中心。
- 在左侧边栏中,选择 设置 > 网络。
- 展开 出站请求。
- 清除 允许系统钩子向本地网络发送请求 复选框。
过滤请求
引入于 15.10 版本,功能标志为
deny_all_requests_except_allowed
。默认禁用。
deny_all_requests_except_allowed
。在 SaaS 版上,此功能不可用。先决条件:
- 您必须具有实例的管理员访问权限。
通过阻止许多请求来过滤请求:
- 在左侧边栏中,选择 搜索或转到。
- 选择 管理中心。
- 在左侧边栏中,选择 设置 > 网络。
- 展开 出站请求。
- 选择 阻止所有请求,但白名单中定义的 IP 地址、IP 范围和域名除外复选框。
选中此复选框后,仍不会阻止对以下内容的请求:
- 核心服务,如 Geo、Git、GitLab Shell、Gitaly、PostgreSQL 和 Redis。
- 对象存储。
- 白名单中的 IP 地址和域名。
此设置仅适用于极狐GitLab 主应用程序,因此 Gitaly 等其他服务仍然可以发出违反规则的请求。此外,某些部分不遵守出站过滤规则。
允许对特定 IP 地址和域名的出站请求
先决条件:
- 您必须具有实例的管理员访问权限。
允许对特定 IP 地址和域名的出站请求:
- 在左侧边栏中,选择 搜索或转到。
- 选择 管理中心。
- 在左侧边栏中,选择 设置 > 网络。
- 展开 出站请求。
- 在 Webhook 和集成可以访问的本地 IP 地址和域名 中,输入您的 IP 地址和域名。
条目可以:
- 用分号、逗号或空格(包括换行符)分隔。
- 采用不同的格式,如主机名、IP 地址、IP 地址范围。支持 IPv6。包含 Unicode 字符的主机名应使用 Internationalized Domain Names in Applications (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 添加到白名单。