SSH实验——本地、远程、动态端口

端口转发概述

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

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

角色定义

A. 本地服务器,想通过中间服务器B间接访问目标服务器C

B. 中间服务器,类似于代理,A以B的名义去访问C

C. 目标服务器,C看到的都是中间服务器B在访问自己

实验一:本地转发

主要功能:
加密 SSH Client 端至 SSH Server 端之间的通讯数据
突破防火墙的限制完成一些之前无法建立的 TCP 连接

命令:

    ssh -Nf -L [local_A_address]:local_A_port:target_C_server:target_C_port via_B_server

参数:
    -N,不执行命令

    -f,后台执行

    -L,local本地端口转发

    local_A_address:

        127.0.0.1 - 默认,只能本机使用这个端口转发

        也可以是本机的IP地址,同时其他人可以使用这个IP来使用这个端口转发

    via_B_server:中间服务器

应用:

    A---能访问------>B-------能访问------>C

    A---不能访问----------------------------->C

    A---通过本机端口,以B的名义访问-->C

本地转发:
    -L localport:remotehost:remotehostport sshserver 选项:
    -f 后台启用
    -N 不打开远程shell,处于等待状态
    -g 启用网关功能

在这里插入图片描述
ssh端口转发:远程到centos7(192.168.39.104)上的23端口(开启telnet服务会自动打开23端口)

用ssh加密的协议封装其他的不加密协议telnet,从而实现安全传输

实验图如上:

centos6: 192.168.39.101(外网客户端)

centos8: 192.168.39.102(内网中类似跳板机)还有一个共用IP地址 192.168.39.8

centos7: 192.168.39.104(内网telnet服务端)
 
实现过程:先再centos6和centos8之间利用ssh协议连接,创建一个隧道,里面走的是telnet,因为ssh协议是加密的,把telnet封装在其内部,在到达内网centos8主机时会自动的解封装在由centos8主机转发到主机centos7上从而实现了加密连接通讯.
在外网客户端和内网服务器端都要提前安装好

[root@kaivi6 ~]#yum install telnet
[root@kaivi6 ~]#yum install telnet-server
[root@centos7 ~]#yum install telnet
[root@centos7 ~]#yum install telnet-server
#systemctl start telnet.socket 
并且启功该服务,这是会自动开启23端口号       

注意:配置的时候是在 centos6: 192.168.39.101(外网客户端)

开启本地一个端口9527(先要确保这个端口没有人用,可以用ss -ntl 命令查看端口号),先和主机里建立一个隧道连接
在这里插入图片描述
在centos8(内网中类似跳板机)主机上查看连接情况,此时通道已经建立好了
在这里插入图片描述
在centos7(内网中telnet服务端)查看一下23端口是否被连接,此时没有被任何人连接
在这里插入图片描述
这时就可以使用telnet 连接本地的9527端口通过隧道的连接间接的访问服务端了
这里的连接隧道是连接自己本机的隧道 所以连接的是本机 127.0.0.1 和之前我们自定义的端口号
可以用命令 ss -ntl 查看到本机地址
连接时候需要用服务机的普通用户登入。下图显示已经成功连接登入
在这里插入图片描述
在服务端查看一下端口连接情况:此时是被centos7(内网中telnet服务端)主机连接,实际上是centos6(外网客户端端)主机正在访问,下面看一下centos7(内网中telnet服务端)主机状态
看到图中的地址为192.168.39.8是因为在主机centos8(内网中类似跳板机)同一个网卡中配置了2个IP
地址,所以显示连接的为192.168.39.8
在这里插入图片描述
在这里插入图片描述
此时在centos8(内网中类似跳板机)上查看一下端口连接情况,如图:此时centos8(内网中类似跳板机)主机有两个角色:1、对于centos6(外网客户端端)主机来说它是centos6(外网客户端端)主机ssh的服务端 2、对于centos7(内网中telnet服务端)主机telnet服务端来说它是telnet的客户端

在这里插入图片描述

实验二:ssh远程端口转发

命令:

    ssh -Nf -R [local_A_address]:local_A_port:target_C_server:target_C_port local_A_address

参数:

    -R,remote,远程端口转发

    local_A_address,这个地址为A的IP

应用:

    环境和目的与本地端口转发是一样的,这里只是不在本地服务器A上执行命令,而是在中间服务器B上执行;

    为什么不直接在服务器A自己身上执行命令呢?这个场景有别于本地端口转发的地方在于A不能主动连接B但反之可以,比如A在外网,B在内网;

    而A去访问的时候,同样都是通过自己的IP和端口,同样首先建立AB之间的SSH通道,以服务器B的名义来访问目标服务器C。

远程转发:   主要命令: -R sshserverport:remotehost:remotehostport
sshserver 示例: ssh –R 9527:telnetsrv:23 –Nf sshsrv
让sshsrv侦听9527端口的访问,如有访问,就加密后通过ssh服务转发请求到本机ssh客户端,再由本机解密后转发到telnetsrv:23

因在公司里都有防火墙,规则一般都是不允许从外面主动发起请求,所以现在ssh client和server端角色互换以实现
  实验过程: 让sshsrv侦听8888端口的访问,如有访问,就加密后通过ssh服务转发请求到本机ssh客户端,再由本机解密后转发到telnetsrv:23
在这里插入图片描述
实验图如上:

centos6: 192.168.39.101(外网客户端)

centos8: 192.168.39.102(内网中类似跳板机)还有一个公用IP地址 192.168.39.8

centos7: 192.168.39.104(内网telnet服务端)

准备好实验环境:

