温馨提示×

Debian系统GitLab安全设置指南

小樊
36
2025-12-13 06:57:29
栏目: 智能运维

Debian系统GitLab安全设置指南

一 基础加固

  • 系统与软件更新:保持系统与软件包为最新,及时修补漏洞。
    • 执行:sudo apt update && sudo apt full-upgrade -y && sudo reboot
  • 防火墙最小化放行:仅开放必要端口(HTTP/HTTPS/SSH),并对SSH限速。
    • 执行:sudo apt install -y ufw
    • 执行:sudo ufw default deny incoming
    • 执行:sudo ufw allow http
    • 执行:sudo ufw allow https
    • 执行:sudo ufw limit ssh/tcp
    • 执行:sudo ufw enable && sudo ufw status
  • SSH服务加固:禁用root登录、仅用密钥登录、精简协议与算法、限制转发。
    • 编辑:sudo nano /etc/ssh/sshd_config
    • 建议配置:
      • PermitRootLogin no
      • PubkeyAuthentication yes
      • PasswordAuthentication no
      • Protocol 2
      • Ciphers aes128-ctr,aes192-ctr,aes256-ctr
      • KexAlgorithms ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521
      • Macs hmac-sha2-256,hmac-sha2-512
      • AllowTcpForwarding no
      • X11Forwarding no
    • 执行:sudo systemctl restart ssh
  • 内核与系统参数加固:减少信息泄露与攻击面。
    • 新建:sudo nano /etc/sysctl.d/99-gitlab-hardening.conf
    • 建议内容:
      • vm.mmap_min_addr=4096
      • kernel.randomize_va_space=2
      • kernel.kptr_restrict=2
      • kernel.dmesg_restrict=1
      • kernel.unprivileged_bpf_disabled=1
      • net.core.bpf_jit_harden=2
      • vm.unprivileged_userfaultfd=0
      • net.ipv4.tcp_syncookies=1
      • net.ipv4.conf.all.rp_filter=1
      • net.ipv4.conf.default.rp_filter=1
      • net.ipv4.conf.all.accept_source_route=0
      • net.ipv4.conf.default.accept_source_route=0
      • 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.ipv4.conf.all.send_redirects=0
      • net.ipv4.conf.default.send_redirects=0
      • net.ipv6.conf.all.accept_ra=0
      • net.ipv6.conf.default.accept_ra=0
    • 执行:sudo sysctl --system

二 传输加密与证书

  • 启用HTTPS并配置证书路径:将GitLab强制为HTTPS,并指向有效的证书与私钥。
    • 编辑:sudo nano /etc/gitlab/gitlab.rb
    • 配置:
      • external_url 'https://your.domain.com'
      • nginx['ssl_certificate'] = "/etc/letsencrypt/live/your.domain.com/fullchain.pem"
      • nginx['ssl_certificate_key'] = "/etc/letsencrypt/live/your.domain.com/privkey.pem"
    • 执行:sudo gitlab-ctl reconfigure
  • 获取Let’s Encrypt证书(Certbot + Nginx):自动申请与续期,减少人为失误。
    • 安装:sudo apt install -y certbot python3-certbot-nginx
    • 申请:sudo certbot --nginx -d your.domain.com
    • 验证:sudo nginx -t && sudo systemctl reload nginx
    • 自动续期:
      • 编辑:sudo crontab -e
      • 添加:0 0,12 * * * root certbot renew --post-hook "systemctl reload nginx"
  • 验证:浏览器访问 https://your.domain.com,确认证书有效与链完整。

三 GitLab内置安全配置

  • 账户与登录安全:
    • 启用双因素认证(2FA),降低凭证泄露风险。
    • 开启邮箱验证与登录限制(如失败锁定、登录提醒),路径:Admin Area > Settings > General > Sign-in restrictions
  • 权限与访问控制:
    • 遵循最小权限原则,按角色分配权限,定期审计项目与组成员。
  • 安全更新与补丁:
    • 及时升级GitLab版本,获取官方安全修复(如对已知漏洞的修复)。
  • 备份与恢复演练:
    • 定期创建备份并验证可恢复性,确保灾难恢复能力。
    • 执行:sudo gitlab-rake gitlab:backup:create
  • 日志与监控:
    • 持续查看关键日志,及时发现异常行为。
    • 执行:sudo tail -f /var/log/gitlab/gitlab-rails/production.log

四 网络与邮件安全

  • 网络访问控制:
    • 仅暴露必要端口(80/443/22),在云平台安全组与主机防火墙双重限制来源网段。
  • 邮件发送安全(SMTP):
    • 启用TLS加密,使用应用专用凭据,避免在代码或配置中明文存放密码。
    • 示例(写入/etc/gitlab/gitlab.rb):
      • gitlab_rails['smtp_enable'] = true
      • gitlab_rails['smtp_address'] = "smtp.yourprovider.com"
      • gitlab_rails['smtp_port'] = 587
      • gitlab_rails['smtp_authentication'] = "plain"
      • gitlab_rails['smtp_enable_starttls_auto'] = true
      • gitlab_rails['smtp_domain'] = "yourdomain.com"
    • 执行:sudo gitlab-ctl reconfigure
  • 外部依赖安全:
    • 若使用外部Nginx/反向代理,确保其自身安全配置(TLS、HSTS、禁用弱套件)与证书自动续期。

五 维护与审计清单

  • 变更与发布:
    • 变更前备份,变更后在维护窗口内执行,并准备回滚方案。
  • 持续监控与告警:
    • 关注登录异常、权限变更、CI/CD异常任务、仓库敏感操作等。
  • 合规与审计:
    • 定期导出审计日志,检查访问权限SSH密钥WebhookRunner配置与凭据轮换状态。
  • 例行巡检命令示例:
    • 更新与重启:sudo apt update && sudo apt full-upgrade -y && sudo reboot
    • 防火墙状态:sudo ufw status verbose
    • GitLab重配置:sudo gitlab-ctl reconfigure
    • 证书到期检查:sudo certbot certificates
    • 日志快速排查:`sudo tail -n 200 /var/log/gitlab/gitlab-rails/production.log | grep -i “error|fail|attack”``

0