Linux之SSH端口转发及相关实验

一、SSH端口转发相关概念

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

1.1 SSH端口转发的两大功能

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

1.2 SSH端口转发提供的类型有:

  • 本地转发
  • 远程转发
  • 动态转发
  • X协议转发

本地转发

  当外网用户想要临时访问公司内部的不安全TCP协议服务器时,由于防火墙限制无法直接访问,

  但可利用先SSH连接至公司内网的SSH服务器在转发至不安全的TCP协议服务器。

  由于作为转发的SSH服务器与要访问的不安全TCP协议服务器在同一网络环境内,
  
  故这种连接就叫本地转发。

格式:

  • ssh -L localprot:remotehost:remotehostport sshserver

    localprot:指定本机端口
    
    remotehost:指定远程不安全协议的服务器地址
    
    remotehostport:远程不安全协议的服务器地址端口
    
    sshserver:SSH服务器地址
    
  • options:

    -f 后台启用

    -N 不打开远程shell,处于等待状态

    -g 启用网关功能

示例:

    ssh -L 9527:telnetsrv:23  -N sshsrv

    telnet 127.0.0.1 9527

    当访问本机的9527端口时,被加密后转发到sshsrv的ssh服务,再解密被转发到telnetsrv:23

大致流程:

 Data <–> localhost:9527 <–>localhost:xxxxx <–> sshsrv:22 <–>sshsrv:yyyyy <–> telnetsrv:23

远程转发

  与本地端口转发相比,我们将SSH服务器与Client访问端的位置对调,将与不安全TCP协议服务器
  
  同一内网的主机作为Client,将外部网络主机作为SSH服务器做为端口转发。
  
  由于作为转发的SSH服务器处在外部网络环境中,故这种连接就叫远程转发。

格式:

ssh -R sshserverport:remotehost:remotehostport sshserver

sshserverport:指定SSH服务器端口

remotehost:指定远程不安全协议的服务器地址

remotehost:remotehostport:指定远程不安全协议的服务器端口

sshserver:SSH服务器地址

示例:

ssh -R 9527:telnetsrv:23 -N sshsrv

让sshsrv侦听9527端口的访问,如有访问,就加密后通过ssh服务转发请求到本机ssh客户端,
再由本机解密后转发到telnetsrv:23

大致流程:

 Data <–> sshsrv:9527 <–> sshsrv:22 <–> localhost:xxxxx <–> localhost:yyyyy <–> telnetsrv:23

动态端口转发

  ssh本地和远程端口转发都需要固定的应用服务器IP和端口,但是很多情况下,应用的端口繁多逐个转发

  效率不高,而且一些应用使用不固定的端口,经常跳着使用端口,一些网站还不支持IP直接访问,

  这导致ssh本地和远程端口转发在一些使用上不是很方便,使用ssh动态端口转发可以解决以上问题。

格式:

ssh -D  

实例:

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

ssh -D 1080 root@sshserver

# 在本机firefox设置socketproxy:127.0.0.1:1080

curl –socks5  127.0.0.1:1080  http://www.qq.com

X协议转发

  我们日常工作当中,可能会经常会远程登录到 Linux/Unix/Solaris/HP 等机器上去做一些开发或者维护,也经常需要以 GUI 方式运行一些程序,比如要求图形化界面来安装 DB2/WebSphere 等等。这时候通常有两种选择来实现:VNC 或者 X 窗口,让我们来看看后者。
  
  使用 X 窗口通常需要分别安装:X Client 和 X Server 。在本例中我们的 X Client 就是所访问的远程 Linux/Unix/Solaris/HP,而我们的 X Server 则是发起访问的本地机器。把 X Client 端的 X 窗口显示在 X Server 端需要先行在 X Client 端指定 X Server 的位置

格式:

export DISPLAY=:.

实例:

export DISPLAY=myDesktop:1.0
然后直接运行 X 应用即可,X 窗口就会自动在我们的本地端打开。

二、实验:模拟SSH本地端口转发

应用场景:当外部客户端想要访问公司内网的Telnet服务器时,由于防火墙限制无法直接访问,可使用

SSH本地端口转发实现:

前期准备:

以三台CentOS模拟机作为服务器及主机,主机名网络配置如下:

客户端:192.168.2.5

telnet服务器:192.168.2.6

SSH服务器:192.168.2.7

telnet服务器端操作:

1. 安装telnet-server包,系统默认未安装

yum -y install telnet

2. 防火墙禁止远程客户端访问:

  为了防止之前防火墙策略干扰,最好先清空下防火墙策略,再禁止远程登录:

    iptables -F
    iptables -X
    iptables -Z

  禁止IP地址为192.168.2.5的远程登录

  iptables  -A  INPUT  -s  192.168.2.5  -j  REJECT

 此时作为Clinet的192.168.2.5已经ping不通作为telnet服务器的192.168.2.6

3. 开启telnet-server服务

  • CentOS6:

    service  xinted  start                       开启xinted进程
    
    chkconfig  telnet  on                        开启telnet服务
    
    service  xinted  restart                   重启xinted服务
    
  • CentOS7:

    systemctl start telnet-scoket
    

客户端操作:

ssh -L 9527:192.168.30.17:23 [-Nf] 192.168.30.6

加-Nf选项将后台执行,关闭时只能通过kill关闭进程

telnet 127.0.0.1 9527

提示输入用户名,密码;默认不让root账户使用SSH端口转发登录

三、实验:模拟SSH远程端口转发

 应用场景:当外部有工程师想要临时访问内部telnet服务器时,作为系统管理员,我们可以将对方主机作

 为SSH服务器进行端口转发,让其临时可访问公司的telnet服务器。

前期准备:

以三台CentOS模拟机作为服务器及主机,主机名及网络配置如下:

Internet:192.168.2.5

lanserver:192.168.2.7

telnet服务器:192.168..2.6

lanserver端操作:

ssh -R 9527:192.168.30.17:23 [-Nf] 192.168.30.7
ps aux | grep 9527

加-Nf选项将后台执行,关闭时只能通过kill关闭进程

Internet端操作:

telnet 127.0.0.1 9527

四、实验:模拟SSH动态端口转发

 应用场景:在某些场景中,用浏览器浏览网页,是没有固定端口的,这时就需要利用到动态的端口转发。

 下面我们模拟用一台虚拟机模拟google网站,用Internet主机通过代理服务器proxy访问google模拟机

前期准备:

以三台CentOS模拟机作为服务器及主机,主机名及网络配置如下:

Internet:192.168.2.5

proxy:192.168.2.7

google:192.168.2.6

google模拟服务器操作:

开启http服务,模拟网页内容:

  • CentOS6:

    service httpd start

    echo www.google.com > /var/www/html/index.html

  • CentOS7:

    systemctl start httpd

    Linux之SSH端口转发及相关实验_第1张图片

Internet端操作:

此时在Internet端我们是无法访问google服务器的
Linux之SSH端口转发及相关实验_第2张图片

使用proxy的1080端口作为动态转发:

ssh -D 1080 [email protected]

这里写图片描述

接下来我们可以通过图形界面或者字符界面来尝试访问:

图形界面:

打开firefox浏览器,按以下顺序操作:

–>preferences–>advanced–>network–setting–manual proxy configuration

–>SOCKS Host:127.0.0.1

Linux之SSH端口转发及相关实验_第3张图片

现在再次尝试访问192.168..2.6的google模拟服务器,发现可以正常访问了!

访问成功

字符界面:

在字符界面我们可执行下面的命令来进行访问:

curl -socks5 127.0.0.1:1080 192.168.30.17

这里写图片描述

你可能感兴趣的:(linux)