[root@kaivi6 ~]#yum install telnet
[root@kaivi6 ~]#yum install telnet-server
[root@centos7 ~]#yum install telnet
[root@centos7 ~]#yum install telnet-server
#systemctl start telnet.socket 
并且启功该服务,这是会自动开启23端口号        
centos6 telnet服务起不来   参考:https://blog.csdn.net/weixin_34378922/article/details/92100530

注意:配置的时候是在 centos8: 192.168.39.102(内网中类似跳板机)

实验步骤:在主机 centos8: 192.168.39.102(内网中类似跳板机)主动发起ssh请求到centos6: 192.168.39.101(外网客户端)主机建立隧道的连接

[root@centos8 ~]#ssh -R 8888:192.168.39.104:23 192.168.39.101 -fN     
The authenticity of host '192.168.39.101 (192.168.39.101)' can't be established.
RSA key fingerprint is SHA256:eW09nANmhy6Dt11/tP9NYkq7+tU1VZYd3X9J24b8iQk.
Are you sure you want to continue connecting (yes/no)? yes      
Warning: Permanently added '192.168.39.101' (RSA) to the list of known hosts.
root@192.168.39.101's password: 

可以看到已经连接到了centos6: 192.168.39.101(外网客户端)主机
在这里插入图片描述
这里为什么是ip192.168.39.8 连接centos6 在前面提及过 这是因为一个网卡中同时存在2个ip地址导致,不影响实验。

此时隧道连接已经建立了,回到主机centos6: 192.168.39.101(外网客户端)上查看一下连接情况:
可以看到连接之后已经有了8888端口
在这里插入图片描述
在centos6: 192.168.39.101(外网客户端)主机上发起telnet请求,如图,此时已经可以telnet到远程服务端了
注意:这个时候访问的是自己本机地址(127.0.0.1)的端口号:8888
在这里插入图片描述
在主机centos7: 192.168.39.104(内网telnet服务端)服务端和主机 centos8: 192.168.39.102(内网中类似跳板机)上查看连接情况如下:
在这里插入图片描述
前面一个是连接之前,后面一个为连接之后。

centos8: 192.168.39.102(内网中类似跳板机):此时也是两种角色,一个是ssh的客户端,另一个是telnet的客户端
在这里插入图片描述

实验三:动态端口转发

命令:

    ssh -Nf -D [local_A_address]:local_A_port via_B_server
参数:

    -D,dynamic,动态端口转发

应用:

    本地和远程端口转发,都限定了目标服务器以及目标服务器的端口;
    而动态端口转发,A把B作为了自己的全权代理,不限定目标服务器及其端口;

    这里要求在A上,做下代理设置,比如浏览器的代理设定为自己的IP:PORT;

    本地端口转发和远程端口转发,其实都可看着是动态端口转发(代理)的子集;

    三者和一般代理的目的和场景都一致,区别在于这里自己A和代理服务器B之前的所有连接都是基于加密的SSH。
    
    可以用于科学上网

动态端口转发:
当用firefox访问internet时,本机的1080端口做为代理服务器,firefox的访问请求被转发到sshserver上,由sshserver替之访问internet
ssh -D 1080 root@sshserver -fNg 在本机firefox设置代理socket
proxy:127.0.0.1:1080 curl --socks5 127.0.0.1:1080
http://www.google.com

实验过程:因防火墙的原因国内的主机不能直接访问国外的一些网站,所以我们只能通过一些代理的服务器,如亚马逊云主机等(这里指主机 centos8: 192.168.39.102(没有被拒绝的中间机器))间接的去访问这些网站

centos6: 192.168.39.101(被拒绝客户端)

centos8: 192.168.39.102(没有被拒绝的中间机器)还有一个公用IP地址 192.168.39.8

centos7: 192.168.39.104(网页服务器端)
 实验前准备工作:
 在centos7: 192.168.39.104(网页服务器端) 安装httpd服务并且打开服务

[root@centos7 ~]#yum install httpd
[root@centos7 ~]#systemctl start httpd.service 

为了模拟真实一些,这里在主机centos7: 192.168.39.104(网页服务器端)服务端配置一条防火墙策略,禁止主机 centos6: 192.168.39.101(被拒绝客户端)直接访问

centos6: 192.168.39.101(被拒绝客户端)在添加策略前是可以访问centos7: 192.168.39.104(网页服务器端)的。
在这里插入图片描述 在这里插入图片描述
centos7: 192.168.39.104(网页服务器端)加了策略之后centos6: 192.168.39.101(被拒绝客户端)的访问情况:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
但是主机centos8: 192.168.39.102(没有被拒绝的中间机器)可以正常访问,可以正常服务的网页centos7: 192.168.39.104(网页服务器端)
在这里插入图片描述

在 centos6: 192.168.39.101(被拒绝客户端)主机开一个端口通过ssh协议连接到centos8: 192.168.39.102(没有被拒绝的中间机器)主机
注意:这里是通过ssh协议连接是安全的。是在centos6: 192.168.39.101(被拒绝客户端)进行操作的。
在这里我们要事先找一个没有人用的端口,这里我们以9527为例子
在这里插入图片描述
上图中显示9527端口是没有人使用的,所以我们可以用9527这个端口来开启一个动态端口:
在这里插入图片描述
在centos8: 192.168.39.102(没有被拒绝的中间机器)主机查看连接:
在这里插入图片描述 访问centos7: 192.168.39.104(网页服务器端): 通过建立的连接,在本机访问9527端口即可以通过隧道连接通过代理主机centos8: 192.168.39.102(没有被拒绝的中间机器去访问服务端(命令行使用代理访问如下),图形界面需要在web浏览器配置里设置代理服务器的ip后再进行访问:
在这里插入图片描述
图形界面访问如图:

在虚拟机本机中: init 5 》Firefox 》Preferences 》Network 》Settings》配置本机地址和端口

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值