阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

SSH端口转发详解及实例

175次阅读
没有评论

共计 7683 个字符,预计需要花费 20 分钟才能阅读完成。

一、SSH 端口转发简介

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

1.1 SSH 端口转发的两大功能

  • 加密 SSH Client 端至 SSH Server 端之间的通讯数据。
  • 突破防火墙的简直完成一些之前无法建立的 TCP 连接。

 

二、本地转发

命令:-L localport:remotehost:remotehostport sshserver

说明:localport 本机开启的端口号

      remotehost 最终连接机器的 IP 地址

      remotehostport        转发机器的端口号

      sshserver 转发机器的 IP 地址

选项:-f 后台启用

      -N 不打开远程 shell,处于等待状态(不加 - N 则直接登录进去)

      -g 启用网关功能

    接下来,我们通过实验来详细的说明一下如何实现本地转发:

实验一:实现 SSH 端口转发——本地转发

  • 背景:企业内部 C 服务器只允许 telnet 连接(23 端口)访问,不允许外部直接访问,B 服务器是一个 ssh 服务器;有一个用户需要从外部连接到企业内部的 C 服务器。
  • 前提:防火墙允许 22 端口进来(或者企业内部有一个堡垒机,ssh - t 通过堡垒机进去)。
  • 原理: A 用户通过 ssh 协议连接到 B 机器上,再通过 B 机器做跳板,连接至 C 机器。
  • 机器:rhel5 模拟 A 用户,CentOS6 模拟 B 机器,centos7 模拟 C 机器
  • 图示如下:

SSH 端口转发详解及实例

  • 实验步骤:

1)模拟 C 机器不允许 A 用户连接,并且开启 B 机器的 telnet 服务端口 23。

在 centos7 上输入以下口令:

iptables -A INPUT -s 192.168.191.55 -j REJECT

SSH 端口转发详解及实例

此时,从 rhel5 用 ssh 命令连接 centos7,是拒绝的:

SSH 端口转发详解及实例

同时,我们还要开启 7 的 telnet 服务端口 23:

systemctl start telnet.soc ket

ss -ntl 命令可以查看的服务端口是否已开启

SSH 端口转发详解及实例

2)开启端口转发(telnet 隧道)

    首先,我们在 5 机器上确认已经开启的端口有哪些:

SSH 端口转发详解及实例

 

我们使用的端口是 9527 端口,从上图中我么已经看出,9527 端口没有被占用,所以我们可以使用~

接着我们建立本地转发的隧道(5 上输入以下命令):

ssh -L 9527:192.168.191.77:23 -fN 192.168.191.66

SSH 端口转发详解及实例

    在这里,我们可以使用 ps aux 来查询后台运行的进程。也可以通过 ss -nt 查看接口连接情况:

SSH 端口转发详解及实例

SSH 端口转发详解及实例

3)在 rhel5 上输入以下命令,用 9527 端口连接自己:

    telnet 127.0.0.1 9527

SSH 端口转发详解及实例

    此时,我们可以查看一下 centos6 和 centos7 的连接情况:

SSH 端口转发详解及实例

SSH 端口转发详解及实例

    至此,我们已经实现了 A 用户在公司外部远程连接 C 机器的需求,接下来我们就来讲一讲实现过程:

    data <- -> localhost:9527 端口 <- -> localhost:XXXXX(随机在客户端 6 开一个端口)<- -> sshsrv:22(通过 ssh 封装)<- -> sshsrv:YYYYY(服务器解封装,开一个端口,代表 telnet 客户端)<- -> telnetsrv:23

用大白话来解释就是:当 rhel5(A 用户)连接自己的 9527 端口时,该请求自然会通过 ssh 协议封装发送给 centos6(B 机器),然后在 centos6(C 机器)上解封装, 形成 telnet 流量,发送给 centos7(C 机器)。

实验做完了,如果我们想要停止这个隧道,直接把后台的隧道进程杀死就可以了,命令如下:

killall ssh

SSH 端口转发详解及实例

我们的实验圆满完成ヾ () ノ

 

三、远程转发

在我们实验一的场景下,首先要满足的是防火墙上必须打开 22 端口,但是在现实生活中,企业处于安全考虑,一般是不会打开防火墙,只允许出不允许进。所以,当防火墙的端口没有打开的时候,我们要怎么办呢?这就要用到我们接下来要说的远程转发了:

命令:-R sshserverport:remotehost:remotehostport sshserver

说明:sshserverport         被转发机器开启的端口号

      remotehost         最终连接机器的 IP 地址

      remotehostport        被转发机器的端口号

      sshserver            被转发机器的 IP 地址

同样的,我们以实验来具体说明我们的远程转发:

实验二、实现 SSH 端口转发——远程转发

  • 背景:企业内部 C 服务器只允许 telnet 连接(23 端口)访问,不允许外部直接访问,B 服务器是一个 ssh 服务器;有一个用户需要从外部连接到企业内部的 C 服务器。
  • 原理: B 机器访问 A 用户,给 A 用户转发
  • 机器:rhel5 模拟 A 用户,centos6 模拟 B 机器,centos7 模拟 C 机器
  • 图示如下:

SSH 端口转发详解及实例

  • 实验步骤:

1)模拟 C 机器不允许 A 用户连接,并且开启 B 机器的 telnet 服务端口 23。

在 centos7 上输入以下口令:

iptables -A INPUT -s 192.168.191.55 -j REJECT

SSH 端口转发详解及实例

此时,从 rhel5 用 ssh 命令连接 centos7,是拒绝的:

SSH 端口转发详解及实例

同时,我们还要开启 7 的 telnet 服务端口 23:

systemctl start telnet.soc ket

ss -ntl 命令可以查看的服务端口是否已开启

SSH 端口转发详解及实例

2)开启隧道转发(telnet 隧道)

    这一次,由于防火墙完全关闭,外部的设备连接不进来,所以我们要通过 B 机器去连接 A 用户的机器,因此,我们的开启隧道命令要在 B 机器(centos6)上运行:

    首先,我们要确定一下 centos6 上开启了哪些端口:

SSH 端口转发详解及实例

    然后,我们选择一个没有被开启的端口开启隧道,进行实验:

SSH 端口转发详解及实例

同样的,在这里,我们可以使用 ps aux 来查询后台运行的进程。也可以通过 ss -nt 查看接口连接情况:

SSH 端口转发详解及实例

SSH 端口转发详解及实例

3)在 rhel5 上输入以下命令,用 9527 端口连接自己:

    telnet 127.0.0.1 9527

SSH 端口转发详解及实例

    此时,我们可以查看一下 centos6 和 centos7 的连接情况:

SSH 端口转发详解及实例

SSH 端口转发详解及实例

    至此,我们已经实现了 A 用户在公司外部远程连接 C 机器的需求,接下来我们就来讲一讲实现过程:

data <- -> sshsrv:9527 端口 <- -> sshsrv:22(通过 ssh 封装)<- -> localhost:XXXXX(随机在客户端 6 开一个端口)<- -> localhost:YYYYY(服务器解封装,开一个端口,代表 telnet 客户端)<- -> telnetsrv:23

用大白话来解释就是:当 rhel5(A 用户)连接自己的 9527 端口时,该请求自然会通过 ssh 协议封装发送给 centos6(B 机器),然后在 centos6(C 机器)上解封装, 形成 telnet 流量,发送给 centos7(C 机器)。

实验做完了,如果我们想要停止这个隧道,直接把后台的隧道进程杀死就可以了,命令如下:

killall ssh

SSH 端口转发详解及实例

我们的实验圆满完成ヾ () ノ

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2017-09/147194p2.htm

四、动态转发

众所周知,我国有一个功能强大的防火墙,用来避免我们访问谷歌等外国的部分网站,嗯。。。FQ 的方法有很多,相信大家不比小编懂的少,所以我们就不一一举例说明了。接下来,小编就给大家说一说如何通过 ssh 转发技术实现 FQ~

这里,就要用到我们的动态转发技术了:

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

接下来,我们还是以实验进行说明:

实验三、实现 SSH 端口转发——动态转发

  • 背景:模拟 Google 的服务器 C 不允许国内网站 A 直接访问,B 服务器是国外的一个小型的学习用的服务器;国内网站 A 可以访问国外学习服务器 B;实现国内网站 A 访问模拟 Google 服务器 C。
  • 原理:国内网站 A 通过 ssh 协议连接到国外学习服务器 B 上,再通过国外学习服务器 B 做跳板,连接至 Google 服务器 C。
  • 机器:CentOS6 模拟国内网站 A,rhel5 模拟国外学习服务器 B,centos7 模拟 Google 服务器 C
  • 图示如下:

SSH 端口转发详解及实例

  • 实验步骤:

1)在模拟 google 服务器 C 上搭建一个网页,从互联网上访问 centos7 时,页面显示 ”Welcome to www.google.com”

命令如下:

[root@centos7 ~]# cd /var/www/html/
[root@centos7 html]# vim index.html
<h1> Welcome to www.google.com </h1>

    编写完文件以后,记得重启一下 httpd 服务:

[root@centos7 html]# systemctl restart httpd

2)模拟 Google 服务器 C 不允许国内网站 A 连接

