我在公司网络后面,使用 HTTP 代理。我还有一个 SSH 服务器,可以通过端口 22 访问。我没有任何类型的控制通过该服务器:我不是 root,即使我是,我也不允许安装软件或更改配置。服务器监听端口 22,必须到达那里,并且永远无法更改。
如果我配置XShell
(但其他客户端也应如此)使用公司代理,则无法连接。Wireshark 显示该CONNECT
方法被代理拒绝,因为“这不是 SSL 标准端口”。
我相信代理会阻止除 80 和 443 之外的端口的流量。无需进行深度数据包检查或其他特殊技巧。
我已经链接一篇文章关于为 SSH 配置 HTTP 代理“当代理过滤 SSH 协议时”,但问题是它适用于 Linux,而我还有另一个问题(它无法检测网卡,已经在这里问过了……)。
问题是:如何在不安装软件或更改目标机器上的配置的情况下绕过代理?
我也想了解
- 由于代理通过深度数据包检测阻止端口 22 而不是 SSH 协议,当服务器侦听端口 22 时,链接的指南是否有效并且永远无法改变?
- 有没有办法让它在 Windows 上运行?
答案1
对于任何企业代理问题,我建议使用 proxytunnel(而不是 corkscrew),因为即使使用完整的数据包嗅探,它也能使流量与真实的 HTTPS 流量完全无法区分。
该解决方案需要一个您控制的 https 服务器(可能在运行 ssh 服务器的同一台机器上),企业代理与该服务器进行通信。
第一个问题的答案是:proxytunnel 可以绕过您的公司代理阻止,除非在极少数情况下,它们通常会阻止您的 https 服务器。更多文档可参见这里。
我在 Linux 机器上使用它非常成功。似乎有适用于 Windows 的文档和二进制文件(第二个问题):
http://proxytunnel.sourceforge.net/download.php
http://egret.psychol.cam.ac.uk/techniques/firewall.html
如果你很幸运,那么一个更简单的解决方案也可以完成这项工作。与 corkscrew 一起,只需在某处设置一个中间 ssh 服务器,该服务器将通过你的公司代理转发端口到目标 ssh 服务器的端口 22。
答案2
不久前我在当地图书馆遇到了这个问题。唯一的区别是:我管理想要连接的服务器,因此我可以将设置更改为在其他端口上进行 ssh 连接。
关键是我不想这么做,而且我也不应该这么做。
我的解决方案是:
~$ torify ssh [email protected]
这种方法暂时管用。现在本地库阻止了 tor 端口。使用此方法解决此问题的唯一方法是将 torify 建立的 tor 电路配置为使用桥接器。
这些不是理想的解决方案,但如果您的 ssh 服务器设置正确,它们就简单、有效、安全,并且它们不需要在服务器上进行特殊设置或为此目的设置某些特定服务器。
缺点是,您的服务器防火墙将比以前更频繁地受到攻击,并且您的 ssh 日志将显示来自白俄罗斯或乌克兰或最终从其接收流量的任何出口节点的连接。如果您不费心记录您的远程访问并将其与日志关联起来,这可能会有点令人不安。