通用加固指南

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

一些针对极狐 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 文档,但更重要的是确保在通信期间使用加密。

环境变量

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

操作系统推荐中所述,理想情况下,在极狐 GitLab 安装开始之前应该已经存在防火墙规则,但您仍应在安装前通过 GITLAB_ROOT_PASSWORD 设置一个安全密码。

Git 协议

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

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

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

收件邮件

您可以配置极狐 GitLab 私有化部署以允许注册用户通过收件邮件在极狐 GitLab 实例上发表评论或创建议题和合并请求。在加固环境中,您不应配置此功能,因为它涉及外部通信发送信息。

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

  • 专门为实例的入站邮件分配一个电子邮件地址。
  • 使用电子邮件子地址
  • 用户用来发送电子邮件的电子邮件帐户应要求并启用多因素身份验证(MFA)。
  • 对于 Postfix,特别是按照设置 Postfix 以接收邮件文档的说明进行操作。

Redis 复制和故障转移

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

Sidekiq 配置

配置外部 Sidekiq 的说明中,有大量关于配置 IP 范围的参考。您必须配置 HTTPS,并考虑将这些 IP 地址限制在 Sidekiq 通信的特定系统上。您可能还需要在操作系统级别调整防火墙规则。

邮件的 S/MIME 签名

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

容器注册表

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