暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

让你的SSH流量秒变HTTPS

watson 2024-10-12
982

天我们来聊一个有趣又实用的话题 - 如何在受限环境下使用SSH连接。相信不少朋友都遇到过这种情况:在公司或酒店上网,发现只有80和443端口能用,其他端口都被封了。(我承认我以上就是胡说八道,这篇文章的目的,就是伪装ssh流量成https流量。以下例子为转发成443端口的httpsl流量。)这种情况下,想用SSH远程连接服务器就成了难题。别担心,今天我就教大家一招,用OpenSSL和HAProxy来绕过这些限制。


为什么会被限制?

很多企业出于安全考虑,会限制员工只能通过某些端口上网。有些还会检测流量是不是真的HTTP(S)协议。这就给我们使用SSH造成了麻烦。具体使用场景大家就举一反三,您就看着办吧。

解决方案

我们的思路是:把SSH流量伪装成HTTPS流量,从443端口传输。具体怎么做呢?我们需要用到两个强大的工具:OpenSSL和HAProxy。

  1. OpenSSL: 一个强大的开源加密工具包,我们用它来给SSH流量加密,让它看起来像HTTPS。
  2. HAProxy: 一个高性能的负载均衡器,我们用它来接收和转发流量。

工具安装

在开始配置之前,我们先来安装必要的工具。以Kali Linux系统为例:

  1. 安装OpenSSL:

    sudo apt update
    sudo apt install openssl

    安装完成后,可以通过 openssl version 命令验证安装是否成功。

  2. 安装HAProxy:

    sudo apt install haproxy

    安装完成后,可以通过 haproxy -v 命令检查版本信息。

HAProxy配置

安装完成后,我们需要配置HAProxy。HAProxy的配置文件通常位于 /etc/haproxy/haproxy.cfg。我们需要添加以下配置:

frontend fe_ssh
    bind *:443 ssl crt /etc/haproxy/certs/ssl.pem
    mode tcp
    tcp-request content set-var(sess.dst) ssl_fc_sni
    use_backend %[ssl_fc_sni]

backend server1
    mode tcp
    server s1 192.168.0.201: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.0.201:22 check: 指定后端SSH服务器的IP和端口。

SSL证书生成

为了使用SSL,我们需要生成一个自签名的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

这个命令会生成一个有效期为365天的自签名证书。在生成过程中,你需要填写一些信息,比如国家、地区、组织名称等。

启动HAProxy

配置完成后,我们需要启动或重启HAProxy服务:

sudo systemctl restart haproxy

可以通过以下命令检查HAProxy是否正常运行:

sudo systemctl status haproxy

客户端连接

现在,服务器端的配置已经完成。在客户端,我们需要使用特殊的SSH命令来连接:

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。

总结

通过OpenSSL和HAProxy,我们可以巧妙地将SSH流量伪装成HTTPS,从而绕过一些网络限制。这不仅能帮我们在受限环境中使用SSH,还能在一定程度上提高安全性。

这个方法展示了如何创造性地解决网络限制问题。但请记住,技术无好坏,关键看怎么用。作为安全从业者,我们要在合规和创新之间寻找平衡。

希望这篇文章能给大家一些启发。下次遇到类似的网络限制,你就知道该怎么应对了!如果在实践过程中遇到任何问题,欢迎在评论区留言讨论。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论