ssh隧道配置
1 前言
隧道是一种把一种网络协议封装进另外一种网络协议进行传输的技术。这里我们研究ssh隧道,所以所有的网络通讯都是加密的。又被称作端口转发,因为ssh隧道通常会绑定一个本地端口,所有发向这个端口端口的数据包,都会被加密并透明地传输到远端系统。
ssh隧道有3种类型:
l 动态端口转发(Socks 代理)
l 本地端口转发
l 远端端口转发
2 隧道配置
2.1 实验环境
角色 | IP |
服务器A | 192.168.8.10 |
服务器B | 192.168.8.11 |
服务器C | 192.168.8.12 |
2.2 动态端口转发(Socks)
动态端口允许通过配置一个本地端口,把通过隧道到数据转发到远端的所有地址。本地的应用程序需要使用Socks协议与本地端口通讯。此时SSH充当Socks代理服务器的角色。
动态转发需要用第三方socks软件
使用场景1
已知服务器A可以通过SSH访问登录服务器B,但无法访问服务器C,服务器B可以访问服务器C。
服务器A(192.168.8.10)通过服务器B(192.168.8.11)访问服务器C(192.168.8.12)所有端口
使用场景2
已知服务器A可以通过SSH访问登录服务器B,但无法访问某网站,服务器B可以访问某网站。
服务器A(192.168.8.10)通过服务器B(192.168.8.11)访问某网站
2.2.1 linux方式
命令格式:
ssh -D [bind_address:]port
参数说明
bind_address 指定绑定的IP地址,默认情况会绑定在本地的回环地址(即127.0.0.1),如果空值或者为*会绑定本地所有的IP地址,如果希望绑定的端口仅供本机使用,可以指定为localhost。
port 指定本地绑定的端口
l 免密钥方式
如果使用免密钥方式,首先需要将服务器A(192.168.8.10)能免密钥访问服务器B(192.168.8.11)
服务器A(192.168.8.10)操作:
ssh-keygen
一直回车
将服务器A(192.168.8.10)的id_rsa.pub内容放到服务器B(192.168.8.11).ssh/authorized_keys里面
ssh -f -N –g -D localhost:7001 root@192.168.8.11
l 亚马逊中转方式
如果服务器B(192.168.8.11)是亚马逊ec2服务器,操作如下:
将亚马逊pem的key上传服务器A(192.168.8.10),比如/key目录下:
ssh -i /key/key.pem -f -N -g -D localhost:7001 ec2-user@192.168.8.11
l 安装socks代理软件
下载代理软件proxychains
git clone https://github.com/rofl0r/proxychains-ng.git
安装配置
cd proxychains-ng/
./configure --prefix=/usr/local/proxychains
make
make install
make install-config
vi /usr/local/proxychains/etc/proxychains.conf
修改配置:
[ProxyList] # add proxy here ... # meanwile # defaults set to "tor" #socks4 127.0.0.1 9050 socks5 127.0.0.1 7001 |
使用proxychains:
一般就是在命令前面加上proxychains4即可
ssh方法:
/usr/local/proxychains/bin/proxychains4 ssh root@192.168.8.12
mysql方法:
/usr/local/proxychains/bin/proxychains4 mysql -uroot -h 192.168.8.12 -p
curl方法:
/usr/local/proxychains/bin/proxychains4 curl icanhazip.com
wget方法:
/usr/local/proxychains/bin/proxychains4 wget http://****
2.2.2 windows方式
xshell软件方法:
服务器A(192.168.8.10)先通过xshell软件连接到服务器B(192.168.8.11)
然后进行如下设置:
保持一直连接:
增加跳转配置:
重新连接服务器B:
保持连接不要关闭
安装socks5客户端软件proxifier
http://www.hanzify.org/software/13717.html
打开proxifier软件,并增加代理:
编辑代理规则:
默认的规则选择Direct,然后新增一个规则
注意:应用程序选择不一定生效,可以随便写一个程序,我们用另外方法让程序使用代理。
选择程序使用代理:
比如谷歌浏览器使用代理,对着谷歌浏览器右键:
就可以使用代理访问了,并且proxifier会有记录:
其他程序方法一样,右键选择代理打开即可。
2.2.3 优缺点
优点:
配置一个代理服务就可以访问远端机器和与其所在子网络的所有服务
缺点:
应用程序需要额外配置SOCKS代理,若应用程序不支持代理配置则无法使用
2.3 本地端口转发
通过SSH隧道,将一个远端机器能够访问到的地址和端口,映射为一个本地的端口。
相比动态转发,就是详细指定到目标某个端口。但不需要第三方socks软件。
使用场景
已知服务器A可以通过SSH访问登录服务器B,但无法访问服务器C,服务器B可以访问服务器C。
服务器A(192.168.8.10)通过服务器B(192.168.8.11)访问服务器C(192.168.8.12)某个端口
2.3.1 linux方式
命令格式
ssh -L [bind_address:]port:host:hostport
参数说明
bind_address 指定绑定的IP地址,默认情况会绑定在本地的回环地址(即127.0.0.1),如果空值或者为*会绑定本地所有的IP地址,如果希望绑定的端口仅供本机使用,可以指定为localhost。
port 指定本地绑定的端口
host 指定数据包转发目标地址的IP,如果目标主机和ssh server是同一台主机时该参数指定为localhost
host_port 指定数据包转发目标端口
l 免密钥方式
如果使用免密钥方式,首先需要将服务器A(192.168.8.10)能免密钥访问服务器B(192.168.8.11)
服务器A(192.168.8.10)操作:
ssh-keygen
一直回车
将服务器A(192.168.8.10)的id_rsa.pub内容放到服务器B(192.168.8.11).ssh/authorized_keys里面
服务器A(192.168.8.10)操作:
ssh -f -N –g -L 7002:192.168.8.12:22 root@192.168.8.11
然后直接访问192.168.8.10的7002端口就是访问192.168.8.12的22端口
ssh root@192.168.8.10 –p 7002
l 亚马逊方式
如果服务器B(192.168.8.11)是亚马逊ec2服务器,操作如下:
将亚马逊pem的key上传服务器A(192.168.8.10),比如/key目录下:
ssh -i /key/key.pem -f -N –g -L 7002:192.168.8.12:22 root@192.168.8.11
2.3.2 windows方式
xshell软件方法:
服务器A(192.168.8.10)先通过xshell软件连接到服务器B(192.168.8.11)
然后进行如下设置:
保持一直连接:
增加跳转配置:
重新连接服务器B:
保持连接不要关闭
使用xshell连接localhost的7002端口就是访问192.168.8.12的22端口
2.3.3 优缺点
优点:
无需设置代理
缺点:
每个服务端口都需要配置不同的端口转发
2.4 远端端口转发
远程端口转发用于某些单向阻隔的内网环境,比如说NAT,网络防火墙。在NAT设备之后的内网主机可以直接访问公网主机,但外网主机却无法访问内网主机的服务。如果内网主机向外网主机建立一个远程转发端口,就可以让外网主机通过该端口访问该内网主机的服务。可以把这个内网主机理解为“内应”和“开门者”。
使用场景
已知服务器A可以通过SSH访问登录服务器B,但服务器B不能访问服务器A,服务器B和服务器C可以相互访问。若服务器C想访问服务器A的某个端口
服务器C(192.168.8.12)通过服务器B(192.168.8.11)访问服务器A(192.168.8.10)某个端口
2.4.1 linux方式
命令格式
ssh -R [bind_address:]port:host:hostport
参数说明
bind_address 指定绑定的IP地址,默认情况会绑定在本地的回环地址(即127.0.0.1),如果空值或者为*会绑定本地所有的IP地址,如果希望绑定的端口仅供本机使用,可以指定为localhost。
port 指定本地绑定的端口
host 指定数据包转发源地址的IP,如果源主机和ssh server是同一台主机时该参数指定为localhost
host_port 指定数据包转发源端口
l 免密钥方式
如果使用免密钥方式,首先需要将服务器A(192.168.8.10)能免密钥访问服务器B(192.168.8.11)
服务器A(192.168.8.10)操作:
ssh-keygen
一直回车
将服务器A(192.168.8.10)的id_rsa.pub内容放到服务器B(192.168.8.11).ssh/authorized_keys里面
服务器A(192.168.8.10)操作:
ssh -f -N –g -R 22:192.168.8.11:7003 root@192.168.8.11
然后直接访问192.168.8.11的7003端口就是访问192.168.8.10的22端口
ssh root@192.168.8.11 –p 7003
2.4.2 windows方式
xshell软件方法:
服务器A(192.168.8.10)先通过xshell软件连接到服务器B(192.168.8.11)
然后进行如下设置:
保持一直连接:
增加跳转配置:
重新连接服务器B:
保持连接不要关闭
使用xshell连接192.168.8.11的7003端口就是访问192.168.8.10的22端口
2.4.3 优缺点
优点:
可以穿越防火墙和NAT设备
缺点:
每个服务都需要配置不同的端口转发
本文出自 “桃子技术” 博客,请务必保留此出处http://taozijishu.blog.51cto.com/11320335/1971141
原文地址:http://taozijishu.blog.51cto.com/11320335/1971141