分别研究SSH和传输层代理技术的工作原理,提出基于SSH应用服务的传输层代理实现方法,然后详细讨论TCP和UDP两种协议的代理实现和其中的端口重定向实现,最后给出部分实现代码及端口重定向配置规则。
一、引言
传统的网络服务如FTP、Telnet和POP等是一些极不安全的信息安全数据传输方式,造成不安全的因素主要有两方面。一是这些服务的客户端与服务器的数据传输是采用明文的,用户名、密码和传输的内容很容易被截获。二是客户端和服务器的认证方式过于简单,第三者很容易冒充服务器的身份来欺骗客户端用户,从而获得客户端登录真实服务器所用的用户名、密码以及传输内容等。
二、SSH协议及其配置策略
目前的SSH协议有两个版本SSH1和SSH2,它们都是由客户端和服务器两部分组成的,但是这两个版本是不兼容的[2],在此,我们采用SSH2。
SSH协议是基于TCP/IP协议栈的,它接收TCP/IP提供的服务,然后为上层应用(服务)提供安全的数据传输服务。SSH的体系结构主要有三部分组成:传输层协议,用户认证协议和连接协议。
SH软件有两个部分组成,一部分是服务器,一部分是客户端,它们的通信过程如下:
1.要连接到服务器的客户端主机产生一对密钥,一个私钥和一个公钥。私钥用来标识本地主机,存放在本地,通常为1024位,对私钥的保存提倡设置密码。公钥用来存放在服务器的固定目录中,用于认证客户端用户身份。
2.启动服务器的sshd服务。启动时系统会产生一个服务器密钥(通常为768位),这个密钥在使用中通常每小时更换一次,并且不存在磁盘上。
3.服务器不断检查是否有新连接,如果有,则把服务器密钥和客户端公钥发送给客户端。
4.客户接收到服务器密钥和客户端自身的公钥后产生一个随机数,使用接收到的服务器公钥和客户端公钥加密这个随机数,并发送给服务器。
5.服务器和客户端把这个随机数用作对称加密算法的密钥,在通信中对通信内容加密,在客户端还要使用客户端私钥产生数字签名,此后,双方即可开始数据交换。
在使用代理前,首先要保证在没有代理服务器的情况下,各类业务均能正常开展,然后再架设代理服务器,由代理服务器接收用户的请求并为用户服务,在用户看来,代理是透明的。对于Open SSH,首先要安装服务器和客户端软件包,然后分别对两部分配置。在我们应用中操作系统选择Fedora Core 4(FC4),SSH选择Open SSH4.3。
服务器端安装完成相关软件后即可启动SSH守护进程,默认的配置即可正常工作,如需修改默认的配置信息,如监听的'端口等,可以修改配置文件/etc/ssh/sshd_config(默认安装)。
三、传输层代理技术
传输层代理要求分别实现对TCP和UDP的代理。TCP是一个面向连接的协议,数据要在TCP连接上传输之前,连接必须通过“握手”的机制建立起来。
1.客户端先发送一个TCP包,它的标志字段中的第5位(从1计起)为1,表示一个SYN包,序列号以ISN1表示;
2.服务器发回一个TCP包作为应答,它的标志字段第2位(ACK)与第5位置1,表示一个SYN-ACK包,该包的序列号(ISN2)由服务器产生,确认号(Ack)为ISN1+1;
3.客户端再发一个TCP包进行确认,它的标志字段的第2位置1,表示一个ACK包,序列号为ISN1+1,确认号为ISN2+1。
UDP是一种无连接,不可靠的传输层协议,它的可靠性要在应用层验证,因此对UDP协议的代理要比TCP简单得多,只要把客户端发过来的UDP包截获,然后提取出应用层数据,再按原目的地址、原目的端口转发出去即可。
四、SSH代理系统设计
SSH传输层代理体系结构,共由三部分组成:SSH客户端、SSH服务器和代理服务器。SSH客户端和SSH服务器是通过代理服务器进行通信的,代理服务器采用双网卡主机,分别连接SSH客户端和服务器。
要实现TCP协议的代理,在服务器端(简称S端,下同)与客户端(简称C端,下同)之间需要完成两部分工作,一是要创建一个服务器端S1,它完成与C端的握手、为C端提供服务。在C端看来,它是与S1通信。二是要创建一个客户端C1,它完成与S1端的握手、接收S1的数据并发送给S、接收S的数据并发送给S1。在S看来,它是与C1通信。以此思想在逻辑上隔断客户端与服务器端的直接通信,确保高信任域内的网络安全。TCP协议代理流程如图1所示: 采用UDP的应用层协议主要有DNS,TFTP,DHCP,RADIUS及一些用于即时通信的应用等。在本应用中,UDP协议主要用来做域名解析,因此UDP数据包占用的网络带宽较少,所以可以把接收到UDP的数据,按它原来的目的IP直接转发出去。
基于SSH的应用层协议主要有FTP,Telnet,POP等。对于FTP、POP等默认的端口固定,而FTP一般有一个控制通道和多个数据通道,默认情况下控制通道采用TCP的21端口,控制连接的建立是由客户端发起的,主要传输客户端与服务器之间的命令及控制字信息。而数据连接要求客户端与服务器端协商建立,有两种情形即两种模式,主动模式和被动模式。主动模式是从服务器端向客户端发起;被动模式是客户端向服务器端发起。不管是被动模式还是主动模式,关键要解决的问题是要确定数据连接所使用的端口。正是因为这种端口的不确定性,使得我们在程序实现时不能只监听某些应用协议所使用的端口,但如果能将发向这些事先未知或已知的端口的数据能发到一个统一的端口上,我们的程序只要监听这个固定的端口就可以了,在此我们使用端口重定向技术。
在FC4下的iptables提供了端口重定向功能,netfilter/iptables是从
2.4x内核开始Linux使用的防火墙技术,包括包过滤和状态检测,在iptables中有表,表中包含链及其规则,在此,根据需要要使用是iptables的nat表及其PREROUTING规则。我们要在两个地方设置端口重定向,一是用户发出的连接请求,一个是服务器发出的连接请求。
五、结论
本文结合两种安全技术SSH和传输层代理,解决了SSH在传输层代理环境下如何实现数据安全传输的问题,从而进一步增强了系统与本地网络的安全性,同时还解决了客户机与服务器通信数据通道的唯一性问题,保证了数据通道的可控性,增强了客户对系统安全性的管理与配置能力。
【基于SSH与代理的数据安全传输机制的研究论文】相关文章: