SSH的端口转发

一、SSH端口转发的概念

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

二、SSH端口转发的三种场景

1、 本地转发

先看图,总共3台机器,我们想要使用 client去telnet到realserver上,直接连接是连不上的,这时我们可以在client端进行如下操作

我们可以开启client的端的一个本地端口,我们以30000端口为例
在client上连接自己的30000端口,传输的数据通过ssh封装发送到到dumpserver,再有dumpserver执行telnet到realserver,建立连接
这是,realserver的socket显示连接的是dumpserver,而不是client,但真实发送数据的是client端。
通过这种转发机制,即实现了,数据的封装保密,又实现了内外网服务的连接。

流程:data->client:30000->client:随即端口 ->dumpserver:22->dumserver: 随即端口->realserver:23

下面是执行步骤:

1、因为图内画的是同一网段的机器,为了实验,我们现在realserver上使用防火墙策略,禁止client端连接。
2、client、dumpserver需要安装telnet-server包
3、在client端进行转发配置

  1. 在realserver上操作,添加防火墙策略,禁止172.18.30.253访问
  2. [[email protected] ~]# ip a | grep inet | grep eth0
  3. inet 172.18.30.100/16 brd 172.18.255.255 scope global eth0
  4. [[email protected] ~]# iptables -A INPUT -s 172.18.30.253 -j REJECT
  5. [[email protected] ~]# iptables -L
  6. Chain INPUT (policy ACCEPT)
  7. target prot opt source destination
  8. REJECT all -- 172.18.30.253 anywhere reject-with icmp-port-unreachable
  9. Chain FORWARD (policy ACCEPT)
  10. target prot opt source destination
  11. Chain OUTPUT (policy ACCEPT)
  12. target prot opt source destination
  1. dumpserver上安装telnet(以安装过)
  2. [[email protected]6-01 ~]# yum install -y telnet
  3. realserver上安装 telnet,并开启telnet服务
  4. [[email protected] ~]# yum install -y telnet telnet-server
  5. [[email protected] ~]# systemctl start telnet.socket
  6. client上安装telnet
  7. [[email protected] ~]# yum install -y telnet
  1. client端进行配置
  2. [[email protected] ~]# ping -c1 172.18.30.100
  3. PING 172.18.30.100 (172.18.30.100) 56(84) bytes of data.
  4. From 172.18.30.100 icmp_seq=1 Destination Port Unreachable
  5. --- 172.18.30.100 ping statistics ---
  6. 1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms
  7. 可以看出现在client是连接不上realserver的
  8. [[email protected] ~]# ssh -L 30000:172.18.30.100:23 172.18.30.254 -Nf
  9. [email protected]172.18.30.254‘s password:
  10. [[email protected] ~]# telnet 127.0.0.1 30000
  11. Trying 127.0.0.1...
  12. Connected to 127.0.0.1.
  13. Escape character is ‘^]‘.
  14. Kernel 3.10.0-693.el7.x86_64 on an x86_64
  15. localhost login: ddd
  16. Password:
  17. [[email protected] ~]$ ip a | grep inet | grep Bond0
  18. inet 172.18.30.1/32 brd 172.18.30.1 scope global Bond0
  19. inet 172.18.30.100/16 scope global Bond0
  20. 上述命令 ssh -L 30000:172.18.30.100:23 172.18.30.254 -Nf 表示开启一个本地转发服务
  21. 30000为本地开启的一个端口
  22. 172.18.30.100为realserver
  23. 23为realserver的telnet端口
  24. -N表示不登录到跳板机
  25. -f表示放在后台
  26. 开启转发服务之后,我们通过telnet client的30000端口,便可以连接到realserver了
  27. 这种在本地的操作需要在client也是一台linux主机

2、远程转发

同样是上面的图,只不过这次我们需要在dumpserver上进行操作,不需要再对client进行配置

我们需要在client上开启一个端口,我们就用9000为例,dumpserver会随机发起一个端口和client端的22端口建立一个连接,这client端就会监听其自身的9000端口,当有数据传入时,其会将数据通过ssh封装转发给dumpserver,dumpserver再随机开放一个端口,与realserver的23端口进行通信。

操作方法:

  1. 在dumpserver上进行操作(对于dumpserver来说,client端相当于他的服务器):
  2. [[email protected]6-01 ~]# ssh -R 9000:172.18.30.100:23 172.18.30.253 -Nf
  3. [email protected]172.18.30.253‘s password:
  4. [[email protected]6-01 ~]# ss -nt
  5. State Recv-Q Send-Q Local Address:Port Peer Address:Port
  6. ESTAB 0 0 172.18.30.254:22 172.18.101.180:53815
  7. ESTAB 0 0 172.18.30.254:48064 172.18.30.253:22
  8. 上面操作dumpserver已经与client端建立了tcp连接
  9. 登录client端,执行命令
  10. [[email protected] ~]# telnet 127.0.0.1 9000
  11. Trying 127.0.0.1...
  12. Connected to 127.0.0.1.
  13. Escape character is ‘^]‘.
  14. Kernel 3.10.0-693.el7.x86_64 on an x86_64
  15. localhost login: ddd
  16. Password:
  17. Login incorrect
  18. localhost login: ddd
  19. Password:
  20. Last failed login: Tue Jan 9 20:53:16 CST 2018 from ::ffff:172.18.30.254 on pts/1
  21. There was 1 failed login attempt since the last successful login.
  22. Last login: Tue Jan 9 20:24:56 from ::ffff:172.18.30.254
  23. [[email protected] ~]$ ip a s | grep inet | grep Bond0
  24. inet 172.18.30.1/32 brd 172.18.30.1 scope global Bond0
  25. inet 172.18.30.100/16 scope global Bond0
  26. [[email protected] ~]$
  27. 连接成功

