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

一、综合架构设计

主机角色 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
相关推荐
带娃的IT创业者1 天前
第4集:配置管理的艺术:环境变量、多环境配置与安全实践
开发语言·python·安全·项目配置·开发基础
合作小小程序员小小店1 天前
Web渗透之一句话木马
web安全·网络安全·安全威胁分析·安全架构·安全性测试
white-persist1 天前
Burp Suite模拟器抓包全攻略
前端·网络·安全·web安全·notepad++·原型模式
网安小白的进阶之路1 天前
A模块 系统与网络安全 第四门课 弹性交换网络-3
网络·安全·web安全
安当加密1 天前
基于PostgreSQL的TDE透明加密解决方案:构建数据全生命周期的国密合规安全体系
安全·postgresql·区块链
源文雨1 天前
MacOS 下 Warp ping 局域网设备报错 ping: sendto: No route to host 的解决方法
运维·网络协议·安全·macos·网络安全·ping
清静诗意1 天前
FRP v0.65.0 内网穿透专业指南(SSH + HTTP/HTTPS 一体化配置)
http·https·ssh·frp
周某人姓周1 天前
安全初级(二)HTTP
网络协议·安全·http
Hello.Reader1 天前
在运行中的 Kafka 集群渐进式启用安全零停机实战手册(KRaft/Broker 通用)
分布式·安全·kafka
国科安芯1 天前
关于软错误的常见问题解答
单片机·嵌入式硬件·安全·硬件架构·软件工程