通过HTTPS隧道

时间:2008-10-08 04:29:44

标签: apache proxy https ssh tunnel

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

这些天我一直在使用Ajaxterm而不是HTTPS,因为端口443仍然没有受到干扰,但这远非理想。 (Sucky终端仿真,缺少端口转发,我的浏览器以惊人的速度泄漏内存......)我尝试在mod_proxy_connect之上设置mod_ssl,并认为我可以发送{{ 1}}通过HTTPS请求,然后我就全部设置好了。可悲的是,这似乎不起作用; HTTPS连接有效,直到我完成发送请求为止;然后SSL疯了。似乎CONNECT localhost:22 HTTP/1.1接管整个连接,而不是继续通过mod_proxy_connect,从而混淆了HTTPS客户端。

有没有办法让它发挥作用?我不希望通过普通的HTTP执行此操作,原因如下:

  • 留下一个像胖子一样的大胖开放代理
  • 大胖开放代理也不比HTTPS好,但是需要身份验证才对我感觉良好
  • HTTP通过一个代理 - 我不是担心我的流量被嗅探,因为它是通过隧道将“明白”的ssh - 但它还有很多可能比HTTPS严重受损,从根本上无法代理

要求:

  • 必须通过端口443工作,而不会干扰其他HTTPS流量(即我不能将ssh服务器放在端口443上,因为我将无法再通过HTTPS提供页面)
  • 我已经或可以编写一个在Windows(或Cygwin)下运行的简单端口转发器客户端

修改

DAG: Tunnelling SSH over HTTP(S)已被指出给我,但它没有帮助:在文章的最后,他们提到Bug 29744 - CONNECT does not work over existing SSL connection阻止通过HTTPS进行隧道传输,这正是我遇到的问题。此时,我可能正在查看一些CGI脚本,但如果有更好的解决方案,我不想将其列为要求。

13 个答案:

答案 0 :(得分:7)

了解公司为何有这样一个限制性政策。这可能是有充分理由的。

如果您仍然发现想要绕过策略,您可以编写一个小代理,它将在端口443上侦听您的服务器,然后根据请求将流量转发到您的Web服务器或SSH守护进程。虽然有两次捕获。

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

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

答案 1 :(得分:6)

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

尝试这样的规则:

iptables -t nat -A PREROUTING -p tcp -s 111.111.111.111 --dport 433 -j REDIRECT --to-port 22

111.111.111.111是您办公室计算机的IP地址。

这一切都假设你正在运行Linux> = 2.4,你现在应该这样做。它已经出了差不多十年了。

iptables的文档位于http://www.netfilter.org

答案 2 :(得分:6)

在家中设置OpenVPN 2.1服务器,使用端口443(如果您在家443端口设置任何HTTPS服务,触发OpenVPN的端口共享选项以在端口443处理OpenVPN和HTTPS事务;此功能仅可用到非Windows操作系统)

然后,在road-warrior模式下在笔记本电脑上设置OpenVPN客户端,以访问家中的OpenVPN服务器。您可以在使用OpenVPN创建的安全VPN网络中呼叫家庭或任何您喜欢的地方。为此,不再需要使用SSH。

答案 3 :(得分:2)

如何在您的计算机上使用2个IP地址?

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

答案 4 :(得分:2)

你能成立一个中间人吗?

在云中监听443上的小型/免费/廉价实例,然后通过这个云实例隧道到您最喜欢的端口上的主页框 - 22或其他任何内容。

我确定会增加一些延迟,但它解决了保持原始家庭设置不变的问题。

答案 5 :(得分:1)

我认为你必须找到一个你目前没有使用的端口,你可以开始使用,并听取它。 443是明显的候选人,但你说这是不可能的。邮件(25,110,143),telnet(23),ftp(21),DNS(53),甚至是whois(43)怎么样?

答案 6 :(得分:1)

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

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

答案 7 :(得分:1)

代理隧道可能是您的答案

http://proxytunnel.sourceforge.net/

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

我会将此添加到我的本地ssh配置

主机host.domain.tld     ProxyCommand / usr / local / bin / proxytunnel -q -p 10.2.4.37:3128 -d%h:%p     ProtocolKeepAlives 30

答案 8 :(得分:1)

答案 9 :(得分:1)

由于在没有涉及SSL的情况下apache对CONNECT没有任何问题,因此我关闭了SSL功能,并使用stunnel来提供我网站的https版本。这不需要任何重新编译,并允许您的网站正常提供https。到目前为止,我知道最干净的解决方法。

有关详细信息,请参阅http://chm.duquesne.free.fr/blog/?p=281

答案 10 :(得分:0)

  

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

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

答案 11 :(得分:0)

那么,请尝试尝试( - 它支持HTTP代理服务器)!

http://www.proxifier.com/documentation/intro.htm

答案 12 :(得分:0)

我设法通过AjaxTerm使用以下设计绕过我公司的防火墙,它对我有用。

公司网络上的PC - >公司代理通过https - >互联网 - >我的家庭Apache反向代理服务器在SSL + .htpasswd保护 - > AjaxTerm服务器(从这里开始,我可以通过SSH连接到任何其他服务器)。

如果我能通过HTTPS隧道连接到我的家庭网络,那么它仍然不是完美的世界......