利用SSH实现多种端口转发

2016-11-09 00:14曾德愚
数字技术与应用 2016年9期
关键词:端口

曾德愚

摘要: SSH协议及相关工具软件是系统管理员非常常用的组件,在日常网络应用中,常常会碰到各种安全问题,本文分析了SSH的端口转发机制,讨论了在一些非安全环境下使用SSH端口转发对网络应用、个人隐私及商业信息进行加密保护的措施,同时也讨论了如何利用SSH端口转发突破如防火墙及网络应用本身设置的限制以更加方便的使用网络服务。

关键词:SSH 端口 转发

中图分类号:TP393 文献标识码:A 文章编号:1007-9416(2016)09-0214-01

1 概述

当使用SSH协议进行通信时,SSH协议会对所有SSH客户端与服务端之间的网络数据进行自动加解密,从而实现安全通信。但使用者往往忽视了SSH 协议的端口转发功能,在端口转发模式下,其他TCP端口的数据可以转由SSH链接自动进行加解密转发,从而为其他TCP链接如Telnet、SMTP、LDAP提供安全加密传输通道,避免了一些明文传输敏感信息泄露。如果其他网络端口被限制访问,但SSH端口没有被限制,也可以通过SSH端口转发进行TCP连接,因此利用SSH端口转发不仅能够加密SSH客户端和服务器端的数据通信,也可以解决由于防火墙限制而无法建立TCP连接的问题。

2 端口转发示例

假设有一台LDAP服务器只为本地应用提供访问服务,如果需要临时从远程客户端连接到这台服务器,就可以使用本地端口转发实现,在远程客户端执行如下命令即可建立一个SSH本地端口转发。

ssh -L 8100:localhost:389 172.16.100.123

上述命令假设服务器ip为172.16.100.123,本地监听端口为8100,此时即可将远程客户端的应用直接配置至本机8100端口,实际通信过程如下。

远程客户端将数据发送至自己的8100端口,而SSH客户端将8100端口接收的数据进行加密后转发至服务器SSH服务端,服务器端的SSH服务端解密数据并将其转发至监听的389标准LDAP监听端口,从服务器端相应的数据沿原路以相反流程传输。整个流程中客户端直接连接本地监听端口,转由SSH端口转发完成加密、转发、解密的通信过程,并没有直接连接服务器端。

由于整个端口转发通信过程基于SSH连接,因此必须保持SSH连接以使端口转发生效,如果SSH连接断开,显而易见,整个通信链路也随之失效。另外只能在创建SSH连接时同时建立端口转发,对已经存在的SSH连接无法额外创建端口转发。另外还可以使用SSH提供的GatewayPorts关键字将已经创建的本地端口转发共享给其他客户端。

上面讨论了SSH的本地端口转发,假如由于防火墙的原因不能使用SSH直接从客户端连接到服务器,但允许服务器到客户端的反向SSH连接,那么可以使用远程端口转发。假设通信拓扑如上例,那么在服务器端可执行如下命令。

ssh -R 8100:localhost:389 172.16.100.234

上述命令假设客户端ip为172.16.100.234,客户机监听端口为8100。实际通信如下。

客户端数据发送至自己的8100端口,本机SSH服务端加密8100端口接收的数据后转发至服务器端SSH客户端,SSH客户端接收数据并解密,然后将其转发至监听的389标准LDAP监听端口,最后将服务器端的响应数据沿原路以相反流程传输。

如何区分本地转发及远程转发?首先要明确SSH端口转发需要在SSH连接的基础上实现应用连接,SSH连接及应用连接都是有方向性的,如果SSH连接和应用连接方向一致则是本地转发,反之则是远程转发。

3 其他类型转发示例

例如在公共的不安全的网络环境中,可以使用SSH动态转发对网页浏览进行保护。如下面的动态转发命令格式。

ssh-D 8100 12.34.56.78

假设8100为本地对外访问的端口号,12.34.56.78为我们有权限进行连接的远程SSH服务器,上述命令利用SSH创建了SOCKS代理服务,我们可以在浏览器上将localhost:8100设置为正常的SOCKS代理使用。在SSH客户端和SSH服务器端的通信获得了加解密保护,但要注意SSH协议也仅能对此段连接进行保护,对SSH服务器端到目标网站的连接是无法保证安全的。

例如系统管理员经常会远程登录到如Linux、Unix、Solaris等服务器上并在其上以GUI方式进行程序开发或维护,一般可以使用VNC协议及其工具,本文讨论使用SSH结合XWindow实现X协议转发的方法。

使用XWindows需要X客户端及X服务器端,如上文所述,X客户端即为 远程Linux、Unix、Solaris服务器,X服务器端则是发起访问的本地机器,一般正常情况下,将X 客户端的X窗口显示在X服务器端需要在X客户端指定X服务器端的位置,如下列命令所示,然后直接运行X应用即可。

export DISPLAY=Desktop:1.0

如果远程服务器前端增加了防火墙并且不允许X协议通过,此时可以使用SSH端口转发解决,可在本地机器即X服务器端发起如下列命令所示的SSH连接,在创建SSH连接的同时建立X转发并对X通讯数据进行加密。

ssh -X 172.168.16.200

连接建立后即可运行远程X应用,建议不要改变建立X转发时系统自动设置的DISPLAY 环境变量如localhost:10.0,假如本地机器为Windows,可以选择 XMing作为X服务器端,SSH客户端可以选择如PuTTY、Cygwin均可。

4 结语

本文讨论了利用SSH实现本地端口转发、远程端口转发、动态端口转发及X转发,基本原理为在SSH连接基础上转发TCP连接以解决数据加密和突破限制。每种端口转发适合于不同的应用场景,对于周知端口的应用可以使用本地或远程端口转发,如果需要实现SOCKS代理加密则可以使用动态端口转发,对于X应用显而易见可以使用X转发,读者可以根据实际情况做不同的尝试。

参考文献

[1]巴雷特(美).西尔弗曼(美).SSH权威指南(OReilly原版)[J].中国电力出版社,2003.

猜你喜欢
端口
硬件解耦三端口变换器的软开关分析与仿真
多按键情况下,单片机端口不足的解决方法
交换机生成树安全
端口阻塞与优先级
系统网络端口安全防护
LACP实验环境
初识电脑端口
8端口IO-Link参考设计套件加快开发速度
如何管理网络端口让系统更安全
卫星三端口DC-DC变换器技术综述