端口转发概述:
让我们先来了解一下端口转发的概念吧。我们知道,SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据。但是,SSH 还同时提供了一个非常有用的功能,这就是端口转发。它能够将其他 TCP 端口的网络数据通过 SSH 链接来转发,并且自动提供了相应的加密及解密服务。这一过程有时也被叫做“隧道”(tunneling),这是因为 SSH 为其他 TCP 链接提供了一个安全的通道来进行传输而得名。例如,Telnet,SMTP,LDAP 这些 TCP 应用均能够从中得益,避免了用户名,密码以及隐私信息的明文传输。而与此同时,如果您工作环境中的防火墙限制了一些网络端口的使用,但是允许 SSH 的连接,那么也是能够通过将 TCP 端口转发来使用 SSH 进行通讯。总的来说 SSH 端口转发能够提供两大功能:
- 加密 SSH Client 端至 SSH Server 端之间的通讯数据。
- 突破防火墙的限制完成一些之前无法建立的 TCP 连接。
端口转发方式:
共有三种方式,分别为本地转发,远程转发,动态转发
1:本地端口转发
原理:
将本地机(客户机)的某个端口转发到远端指定机器的指定端口. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 同时远程主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有 root 才能转发特权端口。
命令:-L localport:remotehost:remotehostport sshserver
说明:localport 本机开启的端口号
remotehost 最终连接机器的IP地址
remotehostport 转发机器的端口号
sshserver 转发机器的IP地址
选项:-f 后台启用
-N 不打开远程shell,处于等待状态(不加-N则直接登录进去)
接下来,我们通过实验来详细的说明一下如何实现本地转发:
实验:
三台机器:c5服务器,c6跳板机,c7客户机
c5服务器只允许telnet连接(23端口)访问,不允许外部直接访问,c6服务器是一个ssh服务器;有一个用户c7需要从外部连接到内部的c5服务器。
c5防火墙允许22端口进来(或者企业内部有一个堡垒机,ssh -t通过堡垒机进去)。
c7用户通过ssh协议连接到c6机器上,再通过c6机器做跳板,连接至c5服务器。
实验步骤:
1)模拟c5不允许c7连接,并且开启c6机器的telnet服务端口23。
c5安装 telnet-server并开启:
[root@centos5 Server]# rpm -ivh telnet-server-0.17-39.el5.i386.rpm
warning: telnet-server-0.17-39.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
error: failed to stat /media/RHEL_5.4 i386 DVD: 没有那个文件或目录
Preparing... ########################################### [100%]
1:telnet-server ########################################### [100%]
[root@centos5 Server]# chkconfig xinetd on
[root@centos5 Server]# chkconfig telnet on
[root@centos5 Server]# service xinetd start
启动 xinetd:
[root@centos5 Server]# ss -ntl | grep 23
0 0 *:23 *:*
在c5上输入以下口令:
[root@centos5 Server]# iptables -F
[root@centos5 Server]# iptables -A INPUT -s 172.18.251.152 -p tcp --dport 23 -j ACCEPT
[root@centos5 Server]# iptables -A INPUT -p tcp --dport 23 -j REJECT
在c5上的23端口只允许c6进行访问,其他任何机器都拒绝
iptables -L可以看到详细信息
[root@centos5 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 172.18.251.152