本地转发

假设有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 即可.

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

]# curl --socks5 127.0.0.1:9997 http://172.18.7.72
<h1>This is c7</h1>

SSH端口三种转发方式的更多相关文章

  1. Linux 双线策略路由的三种实现方式总结+端口映射

    Linux 双线策略路由的三种实现方式总结+端口映射 Linux 双线策略路由的三种实现方式总结+端口映射 网络环境 服务器(网关): eth0 为LAN口,IP为 LAN_IP = 192.168. ...

  2. linux学习之centos(二):虚拟网络三种连接方式和SecureCRT的使用

    ---操作环境--- 虚拟机版本:VMware Workstation_10.0.3 Linux系统版本:CentOS_6.5(64位) 物理机系统版本:win10  一.虚拟网络三种连接方式 当在V ...

  3. SignalR代理对象异常:Uncaught TypeError: Cannot read property 'client' of undefined 推出的结论 SignalR 简单示例 通过三个DEMO学会SignalR的三种实现方式 SignalR推送框架两个项目永久连接通讯使用 SignalR 集线器简单实例2 用SignalR创建实时永久长连接异步网络应用程序

    SignalR代理对象异常:Uncaught TypeError: Cannot read property 'client' of undefined 推出的结论   异常汇总:http://www ...

  4. spring-boot的三种启动方式[z]

    https://blog.csdn.net/u011425751/article/details/79507386 有段时间没有写博客了,也在努力的从传统单机开发向分布式系统过度,所以再次做一些笔记, ...

  5. [转]Apache HTTP Server 与 Tomcat 的三种连接方式介绍

    首先我们先介绍一下为什么要让 Apache 与 Tomcat 之间进行连接.事实上 Tomcat 本身已经提供了 HTTP 服务,该服务默认的端口是 8080,装好 tomcat 后通过 8080 端 ...

  6. Linux基石【第二篇】虚拟网络三种连接方式(转载)

    在虚拟机上安装完Centos系统后,开始配置静态IP,以方便在本宿主机上可以访问虚拟机,在曲折的配置中,了解到虚拟机还有三种连接方式:Bridged,NAT和Host-only,于是,我又一轮新的各种 ...

  7. python笔记-20 django进阶 (model与form、modelform对比,三种ajax方式的对比,随机验证码,kindeditor)

    一.model深入 1.model的功能 1.1 创建数据库表 1.2 操作数据库表 1.3 数据库的增删改查操作 2.创建数据库表的单表操作 2.1 定义表对象 class xxx(models.M ...

  8. css 三种引用方式

    内联式 代码 <!doctype html> <html lang="en"> <head> <meta charset="UT ...

  9. 【转】vue.js三种安装方式

    Vue.js(读音 /vjuː/, 类似于 view)是一个构建数据驱动的 web 界面的渐进式框架.Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件.它不仅易于上手 ...

随机推荐

  1. ssm项目启动,加载数据库连接池时卡住

    今天早上到公司启动项目的时候,加载数据库连接池时卡住,昨晚还好着呢,然后排查原因,最后发现是因为有一个mapper的xml配置文件中 <mapper namespace="com.mi ...

  2. BEA WebLogic平台下J2EE调优攻略--转载

    BEA WebLogic平台下J2EE调优攻略   2008-06-25 作者:周海根 出处:网络   前 言 随着近来J2EE软件广泛地应用于各行各业,系统调优也越来越引起软件开发者和应用服务器提供 ...

  3. HtmlAnchor点击之后保持高亮

    HtmlAnchor点击之后保持高亮,就是一个链接,在点击之后,还要保持高亮状态.应用在网站后台管理界面,左边菜单点击之后,菜单保持点击高亮状态.为了实现这个功能,确实花上Insus.NET不少时间. ...

  4. 0/1背包问题(DP)

    Description 给定 n 个物品和一个背包.物品 i 的重量是 wi ,其价值为 vi ,背包的容量为 C .问:应该如何选择装入背包的物品,使得装入背包中物品的总价值最大? Input 输入 ...

  5. layui——上传图片,并实现放大预览

    一般上传文件后会返回文件的路径,然后存储到数据库,那么首先实现上传后的放大和删除功能 function uploadSmallPic() { var upload = layui.upload; up ...

  6. 使用xml4j xml与字符串之间转换

    jar准备:dom4j-2.1.1.jar  jaxen-1.1.6.jar jaxen/jaxen/ Maven依赖写法 <dependency> <groupId>jaxe ...

  7. apache-kylin 权威指南—读书笔记

    1. 概述 kylin 是 OLAP 引擎,采用多维立方体预计算技术,可将大数据的 SQL 查询速度提升到亚秒级别. 需求: 虽然像 spark,hive 等使用 MPP 大规模并行处理和列式存储的方 ...

  8. scrum 项目的基本模式

    scrum 项目中有 3 个主要的角色:产品所有者, Scrum 主管和团队成员 产品所有者和团队其他成员一起工作,负责维护生产积压工作表 (production backlog) ,并对表中的项制定 ...

  9. js中作用域链和作用域

    作用域 在JavaScript中,我们可以将作用域定义为一套规则,这套规则用来管理引擎如何在当前作用域以及嵌套的子作用域中根据标识符名称(变量名或者函数名)进行变量查找. 经过研究<高级程序设计 ...

  10. Android学习笔记(3)----手机调试[OFFLINE]的解决方式

    问题描述 今天用Android Studio开发了一个简单的调用摄像头的App,结果想调试的时候发现选择调试设备的对话框中,手机名称后面总是跟着一个[OFFLINE]的标识,只能选择启动AVD来进行调 ...