SSH隧道tunneling端口转发

SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据。但是,SSH 还能够将其他 TCP 端口的网络数据通过SSH 链接来转发,并且自动提供了相应的加密及解密服务。这一过程也被叫做“隧道”(tunneling),这是因为 SSH 为其他TCP 链接提供了一个安全的通道来进行传输而得名。

例如,Telnet,SMTP,LDAP 这些 TCP 应用均能够从中得益,避免了用户名,密码以及隐私信息的明文传输。而与此同时,如果工作环境中的防火墙限制了一些网络端口的使用,但是允许 SSH的连接,也能够通过将 TCP 端口转发来使用 SSH 进行通讯

SSH 端口转发能够提供两大功能:

? 加密 SSH Client 端至 SSH Server 端之间的通讯数据

? 突破防火墙的限制完成一些之前无法建立的 TCP 连接

现在来模拟一场景来演示过程

DEMO公司在内部有一台公司WEB服务器C,因为上面的内容是公司内部相关的,因此,只允许通过内部的B机器(代理服务器)进行访问。如果员工A想访问这台WEB服务器,只能经过防火墙认证过滤后进入内网B进行访问。

在C机器上使用iptables进行策略部署

#iptables -A INPUT -s 192.168.4.101 -j ACCEPT

#iptables -A INPUT -s 192.168.4.100 -j REJECT

#iptables -vnL

Chain INPUT (policy ACCEPT 53 packets, 4347 bytes)

pkts bytes target     prot opt in     out     source               destination

0     0 ACCEPT     all  --  *      *       192.168.4.101        0.0.0.0/0

0     0 REJECT     all  --  *      *       192.168.4.100        0.0.0.0/0           reject-with icmp-port-unreachable

验证

在A上面直接访问C机器,无法连接

#curl http://192.168.4.113

curl: (7) couldn't connect to host

在B上面直接访问C机器,可以正常打开网页服务

#curl http://192.168.4.113

<h1>Apache 2 Test Page powered by CentOS</h1>

使用ssh隧道技术进行解决此问题

方案一

本地转发

语法格式:

-L localport:remotehost:remotehostport sshserver

-L 本地端口:远程主机地址:远程主机开放端口 中转主机地址

? 选项:

-f 后台启用

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

-g 表示ssh隧道对应的转发端口将监听在主机的所有IP中,不使用"-g选项"时,转发端口默认只监听在主机的本地回环地址中,"-g"表示开启网关模式,远程端口转发中,无法开启网关功能

  1. 在A上面设置本地端口转发

#ssh -L 1314:192.168.4.113:80 192.168.4.101 -Nf

当访问本机的1314的端口时,被加密后转发到192.168.4.101的ssh服务,再解密被转发到192.168.4.113:80

#ss -nl

LISTEN     0      128                                       127.0.0.1:1314

在B机器上可以看到连接了                                          *:*

#ss -nt

ESTAB      0      0                        192.168.4.101:22                                   192.168.4.100:42678

2.在A上进行访问网站

#curl http://127.0.0.1:1314

<h1>Apache 2 Test Page powered by CentOS</h1>

成功返回网页内容

3.在C机器上面看到的是B的连接

#ss -nt

ESTAB 0      1                              ::ffff:192.168.4.113:80                            192.168.4.101:60500

在这个场景里,A是ssh客户端,B是ssh服务器端

方案二

远程转发

语法格式:

-R sshserverport:remotehost:remotehostport sshserver

-R 本地端口:远程主机地址:远程主机开放端口 中转主机地址

? 选项:

-f 后台启用

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

-g 表示ssh隧道对应的转发端口将监听在主机的所有IP中,不使用"-g选项"时,转发端口默认只监听在主机的本地回环地址中,"-g"表示开启网关模式,远程端口转发中,无法开启网关功能

1.在B上面设置远程端口转发

#ssl -R 1314:192.168.4.113:80 192.168.4.100 -Nf

-R让192.168.4.100侦听1314端口的访问,如有访问,就加密后通过ssh服务转发请求到本机192.168.4.101ssh客户端,再由本机解密后转发到192.168.4.113:80

在A上面能看到B访问A的22端口

#ss -nt

ESTAB      0      0                                     192.168.4.100:22                                 192.168.4.101:45830

2.在A上进行访问网站

#curl http://127.0.0.1:1314

<h1>Apache 2 Test Page powered by CentOS</h1>

成功返回网页内容

3.在C机器上面看到的是B的连接

#ss -nt

FIN-WAIT-1 0      1                              ::ffff:192.168.4.113:80                        ::ffff:192.168.4.101:50934

在这个场景里,B是ssh客户端,A是ssh服务器端

动态端口转发

作为一名技术人员,翻阅英文原版资料是必须的。有些情况确实是需要向外界查找一些学习资料。

语法:

ssh -D 1080 远程主机地址

当用浏览器访问internet时,本机的XXX端口做为代理服务器,firefox的访问请求被转发到sshserver上,由sshserver替之访问internet

1.在A上面启用动态端口转发至B机器上

#ssh -D 1888 192.168.4.101 -Nf

2.在A机器上面指定使用socks5 访问

#curl --socks5 127.0.0.1:1888 http://192.168.4.113

