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

加固 - 配置建议

加固的通用指南在主要加固文档中有概述。

对于 GitLab 实例的一些加固建议涉及额外的服务或通过配置文件进行控制。提醒一下,每次修改配置文件时,请在编辑前备份它们。此外,如果您要进行大量更改,建议不要一次性完成所有更改,而是在每次更改后进行测试,以确保一切正常工作。

NGINX

NGINX 用于提供访问 GitLab 实例的 Web 界面。由于 NGINX 受 GitLab 控制和集成,因此通过修改用于调整的 /etc/gitlab/gitlab.rb 文件。以下是一些有助于提高 NGINX 本身安全性的建议:

  1. 创建 Diffie-Hellman 密钥

    sudo openssl dhparam -out /etc/gitlab/ssl/dhparam.pem 4096
  2. 编辑 /etc/gitlab/gitlab.rb 并添加以下内容:

    #
    # 仅使用强密码套件
    #
    nginx['ssl_ciphers'] = "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256"
    #
    # 遵循首选密码套件及其列出的优先顺序
    #
    nginx['ssl_prefer_server_ciphers'] = "on"
    #
    # 仅允许 TLSv1.2 和 TLSv1.3
    #
    nginx['ssl_protocols'] = "TLSv1.2 TLSv1.3"
    
    ##! **推荐来源:https://nginx.org/en/docs/http/ngx_http_ssl_module.html**
    nginx['ssl_session_cache'] = "builtin:1000 shared:SSL:10m"
    
    ##! **默认值,参考:https://nginx.org/en/docs/http/ngx_http_ssl_module.html**
    nginx['ssl_session_timeout'] = "5m"
    
    # 应防止 logjam 攻击等
    nginx['ssl_dhparam'] = "/etc/gitlab/ssl/dhparam.pem" # 从 nil 修改
    
    # 关闭会话票证重用
    nginx['ssl_session_tickets'] = "off"
    # 选择我们自己的曲线而不是 openssl 提供的
    nginx['ssl_ecdh_curve'] = "secp384r1"
  3. 重新配置 GitLab:

    sudo gitlab-ctl reconfigure

Consul

Consul 可以集成到 GitLab 环境中,主要用于大型部署。通常对于少于 1000 个用户的自管理或独立部署,可能不需要 Consul。如果需要,首先查看 Consul 文档,但更重要的是确保通信过程中使用加密。有关 Consul 的更详细信息,请访问 HashiCorp 网站 了解其工作原理,并查看 加密安全 的信息。

环境变量

您可以在自管理系统上自定义多个 环境变量。 从安全角度来看,主要可以利用的环境变量是安装过程中的 GITLAB_ROOT_PASSWORD。如果您正在安装具有面向公共 IP 地址的自管理系统,请确保密码设置得足够强。从历史上看,设置任何类型的面向公共的服务 - 无论是 GitLab 还是其他应用程序 - 都表明,一旦这些系统被发现,就会发生机会性攻击,因此加固过程应在安装过程中开始。

操作系统建议中所述,理想情况下,在 GitLab 安装开始之前就应该有防火墙规则,但您仍应通过 GITLAB_ROOT_PASSWORD 在安装前设置安全的密码。

Git 协议

为确保只有授权用户使用 SSH 进行 Git 访问,请将以下内容添加到您的 /etc/ssh/sshd_config 文件中:

# 确保只有授权用户使用 Git
AcceptEnv GIT_PROTOCOL

这确保了用户无法使用 SSH 拉取项目,除非他们拥有有效的 GitLab 账户,能够通过 SSH 执行 git 操作。更多详细信息可以在 配置 Git 协议 下找到。

入站邮件

您可以配置 GitLab 自托管,允许注册用户使用入站邮件进行评论或创建问题和合并请求。在加固环境中,您不应配置此功能,因为它涉及外部通信发送信息。

如果需要此功能,请按照 入站邮件文档 中的说明操作,并遵循以下建议以确保最大安全性:

Redis 复制和故障转移

Redis 在 Linux 包安装中用于复制和故障转移,可以在需要此功能时进行设置。请注意,这会为 Redis 打开 TCP 端口 6379,为 Sentinel 打开 26379。请遵循 复制和故障转移文档,但记录所有节点的 IP 地址,并设置节点之间的防火墙规则,只允许其他节点访问这些特定端口。

Sidekiq 配置

配置外部 Sidekiq 的说明中,多次提到了配置 IP 范围。您必须配置 HTTPS,并考虑将那些 IP 地址限制为 Sidekiq 通信的特定系统。您可能还需要在操作系统级别调整防火墙规则。

S/MIME 邮件签名

如果 GitLab 实例配置为向用户发送电子邮件通知,请配置 S/MIME 签名,以帮助收件人确保电子邮件的合法性。请按照 签名出站邮件 中的说明操作。

容器注册表

如果配置了 Let’s Encrypt,容器注册表默认启用。这允许项目存储自己的 Docker 镜像。请按照配置 容器注册表 的说明操作,以便您可以执行诸如限制新项目的自动启用和完全禁用容器注册表等操作。您可能需要调整防火墙规则以允许访问 - 如果是完全独立的系统,您应将容器注册表的访问限制为仅限 localhost。文档中还包含了所用端口及其配置的具体示例。