在 centos7 上输入以下口令:

[root@centos7 ~]# iptables -A INPUT -s 192.168.191.66 -j REJECT

此时,我们来测试一下 centos6 和 rhel5 能否访问 centos7,命令为:

curl 192.168.191.77 links 192.168.191.77

[root@rhel5 ~]# curl 192.168.191.77
<h1> Welcome to www.google.com </h1>

 
[root@centos6 ~]# curl 192.168.191.77
curl: (7) couldn't connect to host 

可以看出,rhel5 可以连接到 centos7,但是 centos6 不能连接到 centos7。我们现在的需求就是希望 centos6 可以借助于 rhel5 访问 centos7,方法也很简单,接下来就给大家说一说。

3)动态端口转发

    首先,我们在 6 机器上确认已经开启的端口有哪些:

SSH 端口转发详解及实例

我们使用 1080 端口,从上图中我么已经看出,1080 端口没有被占用,所以我们可以使用~

接着我们建立动态转发的隧道(6 上输入以下命令):

ssh -D 1080 -fN 192.168.191.55

SSH 端口转发详解及实例

    在这里,我们可以在 rhel5 上查看到 centos6 的连接:

SSH 端口转发详解及实例

4)设置代理 rhel5 访问 centos7,命令如下(在 centos6 上输入):

curl –socks5 127.0.0.1:1080 http://192.168.191.77

SSH 端口转发详解及实例

5)在图形化界面,在 centos6 上的 firefox 浏览器设置代理:

SSH 端口转发详解及实例

SSH 端口转发详解及实例

SSH 端口转发详解及实例

SSH 端口转发详解及实例

我们的实验圆满完成ヾ () ノ

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-09/147194.htm

一、SSH 端口转发简介

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

1.1 SSH 端口转发的两大功能

  • 加密 SSH Client 端至 SSH Server 端之间的通讯数据。
  • 突破防火墙的简直完成一些之前无法建立的 TCP 连接。

 

二、本地转发

命令:-L localport:remotehost:remotehostport sshserver

说明:localport 本机开启的端口号

      remotehost 最终连接机器的 IP 地址

      remotehostport        转发机器的端口号

      sshserver 转发机器的 IP 地址

选项:-f 后台启用

      -N 不打开远程 shell,处于等待状态(不加 - N 则直接登录进去)

      -g 启用网关功能

    接下来,我们通过实验来详细的说明一下如何实现本地转发:

实验一:实现 SSH 端口转发——本地转发

  • 背景:企业内部 C 服务器只允许 telnet 连接(23 端口)访问,不允许外部直接访问,B 服务器是一个 ssh 服务器;有一个用户需要从外部连接到企业内部的 C 服务器。
  • 前提:防火墙允许 22 端口进来(或者企业内部有一个堡垒机,ssh - t 通过堡垒机进去)。
  • 原理: A 用户通过 ssh 协议连接到 B 机器上,再通过 B 机器做跳板,连接至 C 机器。
  • 机器:rhel5 模拟 A 用户,CentOS6 模拟 B 机器,centos7 模拟 C 机器
  • 图示如下:

SSH 端口转发详解及实例

  • 实验步骤:

1)模拟 C 机器不允许 A 用户连接,并且开启 B 机器的 telnet 服务端口 23。

在 centos7 上输入以下口令:

iptables -A INPUT -s 192.168.191.55 -j REJECT

SSH 端口转发详解及实例

此时,从 rhel5 用 ssh 命令连接 centos7,是拒绝的:

SSH 端口转发详解及实例

同时,我们还要开启 7 的 telnet 服务端口 23:

systemctl start telnet.soc ket

ss -ntl 命令可以查看的服务端口是否已开启

SSH 端口转发详解及实例

2)开启端口转发(telnet 隧道)

    首先,我们在 5 机器上确认已经开启的端口有哪些:

SSH 端口转发详解及实例

 

我们使用的端口是 9527 端口,从上图中我么已经看出,9527 端口没有被占用,所以我们可以使用~

接着我们建立本地转发的隧道(5 上输入以下命令):

ssh -L 9527:192.168.191.77:23 -fN 192.168.191.66

SSH 端口转发详解及实例

    在这里,我们可以使用 ps aux 来查询后台运行的进程。也可以通过 ss -nt 查看接口连接情况:

SSH 端口转发详解及实例

SSH 端口转发详解及实例

3)在 rhel5 上输入以下命令,用 9527 端口连接自己:

    telnet 127.0.0.1 9527

SSH 端口转发详解及实例

    此时,我们可以查看一下 centos6 和 centos7 的连接情况:

SSH 端口转发详解及实例

