堡垒机安全架构:从零搭建企业级防护(单节点版)

发布于:2025-09-15 ⋅ 阅读:(22) ⋅ 点赞:(0)

一、综合架构设计

主机角色 IP地址 操作系统 关键服务/用途 安全备注
堡垒机 (Teleport) 10.0.0.1 Ubuntu 24.04 LTS Teleport Auth + Proxy + Node 唯一SSH入口,禁用root直连
Web服务器 10.0.0.10 Ubuntu 24.04 LTS Nginx, 自签证书 / Let's Encrypt 证书 仅允许堡垒机访问,禁用公网SSH
数据库服务器 10.0.0.20 Ubuntu 24.04 LTS PostgreSQL 仅允许Web服务器访问,禁用SSH
监控服务器 10.0.0.30 Ubuntu 24.04 LTS Prometheus + Grafana 仅允许堡垒机访问

注:所有机器防火墙默认DROP,只开必要端口。SSH端口全改非22(比如2222),且仅允许堡垒机IP访问。

二、SSH加固:禁用密码登录,只用密钥
在每台机器 编辑

vim /etc/ssh/ssh_config.d/safe.conf 
PasswordAuthentication no
PermitRootLogin no
Port 2222  # 改个端口,防脚本小子
AllowUsers zz  # 只允许特定用户

改完 systemctl restart ssh

密钥全生命周期管理

  1. 密钥对管理
    本地生成:ssh-keygen -t ed25519 -C "工号-部门"
    公钥(id_ed25519.pub)扔到服务器的 ~/.ssh/authorized_keys
    私钥打死别给别人,也别传到服务器上!

ssh-keygen -t ed25519 -C "your_email@example.com"

生成密钥对
-t ed25519:选现代加密算法(非老旧RSA)
-C:加注释(如邮箱/工号)

为啥不用RSA?
- Ed25519密钥更短(256位=RSA 3072位安全强度),登录更快,抗量子计算(虽当前不急,但金融客户硬性要求)
--C注释是审计命脉!线上事故复盘:某次误删数据,靠authorized_keys里的dev-ops@company.com秒定位到责任人(等保审计时,安全团队必查密钥归属)
血泪教训:曾见运维用默认RSA 2048,被渗透测试扫出漏洞...现在我们强制Ed25519,新项目上线直接卡死

等保2.0 8.1.4:要求“采用密码技术保证通信安全”,Ed25519符合GM/T 0009-2012标准(金融行业硬指标)

公钥扔进~/.ssh/authorized_keys

服务器端授权
• 仅公钥生效,私钥永不出本地
• 文件权限必须:~/.ssh 700+authorized_keys 600

生产雷区预警
- 权限错=登录失败!90%新手栽在这(SSH服务会默默拒绝,不报错)。我们运维手册第一条:

chmod 700 ~/.ssh && chmod 600~/.ssh/authorized_keys,刻进DNA”
-绝不手动复制!用Ansible批量推公钥(示例playbook:authorized_key: user=deploy key="{{ lookup('file', 'id_ed25519.pub') }}"),避免手抖粘错
-进阶操作:在authorized_keys里加command="docker ps",no-agent-forwarding限制权限(某次事故:开发用密钥提权删库,加了限制后损失砍90%)

等保2.0 8.1.2:要求“访问控制策略”,密钥归属+权限限制=满足“最小授权”条款

  1. 生成端:强制Ed25519算法 + 工号注释(-C "ops-1024"),满足等保身份可追溯
  2. 分发端:Ansible加密推送公钥,authorized_keys自动加no-port-forwarding防隧道攻击
  3. 审计端:ELK收集SSH登录日志,关联密钥注释→实时告警异常登录(如非工作时间)
    结果:密钥登录率100%,暴力破解归零,等保三级一次过。”

堡垒机思维:

你本地 → 只能连堡垒机 (10.0.0.1) → 从堡垒机跳转到内网机器 (10.0.0.10, 20, 30)
这样,攻击者就算拿到你本地私钥,也只能进堡垒机,进不了核心业务。

三、HTTPS证书:不是“有绿锁就行”,是“怎么管好锁”

自签证书(开发/测试环境用):

# 1. 生成私钥
openssl genrsa -out server.key 2048

# 2. 生成CSR(证书签名请求)
openssl req -new -key server.key -out server.csr

# 3. 自己给自己签名(有效期365天)
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

# 4. Nginx配置里指向这两个文件
ssl_certificate /path/to/server.crt;
ssl_certificate_key /path/to/server.key;

问题:浏览器会报警告“不安全”,因为没人信任你这个“自封的CA”。


Let's Encrypt(生产环境必须用):

certbot 工具,免费、自动、受信任。

# 1. 安装 certbot (Ubuntu)
sudo apt update && sudo apt install certbot python3-certbot-nginx

# 2. 申请证书(自动帮你配Nginx)
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com

# 3. 自动续期(Let's Encrypt证书90天过期)
sudo certbot renew --dry-run  # 先测试
# 系统已自动加了cron,不用你管

重点:监控证书到期!用 certbot certificates 查看,或接入Prometheus监控。

四、堡垒机实战:用 Teleport 替代传统跳板机

为啥用Teleport?因为传统SSH跳板机审计弱、权限乱、扩展差。Teleport自带审计录像、RBAC、多云支持,等保三级都够用。

在 10.0.0.1 上安装Teleport

# 1. 加官方源
sudo apt-get update && sudo apt-get install apt-transport-https gnupg
curl https://deb.releases.teleport.dev/gpg | sudo gpg --dearmor -o /usr/share/keyrings/teleport-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/teleport-archive-keyring.gpg] https://deb.releases.teleport.dev stable main" | sudo tee /etc/apt/sources.list.d/teleport.list

# 2. 安装
sudo apt-get update
sudo apt-get install teleport

# 3. 初始化(作为Auth Server + Proxy)
sudo teleport configure --cluster-name=prod-cluster --acme --acme-email=admin@example.com --public-addr=teleport.yourdomain.com --token=secure-token-here > /etc/teleport.yaml

# 4. 启动
sudo systemctl start teleport
sudo systemctl enable teleport

把其他机器(10.0.0.10, 20, 30)加入Teleport集群

在每台机器上装Teleport,然后:

# 以Node身份加入
sudo teleport start --roles=node --token=secure-token-here --ca-pin=sha256:xxx --auth-server=10.0.0.1:3025

你本地怎么连?

  1. 安装 tsh (Teleport Client)
  2. tsh login --proxy=teleport.yourdomain.com --user=yourname
  3. tsh ssh root@web-server # 直接连逻辑主机名,不用记IP