SSH端口转发


  本文将介绍两种应用场景的SSH端口转发,分别是SSH本地转发以及SSH远程转发。

简介

  SSH(Secure Shell)是一种网络协议,顾名思义就是安全的shell,主要用于安全的远程登录和计算机间加密传输。早期,互联网通信都是基于明文通信,一旦被截获,内容就暴露无遗。1995年,芬兰学者设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界范围内获得推广,目前已成为Linux系统的标准配置。SSH的主要目的是用来取代传统的telnet 和 R 系列命令(rlogin, rsh, rexec 等)远程登录和远程执行命令的工具,实现对远程登录和远程执行命令加密,防止由于网络监听而密码泄露问题。SSH是一种加密协议,不仅在登陆过程中对密码进行加密传送,而且对登陆后执行的命令的数据也进行加密,这样即使别人在网络上监听并截获了你的数据包,他也看不到其中的内容。
  SSH协议目前有SSH1和SSH2两个主流版本,SSH2协议兼容SSH1,强烈建议使用SSH2版本,因为双方主机协议选择安全的MAC方式。OpenSSH是SSH协议的开源实现, CentOS默认会安装。
  简单介绍一下SSH端口转发。SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据。但是, SSH 还能够将其他 TCP 端口的网络数据通过 SSH 链接来转发,并且自动提供了相应的加密及解密服务。这一过程也被叫做“隧道”,这是因为 SSH 为其他 TCP 链接提供了一个安全的通道来进行传输而得名。例如,Telnet、SMTP以及 LDAP 这些 TCP 应用均能够从中得益,避免了用户名,密码以及隐私信息的明文传输。而与此同时, 如果工作环境中的防火墙限制了一些网络端口的使用,但是允许SSH的连接,也能够通过将 TCP 端口转发来使用 SSH 进行通讯。
  SSH 端口转发能够提供两大功能:1、加密 SSH Client 端至 SSH Server 端之间的通讯数据;2、突破防火墙的限制完成一些之前无法建立的 TCP 连接。

SSH端口转发:本地转发

  如下图所示,外部主机A想访问企业内部的C,telnet server,但是telnet是不安全的协议,所以企业的防火墙策略上会禁止这种行为,但是防火墙允许外部机器通过22端口访问B,SSH server ,这时候我们在主机A上可以通过SSH端口转发,用SSH这种安全协议来封装telnet这种不安全的协议,类似把SSH server B当做跳板,来实现对C,telnet server的访问。

模拟实验的过程如下:

1、实验准备
  192.168.1.7(centos7)、192.168.1.8 (centos7)和192.168.1.6(centos6)三个虚拟机分别充当上面的外部主机A,SSH server B 以及telnet server C。

2、在192.168.1.6(C机器)上

    # 查询是否安装了telnet-server服务
         rpm -ql telnet-server
    # 查询是否telnet设置为开机启动
         chkconfig --list telnet
    # 发现telnet不是开机启动,设为开机启动
         chkconfig telnet on
    # 重启xinetd服务,telnet是非独立服务,依赖于xinetd
         service xinetd restart
    # 看看23端口是否开启
         ss -ntl
    # 拒绝192.168.1.7的访问
         iptables -vnL      # 没有做防火墙策略
         iptables -A INPUT -s 192.168.1.7 -j REJECT

3、在192.168.1.7(主机A)上

    # 直接连接192.168.1.6是被拒绝的(Connection refused)
        telnet 192.168.1.6
    # 打开本机的9527端口,建立隧道
        ssh -L 9527:192.168.1.6:23  -Nf  192.168.1.8
        # -N 在这里就表示建立了隧道之后,不打开远程shell,就在本机待着,处于等待状态
        # -f 后台启用(不然的话,这里建立的隧道会占用一个终端)  
    # 查看一下隧道是否已经建立
        ss -nt
        #发现192.168.1.7:39078和192.168.1.8:22 建立了连接                
    # 连接到telnet服务器上
        telnet 127.0.0.1 9527
        # 注意连接的时候
        # 如果基于用户名和密码的验证方式,则只能以对方主机非root身份去连接
        # 如果基于key的验证方式则可以以其他身份去连接

  至此,主机A就可以实现对telnet server C的远程访问了。
  当主机A访问本机的9527的端口时,被加密后转发到ssh server:22,就是B的22端口,然后B就会解密,然后B再充当telnet的client端,将解密的数据转发到telnet server:23,最终就到达了目标服务器C。大致的流程如下
data <------> 主机A localhost:9527 <------> 主机A localhost:XXXXX <------>
B ssh server:22 <------> B ssh server:YYYYY <------> C telnet server:23
  上面的XXXXX和YYYYY表示端口号,主机A localhost:XXXXX充当的是ssh的client端,B ssh server:YYYYY充当的是telnet 的client端。