SSH 端口转发详解及实例

    至此,我们已经实现了 A 用户在公司外部远程连接 C 机器的需求,接下来我们就来讲一讲实现过程:

    data <- -> localhost:9527 端口 <- -> localhost:XXXXX(随机在客户端 6 开一个端口)<- -> sshsrv:22(通过 ssh 封装)<- -> sshsrv:YYYYY(服务器解封装,开一个端口,代表 telnet 客户端)<- -> telnetsrv:23

用大白话来解释就是:当 rhel5(A 用户)连接自己的 9527 端口时,该请求自然会通过 ssh 协议封装发送给 centos6(B 机器),然后在 centos6(C 机器)上解封装, 形成 telnet 流量,发送给 centos7(C 机器)。

实验做完了,如果我们想要停止这个隧道,直接把后台的隧道进程杀死就可以了,命令如下:

killall ssh

SSH 端口转发详解及实例

我们的实验圆满完成ヾ () ノ

 

三、远程转发

在我们实验一的场景下,首先要满足的是防火墙上必须打开 22 端口,但是在现实生活中,企业处于安全考虑,一般是不会打开防火墙,只允许出不允许进。所以,当防火墙的端口没有打开的时候,我们要怎么办呢?这就要用到我们接下来要说的远程转发了:

命令:-R sshserverport:remotehost:remotehostport sshserver

说明:sshserverport         被转发机器开启的端口号

      remotehost         最终连接机器的 IP 地址

      remotehostport        被转发机器的端口号

      sshserver            被转发机器的 IP 地址

同样的,我们以实验来具体说明我们的远程转发:

实验二、实现 SSH 端口转发——远程转发

  • 背景:企业内部 C 服务器只允许 telnet 连接(23 端口)访问,不允许外部直接访问,B 服务器是一个 ssh 服务器;有一个用户需要从外部连接到企业内部的 C 服务器。
  • 原理: B 机器访问 A 用户,给 A 用户转发
  • 机器:rhel5 模拟 A 用户,centos6 模拟 B 机器,centos7 模拟 C 机器
  • 图示如下:

SSH 端口转发详解及实例

  • 实验步骤:

1)模拟 C 机器不允许 A 用户连接,并且开启 B 机器的 telnet 服务端口 23。

在 centos7 上输入以下口令:

iptables -A INPUT -s 192.168.191.55 -j REJECT

SSH 端口转发详解及实例

此时,从 rhel5 用 ssh 命令连接 centos7,是拒绝的:

SSH 端口转发详解及实例

同时,我们还要开启 7 的 telnet 服务端口 23:

systemctl start telnet.soc ket

ss -ntl 命令可以查看的服务端口是否已开启

SSH 端口转发详解及实例

2)开启隧道转发(telnet 隧道)

    这一次,由于防火墙完全关闭,外部的设备连接不进来,所以我们要通过 B 机器去连接 A 用户的机器,因此,我们的开启隧道命令要在 B 机器(centos6)上运行:

    首先,我们要确定一下 centos6 上开启了哪些端口:

SSH 端口转发详解及实例

    然后,我们选择一个没有被开启的端口开启隧道,进行实验:

SSH 端口转发详解及实例

同样的,在这里,我们可以使用 ps aux 来查询后台运行的进程。也可以通过 ss -nt 查看接口连接情况:

SSH 端口转发详解及实例

SSH 端口转发详解及实例

3)在 rhel5 上输入以下命令,用 9527 端口连接自己:

    telnet 127.0.0.1 9527

SSH 端口转发详解及实例

    此时,我们可以查看一下 centos6 和 centos7 的连接情况:

SSH 端口转发详解及实例

SSH 端口转发详解及实例

    至此,我们已经实现了 A 用户在公司外部远程连接 C 机器的需求,接下来我们就来讲一讲实现过程:

data <- -> sshsrv:9527 端口 <- -> sshsrv:22(通过 ssh 封装)<- -> localhost:XXXXX(随机在客户端 6 开一个端口)<- -> localhost:YYYYY(服务器解封装,开一个端口,代表 telnet 客户端)<- -> telnetsrv:23

用大白话来解释就是:当 rhel5(A 用户)连接自己的 9527 端口时,该请求自然会通过 ssh 协议封装发送给 centos6(B 机器),然后在 centos6(C 机器)上解封装, 形成 telnet 流量,发送给 centos7(C 机器)。

实验做完了,如果我们想要停止这个隧道,直接把后台的隧道进程杀死就可以了,命令如下:

killall ssh

SSH 端口转发详解及实例

我们的实验圆满完成ヾ () ノ

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2017-09/147194p2.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-21发表,共计7683字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中