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

系统加固 - 操作系统建议

通用加固指南请参阅主加固文档

您可以通过配置底层操作系统来提高整体安全性。在 GitLab Self-Managed 这样的受控环境中,这需要额外的步骤,实际上,对于某些部署来说,这通常是必需的。FedRAMP 就是此类部署的一个例子。

SSH 配置

SSH 客户端配置

对于客户端访问(无论是访问 GitLab 实例还是底层操作系统),以下是 SSH 密钥生成的几点建议。第一个是典型的 SSH 密钥:

ssh-keygen -a 64 -t ed25519 -f ~/.ssh/id_ed25519 -C "ED25519 Key"

对于符合 FIPS 标准的 SSH 密钥,请使用以下命令:

ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -C "RSA FIPS-compliant Key"

SSH 服务器配置

在操作系统层面,如果您允许通过 SSH 访问(通常是通过 OpenSSH),以下是 sshd_config 文件的配置选项示例(具体位置可能因操作系统而异,但通常是 /etc/ssh/sshd_config):

#
# sshd 配置文件示例。此文件支持公钥认证,并关闭了几个潜在的安全风险区域
#
PubkeyAuthentication yes
PasswordAuthentication yes
UsePAM yes
UseDNS no
AllowTcpForwarding no
X11Forwarding no
PrintMotd no
PermitTunnel no
PermitRootLogin no

# 允许客户端传递区域环境变量
AcceptEnv LANG LC_*

# 将默认的 120 秒更改为 60
LoginGraceTime 60

# 覆盖默认的无子系统设置
Subsystem       sftp    /usr/lib/openssh/sftp-server

# 协议调整,在 FIPS 或 FedRAMP 部署中需要/推荐这些设置,并且只使用强大且经过验证的算法选择
Protocol 2
Ciphers aes128-ctr,aes192-ctr,aes256-ctr
HostKeyAlgorithms ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521
KexAlgorithms ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521
Macs hmac-sha2-256,hmac-sha2-512

防火墙规则

对于防火墙规则,基本使用只需开放 TCP 端口 80443。默认情况下,端口 5050 用于远程访问容器注册表,但在加固环境中,这很可能存在于不同的主机上,在某些环境中甚至完全不开放。因此,建议仅开放端口 80443,并且端口 80 仅应用于重定向到 443

对于像 FedRAMP 这样的真正加固或隔离的环境,您应该调整防火墙规则,以限制除访问它的网络之外的所有端口。例如,如果 IP 地址是 192.168.1.2,并且所有授权的客户端也都在 192.168.1.0/24 网络中,那么即使通过其他防火墙限制了访问,也应将端口 80443 的访问权限仅限制在 192.168.1.0/24(作为安全限制)。

理想情况下,如果您正在安装 GitLab Self-Managed 实例,您应该在安装开始前实施防火墙规则,并将访问权限限制在 Admin 和安装人员范围内,然后在实例安装并正确加固后,才为用户添加额外的 IP 地址范围。

可以使用 iptablesufw 来在每台主机的基础上实施和强制执行端口 80443 的访问,否则应通过 GCP Google Compute 或 AWS Security Groups 的基于云的防火墙规则来强制执行此操作。所有其他端口都应被阻止,或至少限制在特定范围内。有关端口的更多信息,请参阅 Package Defaults

防火墙补充规则

可能会启用需要外部访问的各种服务(例如 Sidekiq),因此需要开放网络访问。将此类服务的访问限制到特定的 IP 地址或特定的 C 类网络。作为一种分层和额外的预防措施,在可能的情况下,将这些额外的服务限制在 GitLab 中的特定节点或子网中。

内核调整

可以通过编辑 /etc/sysctl.conf/etc/sysctl.d/ 目录下的文件来进行内核调整。内核调整并不能完全消除攻击的威胁,但可以增加一层额外的安全防护。以下说明解释了这些调整的一些优势。

## sysctl.conf 的内核调整 ##
##
## 以下设置有助于缓解越界、空指针解引用、堆和缓冲区溢出漏洞、释放后使用等漏洞被利用。它不能 100% 解决问题,但会严重阻碍漏洞利用。 ##
# 默认值为 65536,4096 有助于缓解利用中使用的内存问题
vm.mmap_min_addr=4096
# 默认为 0,随机化内存中的虚拟地址空间,使漏洞利用更困难
kernel.randomize_va_space=2
# 限制内核指针访问(例如 `cat /proc/kallsyms`),以辅助漏洞利用
kernel.kptr_restrict=2
# 限制 dmesg 中的详细内核错误信息
kernel.dmesg_restrict=1
# 限制 eBPF
kernel.unprivileged_bpf_disabled=1
net.core.bpf_jit_harden=2
# 防止常见的释放后使用漏洞
vm.unprivileged_userfaultfd=0
# 通过阻止非特权用户创建命名空间来缓解 CVE-2024-1086
kernel.unprivileged_userns_clone=0

## 网络调整 ##
##
## 防止在 IP 堆栈层发生的常见攻击 ##
# 防止 SYNFLOOD 拒绝服务攻击
net.ipv4.tcp_syncookies=1
# 防止时间等待刺杀攻击
net.ipv4.tcp_rfc1337=1
# IP 欺骗/源路由保护
net.ipv4.conf.all.rp_filter=1
net.ipv4.conf.default.rp_filter=1
net.ipv6.conf.all.accept_ra=0
net.ipv6.conf.default.accept_ra=0
net.ipv4.conf.all.accept_source_route=0
net.ipv4.conf.default.accept_source_route=0
net.ipv6.conf.all.accept_source_route=0
net.ipv6.conf.default.accept_source_route=0
# IP 重定向保护
net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.default.accept_redirects=0
net.ipv4.conf.all.secure_redirects=0
net.ipv4.conf.default.secure_redirects=0
net.ipv6.conf.all.accept_redirects=0
net.ipv6.conf.default.accept_redirects=0
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.default.send_redirects=0