SSH隧道转发
0x00 ssh常用参数说明
-C 压缩传输数据,加快传输速度
-f 后台对用户名密码进行认证
-N 仅仅只用来转发,不用再弹回一个新的shell
-n 后台运行
-q 安静模式,不要显示警告等信息
-l 指定ssh登录名
-g 允许远程主机连接到本地转发的端口(本机监听地址设为0.0.0.0,不选则为127.0.0.1)
-L 进行本地端口转发
-R 进行远程端口转发
-D 动态转发,即socks代理
-T 禁止分配伪终端
-p 指定远程ssh服务端口
0x01 本地转发
ssh [-C] [-f] [-N] [-g] -L [本机ip]:本机端口:vps能访问的主机ip:端口 <user@vps>
将本地的一个端口映射到vps能到达的主机的一个端口。如果vps是边界设备,拥有多网卡,那么就可以用该方法访问内网主机的服务。
例:假如你拥有一台web服务器的控制权,但是数据库服务器没有公网IP,你想直接访问数据库的服务,这时就可以使用本地转发,在本地(local)执行如下命令:
ssh -Nnf -L 6666:10.10.10.12:3306 root@188.224.123.45
#访问本地的6666端口就可以被映射到数据库10.10.10.12的3306端口
mysql -u root -ppassword -P 6666
序列图如下:
0x02 远程转发
ssh -C -f -N -R 0.0.0.0:vps_port:本机能访问的IP:端口 root@vps
将vps上的一个端口映射到本机能到达的主机的一个端口。以至于可以通过vps访问内网的计算机上面的服务。遗憾的是,即使你指定了监听地址为0.0.0.0,它也仅能监听127.0.0.1,不能实现内网穿透。
然后经过一番折腾,得出答案,需要修改sshd的配置文件/etc/ssh/sshd_config
,将配置做如下修改:
GatewayPorts yes
#重启sshd服务
service sshd restart || systemctl restart sshd
0x03 动态转发
ssh -qTfnN -D 0.0.0.0:1080 root@vps -p 22
本机将本地1080端口的所有流量发给vps,vps转发收到的流量。这就是赤裸裸的socks代理啊。