27

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

这些天我一直在通过 HTTPS 使用 Ajaxterm,因为端口 443 仍然不受干扰,但这远非理想。(糟糕的终端仿真,缺少端口转发,我的浏览器以惊人的速度泄漏内存......)我尝试mod_proxy_connect在 . . 可悲的是,这似乎行不通。HTTPS 连接有效,直到我完成发送请求;然后 SSL 废话。似乎接管了整个连接,而不是继续通过管道,这让 HTTPS 客户端感到困惑。mod_sslCONNECT localhost:22 HTTP/1.1mod_proxy_connectmod_ssl

有没有办法让它工作?我不想通过纯 HTTP 执行此操作,原因如下:

  • 留下一个像这样的大胖子开放代理只会很臭
  • 一个大的开放式代理也不适合 HTTPS,但是需要身份验证对我来说感觉很好
  • HTTP通过代理——我不太担心我的流量被嗅探,因为它将通过隧道“纯文本”传输——但它比HTTPS更容易被破坏,而HTTPS基本上不能被代理

要求:

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

编辑

DAG:有人向我指出了通过 HTTP(S) 建立 SSH 隧道,但这并没有帮助:在文章的最后,他们提到了Bug 29744 - CONNECT 不适用于现有的 SSL 连接,从而阻止了 HTTPS 上的隧道,正是我遇到的问题。此时,我可能正在查看一些 CGI 脚本,但如果有更好的解决方案可用,我不想将其列为要求。

4

13 回答 13

8

找出为什么公司有这样的限制性政策。这可能是有充分理由的。

如果您仍然想绕过该策略,您可以编写一个小型代理,在您的服务器上侦听端口 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 守护程序。

于 2008-10-08T23:35:58.530 回答
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

于 2008-10-08T23:57:41.853 回答
6

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

然后,在您的笔记本电脑上以公路战士模式设置您的 OpenVPN 客户端,以访问家中的 OpenVPN 服务器。在您使用 OpenVPN 创建的安全 VPN 网络中,您将能够在家中或任何您喜欢的地方打电话。不再需要为此目的使用 SSH。

于 2008-11-24T09:03:20.473 回答
2

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

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

于 2008-10-08T05:17:14.707 回答
2

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

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

于 2008-10-08T08:51:42.683 回答
2

能不能找个中间人?

在云中运行一个小型/免费/便宜的实例,在 443 上侦听 SSH,然后通过该云实例在您最喜欢的端口(22 或其他端口)上通过隧道连接到您的 home box。

我敢肯定,它会增加一些延迟,但它解决了保持原始家庭设置完好无损的问题。

于 2012-03-01T19:00:09.207 回答
1

我认为你必须找到一个你目前没有使用的端口,你可以离开,然后听它。443 是明显的候选者,但你说那是不可能的。mail (25, 110, 143), telnet (23), ftp (21), DNS (53) 甚至 whois (43) 呢?

于 2008-10-08T04:52:12.447 回答
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

于 2008-10-08T07:38:48.353 回答
1

看:

SSH 通过或通过代理

http://daniel.haxx.se/docs/sshproxy.html

http://www.agroman.net/corkscrew/

于 2009-03-03T11:22:02.323 回答
1

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

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

于 2011-07-17T11:29:01.347 回答
0

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

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

于 2008-10-08T23:47:41.827 回答
0

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

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

于 2009-03-05T14:02:21.437 回答
0

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

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

仍然不是完美的世界……如果我可以通过 HTTPS 隧道连接到我的家庭网络,那就太好了。

于 2012-12-03T04:18:16.633 回答