Ubuntu服务器直接暴露SSH端口22是运维安全里最容易被忽视的隐患。很多人以为改了端口、禁用了root登录就万事大吉,实际上只要服务器还能被直接连接,暴力破解、凭据泄露、操作审计缺失这些问题就始终存在。更稳妥的做法是在服务器集群前部署一台堡垒机,所有运维人员必须先登录堡垒机,再由堡垒机跳转到目标服务器,同时在堡垒机上完成身份认证、权限控制和全程操作记录。下面直接讲如何在Ubuntu 22.04或20.04上搭建一套可用的堡垒机环境,核心组件用Teleport,因为它部署简单、自带审计和短期证书功能,比手动配置JumpServer或自研跳板脚本更可靠。
一、堡垒机要解决的核心问题堡垒机不是简单的一台跳板服务器。它需要同时解决四个问题:身份统一认证、权限最小化、操作全程审计、以及目标服务器不直接暴露登录入口。如果只是用一台Ubuntu服务器做SSH跳转,那只能叫跳板机,不叫堡垒机。跳板机依然依赖系统账户和密码,无法做到细粒度授权,也无法回放操作过程。真正的堡垒机应当让用户登录时通过堡垒机认证,获得一张短期有效的SSH证书,再用这张证书连接目标服务器。目标服务器只信任堡垒机签发的证书,不信任任何密码或长期密钥。这样即使某个运维人员的密码泄露,攻击者没有堡垒机签发的短期证书,也无法直接登录目标服务器。
二、环境准备与基础加固先准备一台独立的Ubuntu服务器作为堡垒机,建议配置不低于2核4GB,系统版本22.04 LTS。目标服务器可以是任意数量的Ubuntu或其他Linux发行版。堡垒机自身的基础加固是第一步,因为它是整个运维入口的汇聚点。安装系统后先更新软件包并启用自动安全更新:
sudo apt update && sudo apt upgrade -y sudo apt install unattended-upgrades sudo dpkg-reconfigure --priority=low unattended-upgrades
然后配置防火墙,只开放堡垒机对外提供服务的端口。Teleport默认使用443端口提供Web界面和反向隧道服务,SSH代理服务使用3023端口。如果不需要Web界面,可以只开放3023。用UFW配置:
sudo ufw allow 443/tcp sudo ufw allow 3023/tcp sudo ufw enable
堡垒机自身不要开放22端口给公网。管理堡垒机本身通过云厂商的VNC或本地控制台完成,或者只允许办公网出口IP访问22端口。这一步能大幅减少堡垒机被扫描和爆破的概率。
三、安装Teleport堡垒机Teleport提供了官方安装脚本和APT仓库。在堡垒机上执行以下命令安装Teleport社区版:
curl https://goteleport.com/static/install.sh | bash -s 16.1.0
安装完成后,生成配置文件。Teleport的配置文件位于/etc/teleport.yaml。下面给出一份适合单节点部署的配置示例:
version: v3
teleport:
nodename: bastion-01
data_dir: /var/lib/teleport
log:
output: stderr
severity: INFO
ca_pin: ""
diag_addr: ""
auth_service:
enabled: yes
listen_addr: 0.0.0.0:3025
cluster_name: prod-bastion
tokens:
- "proxy,node:replace-with-a-long-random-token"
ssh_service:
enabled: yes
labels:
env: prod
proxy_service:
enabled: yes
listen_addr: 0.0.0.0:3023
web_listen_addr: 0.0.0.0:443
tunnel_listen_addr: 0.0.0.0:3024
public_addr: bastion.example.com:443
https_keypairs: []
acme: {}
配置文件里cluster_name是集群标识,tokens里的随机字符串用于节点加入认证,务必替换为足够长的随机值。public_addr需要替换为堡垒机的实际域名或公网IP。如果使用IP而非域名,Teleport会自动生成自签名证书,浏览器访问时会有安全提示,但功能不受影响。生产环境建议配置一个真实域名并启用ACME自动签发证书。
四、启动并初始化堡垒机配置文件就绪后,启动Teleport:
sudo systemctl enable teleport sudo systemctl start teleport
首次启动后,需要创建本地管理员账户。Teleport使用tctl命令管理用户。执行以下命令创建一个名为admin的管理员,并赋予访问权限:
sudo tctl users add admin --roles=editor,access --logins=root,ubuntu
命令执行后会输出一个URL,在浏览器打开该URL完成密码设置和二次认证绑定。这个admin账户就是堡垒机的第一个管理员。后续所有用户都通过Web界面或tctl创建,不再使用系统账户登录。
五、让目标服务器加入堡垒机管理目标服务器需要运行Teleport的node服务,并加入到堡垒机集群。在目标服务器上安装Teleport:
curl https://goteleport.com/static/install.sh | bash -s 16.1.0
然后创建节点配置文件/etc/teleport-node.yaml:
version: v3
teleport:
nodename: web-server-01
data_dir: /var/lib/teleport
log:
output: stderr
severity: INFO
ca_pin: ""
diag_addr: ""
auth_service:
enabled: no
ssh_service:
enabled: yes
labels:
env: prod
role: web
proxy_service:
enabled: no
接下来用加入令牌将节点注册到堡垒机。在堡垒机上生成一个节点加入令牌:
sudo tctl nodes add --ttl=30m --roles=node
命令会输出一个以token开头的字符串。回到目标服务器,用该令牌启动节点服务:
sudo teleport start --config=/etc/teleport-node.yaml --auth-server=bastion.example.com:3025 --join-method=token --token=替换为生成的令牌
验证节点是否成功注册,在堡垒机上执行:
sudo tctl nodes ls
如果能看到目标服务器的主机名和标签,说明节点已加入。此时目标服务器的SSH服务仍然在运行,但后续我们会调整防火墙,只允许来自堡垒机的连接,或者直接关闭公网SSH访问。
六、配置访问策略与权限控制Teleport的权限控制通过角色(Role)实现。默认角色有access、editor、auditor等,但生产环境需要自定义角色,实现最小权限。例如只允许运维人员以ubuntu用户登录web服务器,不允许登录数据库服务器。创建一个角色文件web-ops.yaml:
kind: role
version: v5
metadata:
name: web-ops
spec:
allow:
logins: ["ubuntu"]
node_labels:
role: "web"
rules:
- resources: ["session"]
verbs: ["list", "read"]
deny:
logins: ["root"]
应用角色:
sudo tctl create -f web-ops.yaml
然后将该角色分配给具体用户:
sudo tctl users update username --set-roles=web-ops
这样用户登录堡垒机后,只能看到带有role=web标签的服务器,并且只能以ubuntu用户连接。即使该用户知道root密码,也会被Teleport拒绝。
七、启用会话审计与录像回放Teleport默认会记录所有SSH会话的输入输出,并以结构化格式存储在堡垒机的/var/lib/teleport/log目录。管理员可以通过Web界面查看实时会话,也可以回放历史会话。要确保审计功能正常工作,需要在auth_service配置中明确开启会话录制:
auth_service: session_recording: "node-sync" proxy_checks_host_keys: yes
session_recording设置为node-sync表示在节点端同步录制,适合大多数场景。如果堡垒机磁盘空间有限,可以考虑将录制模式改为proxy-sync,在代理端录制。审计日志包含用户身份、登录时间、执行的每一条命令、文件传输记录等。对于合规要求较高的场景,还可以将审计日志定期导出到外部存储,防止堡垒机自身被攻破后日志被清除。
八、关闭目标服务器的直接SSH访问节点加入Teleport后,目标服务器不再需要向公网开放SSH端口。修改目标服务器的防火墙规则,只允许来自堡垒机内网IP的22端口访问,或者直接关闭22端口。如果目标服务器和堡垒机在同一内网,可以配置安全组只允许堡垒机IP访问22。如果不在同一内网,Teleport的反向隧道机制可以让堡垒机通过443端口连接到目标服务器,目标服务器无需开放任何入站端口。这是Teleport相比传统跳板机的一个重要优势。配置完成后,运维人员只能通过堡垒机访问目标服务器,直接SSH连接会被拒绝。
九、日常运维与高可用注意事项单节点Teleport已经可以满足中小团队的需求,但堡垒机本身成为单点故障后,一旦宕机所有运维操作都会中断。对于核心业务,建议部署至少两个Teleport代理节点,并通过负载均衡器分发443端口的流量。认证服务可以使用Teleport内置的HA模式,需要配置共享存储或使用外部数据库。日常运维中要定期检查节点状态、审计日志存储空间、以及证书有效期。Teleport的短期证书默认有效期为12小时,用户需要定期重新认证,这本身也是一种安全机制。另外要定期更新Teleport版本,社区版更新频繁,安全修复及时。
堡垒机搭建完成后,整个服务器登录链路就变成了:运维人员通过Web界面或tsh客户端登录堡垒机,完成多因素认证,Teleport签发短期证书,用户选择目标服务器发起连接,所有操作被实时录制。目标服务器不直接暴露登录入口,密码泄露或密钥丢失不再导致服务器被直接控制。这套方案在Ubuntu上部署成本低,维护简单,比手动维护跳板脚本和SSH密钥对要可靠得多。
