Apache HTTPS上的隧道

Apache HTTPS上的隧道,apache,proxy,https,ssh,tunnel,Apache,Proxy,Https,Ssh,Tunnel,在我的工作场所,流量拦截器/防火墙越来越糟糕。我无法在端口22上连接到我的家庭计算机,缺少ssh访问使我感到悲伤。我以前可以通过将SSH移动到端口5050来使用它,但我认为最近的一些过滤器现在将此流量视为IM,并可能通过另一个代理重定向它。这是我最好的猜测;在任何情况下,我的ssh连接现在在我登录之前终止 这些天来,我一直在HTTPS上使用Ajaxterm,因为端口443仍然没有受到干扰,但这远远不够理想。(糟糕的终端模拟,缺少端口转发,我的浏览器以惊人的速度泄漏内存…)我尝试在mod\u ss

在我的工作场所,流量拦截器/防火墙越来越糟糕。我无法在端口22上连接到我的家庭计算机,缺少ssh访问使我感到悲伤。我以前可以通过将SSH移动到端口5050来使用它,但我认为最近的一些过滤器现在将此流量视为IM,并可能通过另一个代理重定向它。这是我最好的猜测;在任何情况下,我的ssh连接现在在我登录之前终止

这些天来,我一直在HTTPS上使用Ajaxterm,因为端口443仍然没有受到干扰,但这远远不够理想。(糟糕的终端模拟,缺少端口转发,我的浏览器以惊人的速度泄漏内存…)我尝试在
mod\u ssl
之上设置
mod\u proxy\u connect
,我的想法是可以通过HTTPS发送
connect localhost:22 HTTP/1.1
请求,然后我就完全准备好了。可悲的是,这似乎不起作用;HTTPS连接工作,直到我完成发送请求;然后SSL退出。看起来好像
mod\u proxy\u connect
接管了整个连接,而不是继续通过
mod\u ssl
进行管道传输,从而混淆了HTTPS客户端

有没有办法让它发挥作用?我不想在普通HTTP上执行此操作,原因如下:

  • 留下这么一个大的公开代理真是糟糕透了
  • 大型开放式代理在HTTPS上也不太好,但由于需要身份验证,我觉得它很好
  • HTTP通过一个代理——我不太担心我的流量被嗅探,因为ssh将“明文”通过隧道——但它比HTTPS更可能被破坏,HTTPS基本上不能被代理
要求:

  • 必须在端口443上工作,而不干扰其他HTTPS通信(即,我不能将ssh服务器放在端口443上,因为我将不再能够通过HTTPS提供页面服务)
  • 我有或可以编写一个在Windows(或Cygwin)下运行的简单端口转发器客户端
编辑
已经有人向我指出了这一点,但这并没有帮助:在文章的最后,他们提到了防止通过HTTPS进行隧道传输,这正是我遇到的问题。此时,我可能正在查看一些CGI脚本,但如果有更好的解决方案可用,我不想将其列为一项要求。

我认为您必须找到一个当前未使用的端口,您可以使用该端口,并进行监听。443是显而易见的候选人,但你说那是不可能的。邮件(25110143)、telnet(23)、ftp(21)、DNS(53)甚至whois(43)呢?

我真的很抱歉成为这里的魔鬼代言人,但是如果他们在你的工作中阻止了端口,很可能是因为他们不希望人们破坏安全


现在,如果你得到老板的许可打开一条隧道,那很好,但是如果发生了什么事情,任何事情,他们发现你有一条隧道,我几乎可以向你保证,你会成为替罪羊。所以,如果我是你,如果他们设置防火墙,我就不会在工作中打开隧道。

代理隧道可能是你的答案

假设我的ssh服务器是host.domain.tld,而我的works代理服务器是10.2.4.37

我会将其添加到本地ssh配置中

Host.domain.tld ProxyCommand/usr/local/bin/proxytunnel-q-p10.2.4.37:3128-d%h:%p
ProtocolKeepAlives 30

在您的机器上使用2个IP地址怎么样


在一个IP_1:443上绑定apache/https,在另一个IP_2:443上绑定您的sshd?

了解公司为何有如此严格的政策。这可能是一个很好的理由

如果您仍然发现要绕过该策略,可以编写一个小型代理,在端口443上侦听服务器,然后根据请求将流量转发到web服务器或SSH守护进程。不过有两个陷阱

  • 要确定它是HTTPS请求还是SSH请求,您需要尝试以(小)超时读取一些数据,这是因为TLS/SSL握手从客户端发送一些数据开始,而SSH握手从服务器发送一些数据开始。超时必须足够大,以便在TLS/SSL握手中延迟从客户端传递初始数据,因此它将使建立SSH连接的速度变慢

  • 如果您公司的HTTP代理是智能的,那么当您
    连接到端口443时,它实际上会窃听预期的TLS/SSL“握手”,并且当它检测到这不是TLS/SSL握手时,它可能会终止SSH连接尝试。为了解决这个问题,您可以将SSH守护程序包装到TLS/SSL隧道中(例如,
    stunnel
    ),但是您需要根据客户端请求中的TLS/SSL版本区分请求,以确定是将TLS/SSL连接路由到web服务器还是路由到TLS/SSL隧道SSH守护程序

  • 必须在端口443上工作,而不干扰其他HTTPS通信(即,我不能将ssh服务器放在端口443上,因为我将不再能够通过HTTPS提供页面服务)


    是否可以将HTTPS服务器绑定到其他端口?取决于它的用途,您甚至可以通过将ssh发送到home,然后从那里使用lynx来解决无法从工作中直接访问它的问题。

    您应该能够使用iptables将ssh通信从您的工作机器转发到ssh,而在端口443上连接到您的家庭服务器的所有其他机器都获得Apache服务器

    尝试这样的规则:

    iptables-t nat-A预路由-p tcp-s 111.111.111.111--dport 433-j重定向--到端口22

    其中111.111.111.111是您办公室计算机的ip地址

    所有这些都假设您正在运行Linux>=2.4,您现在应该已经运行了。它已经问世近十年了


    iptables的文档位于。

    在家中设置OpenVPN 2.1服务器,使用端口443(如果您在家中设置了任何HTT