定制化 SSH VPN 专用服务器方案
定制化 SSH VPN 专用服务器方案
PS: 没啥用, 仅供参考
定制化 SSH VPN 专用服务器方案
针对「服务器仅用于 SSH VPN」的场景,以下是优化后的安全实施方案,实现 客户端零配置 + 服务器自动鉴权:
一、服务器端配置(一次性操作)
1. 创建专用 VPN 用户
1 | sudo useradd -r -s /usr/sbin/nologin vpn-tunnel # 创建无登录权限的系统用户 |
2. 生成服务器专用密钥对
1 | # 在服务器上生成密钥(仅需执行一次) |
3. 配置自动授权
1 | # 将公钥设为 VPN 用户的唯一授权方式 |
4. 加固 SSH 配置 (/etc/ssh/sshd_config
)
1 | # 限制 VPN 用户权限 |
5. 应用配置
1 | sudo systemctl restart sshd |
二、客户端零配置连接方案
方案 A:预共享密钥(适合内网可信环境)
获取服务器私钥:
将服务器生成的/etc/ssh/vpn-server-key
私钥分发给客户端,保存为~/.ssh/vpn-default-key
建立连接:
1
sshuttle --ssh "ssh -i ~/.ssh/vpn-default-key" -r vpn-tunnel@10.0.1.90 0.0.0.0/0
方案 B:证书认证(更安全,适合生产环境)
1 | # 在服务器上生成 CA 证书 |
三、自动化连接脚本
创建一键连接脚本 vpn-connect
1 |
|
四、安全增强措施
安全层级 | 实施方法 |
---|---|
网络隔离 | 服务器绑定 VPN 专用网卡,仅开放 SSH 端口 |
密钥轮换 | 通过 cron 每周自动更新服务器密钥,客户端脚本同步获取新密钥 |
连接审计 | 服务器记录所有 VPN 连接日志到 /var/log/ssh-vpn.log |
流量限制 | 使用 iptables 限制每个客户端的带宽和并发连接数 |
双因子认证 | 集成 Google Authenticator 实现动态口令(需修改 SSH PAM 配置) |
五、方案优势对比
特性 | 预共享密钥方案 | 证书认证方案 |
---|---|---|
部署复杂度 | 低(适合小型团队) | 中(需要 CA 管理) |
安全性 | 依赖密钥保管 | 自动过期 + 吊销列表 |
客户端更新需求 | 密钥变更需重新分发 | 无需更新客户端 |
适合场景 | 内部测试/临时使用 | 生产环境/长期运维 |
六、运维监控建议
状态检查脚本 (
check-vpn.sh
)1
2
3
4
5
6
7
8
9
# 检查活跃连接
netstat -tn | grep ':22' | grep ESTABLISHED
# 监控流量
vnstat -i tun0 -tr 5
# 自动重启(如果进程不存在)
pgrep sshuttle || /path/to/vpn-connectPrometheus 监控指标
1
2
3
4
5
6
7# 暴露 SSH 隧道指标
- job_name: 'ssh_vpn'
static_configs:
- targets: ['10.0.1.90:9100']
metrics_path: /probe
params:
module: [ssh_tunnel]
七、应急预案
快速封锁用户
1
2# 实时移除授权
sudo sed -i '/user-pubkey/d' /home/vpn-tunnel/.ssh/authorized_keys紧急切换端口
1
2# 使用 socat 临时重定向流量
socat TCP-LISTEN:2222,fork TCP:10.0.1.90:22全流量捕获分析
1
sudo tcpdump -i tun0 -w vpn-traffic.pcap
通过此方案,您将获得:
- 客户端:无需管理密钥,一键连接
- 服务端:自动化的密钥生命周期管理
- 安全:企业级防护与监控能力
- 运维:完善的应急和审计机制
可根据实际需求选择预共享密钥或证书认证方案,平衡安全性与易用性。