zoukankan      html  css  js  c++  java
  • SSH端口三种转发方式

    本地转发

    假设有ssh服务器B,telnet服务器C被防火墙与外界隔离,此时外部主机A无法直接访问C服务器.

    此时可以通过本地转发的方式让A与C借助B服务器通过ssh协议通信.

    client      

    firewall       

    ssh server       

    telnet server

    A(172.18.7.62)

    -

    B(172.18.7.77)

    C(172.18.7.72)

    centos6

    -

    centos7

    centos7

    此时A为SSH的客户端,同时也是telnet服务器的客户端,所以称为本地转发

    配置本地转发示例:

      1.客户机A环境配置

        安装telnet客户端

        ]# yum install telnet

      2.配置好服务器环境.

       telnet服务器(服务器C):

        安装telnet服务

    ]# yum install telnet-server -y

        设为开机启动

    ]# systemctl enable telnet.socket

        启动服务

    ]# systemctl start telnet.socket

    测试

      在客户机A执行

    ]# telnet 172.18.7.72
    centos7 login: haha
    Password: 
    Last login: Sat Jan 6 15:45:13 from 172.18.7.1
    ]$ logout
    

      连接成功

    这时还需要模拟防火墙,只要在telnet服务器C设置iptables策略阻止客户机A的访问即可

    服务器C:

      清空之前的策略

    ]# iptables -F

      设置策略阻止A访问

    ]# iptables -A INPUT -s 172.18.7.62 -j REJECT

      测试

    回到客户机A

    ]# telnet 172.18.7.72
    telnet 172.18.7.72
    Trying 172.18.7.72...
    telnet: connect to address 172.18.7.72: Connection refused
    

      已成功阻止A访问.

    设置地址转发:

    既然是本地转发,那一定就是在客户机A本地做设置:

    设置格式为:

      ssh -L localport:remotehost:remotehostport sshserver

      ssh -L 本机随机一个未使用的端口:C的ip:C的端口 ssh服务器B的ip

    所以应写成下面这样

    ]# ssh -L 9999:172.18.7.72:23 172.18.7.77 -Nf

      -N 不打开远程shell,因为我们无需在ssh主机执行命令

      -f 连接后后台运行.

    此时来到ssh服务器查看网络连接

    ]# ss -nt
    State Recv-Q Send-Q Local Address:Port Peer Address:Port
    ESTAB 0 0 172.18.7.77:22 172.18.7.62:33208
    

    可见,客户机A已经与ssh服务器B建立了连接.

    下一步客户机A就可以使用telnet连接telnet服务器C了.

    ]# telnet 127.0.0.1 9999
    Trying 127.0.0.1...
    Connected to 127.0.0.1.
    Escape character is '^]'.
    Kernel 3.10.0-693.el7.x86_64 on an x86_64
    centos7 login: haha
    Password: 
    Last login: Mon Jan 8 20:54:28 from ::ffff:172.18.7.62
    [haha@centos7 ~]$
    

    登陆成功!

    至此本地转发已实现

    远程转发

    远程转发与本地转发的区别在于,ssh的客户端与服务端互换了位置.

    现在客户机A依然为应用的客户端,但是从ssh的客户端变为了ssh服务器.

    同样,ssh服务器B,变成了ssh的客户端.

    应用服务器的服务类型可以是任意一种,比如http,smtp,ftp等,这一次我们给应用服务添加smtp服务

    app client,ssh server

    firewall       

    ssh client    

    app server

    A(172.18.7.62)

    -

    B(172.18.7.77)

    C(172.18.7.72)

    centos6

    -

    centos7

    centos7

    smtp的默认设置是只允许本机访问,我们把他改为所有主机可访问.

    修改 /etc/postfix/main.cf文件的大概116行位置的inet_interfaces 值为all

    ]# vim /etc/postfix/main.cf
    inet_interfaces = all
    

    重启postfix服务

    ]# systemctl restart postfix

    之后要在ssh客户端B设定远程端口转发.

    命令格式为

      ssh -R sshserverport:remotehost:remotehostport sshserver

      ssh -R 主机A的端口:主机C的IP:主机C的端口 主机A

    执行命令:

    ]# ssh -R 9998:172.18.7.72:25 172.18.7.62 -Nf

    之后去A主机查看,发现已开启了本机9998端口监听.

    ]# ss -tnl
    127.0.0.1:9998
    

    此时A与B之间的隧道已建立成功.

    测试:

    在A上执行:

    ]# telnet 127.0.0.1 9998
    Trying 127.0.0.1...
    Connected to 127.0.0.1.
    Escape character is '^]'.
    220 centos7.qt ESMTP Postfix
    

    已成功连接C服务器的25端口.

    动态端口转发

    假设场景如下

    client

    firewall

    server1

    google

    A(172.18.7.62)

    -

    B(172.18.7.77)

    C(172.18.7.72)

    centos6

    -

    centos7

    centos7

    A被防火墙阻挡,无法访问C,但可以访问B,且B与C互通

    操作示例:

    firewall用C的iptables来实现,上面的实验中已实现.

    接下来在A上面执行一条命令来建立隧道

    命令格式

      ssh -D port root@sshserver

      ssh -D 本机随机一个端口 ssh服务器ip

    写成这样:

    ]# ssh -D 9997 172.18.7.77 -Nf

    然后去A,打开图形界面的Firefox,进入preference -> Advanced -> Network -> Settings ->

    选择Manual proxy configuration. -> SOCKS host处填写:127.0.0.1,Port填写9997 -> OK

    返回浏览器页面.访问地址 172.18.7.72 即可.

    clip_image001[4]

    如果要使用命令行命令curl来访问,需要加--socks5选项

    ]# curl --socks5 127.0.0.1:9997 http://172.18.7.72
    <h1>This is c7</h1>
  • 相关阅读:
    Ember.js 入门指南——计算属性(compute properties)
    Ember.js 入门指南——扩展(reopen)
    Ember.js 入门指南——类的定义、初始化、继承
    Ember.js 入门指南——目录
    Ember.js 入门指南——{{action}} 助手
    ubuntu按转jdk
    ubuntu设置电脑作为wifi热点
    一步完成linux安装jdk
    GStreamer基础教程13
    GStreamer基础教程12
  • 原文地址:https://www.cnblogs.com/Q--T/p/8252132.html
Copyright © 2011-2022 走看看