怎样配置GitLab以增强Linux安全
小樊
38
2025-12-06 15:51:47
GitLab 在 Linux 上的安全配置清单
一 基础安全配置
- 强制使用 HTTPS:为域名配置 TLS 证书(推荐 Let’s Encrypt 或企业 CA),在 /etc/gitlab/gitlab.rb 中设置 external_url 为 https:// 开头,并配置自动续期。
- 防火墙最小化:仅开放 80/443(HTTP/HTTPS)与 22(SSH),对管理口或敏感网段实施 IP 白名单。
- 禁用不安全协议与端口:关闭 Telnet/FTP 等明文服务,避免暴露数据库、Redis 等后端端口到公网。
- 账户与访问控制:启用 RBAC 最小权限,按 Guest/Reporter/Developer/Maintainer/Owner 分配权限;对外网访问的项目启用 项目可见性限制 与 审批。
- 认证加固:全站启用 2FA,禁用密码登录(对 CI 服务账号使用 Deploy Key/Personal Access Token 替代)。
- 更新与补丁:建立 月度/紧急 更新机制,及时升级 GitLab 与底层 OS/数据库/Redis。
- 备份与演练:使用内置工具定期全量备份,保留 ≥30 天,并定期做 恢复演练 验证可用性。
- 日志与监控:集中采集 GitLab 日志 与 系统审计日志,设置 告警 规则(如多次登录失败、异常流量、备份失败)。
二 系统与网络加固
- 加固 SSH:禁用 root 远程登录,使用 SSH 密钥 登录,限制登录失败锁定(如 pam_tally2/fail2ban),必要时更改默认 22 端口并仅允许跳板机访问。
- 最小服务与端口:关闭未使用的 内核模块/服务/容器,对外仅暴露 80/443/22。
- 文件与权限:对 /etc/gitlab/gitlab.rb、/var/opt/gitlab/ 等关键目录设置 严格的属主/权限;对极敏感配置文件可用 chattr +i 防篡改(变更前评估维护影响)。
- 内核与网络参数:在 /etc/sysctl.conf 启用 SYN 洪水防护、禁止 ICMP 重定向、限制核心转储 等,降低 DoS/信息泄露 风险。
- 审计与留存:启用 auditd 审计关键系统调用(如文件读写、权限变更),并用 logrotate 控制日志滚动与留存周期。
- 容器场景:使用 官方 GitLab 镜像,正确挂载 数据卷,仅映射必要端口,谨慎使用 特权模式,并通过 防火墙 限制容器对外暴露。
三 传输层与数据保护
- 传输加密:全站 TLS 1.2+,禁用 SSLv3/TLS1.0/1.1;启用 HSTS,配置 强加密套件(如 ECDHE-RSA-AES256-GCM-SHA512 等)。
- 证书管理:优先 Let’s Encrypt 自动续期;内网使用 内部 CA 并下发至客户端信任库;证书更换后滚动更新并验证链路。
- 数据静态加密:部署时启用 LVM 全盘加密 或对 /var/opt/gitlab 所在分区加密(如 LUKS),确保磁盘丢失时数据不可读。
- 备份加密与隔离:对备份文件进行 加密 并传输至 隔离存储(不同物理/逻辑域),定期校验 完整性与可用性。
- 密钥与凭据:使用 Vault/KMS 管理数据库/Redis 密码与第三方密钥,避免在 gitlab.rb 明文存放凭据。
四 身份与访问控制
- 集中身份源:对接 LDAP/AD,统一账号生命周期管理、组/组织映射与登录策略。
- 登录安全策略:在 Settings > General > Sign-in restrictions 启用 2FA 强制、登录失败锁定、密码复杂度 与 会话超时;对外网访问建议 IP 白名单。
- 细粒度授权:按 项目/组 设置 角色权限 与 受保护分支,对 CI/CD 使用 受保护 Runner 与 最小权限的部署令牌。
- 网络分区:管理口、内网 CI、公网访问 分区分域,通过 反向代理/防火墙 实现 零信任 访问路径。
- 合规审计:启用 登录审计、操作审计、权限变更审计(EE 提供更完善审计能力),定期导出审计报告。
五 备份恢复与应急响应
- 全量备份:使用 gitlab-backup create 定期备份(默认目录 /var/opt/gitlab/backups/),建议 每日 全量并保留 ≥30 天;可结合 BorgBackup 做 增量/异地 备份。
- 恢复流程:按“停服务 → 恢复 → 启动”顺序执行,示例:
- 停止服务:
sudo gitlab-ctl stop unicorn && sudo gitlab-ctl stop sidekiq
- 恢复指定备份:
sudo gitlab-rake gitlab:backup:restore BACKUP=1640998062_2022_01_01_14.0
- 启动服务:
sudo gitlab-ctl start
- 演练与验证:每季度进行 恢复演练,校验 数据一致性 与 RPO/RTO 指标。
- 应急响应:建立 安全事件预案(如异常登录、数据泄露、勒索迹象),包含 隔离主机、取证留痕、版本回滚、漏洞修复、通报与复盘 等环节。