4、在192.168.1.7(主机A)上

# 退出连接
    exit
# 关闭隧道(桥)
    ps aux
    killall ssh
    ps aux
# 查看9527端口是否还在
    ss -ntl       
# 发现现在无法连接了
    telnet 127.0.0.1 9527

  退出连接之后,需要在192.168.1.6上把对应防火墙策略取消。

SSH端口转发:远程转发

还是上面的图,如果此时防火墙策略上禁止外部主机通过tcp的22端口访问企业内部,但是允许内部主机出去,比如访问外部的SSH的22端口,此时就应该使用远程转发。注意:内部用户通过防火墙主动出去的,就意味着可以再进来,这不需要在防火墙上做什么策略,因为防火墙有自动的链路记录功能。远程转发,我们用访问邮件服务器的实验来演示,此时角色发生了一些变化,主机A充当的是ssh server,而服务器B充当的是ssh client,服务器C充当的是smtp server。模拟实验的过程如下:

1、实验准备
  192.168.1.6(centos6)、192.168.1.8 (centos7)和192.168.1.7(centos7)三个虚拟机分别充当上面的外部主机A(SSH server),服务器B(SSH client) 以及服务器C(smtp server)。
2、在192.168.1.7(C机器)上

    # 查询smtp server能否接受远程用户的访问
         ss -ntl
    # 发现无法接受,修改相关设置
         vim /etc/postfix/main.cf
           inet_interfaces = all     #  将前面的#去掉,表示本机的所有IP,
                                     #  这样才可以接受远程用户的访问
           #inet_interfaces = localhost     # 这表示绑定在本机127上的,注释掉
    # 重启一下服务,查看
         systemctl restart postfix
         ss -ntl                     # 有*:25表示成功(本机所有ip的25端口)
    # 查看防火墙策略
         iptables -vnL               # 发现没有做防火墙的策略
             # 如果有的话,就采用下面的命令
             systemctl disable firewalld
             systemctl stop firewalld
             iptables -F
    # 拒绝192.168.1.6的访问
         iptables -A INPUT -s 192.168.1.6 -j REJECT

3、在192.168.1.6(主机A)上

    # 确保防火墙是关闭的
        chkconfig --list iptables
        iptables -vnL
    # 确保selinux是关闭的,如果没有关闭,使用下面的命令
        sed -i '/^SELINUX/c\SELINUX=disabled' /etc/selinux/config
        setenforce  0
    # 当在192.168.1.7机器上做了防火墙策略之后,Connection refused
        telnet 192.168.1.7 25

4、 在192.168.1.8(B机器)上

    # 确保防火墙和selinux都是关闭的
    # 测试连接telnet 192.168.1.7 25,发现是通的
        telnet 192.168.1.7 25
    # 打开192.168.1.6的9527端口,建立隧道
        ssh -R  9527:192.168.1.7:25  -fN 192.168.1.6
                # 这里的-fN与上面的相同不再解释

5、在192.168.1.6(主机A)上

    # 查看一下连接是否已经建立
        ss -nt                   
              # 发现192.168.1.6:22和192.168.1.8:36130建立了连接
    # 查看9527端口是否被打开,可以看到9527端口处于监听状态
        ss -ntl  
    # 连接本机的9527端口,发送smtp请求,发邮件的过程不再细说
        telnet 127.0.0.1 9527

6、在192.168.1.7(C机器)上

    # 发现 192.168.1.8:50524  在连接192.168.1.7:25
        ss -nt
    # 查看邮件
        mail

7、在192.168.1.8(B机器)

    # 关闭隧道
        ps aux
        killall ssh

  退出连接之后,需要在192.168.1.7上把对应防火墙策略取消。
  至此,我们就实现了SSH端口远程转发。远程转发本质上仍然是A 可以去访问C ,只是由B来建立隧道。建立隧道的命令是:
    ssh –R 9527:smtpsrv:25 –N sshsrv
  这条命令是让sshsrv侦听9527端口的访问,如有访问,就加密后通过ssh服务转发请求到本机ssh客户端, 再由本机解密后转发到smtpsrv:25。
  SSH端口远程转发大致的流程如下:
Data <------> sshsrv:9527 <------> sshsrv:22 <------>
localhost:XXXXX <------> localhost:YYYYY <------> smtpsrv:25


  至此,SSH本地转发以及SSH远程转发介绍完了,不足之处,请多多指正。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,425评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,058评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,186评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,848评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,249评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,554评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,830评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,536评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,239评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,505评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,004评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,346评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,999评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,060评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,821评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,574评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,480评论 2 267

推荐阅读更多精彩内容