通过 stunnel 反向 ssh 隧道(或者只是沿 stunnel 连接反向)

通过 stunnel 反向 ssh 隧道(或者只是沿 stunnel 连接反向)

我正在创建一个安全“dropbox”,它可以部署在 nat 或任何防火墙后面,调用受控的可公开访问的服务器,然后从服务器启动控制。

我知道这可以通过 ssh -R 命令轻松完成,但是,我正在寻找一种能够通过适当的 SSL/TLS 和端口 443 有效逃避 IDS/IPS 的方法。

目前,我的设置正在运行(仅 SSL),我的 dropbox(我们称之为客户端)正在调用并启动与服务器的 stunnel 连接。然后我可以从客户端手动 ssh 到服务器。

这很好,但是,我需要能够通过已建立的隧道从服务器 ssh 到客户端。

问题:

  1. 我可以通过现有的 stunnel 连接(由客户端启动的 stunnel)直接从服务器进行 ssh 吗?这可能需要更改 stunnel 配置,我只是有点不知道应该更改什么。
  2. 我可以通过 stunnel 将客户端的 SSH 隧道反向连接到服务器,以便服务器有一个本地端口可以 ssh 返回到客户端吗?如果是这样,我无法让 ssh -R 命令正常工作,因为我认为我最终创建了一个循环。

以下是我的 stunnel 配置:

服务器:

cert=/path/to/cert.pem
pid=/tmp/stunnel.pid
[ssh]
accept = 443
connect = 127.0.0.1:22

客户:

cert=/path/to/cert.pem
pid=/tmp/stunnel.pid
client=yes
[ssh]
accept=2200
connect=<serverpubip>:443

尝试通过 stunnel 连接从客户端反向连接到服务器的 SSH 命令示例:

ssh -i /path/to/cert -R 2200:localhost:2200 -p 2200 admin@localhost -f -N

请记住,要求是只有客户端可以调用服务器来启动初始连接(stunnel),并且流量必须通过格式良好的 SSL/TLS 加密。我还需要获得从服务器到客户端的 shell 访问权限。提前致谢!

更新:

最终发现这是一个错误的 ssh 命令。对我有用的 ssh 命令是:

ssh -i /path/to/cert -R 2201:localhost:22 -p 2200 admin@localhost -f -N

答案1

我认为所需要做的就是将ssh 命令更改-R 2200:localhost:2200为。-R 2200:localhost:22

目前,您正在将服务器上的端口 2200 重新连接到客户端上的端口 2200。是的,这会创建一个转发循环,因为客户端:2200 会通过隧道重新连接到服务器。

假设客户端的ssh在22端口上运行,那么-R 2200:localhost:22将服务器的2200端口连接到客户端的ssh。

为了使这一点更清楚一些,我建议从服务器选择一个不同的端口号来反向隧道:比如说。-R 2201:localhost:22这样你就不会在两个主机上使用端口 2200,这将有助于防止你混淆两个端口。

答案2

你用实际工具无法达到你的目标,因为

  1. stunnel无法实现此反向连接功能,
  2. ssh无法作为守护进程运行,并且协议与 https 略有不同。足够智能的 IDS 将能够检测到这一点。

你需要做的是:

  1. 正如@NilsToedtmann 所建议的,你应该使用某种棘手的东西,至少是 OpenVPN。openvpn 的客户端应该在里面运行。注意超时/保持活动设置!你必须尽可能减少开销流量。
  2. OpenVPN 流量与普通 https 有很大不同,但有一个名为代理服务器有了它,您可以将 OpenVPN 流量嵌入到看起来更友好的数据流中。此工具是 tor 项目的一部分,但也可以独立使用(最初是针对中国大型防火墙开发的)。
  3. 如果图片中有某种类型的企业防火墙,你可以使用控制论让它看起来像 ie8,并使其与经过 Kerberos 认证的企业代理兼容
  4. 在服务器端,有一个工具可能非常有用,它的名字是安全组. 它允许你多路复用使用普通 https 服务通过 https 流量传输您的 openvpn/ssh。

所以,你的实际数据连接并不像你想象的那么简单,但你可以达到你想要的效果。如果你使用所有这些技术,它甚至可以抵挡智能网络安全检查。

答案3

为什么不在“dropbox”上安装一个持久的reverse_http(s) meterpreter?我认为这是通过http(s)获取反向shell的最简单方法。

相关内容