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 |
|
|
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端口三种转发方式的更多相关文章
- Linux 双线策略路由的三种实现方式总结+端口映射
Linux 双线策略路由的三种实现方式总结+端口映射 Linux 双线策略路由的三种实现方式总结+端口映射 网络环境 服务器(网关): eth0 为LAN口,IP为 LAN_IP = 192.168. ...
- linux学习之centos(二):虚拟网络三种连接方式和SecureCRT的使用
---操作环境--- 虚拟机版本:VMware Workstation_10.0.3 Linux系统版本:CentOS_6.5(64位) 物理机系统版本:win10 一.虚拟网络三种连接方式 当在V ...
- 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 ...
- spring-boot的三种启动方式[z]
https://blog.csdn.net/u011425751/article/details/79507386 有段时间没有写博客了,也在努力的从传统单机开发向分布式系统过度,所以再次做一些笔记, ...
- [转]Apache HTTP Server 与 Tomcat 的三种连接方式介绍
首先我们先介绍一下为什么要让 Apache 与 Tomcat 之间进行连接.事实上 Tomcat 本身已经提供了 HTTP 服务,该服务默认的端口是 8080,装好 tomcat 后通过 8080 端 ...
- Linux基石【第二篇】虚拟网络三种连接方式(转载)
在虚拟机上安装完Centos系统后,开始配置静态IP,以方便在本宿主机上可以访问虚拟机,在曲折的配置中,了解到虚拟机还有三种连接方式:Bridged,NAT和Host-only,于是,我又一轮新的各种 ...
- python笔记-20 django进阶 (model与form、modelform对比,三种ajax方式的对比,随机验证码,kindeditor)
一.model深入 1.model的功能 1.1 创建数据库表 1.2 操作数据库表 1.3 数据库的增删改查操作 2.创建数据库表的单表操作 2.1 定义表对象 class xxx(models.M ...
- css 三种引用方式
内联式 代码 <!doctype html> <html lang="en"> <head> <meta charset="UT ...
- 【转】vue.js三种安装方式
Vue.js(读音 /vjuː/, 类似于 view)是一个构建数据驱动的 web 界面的渐进式框架.Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件.它不仅易于上手 ...
随机推荐
- 在WPF中如何使用RelativeSource绑定
在WPF绑定的时候,指定绑定源时,有一种办法是使用RelativeSource. 这种办法的意思是指当前元素和绑定源的位置关系. 第一种关系: Self 举一个最简单的例子:在一个StackPanel ...
- Error处理:/bin/bash^M: 坏的解释器: 没有该文件或目录(bad interpreter: No such file or directory)
在Linux下编译运行脚本的时候出现”/bin/bash^M: 坏的解释器: 没有那个文件或目录(bad interpreter: No such file or directory)“这样的错误. ...
- Kernel的IIC驱动分析
涉及到的文件: drivers/i2c/i2c-core.c drivers/i2c/i2c-dev.c drivers/i2c/busses/i2c-imx.c 等等 在下面分析的代码中,不想关或者 ...
- [转]高品质开源工具Chloe.ORM:支持存储过程与Oracle
本文转自:http://www.cnblogs.com/so9527/p/6131177.html 扯淡 这是一款高质量的.NET C#数据库访问框架(ORM).查询接口借鉴 Linq.借助 lamb ...
- [转]wxParse-微信小程序富文本解析组件
本文转自:https://github.com/icindy/wxParse 基本使用方法 Copy文件夹wxParse - wxParse/ -wxParse.js(必须存在) -html2json ...
- 浅谈Android项目----JSON解析(4种解析技术详解)
json简介 1.概念:json全称是javaScript object Notation,是一种并轻量级的数据交换格式. 2.特点: 1.本质就是具有特定格式的字符串 2.json完全独立于编程语言 ...
- MySQL查询小数点位数
怎么查询某个字段中小数有几位? MySQL数据库: 通过下面sql就可以查出来,有2位col*100,有3位col*1000,一次类推: ) 备注:floor:函数只返回整数部分,小数部分舍弃. Or ...
- bnu 10783 格斗游戏 线段与圆的关系
格斗游戏 Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld Java class name: ...
- Ubuntu重启网卡的三种方法
一.network利用root帐户# service network restart 或者/etc/init.d/networking restart 二.ifdown/ifup# ifdown et ...
- 在弹框中获取foreach中遍历的id值,并传递给地址栏。
1.php有时候我们需要再弹框中获取foreach中遍历的数据(例如id),在弹框中点击按钮并传递给地址栏跳转.那么应该怎么做呢. 2. 点击取现按钮,如果没有设置密码->弹框 3. 点击去设置 ...