长亭百川云 - 文章详情

利用SSH隧道构建多级tunnel

bloodzer0

79

2024-07-13

01

简介

隧道是把一种网络协议封装进另外一种网络协议进行传输的技术。SSH构建隧道有三种方式: 本地转发、远程转发、动态转发。本次只使用到第一、三种方式来构建多级跳板。

02

原理

本地转发: 将本地的端口与远程机器上的端口构建映射关系。其原理是本地机器上分配一个端口进行侦听,一旦该端口有了连接,就将数据经过通道转发给远端机器上的端口。其格式为:

ssh -C -f -N -L listen_port:DST_Host:DST_port user@Tunnel_Host -p Tunnel_Host_sshport

动态转发: 对于本地转发,存在两个一一对应的端口,分别位于SSH的客户端和服务端; 动态转发的目标端口则是不固定的,其原理是在本地机器上分配了一个端口进行侦听,一旦该端口有了连接,转发出去的数据由发起的请求来决定交给远端机器的哪个端口。其格式为:

ssh -C -f -N -D listen_port user@Tunnel_Host -p Tunnel_Host_sshport

参数说明:

# -N 不打开远程shell,处于等待状态,只是搭好了隧道,不ssh连接远端。用于转发端口(PS:无 ssh登陆日志)

利用ssh构建多级跳板,就是先用本地转发将远端机器的ssh端口与本地端口做映射,然后再通过本地端口继续与其他远端机器的ssh端口构建映射,直至最后一跳时采用任意动态端口转发(建立socks服务器)。

最后本地使用socks代理工具进行配置,就可以根据需要让应用按照之前构建的隧道进行通信。

示例:两级跳板,系统为linux,实验环境:

# Client A:Windows Localhost

第一层转发: 

A(localhost:12345)->B(192.168.1.39:22)->C(192.168.1.42:55) 

ssh -Nf -C -L 12345:192.168.1.42:55 rootB@192.168.1.39 -p 22

这一步是做了本地12345端口到远程C的55端口映射,A与B之间的通信是SSH加密通信。 

第二层转发: 

ssh(localhost:9833) -> tunnel2(localhost:12345)

ssh -Nf -C -D localhost:9833 rootC@localhost -p 12345

这一步只绑定本地端口(9833),虽然是与本地的12345通信,但实质是通过tunnel1与C建立了动态转发关系。此时C充当Socks代理服务器的⻆色。

Ref: 

http://linux.51yip.com/search/ssh https://blog.csdn.net/king\_cpp\_py/article/details/79560606

03

服务器配置

修改SSH端口: 在/etc/ssh/sshd_config修改Port为想要的端口,检查AllowTcpForwarding的值是否为Yes(允许远程主机本地端口转发),如果需要绑定到0.0.0.0机器上,则检查GatewayPorts的值是否为Yes。然后执行

service sshd restart

SSH IP访问限制:

sudo vi /etc/hosts.allow
sshd:192.168.0.1
sudo vi /etc/hosts.deny
sshd:ALL

在这两个文件中的配置是立即生效,本机测试需要在新窗口中进行。

Ref: 

https://blog.csdn.net/god12

3209/article/details/17683939

04

使用工具配置

1.使用mobaxterm配置tunnel

打开mobaxterm,在tools中的network中选择MobaSSHTunnel,在弹出的对话框中选择New SSH tunnel

在端口转发配置窗口中选择Local port forwarding,按照提示填写信息

点击save保存回到MobaSSHTunnel对话框,再次添加新的tunnel,选择Dynamic port forwarding 

示例配置结果如下:

依次启用tunnel,提示输入相对应的密码,确认保存密码

在所有tunnel通道启用完后,点击各tunnel尾部的闪电标识符,启用Autoreconnect,确保断线自动重连。(使用autossh也能实现连接断开之后自动重连功能)

☞注意:Mobaxterm免费版只能使用两个tunnel,xshell不限。 

2.本机使用proxifier代理

打开proxifier,选择Profile -> Proxy Server -> add,根据实际填写对应的端口信息(此处应为9833) 

然后保存,弹出规则变更提示框,点击是即可。之后可以用其为各类应用进行socks代理,最终通过C访问目标。

相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2