3、动态端口转发

当用client访问internet时,本机的1080端口做为代理服务器,client的访问请求被转发到dumpserver上,由dumpserver替之访问internet。

配制方法:

    1. 在client端进行操作
    2. [[email protected] ~]# ssh -D 1080 172.18.30.254
    3. [email protected]172.18.30.254‘s password:
    4. Last login: Tue Jan 9 20:21:49 2018 from 172.18.30.253
    5. 这时在client端需要打开浏览器,配置sock5代理填写本机127.0.0.1 端口为1080,上网便是通过dumpserver来访问的了。
    6. 如:
    7. curl --socks5 127.0.0.1:1080 http://www.qq.com

原文地址:https://www.cnblogs.com/momenglin/p/8486080.html

时间: 2024-10-16 19:45:00

SSH的端口转发的相关文章

【ssh】端口转发

来源:https://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/ 非常非常好用,可以通过跳板解决两台服务器无法连接的问题 第一部分 概述 当你在咖啡馆享受免费 WiFi 的时候,有没有想到可能有人正在窃取你的密码及隐私信息?当你发现实验室的防火墙阻止了你的网络应用端口,是不是有苦难言?来看看 SSH 的端口转发功能能给我们带来什么好处吧! 端口转发概述 让我们先来了解一下端口转发的概念吧.我们知道,SSH 会自动加密和解密所有 SSH

SSH 的端口转发

第一部分 概述 当你在咖啡馆享受免费 WiFi 的时候,有没有想到可能有人正在窃取你的密码及隐私信息?当你发现实验室的防火墙阻止了你的网络应用端口,是不是有苦难言?来看看 SSH 的端口转发功能能给我们带来什么好处吧! 端口转发概述 让我们先来了解一下端口转发的概念吧.我们知道,SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据.但是,SSH 还同时提供了一个非常有用的功能,这就是端口转发.它能够将其他 TCP 端口的网络数据通过 SSH 链接来转发,并且自动提供了相应的加密及解

SSH Tunnel (端口转发) -- 把个人PC变成“幕后boss”

指路牌 SSH Tunnel 端口转发 网上有帖子提到SSH Tunnel与端口转发是不同的,这里我没有深入研究两个名词的具体区别,从结果上来说,我是被SSH Tunnel这个名词引到这个知识点的,但实现的效果很像"端口转发",姑且都写上吧. 适用场景 希望在自己电脑本地启动服务,让Internet发向服务器的请求转向自己的电脑,从而使调试更便利. 该debug模式只有特殊情境:如强制需要固定IP等才会用到,并不具有普遍性.网上大多教程是将端口映射到局域网内某设备上,应该都出出自运维向

远地利用ssh进行端口转发,传输数据和远程登录

博客地址:http://loopholes.blog.51cto.com/9445813/16203672015-03-17 "本试验需要下载花生壳,不要问我花生壳是什么,下载点这里" 如何让在家里面连入到公司的电脑,对于这个问题,就是我作试验的起因了: 1.如果只是让用户登录,你只需要安装SSH的服务端(server),如果你还需要远程对方,你需要下载SSH的客户端(clients) yum install -y openssh ==>会自动把openssh-server(服务

ssh利用端口转发实现SOCKS5代理

现在linux下ssh使用比较广泛的是openssh包 ssh相关选项: -V 显示版本: ssh -V OpenSSH_6.6.1p1 Ubuntu-2ubuntu2, OpenSSL 1.0.1f 6 Jan 2014 -f 输入密码后进入后台模式(Requests ssh to go to background just before command execution.) -N 不执行远程命令,用于端口转发( Do not execute a remote command. This i

SSH 本地端口转发

有时,绑定本地端口还不够,还必须指定数据传送的目标主机,从而形成点对点的"端口转发".为了区别后文的"远程端口转发",我们把这种情况称为"本地端口转发"(Local forwarding). 假定host1是本地主机,host2是远程主机.由于种种原因,这两台主机之间无法连通.但是,另外还有一台host3,可以同时连通前面两台主机.因此,很自然的想法就是,通过host3,将host1连上host2. 我们在host1执行下面的命令: $ ssh

SSH 远程端口转发

既然"本地端口转发"是指绑定本地端口的转发,那么"远程端口转发"(remote forwarding)当然是指绑定远程端口的转发. 还是接着看上面那个例子,host1与host2之间无法连通,必须借助host3转发.但是,特殊情况出现了,host3是一台内网机器,它可以连接外网的host1,但是反过来就不行,外网的host1连不上内网的host3.这时,"本地端口转发"就不能用了,怎么办? 解决办法是,既然host3可以连host1,那么就从ho

ssh本地端口转发

ssh连接是有方向的,通常是ssh客户端去连接ssh服务器端.而我们运行的应用也是有方向的,比如我们去登陆一个qq,或者用浏览器上网,都是应用程序的客户端(本地下载qq.浏览器软件)去连接远处的qq服务器.web服务器.当ssh的连接方向和应用连接的方向一致时,这就称为ssh本地转发. 假设现在有一个防火墙保护的网络,在这个网络中防火墙会过滤经过53端口以外的数据包,所以在内网中我们就无法通过常规手段上网了,比如内网中的主机1就无法访问外网的web服务器主机3,因为经过80端口的数据全被防火墙过

实战 SSH 端口转发

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