当前位置: 首页 > news >正文

SSH流量秒变HTTPS —— 筑梦之路

背景说明

很多时候对外开放仅有80 443端口,若想要ssh服务器是比较困难的。这里介绍使用openssl+HAProxy绕过限制。

解决思路

把SSH流量伪装成HTTPS流量,从443端口传输。

  1. OpenSSL: 一个强大的开源加密工具包,我们用它来给SSH流量加密,让它看起来像HTTPS。

  2. HAProxy: 一个高性能的负载均衡器,我们用它来接收和转发流量

实现步骤

1. 安装openssl haproxy(略)

2. HAProxy配置

cat /etc/haproxy/haproxy.cfgfrontend fe_sshbind *:443 ssl crt /etc/haproxy/certs/ssl.pemmode tcptcp-request content set-var(sess.dst) ssl_fc_sniuse_backend %[ssl_fc_sni]backend server1mode tcpserver s1 192.168.10.200:22 check------------------------------------------frontend fe_ssh: 定义了一个前端服务,名为fe_ssh。
bind *:443 ssl crt /etc/haproxy/certs/ssl.pem: HAProxy监听443端口,并使用指定的SSL证书。
mode tcp: 使用TCP模式,因为SSH是基于TCP的。
tcp-request content set-var(sess.dst) ssl_fc_sni: 保存SNI(服务器名称指示)信息到一个会话变量中。
use_backend %[ssl_fc_sni]: 根据SNI信息选择后端服务器。
backend server1: 定义了一个后端服务,名为server1。
server s1 192.168.10.200:22 check: 指定后端SSH服务器的IP和端口

 3. SSL证书生成

sudo mkdir -p /etc/haproxy/certs
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/haproxy/certs/ssl.pem -out /etc/haproxy/certs/ssl.pem

4. 启动服务并验证

systemctl restart haproxysystemctl status haproxy# 客户端连接ssh -o ProxyCommand="openssl s_client -quiet -connect 172.16.0.10:443 -servername server1" dummyName1@172.16.0.10--------------------------o ProxyCommand: 这个选项允许我们指定一个命令来建立连接。
openssl s_client: 使用OpenSSL建立一个SSL/TLS连接。
-quiet: 减少输出信息。
-connect 172.16.0.10:443: 指定HAProxy服务器的地址和端口。
-servername server1: 指定SNI,必须与HAProxy配置中的后端名称匹配。
dummyName1@172.16.0.10: SSH的用户名和服务器地址。

工作原理

  1. 当你执行这个SSH命令时,OpenSSL首先建立一个到HAProxy的SSL连接。

  2. HAProxy接收到连接后,根据SNI信息(server1)选择对应的后端。

  3. HAProxy将流量转发到实际的SSH服务器。

  4. 整个过程中,SSH流量被包裹在SSL中,看起来就像普通的HTTPS流量

其他

安全考虑

虽然这个方法很酷,但请记住以下几点:

  1. 在使用前,一定要了解你所在环境的IT政策。未经允许绕过网络限制可能会带来严重后果。

  2. 这个方法主要是为了在合法和被允许的情况下使用。

  3. 使用自签名证书可能会带来安全风险,在生产环境中最好使用受信任的CA签发的证书。

  4. 定期更新和维护你的OpenSSL和HAProxy,以修复潜在的安全漏洞

故障排查

如果连接失败,可以尝试以下步骤:

  1. 检查HAProxy日志(/var/log/haproxy.log)以获取更多信息。

  2. 确保防火墙允许443端口的入站流量。

  3. 使用tcpdump或Wireshark抓包分析,查看流量是否正确到达HAProxy 

http://www.lryc.cn/news/463382.html

相关文章:

  • tkinter Listbox 列表框实现多列对齐排列并绑定下拉框和滚动条
  • Kafka 启用 JMX
  • G1(Garbage First)垃圾回收实战
  • ESP32-IDF 通用定时器 GPTimer
  • C#学习笔记(十)
  • 出手!快手可灵开源版,AI视频生成整合包!
  • 【Linux】进程池
  • 实验23:DA呼吸灯实验
  • 安科瑞智慧能源管理系统EMS3.0在浙江某能源集团有限公司的应用
  • 线性代数学习
  • FineReport 数据显示格式
  • leetcode.204.计数质数
  • Mysql环境安装
  • 请问平面仓系统的盘点如何做?
  • STM32笔记(1)GPIO之点亮LED
  • 自动化工具
  • CTFHUB技能树之HTTP协议——响应包源代码
  • Java会话技术,拦截器,过滤器,登录校验
  • Spring Security 如何进行权限验证
  • 计算机砖头书的学习建议
  • 我与C语言二周目邂逅vlog——7.预处理
  • Python无监督学习中的聚类:K均值与层次聚类实现详解
  • C++ 中 new 和 delete 详解,以及与 C 中 malloc 和 free 的区别
  • YOLOv11来了 | 自定义目标检测
  • Vue3 集成Monaco Editor编辑器
  • 一文详解Mysql索引
  • 基于JAVA+SpringBoot+Vue的旅游管理系统
  • STM32_实验3_控制RGB灯
  • RISC-V笔记——Pipeline依赖
  • 构建后端为etcd的CoreDNS的容器集群(六)、编写自动维护域名记录的代码脚本