基於SSH與代理的數據安全傳輸機制的研究論文

分別研究SSH和傳輸層代理技術的工作原理,提出基於SSH應用服務的傳輸層代理實現方法,然後詳細討論TCP和UDP兩種協議的代理實現和其中的端口重定向實現,最後給出部分實現代碼及端口重定向配置規則。

基於SSH與代理的數據安全傳輸機制的研究論文

一、引言

傳統的網絡服務如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在傳輸層代理環境下如何實現數據安全傳輸的問題,從而進一步增強了系統與本地網絡的安全性,同時還解決了客戶機與服務器通信數據通道的唯一性問題,保證了數據通道的可控性,增強了客戶對系統安全性的管理與配置能力