SSH端口转发

@lzeroyuee  May 3, 2020

概述

SSH端口转发可以用来加密数据或是穿透防火墙。在具体的使用场景中,可以被细分为本地端口转发
远程端口转发动态端口转发

![](G:tmpssh_img1.png)

应用客户端和应用服务端不在直接建立通信,而是通过ssh隧道来完成数据的转发操作

实验拓扑

VLAN可以互通,VLAN10可以通外网,外网主机ping通内网

![](G:tmpssh_img2.png)

VLAN10中有一台xp,一台metasploitable2,两台rhel。VLAN20中有一台server2003,运行着IIS

端口转发

本地端口转发

![](G:tmpssh_img3.png)

ssh -L <local port>:<remote host>:<remote port> <SSH hostname>

主机A为应用客户端,主机B为应用服务端。同时在主机A的一侧存在SSH的客户端,主机B的一侧存在
SSH的服务端。这样就构成了本地端口转发的条件

倘若主机B上的服务仅监听本地端口,那么就可以用本地端口转发的方式,将这个端口“映射”给主机A,
主机A通过访问自己本地的端口就可以访问主机B的服务

  • 例1:

    1. metasploitable主机的apache服务只监听本地的80端口
    2. 要让VLAN中的所有主机均可访问metasploitable主机的apache服务。
      那么我们就可以使用

      ssh -fNg -L 23333:localhost:80 [email protected]
      将主机A的23333端口转发至<remote>:<port>上。这里的localhost和<SSHhostname>表示同一台主机

      • -L指本地转发,即后面的端口开在本地
      • -f在执行命令前退至后台
      • -N不执行远程命令,用于转发端口
      • -g允许远端主机连接本地转发的端口
  • 例2:

    1. server 2003只能由rhel6主机访问
    2. 要让VLAN中的所有主机均能访问server 2003上的IIS

      那么我们就让rhel7主机和rhel6主机建立SSH,通过rhel6主机访问server 2003

      ssh -fNg -L 23334:10.0.1.100:80 [email protected]

      命令详解:可以将<remote>:<port>形象的理解成最终访问的目标,将-L <local port>
      <SSH hostname>理解成建立ssh隧道的两端。这也就能形象的解释上个例子中localhost与`<SSH
      hostname> `指同一台主机。

      ![](G:tmpssh_img4.png)

      需要注意的是,只有在建立SSH隧道的通道中数据是加密传输的,其他地方的数据传输并没有经过SSH的加密

远程端口转发

如果应用客户端和SSH服务端在一侧,应用服务端和SSH客户端在令一侧,那么这种端口转发就是远程端口转发

![](G:tmpssh_img5.png)

ssh -fN -R <local port>:<remote host>:<remote port> <SSH hostname>

与本地转发的格式类似,但是远程转发不支持参数-g

例子:

  1. 外网中有台kali主机,ip为192.168.111.128,已经开启了ssh服务,端口22。外网主机无法主动访问内网
  2. 通过远程端口转发实现内网穿透,使得Kali可以访问到metasploitable主机的apache服务
    那么我们就可以在metasploitable主机上使用

    ssh -fN -R 23333:localhost:80 [email protected]

    • -R 指远程转发,即后面的端口开在远程

      这里的localhost指metasploitable主机

关于-g参数,可以修改/etc/ssh/sshd_config配置文件中GatewayPorts yes即可实现远程主机连
接本机的转发端口

究其原因,SSH的服务端在远程转发中只会监听本地的环回口

![](G:tmpssh_img6.png)

在配置完之后便会监听所有网卡

![](G:tmpssh_img7.png)

动态端口转发

动态端口转发的对比就是静态端口转发。本地端口转发与远程端口转发都属于静态端口转发,他们的特点就是应用服务端的ip地址和监听端口号都是固定的。倘若这些都是变化的,那么这就是动态端口转发

SSH 动态端口转发是通过Socks协议实现的,创建动态端口转发时SSH服务器就类似一个Socks代理服务器,所以这种转发方式也叫Socks转发

ssh -D <local port> <SSH hostname>

需要注意的是,不需要指定目标ip与端口号。这时SSH客户端就会开始监听本地端口<local port>,当配置完需要Socks代理的服务后,请求会被转发到SSH服务端上


添加新评论