在 CentOS 上部署的 GitLab 面临的主要安全风险包括:未授权访问、暴力破解、漏洞利用、DDoS、敏感信息泄露 等。下面从系统层、GitLab 层、网络层、运维层四个维度,给你一套可落地的防护方案。
# 更新系统
yum update -y
# 关闭不必要的服务
systemctl disable --now telnet postfix cups
只开放必要端口:
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --permanent --remove-port=8080/tcp
firewall-cmd --reload
vim /etc/ssh/sshd_config
Port 2222
PermitRootLogin no
PasswordAuthentication no
systemctl restart sshd
yum install epel-release -y
yum install fail2ban -y
保护 SSH 和 GitLab 登录:
[gitlab]
enabled = true
port = https,http
filter = gitlab
logpath = /var/log/gitlab/gitlab-rails/production.log
maxretry = 5
vim /etc/gitlab/gitlab.rb
external_url 'https://gitlab.example.com'
nginx['redirect_http_to_https'] = true
使用受信任证书(Let’s Encrypt 或企业证书)
管理员后台:
Admin → Settings → Sign-in restrictions
✅ Enforce 2FA
gitlab_rails['gitlab_signup_enabled'] = false
gitlab_rails['password_authentication_enabled_for_web'] = true
gitlab_rails['password_min_length'] = 12
registry_external_url 'disabled'
gitlab_pages['enable'] = false
limit_req_zone $binary_remote_addr zone=gitlab:10m rate=10r/s;
location / {
limit_req zone=gitlab burst=20 nodelay;
}
如:
yum update gitlab-ce -y
⚠️ 升级前备份
gitlab-rake gitlab:backup:create
并异地保存备份
重点监控:
/var/log/gitlab/gitlab-rails/production.log
/var/log/gitlab/nginx/gitlab_access.log
Admin → Audit Events
| 攻击方式 | 防护措施 |
|---|---|
| 暴力破解 | 2FA + fail2ban |
| 漏洞利用 | 及时升级 |
| DDoS | Cloudflare / 限流 |
| 信息泄露 | HTTPS + 权限控制 |
| 内部威胁 | 审计 + 最小权限 |
✅ 非 root + 密钥 SSH
✅ HTTPS + 2FA
✅ 防火墙 + fail2ban
✅ 不暴露内部端口
✅ 定期升级 + 备份
✅ 日志监控
如果你愿意,我可以:
你目前的 GitLab 是 公网还是内网?版本多少?