<img src="./google.png"></img>

通过Firefox访问。如果是Windows机器,可以考虑安装一个openssh for windows 3.81p,2.5MB

https://sourceforge.net/projects/sshwindows

原文地址:http://blog.51cto.com/191226139/2061833

时间: 2024-10-11 00:40:27

SSH隧道tunneling端口转发的相关文章

SSH隧道技术----端口转发,socket代理

本文大部分参考引用加copy:http://blog.chinaunix.net/uid-20761674-id-74962.html 本文的受众 如果你遇到了以下问题,那么你应该阅读这篇文章 我听说过这种技术,我对它很感兴趣 我想在家里访问我在公司的机器(写程序,查数据,下电影). 公司为了防止我们用XX软件封锁了它的端口或者服务器地址. 公司不让我们上XX网站,限制了网址甚至IP. 公司不让我们看关于XX的信息,甚至花血本买了XX设备,能够对内容进行过滤.一看XX内容,链接就中断了. 我爸是

使用 SSH 隧道实现端口转发、SOCKS 代理

SSH隧道 本地端口转发 本地客户端通过 local_port 连接到 MobaXterm: MobaXterm 绕过防火墙,使用 user 用户连接到 ssh_server_ip:ssh_server_port 的 SSH 服务器: SSH 服务器连接到 romote_ip:romote_port 的远程服务器. ssh -N -f -L local_port:romote_ip:romote_port [email protected]_server_ip:ssh_server_port -

流量操控之SSH隧道与端口转发

目  录 第1章            概述... 3 1.1.         实现命令... 3 1.2.         SSH隧道类型... 3 第2章            SSH隧道... 4 2.1.         动态映射(Socks代理)... 4 2.1.1.   命令... 4 2.1.2.   相关参数说明... 4 2.1.3.   意义... 4 2.1.4.   运用场景... 4 2.1.5.   优点... 6 2.1.6.   缺点... 6 2.2.   

ssh配置及端口转发

生成密钥 默认密钥 ssh-keygen -t rsa -C [email protected] 生成自定义文件名密钥 ssh-keygen -t rsa -f ~/.ssh/id_rsa_github -C [email protected] 多密钥配置 添加文件~/.ssh/config,内容如下 Host test-github #网站本地别称,建议设置成网站域名,该行不要直接复制,具体见下文 Hostname github.com #网站实际地址 IdentityFile ~/.ssh/

ssh验证和端口转发

ssh 服务登录验证 ssh 服务登录验证方式: 用户/ 口令 基于密钥 基于用户和口令登录验证 客户端发起ssh请求,服务器会把自己的公钥发送给用户 用户会根据服务器发来的公钥对密码进行加密 加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,则用户登录成功 基于用户名口令登录验证 基于密钥的登录方式 1.首先在客户端生成一对密钥(ssh-keygen) 2.并将客户端的公钥ssh-copy-id拷贝到服务端 3. 当客户端再次发送一个连接请求,包括ip .用户名 4. 服务端得到

SSH 内网端口转发实战

导读 大家都知道SSH是一种安全的传输协议,用在连接服务器上比较多.不过其实除了这个功能,它的隧道转发功能更是吸引人. 如果两个内网之间的linux服务器需要互相登录,或需要互相访问内网某个端口,担忧没有公网IP,可以使用的方法有ngrok(https://ngrok.com/),但并不方便,我们只需两条 SSH 命令即可. 先给出本文主角,两条SSH命令: 远程端口转发(由远程服务器某个端口转发到本地内网服务器端口) ssh   -CfNg  -R(命令行的关键)   2222(远程服务器端口

ssh强大的端口转发功能

ssh 最普通的用法便是通过 ssh 远程登录 linux 服务器,或是远程执行命令,但是,ssh 的用法不光局限于此,它的端口转发功能才是高级的用法.ssh的远程登录以及远程执行命令就不记录了,主要记录一下 ssh 在不同地方的端口转发. 这是ssh的参数解释相关参数的解释: -f Fork into background after authentication. 后台认证用户/密码,通常和-N连用,不用登录到远程主机. -L port:host:hostport 将本地机(客户机)的某个端

ssh利用端口转发实现SOCKS5代理

现在linux下ssh使用比较广泛的是openssh包 ssh相关选项: -V 显示版本: ssh -V OpenSSH_6.6.1p1 Ubuntu-2ubuntu2, OpenSSL 1.0.1f 6 Jan 2014 -f 输入密码后进入后台模式(Requests ssh to go to background just before command execution.) -N 不执行远程命令,用于端口转发( Do not execute a remote command. This i

[原创]SSH 隧道转发

目录 简介 本地SSH隧道 远程SSH隧道 FAQ 免密码登陆 自动重连 简介 建立ssh隧道常用于, 通过一台公网的主机或者是大家都可以访问的主机做跳转机,来访问内部或者外部不能直接访问的机器. 项目当前用途: 由于服务端上假设架设的redis未设置加密, 因此通过防火墙了屏蔽redis端口(6379), 其他外网机器需要连接到该端口就可以使用ssh隧道建立端口转发绕过防火墙. 参考文章: https://www.cnblogs.com/fbwfbi/p/3702896.html 本地SSH隧