我正在创build一个可以在NAT或任何防火墙后面部署的安全“保pipe箱”,呼叫一个受控制的可公开访问的服务器,然后从服务器启动控制。
我知道这很容易用ssh -R命令完成,但是,我正在寻找一些能够通过适当的SSL / TLS和端口443有效避开IDS / IPS的东西。
目前我的设置工作(只SSL)有我的Dropbox(我们将这个客户端)调用,并启动与服务器的stunnel连接。 然后我可以从客户端手动ssh到服务器。
这很好,但是,我需要能够通过build立的stunnel从服务器ssh到客户端。
问题:
以下是我的stunnelconfiguration:
服务器:
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
示例SSH命令尝试通过通道连接从客户端到服务器进行反向:
ssh -i /path/to/cert -R 2200:localhost:2200 -p 2200 admin@localhost -f -N
请记住,要求是只有客户端可以调用服务器来启动初始连接(stunnel),并且stream量必须通过格式良好的SSL / TLSencryption。 我还需要从服务器获得对客户端的shell访问权限。 提前致谢!
更新:
它最终是一个糟糕的SSH命令。 这对我工作的ssh命令是:
ssh -i /path/to/cert -R 2201:localhost:22 -p 2200 admin@localhost -f -N
我认为所有需要的是在您的ssh命令中将-R 2200:localhost:2200更改为-R 2200:localhost:22 。
现在,您将服务器上的端口2200连接到客户端上的端口2200。 是的,因为客户端:2200被传回到服务器,所以创build了一个转发循环。
假设客户端上的ssh运行在端口22上,那么-R 2200:localhost:22会将服务器上的端口2200连接到客户端上的ssh。
为了使这个更清楚一点,我build议select一个不同的端口号来反向来自服务器的隧道:比如-R 2201:localhost:22 。 这样你就不会在两个主机上使用2200端口,这将有助于避免让两个端口感到困惑。
您的实际工具目标无法达到,因为
stunnel无法做到这个连接function, ssh不会作为守护进程工作,并且与https有一些不同的协议。 足够的智能IDS-es将能够检测到。 你必须做什么:
所以,你的实际数据连接并不像你想的那么简单,但你可以达到你想要的。 如果使用所有这些技术,即使是智能networking安全检查也是如此。
为什么不在“dropbox”上安装持久的reverse_http(s)meterpreter? 我认为这是通过http(s)获取反向shell的最简单方法。