1. 概述与目标
1) 目标:实现跳板机(bastion host)自动化部署、SSH/反向转发配置与权限同步,支持多台VPS统一管理。
2) 适用场景:内网运维访问、数据库安全访问、临时端口映射、跨区域运维。
3) 关联要点:涉及主机、域名解析、CDN接入与DDoS防御策略协同。
4) 安全要求:仅允许授权公钥登录、限制来源IP、开启Fail2ban与连接监控。
5) 输出成果:批量脚本、systemd服务示例、定时权限同步与示例数据。
6) 环境假设:控制节点为管理主机(IP 198.51.100.10),跳板机为公网VPS(203.0.113.10),目标内网主机为私有IP(192.168.10.5)。
2. 基本网络与防护拓扑
1) 拓扑说明:管理主机 -> 跳板机(公网) -> 内网目标主机,跳板机做SSH转发与审计。
2) CDN与域名:为跳板机控制域名 bastion.example.com,前端用CDN做流量清洗与加速(建议只对WEB流量启用,SSH 22 端口由WAF/防火墙控制)。
3) DDoS防御:在边界使用云厂商的DDoS防护(清洗阈值如每秒15000pps),并在跳板机启用rate-limit策略。
4) 防火墙示例:iptables -A INPUT -p tcp --dport 22 -s 198.51.100.0/24 -m connlimit --connlimit-above 10 -j DROP。
5) 日志与审计:使用auditd或rsyslog集中上报到ELK/Graylog,跳板机开启session录制。
6) 备份与恢复:关键配置备份到对象存储(示例:s3://company-backups/bastion/)。
3. 批量部署与分发公钥脚本示例
1) 需求:把管理账号的公钥分发到多台跳板机并设置权限(.ssh 700, authorized_keys 600)。
2) 脚本示例(Bash):可以使用下面脚本在控制节点执行,实现批量分发与权限修正。
#!/bin/bash
KEY="$HOME/.ssh/id_rsa.pub"
HOSTS=("203.0.113.10" "198.51.100.20")
USER="deploy"
for H in "${HOSTS[@]}"; do
scp $KEY ${USER}@${H}:/home/${USER}/.ssh/temp_key && \
ssh ${USER}@${H} "cat /home/${USER}/.ssh/temp_key >> /home/${USER}/.ssh/authorized_keys && \
rm /home/${USER}/.ssh/temp_key && chmod 700 /home/${USER}/.ssh && chmod 600 /home/${USER}/.ssh/authorized_keys && chown -R ${USER}:${USER} /home/${USER}/.ssh"
echo "已配置 $H"
done
3) 注意:避免使用sshpass传输明文密码,建议通过临时cloud-init或控制台注入公钥完成首次信任。
4) 权限校验:脚本会自动校验并修复.ssh目录与authorized_keys权限,防止SSH因权限不当拒绝登录。
5) 扩展:可把HOSTS替换为从CMDB/API动态获取的主机列表,实现全自动化。
6) 安全提示:生产环境建议在跳板机上启用ssh 证书(OpenSSH CA)以便集中吊销与管理。
4. 跳板机转发与反向隧道配置示例
1) 场景:内网数据库在192.168.10.5:3306,只能通过跳板机访问;管理端在198.51.100.10。
2) 本地转发(管理端到目标):ssh -L 13306:192.168.10.5:3306 deploy@203.0.113.10 -N -f。
3) 反向隧道(目标主动倒拨):在内网主机执行 autossh -M 0 -N -R 22005:localhost:22 deploy@203.0.113.10 保持稳定通道。
4) systemd 服务样例(在内网主机创建 /etc/systemd/system/autossh-bastion.service):见下方示例。
[Unit]
Description=autossh tunnel to bastion
After=network.target
[Service]
User=root
Environment="AUTOSSH_GATETIME=0"
ExecStart=/usr/bin/autossh -M 0 -N -R 22005:localhost:22 deploy@203.0.113.10 -o ServerAliveInterval=30 -o ServerAliveCountMax=3
Restart=always
[Install]
WantedBy=multi-user.target
5) 效果:管理端通过 ssh -p 22005 deploy@203.0.113.10 即可间接访问内网主机SSH。
6) 监控:在跳板机上监控端口占用并对反向通道来源做白名单限制。
5. 权限同步与配置管理示例
1) 目的:同步用户、组、sudoers规则与SSH公钥,保持多台跳板机一致性。
2) 工具链:使用rsync+ssh或使用Ansible做幂等配置。示例中用rsync实现简单同步。
3) rsync示例命令:rsync -avz --delete /etc/sudoers.d/ deploy@203.0.113.10:/etc/sudoers.d/。
4) 定时执行:在控制节点添加crontab,每10分钟校验一次并同步:*/10 * * * * /usr/local/bin/sync_bastion.sh。
5) 示例脚本(权限修正部分):在目标主机执行 chown root:root /etc/sudoers.d/* && chmod 440 /etc/sudoers.d/*。
6) 变更审计:通过Git管理配置文件,变更时触发CI流水线自动推送并在推送后执行同步任务。
6. 实战案例:金融内部运维平台部署
1) 背景:某金融公司需对外部运维人员做最小权限访问并记录会话,使用跳板机集中管理。
2) 部署规模:3台公网跳板机(203.0.113.10/11/12),10台内网堡垒节点,年业务并发峰值SSH连接约1200个/分钟需做流量限制。
3) 关键配置:每台跳板机配置Fail2ban(bantime=3600s),并在云端做DDoS流量清洗阈值为每秒20000pps。
4) 权限策略:利用LDAP同步用户并通过Ansible模板下发sudoers,所有操作在ELK中做索引,保存90天审计日志。
5) 成果数据:部署后平均故障恢复时间从2.4小时缩短到18分钟,审计合规性通过率由67%提升至98%。
6) 教训:首次推公钥时遇到某批VPS镜像/home分区挂载不同导致脚本失败,后续增加检测与回退机制。
7. 配置示例汇总表与注意事项
1) 表格列出典型
跳板机与内网主机样例配置便于复制粘贴。
2) 注意生产环境请替换为真实IP与域名并做好密钥管理。
3) 建议定期旋转密钥并对关键用户启用MFA/OTP。
4) 监控项:SSH连接数、登录失败次数、长连接隧道数量、系统负载。
5) 恢复策略:关键配置使用版本控制并保留至少3份历史备份。
6) 下表为示例配置(居中、边框宽度1,单元格文字居中)如下:
| 主机 | 角色 | 公网/私网IP | OS / 配置 |
| bastion-1 | 跳板机 | 203.0.113.10 | Ubuntu20.04, 4CPU/8GB, 100GB |
| app-internal-01 | 内网主机 | 192.168.10.5 | CentOS7, 2CPU/4GB, 50GB |
| 管理端 | 控制节点 | 198.51.100.10 | Debian11, Ansible 控制 |
来源:自动化部署跳板机 转发 使用脚本批量设置和权限同步示例