1.
概述:为什么使用跳板机(Bastion Host)
- 目的:集中管理对内网服务的访问、隔离运维登陆面、统一审计与策略。
- 场景举例:远程办公的人员通过跳板访问数据库、内网web、RDP主机;SRE通过跳板进入K8s节点或运维服务器。
2.
准备工作与先决条件
- 环境:一台公网可达的Linux服务器(推荐Ubuntu/CentOS),固定公网IP或域名。
- 软件:OpenSSH-server、ufw/iptables、auditd(或session recording 工具)、rsyslog。
- 账号与密钥:管理员账号(不可用root直连),为每位运维与远程办公人员准备SSH公钥。
3.
搭建基础跳板机(步骤)
- 安装OpenSSH:apt install openssh-server 或 yum install openssh-server。
- 创建管理员用户:adduser bastionadmin && usermod -aG sudo bastionadmin。
- SSH配置:编辑 /etc/ssh/sshd_config,设置 PermitRootLogin no,PasswordAuthentication no,AllowUsers bastionadmin,opsuser1。重启 sshd:systemctl restart sshd。
4.
硬化跳板机(实践配置)
- 强制密钥登录:确保 PasswordAuthentication no,ChallengeResponseAuthentication no。
- 限制来源IP(可选):使用 ufw allow from 203.0.113.0/24 to any port 22;或者配置iptables白名单。
- SSH 配置细化:使用 Match User 块,在 /etc/ssh/sshd_config 添加 Match User ops* ForceCommand /usr/local/bin/recording_wrapper.sh 强制审计。
5.
分发与管理SSH密钥(操作指南)
- 生成密钥(客户端):ssh-keygen -t ed25519 -C "alice@company",复制公钥:ssh-copy-id -i ~/.ssh/id_ed25519.pub bastionadmin@bastion.example.com。
- 中央管理:使用Ansible将公钥分发到 /home/
/.ssh/authorized_keys;配合ACL或git存储公钥清单便于审计。
6.
客户端最佳实践:使用ProxyJump与SSH配置
- ~/.ssh/config 示例:Host bastion HostName bastion.example.com User bastionadmin IdentityFile ~/.ssh/id_ed25519
Host internal-* ProxyJump bastion User ubuntu IdentityFile ~/.ssh/id_ed25519
- 直接跳转命令:ssh -J bastionadmin@bastion.example.com ubuntu@10.0.1.5;意义:避免多次输入密码,链路透明。
7.
端口转发:常见场景与命令
- SOCKS 动态代理(浏览器与远程办公):ssh -D 1080 -N bastionadmin@bastion.example.com,然后在浏览器设置SOCKS5代理127.0.0.1:1080。
- RDP/VNC 转发:ssh -L 3389:10.0.1.10:3389 -N bastionadmin@bastion.example.com,然后本地通过 localhost:3389 连接远端Windows。
- HTTP 访问内网服务:ssh -L 8080:10.0.2.20:80 -N bastionadmin@bastion.example.com,访问 http://localhost:8080。
8.
反向隧道:移动用户或内网穿透
- 场景:被管理主机没有公网IP且需让运维主动连接。
- 操作示例(被控端):ssh -R 2222:localhost:22 bastionadmin@bastion.example.com -N -f;运维接入:ssh -p 2222 ubuntu@localhost -J bastionadmin@bastion.example.com(或直接 ssh -p 2222 bastionadmin@bastion)。
- 注意:在sshd_config启用 GatewayPorts no/yes 根据需求调整,注意安全与端口管理。
9.
会话记录与审计(实战步骤)
- 简单记录:在 /usr/local/bin/recording_wrapper.sh 写入使用 script 或 tlog 记录:exec /usr/bin/script -q /var/log/ssh_sessions/$(date +%F_%T)_$USER_$SSH_CONNECTION.typescript。
- 高级方案:部署 Teleport、gravitational/teleport 或 OpenSSH + auditd + Rsyslog,把会话与命令写入集中日志并保存到只读存储。
- 恢复与回放:对 script 产出文件使用 scriptreplay 回放,或Teleport自带回放功能。
10.
防火墙与路由规则(示例)
- ufw 示例:ufw allow proto tcp from 203.0.113.0/24 to any port 22;ufw allow 443/tcp(如果使用Teleport)。
- iptables NAT(端口转发):iptables -t nat -A PREROUTING -p tcp --dport 2222 -j DNAT --to-destination 10.0.1.5:22;配合 FORWARD 规则允许流量通过。
11.
运维与权限管理建议(规范)
- 最小权限:采用基于用户/组的AllowUsers或Match Group控制目标资源访问。
- 密钥轮换:定期(例如90天)轮换密钥并保存密钥变更历史,使用Ansible批量更新authorized_keys。
- 多因素认证:在跳板机接入MFA(如Google Authenticator或WebAuthn)提升安全。
12.
高可用与替代方案
- 高可用:使用两台跳板做Keepalived + VRRP或DNS轮询,数据(会话日志)同步到中央日志服务器。
- 扩展产品:考虑使用 Teleport、Pritunl、Tailscale 或 OpenVPN 做身份、会话与零信任替代,简化客户端配置与审计。
13.
Q1: 跳板机能否支持多人同时使用并记录各自操作?
- 回答:可以。通过为每个用户分发不同密钥、ForceCommand 调用记录脚本(script/tlog),并将会话文件按用户名或会话ID保存到集中日志,管理员可回放或导出用于合规与审计。
14.
Q2: 远程办公人员如何安全访问公司内网网页与内网RDP?
- 回答:推荐两种模式:1) 使用ssh -D 创建SOCKS5代理并在浏览器/远程客户端配置代理;2) 使用ssh -L 把内网服务映射到本地端口(RDP: ssh -L 3389:10.0.1.10:3389),两种均通过跳板机集中控制且不暴露内网端口。
15.
Q3: 如何在不牺牲安全的情况下让运维更便捷?
- 回答:结合ProxyJump简化命令、在~/.ssh/config配置Host别名;同时保留严格的密钥、MFA、最小权限、会话记录与定期审计。使用Teleport等产品能进一步提供短期证书、RBAC与会话回放,兼顾安全与便捷。
来源:实战跳板机 转发 场景解读远程办公与运维访问的最佳实现方式