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

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

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

最近訪問