逢 甲 大 學
資 訊 工 程 學 系 專 題 報 告
第四代無線網路頻寬與允入控制器&VPN 閘道器
學 生:宣 拔(四丙)
詹士民(四丙)
李建緯(四丙)
鄭婉菁(四丙)
指導教授:賴坤助
中華民國九十一年十二月二十八日
目 錄
第 一 章 序 論
1.1 研究動機 1
1.2 專題目標 1
1.3 開發環境與設備 1
第 二 章 Virtual Private Network 技 術 簡 介
2.1 什麼是 VPN? 3 2.2 VPN 的基本用途 3 2.3 為什麼要用 VPN? 5 2.4 防火牆 5 2.4.1 防火牆的種類 6 2.5 加密與驗證 6 2.6 VPN 協定 6 第 三 章 Tunnel 技 術 簡 介 及 其 應 用 3.1 Tunneling Protocal (包容通道協定或隧道協定) 7 3.2 PPTP 的運作原理 8 3.2.1 控制連線狀態 8 3.2.2 控制連線的來源端(也許是 PAC 或 PNS) 9 3.2.3 控制連線的接收端(也許是 PAC 或 PNS) 10 第 四 章 IPSEC 4.1 IPSec 概說 13 4.2 AH&ESP 13 4.3 適用範圍 16
第 五 章 GRE(Generation Routing Encapsulation)
第 六 章 RADIUS
6.1 RADIUS 的主要特徵 25
6.2 RADIUS 的運作 25
6.3 RADIUS Challenge/Response 27
第 七 章 PPTP、 IP GRE、 IPSec、 RADIUS 實 作 過 程
7.1 PPTP (Point to Point Tunnel Protocol)服務 31 7.2 GRE (Generic Routing Encapsulation) Tunneling 32 7.3 FreeSWAN’s IPSec Project 35
7.4 FreeRADIUS project 40 第 八 章 第 四 代 無 線 網 路 頻 寬 與 入 控 制 器 系 統 應 用 與 實 作 8.1 系統簡介 43 8.2 系統目的 43 8.3 系統架構 43 8.4 功能簡介 44 8.4.1 無線網路認證管理 44 8.4.1.1 畫面 44 8.4.1.2 功能 46 8.4.1.3 功能流程圖 47 8.4.2 網路快取服務 49 8.4.2.1 畫面 49 8.4.2.2 功能 49 8.4.2.3 功能流程圖 50 8.4.3 IPSec 通道設定 51 8.4.3.1 畫面 51 8.4.3.2 功能 51 8.4.3.3、系統流程圖 52 8.4.4 VPN 連線設定 53 8.4.4.1 畫面 53 8.4.4.2 功能 53
8.4.4.3、系統流程圖 54 8.4.5 PPTP 伺服器 55 8.4.5.1 畫面 55 8.4.5.2、功能 55 8.5 系統在實際環境應用的架構 56 8.6 適用環境 57 8.7 成品照片 57 第 八 章 專 題 感 想 與 心 得 8.1 心得 59 Appendix Reference 61
附件一 Embedded Linux 嵌入式 Linux 系統 A 附件二 Linux ipchains firewall rule C
圖 目 錄 Fig2.1 通過 Internet 實現遠端用戶取用 03 Fig2.2 基本 VPN 架構圖 04 Fig2.3 以專線或撥號的方式來使用 VPN 04 Fig3.1 控制連線狀態圖 09 Fig3.2 控制連線的接收端 10 Fig3.3 透過 Internet 傳輸的 PPTP 封包結構 11 Fig4.1 IPSEC 基本架構 13 Fig4.2 IKE 15
Fig4.3 END-to-END Module 16
Fig4.4 GATEWAY-TO-GATEWAY 17
Fig4.5 END-TO-END and GATEWAY-TO-GATEWAYA 18 Fig4.6 END-TO-GATEWAY and END-TO-END 18
Fig5.1 GRE 封裝形式 19
Fig5.2 GRE Header 19
Fig5.3 GRE Header 21
Fig5.4 SREs field 23
Fig6.1 RADIUS 基本示意圖 26
Fig6.2 RADIUS Challenge 28
Fig7.1 PPTP 架構示意圖 31
Fig7.2 GRE 架構 34
Fig7.3 IPSec 網路架構 37
Fig8.1 系統架構圖 39
Fig8.2 使用 RADIUS 認證的管理畫面 44
Fig8.3. 使用 File System 認證的管理畫面 44
Fig8.4 無線網路登入畫面 45 Fig8.5 無線網路認證登出畫面 45 Fig8.6 登入登出流程圖 47 Fig8.7 IP 合法性偵測流程圖 48 Fig8.8 網路快取服務 49 Fig8.9 Proxy 服務流程圖 50 Fig8.10 IPSec 通道設定畫面 51
Fig8.11 IPSec 系統流程圖 52
Fig8.12 VPN 連線設定畫面 53
Fig8.13 VPN 連線流程圖 54
Fig8.14 無線網路頻寬允入控制器實際架構 56
第 一 章 緒 論 1.1 研 究 動 機 大三的時候,我們修了一門叫〝高速與互連網路〞的課程,老師 在其中的一堂課,以影片代替傳統的上課方式,由日本的 NTT DOCOMO 公司所拍攝,內容是講人類未來十年的發展,尤其是在通 訊方面,在影片中我們所看到的是一個前所未有的環境,本來我們都 只是被那先進的科技所造就的環境所吸引,直到看完老師就問我們幾 個問題,其中有一個問題就是:你們有沒有發現,影片從開始到結束 都沒有看到實體的網路線路,也就是說那是一個無線的時代,當場那 個答案就衝擊著我們,心裡也充斥著說:對也,未來將是一個無線的 網路,就是因為這樣所以我們在才會選擇這個題目當作專題。
這個專題綜合了,RADIUS ( Remote Authentication Dial In User Service ),VPN ( Virtual Private Network ),QoS ( Quality of Service ), NAT ( Network Address Translation ),然後置入 DOM ( Disk On
Module )中,做成所謂的 Embedded System,最後再以 Web 為管理介 面,方便使用者的操作與設定。 1.2 專 題 目 標 本系統欲達成的目標有下述幾點: 1. RADIUS 2. VPN 3. QoS 1.3 開 發 環 境 與 設 備
本系統以 Perl 及 Shell Script 開發,人機介面為 HTML。使用的 OS 為 Redhat Linux ( kernel 2.2.18 ),對外專線採固接式 ADSL 傳 線 (下行 1536kbps/上行 384kbps )及 PPPoE 撥接式 ADSL 專線 (下行 512kbps/上行 64kbps ),區網內有 20 台電腦。另有 VIA C3 Eden 電腦及 DOM ( 32M )。
第 二 章 Virtual Private Network 技 術 簡 介 2.1 什 麼 是 VPN? 所謂虛擬私有網路(VPN), 大概的定義就是"利用 Internet 或其它 的公眾網路,來創立隧道,提供有效且安全的傳輸,交換私有的資訊 "。而虛擬(Virtual)意思是指企業不再〝租用〞實體的長途數據線路, 而是改用 Internet 等公眾網路的長途數據線路。 VPN 同樣支持企業通過 Internet 等公共互聯網路與分支機構或其 它公司建立連線,進行安全的通訊。這種跨越 Internet 建立的 VPN 連 接,“邏輯”上等同於兩地之間使用廣域網路建立的連接。 2.2 VPN 的 基 本 用 途 1. 通過 Internet 實現遠端用戶取用 VPN 支援以安全的方式通過公眾網路,遠端取用企業內部資源。 Fig2.1. 通過 Internet 實現遠端用戶取用
VPN 用戶首先撥通本地 ISP 的 NAS(Network Access Server),然 後 VPN 軟體利用與本地 ISP 建立的連線在撥號用戶和企業 VPN 伺服器之間創建一個跨越 Internet 的虛擬私人網路。 2. 通過 Internet 實現網路互連 可以採用以下兩種方式使用 VPN 連接遠端區域網路。 1. 使用專線連接分支機構和企業區域網路。 不需要使用價格昂貴的長距離專用電路,分支機構和企業端 路由器可以使用各自本地的專用線路通過本地的 ISP 連通 Internet。VPN 軟體使用與當本地 ISP 建立的連線和 Internet 網路在分支機構和企業端路由器之間創建一個虛擬私人網 絡。 2.使用撥號線路連接分支機構和企業區域網。 不同於傳統的使用連接分支機構路由器的專線撥打長途,分 支機構端的路由器可以通過撥號方式連接本地 ISP。VPN 軟 體使用與本地 ISP 建立起的連線在分支機構和企業端路由器 之間創建一個〝跨越〞Internet 的虛擬私人網路。 NOTE: Fig2.2. 基本 VPN 架構圖 Fig2.3. 以專線或撥號的方式來使用
業部門與 Internet 之間建立連線。無論是在客戶端還是伺服 器端都是通過撥入本地的 ISP,因此 VPN 可以大大節省連線 的 費 用 2.3 為 什 麼 要 用 VPN? 一般來說,如果公司 (使用 Intranet ) 規模比較大,辦公室分散 於全國各地,傳統做法是向電信公司租用專線,不然就是接到 frame relay 網路,或透過 ISDN,不論什麼方法費用都是高居不下。在觀念 上 VPN 模糊了傳統上對私有網路 ( Private network ,如 LAN,WAN ) 與公眾網路 ( Public network ,如 Internet ) 的分界,透過 VPN,可 以讓 Public network 與 Private network 達到相同的安全要求,最重要 的是,Public network 的費用低廉 (沒錯就是 Internet),而這也是 VPN 能降低成本的最主要因素。此外 VPN還可以架在兩個辦公室的 Router 之間,中間透過 Internet 間接相連,並可合併 Internet 與 WAN,簡化 成一台 Router 與一條線路,同時節省通訊成本與設備投資。 2.4 防 火 牆 由於 VPN 是透過 Internet (不被信認的第三網路),所以資料隨時 都有被竊取的可能,這也是 VPN 最被詬病的地方,所以我們迫不得 以要保護自己的資料,所以 VPN 的核心技術就是要確保資料的安 全,而讓它美夢成真的兩項關鍵技術就是〝加密編碼〞( encryption ) 與 〝防火牆〞( firewall )。 概念上,Internet 防火牆和實體的防火牆是一樣的,如屋子內發生 了火災,防火牆可以有效隔離火源的散佈,減少可能的損失。而 Internet 防火牆也是同樣的道理,它會檢驗封包的 IP 位址,或 incoming 連線所請求的 port 來決定放行與否,其中最普遍的防火牆型式是封包 過濾防火牆 ( packet filtration firewall ),它會阻擋特定的 IP 服務 (如 特定 port 的服務) 穿越閘道路由器 ( gateway router )。
那到底何謂防火牆?其實防火牆是一個位於內部網路和外部網 路之間的系統,它有雙重功用。首先是阻擋外界直接看到的內部主 機,並限制對方能夠使用的服務;第二,管制內部使用者能夠看到哪 些外部 (一般就是 Internet ) 主機,它就像是維持〝網路交通秩序〞 的警察,會攔下不當的往來資料。Internet 防火牆會檢查通通過閘道
路由器的每一封包,所以又稱為「封包過濾系統」( packet filtration system)。
2.4.1 防 火 牆 的 種 類
大體上防火牆的作業方式都很相似,也就是「集中控制」,一般常見
的有四種:
1. 封包過濾路由器 ( Packet Filtration Router ) 2. 屏障主機 ( Bastion Host,又稱防禦主機 )
3. 鄰界網路 ( Perimeter network OR DeMilitarized Zone,簡稱 DMZ )
4. 代理伺服器 ( Proxy )
在這裡我們只介紹第一種封包過濾路由器:
主導過濾封包的路由器或電腦會依據預先定義的「選徑表」 ( routing table ),或「規則」( rule),將封包發送到網路上,路由器不 在乎封包所含的真正內容,它只管封包來自何處,送往何處。只要封 包符合規定,路由器會判斷是否應該收送封包,或拒絕服務。 封包過濾的策略可分成兩類:開放型網路 (只擋掉幾種不要的封 包),封閉型網路 (只讓幾種事先核准的封包可以通過)。 2.5 加 密 與 驗 證 種? 繁多,將於後面詳加討論。 2.6 VPN 協 定 有下常用的幾種:
1. IPSec ( Internet Security Protocol ) 2. ESP ( Encapsulating Security Payload ) 3. AH ( Authentication Header )
4. Radius ( Remote Authentication Dial In User Service ) 5. PPTP ( Point-to-Point Tunneling Protocol )
第 三 章 Tunnel 技 術 簡 介 及 其 應 用
3.1 Tunneling Protocal (包 容 通 道 協 定 或 隧 道 協 定 )
VPN 有幾套常的「包容通道協定」( Tunneling protocal ),包括: 1. 「點對點包容通道協定」( Point-toPoint Tunneling Protocal,
PPTP)
2. 「第二層轉遞」( Layer 2 Forwarding,L2F)
3. 「第二層包容通道協定」( Layer 2 Tunneling Protocal,L2TP)
我們先來了解一下到底何謂「包容通道協定」? 其實就是把方積木放進圓洞的魔術。想像一下,我們手上有粗水 管和一塊積木,我們要如何讓方積木可以從粗水管的一頭進去而從一 頭出來。有個前提就是積木不能受損,那麼我們就只能用圓球來包容 它,沒了稜角,那自然就可以從另一頭滾出來了。回到主題,我們手 上有東西,但是現有的傳輸媒介就是沒法傳遞,那我們就只好找個傳 輸媒介可以接受的東西,把它包起來,那就搞定了。 上 述 的 隧 道 技 術 是 一 種 通 過 使 用 互 聯 網 路 (corporate internetworking)的基礎設備(infrastructure)在網路之間傳遞資料的方 式。使用隧道傳遞的資料(Payload)可以是不同協定的封包。隧道協定 將這些其它協定的封包重新封裝(Encapsulate)在新的表頭中傳送。新 的表頭提供了路由訊息,從而使封裝的資訊能夠通過互聯網路傳遞。 被封裝的封包在隧道的兩個端點之間通過公共互連網進行路由 (Routing)。被封裝的封包在公共網路(如 Internet)上傳遞時所經過的邏 輯路徑稱為「隧道」。一旦到達網路終點,封裝的封包將被解開並轉 發到最終目的地。 NOTE:隧道技術是指包括資料封裝,傳輸和解開封包在內的全 部 過 程 。
因 都 是 在 「 OSI 參 考 模 型 」 ( Open Standard for Interconnect Reference Model )的第二層運作,此層也稱為「資料連結層」( Data Ling Layer ),而 PPP( Point-to-Point Protocal )也是在此層運作。典型的 PPP
會在用戶端和遠端主機的連線之間被建立起來。同樣的道理,PPTP、 L2F、L2TP 都是被用在〝包容〞PPP 連線,使其能通過 Internet,並 得以停在遠端主機上;在這種狀況下,“包容通道”( Tunnel)就是扮 演傳輸線的角色。因為它們利用現有的 PPP 基礎架構,所以也能繼承 PPP 協定的原有優點,包括從「動態主機設定協定伺服器」( Dynamic Host Configuration Protocal Server,DHCP Server)動態取得 IP 位址、 使用者身分驗證、與資料壓縮。 隧道所使用的傳輸網路可以是任何類型的公共互聯網路,在此我 們主要以目前普遍使用 Internet 為例 3.2 PPTP 的 運 作 原 理 PPTP 會把網路協定的,「資料段」( datagram )塞進 IP 封包,包裝 好的封包看起來就像正常 IP 封包一樣,所有遇到該封包的路由器或 機器都會把它視為一個 IP 封包,以一般正常 IP 封包的方式來處理 它,我們稱此為「IP 封裝」(IP encapsulation);其優點在於它可讓許 多不同的協定可以透過純 IP 網路( 像是 Internet )傳送。 3.2.1 控 制 連 線 狀 態 控制連線依賴於服務所用的標準 TCP 連線。PPTP 控制連線協定 無法區分 PNS 和 PAC 但卻可區分出來源者(Originator)和接收者 (Receiver)。來源端的同儕是第一個開啟 TCP 會議(Session)者。因為 不是 PAC 就是 PNS 會產生連線請求,所以可能會有碰撞發生。 NOTE: PNS(PPTP Network Server): 我們以可把 PNS 想像成在是在一般目的的計算/服務平台上 運作的 Client,它可以處理伺服端的 PPTP 協定。由於 PPTP 完全依賴於 TCP/IP 並和硬體界面無關,所以 PNS 也許可以 使 用 IP 硬 體 界 面 的 連 結 包 括 LAN 和 WAN 裝 置
PAC(PPTP Access Server):
一個附加於一或多條相容於 PPP 運作的 PSTN 或 ISDN 線路 並可處理 PPTP 協定的裝置。PAC 只需要實作 TCP/IP 來傳遞 traffic 給 PNSs, 所 以 它 許 可 以 包 容 非 IP(non-IP)的 協 定
3.2.2 控 制 連 線 的 來 源 端 (也 許 是 PAC 或 PNS) idle 在 idle 狀態,控制連線的來源端嘗試開啟一個和同儕的連線, 當連線開啟時,來源端傳送一個 Send Start-Control-Connection-Request 的訊息,然後進入 wait_ctl_relpy 的狀態。 wait_ctl_reply 來源端會檢查是否有來自同一同儕的的連線,如果有的話就 處理碰撞的情況。 當收到一個 Send-Control-Connection-Reply 的訊息時,會先檢 查是否是相容的版本。假如是較舊的版本,會接受它所提供 的功能;假如是較新的版本且被支援,來源端會跑到下個狀 態 established。但版本如果較新又不被支援,則一個 Stop-Control-Connection 訊息應該被送給同儕爾後來源端進 入 wait_stop_reply 的狀態。
Wait_ctr_rep
established
Wait_stop_reply
idle
TCP Open Indication/Send Start Control Connection Request Receive Start Ctl Connection Reply Version OK Local Terminate /Send Stop Control Request Collision/See Close TCP Reveive Strat Ctl Connection Reply Version Not OK
Receive Stop Control Connection Request /Send Stop Control Repl Clode TCP
Established 一個己經建立的連線也許不是被 local condition 就是被一個 Stop-Control-Connection-Request 的訊息來終止連線。在 local termination 的事件裡,來源端必需送出一個 Stop-Control-Connection-Reply 訊息,並進入 wait_stop_reply 的狀態。 如果來源端收到一個 Stop-Control-Connection-Requesst,那 麼它應該送出一個 Stop-Control-Connection-Request 的訊息 並關閉連線,確保最後的 TCP 訊息己適當地被送出(pushed)。 Wait_stop_reply 如果收到一個 Stop-Control-Connection-Reply 的訊息,應關 閉 TCP 連線,並使得控制連線進入 idle 狀態。 3.2.3 控 制 連 線 的 接 收 端 (也 許 是 PAC 或 PNS) Wait_Stop_Reply Established Receive Control Connection Request Version OK
/Send Start ControlConnection Reply Reply with Error
Receive Stop Ctl Connection Request
/Send Stop Reply
Local Terminate /Send Stop Control Conn. Request
Receive Stop Control Connection Reply /Close TCP Fig3.2.控制連線的接收端
Idle 控制連線的接收端在埠 1723 等待 TCP 會議(Session)的開啟。 當收到一個己開啟的 TCP 連線的通知,它將準備接收 PPTP 的 messages。若收到一個 Start-Control-Connection-Request, 則會檢查版本。假如版本比接收端新且被接收端所支援,那 接收端將送出一個 Start-Control-Connection-Reply 的訊息。假 如版本比接收端新又不被其所支援,則接收端會送出一個 Start-Connection-Reply 的訊息。如果接收端和同儕相同的話, 接收端送出一個帶有自身版本的 Start-Control-/Connection-Reply 訊息並進入 established 的狀 態。 Established 一個己經建立的連線也許不是被 local condition 就是被一個 Stop-Control-Connection-Request 的訊息來終止連線。在一個 local termination 的事件裡,來源端必需送出一個 Stop-Control-Connection-Request 的訊息並進入 wait_stop_reply 的狀態。 並進入 wait_stop_reply 的狀態。 如果來源端收到一個 Stop-Control-Connection-Request,那麼 它應該送出一個 Stop-Control-Connection-Request 的訊息並關 閉連線,確保最後的 TCP 訊息己適當地被送出(pushed)。 NOTE: 在 PAC 和 PNS 間的 tunnuling(隧道)傳遞的 IP 封包架構圖如下所 示 : PPTP 協定所攜帶的使用者資料叫做 PPP 資料封包(Data packets), Media Header IP Header GRE Header PPP Packet
第 四 章 IPSEC 4.1 IPSec 概 說 IP 標頭(Header)中有來源(Source),目的(Destination)位址,裝載資 料(Payload),而 TCP 只負責將信息切割成封包,若遺失封包 TCP 再 重送,所以 TCP/IP 根本沒有安全性可言,使用一般 Sniffing 軟體工 具,即可一目瞭然地看到這些信息。為了確保在任何 IP 網路上擁有 安全的私密通信,IETF 著手訂定了一套開放標準網路安全協定 IPSec (IP Security)。將密碼技術應用在網路層,以提供傳送、接收端做資料 的証證(Authentication)、完整性(Integrity)、存取控制(Access Control)、 以及機密性(Confidentiality)等安全服務。高層的應用協定也可以直接 或間接地使用這些安全服務。 4.2 AH&ESP 在介紹 IPsec 之前必須先談談安全參數 SA(Security
Association),安全參數是必須要的在於 IPv6 和 IPv4 實作認證標頭 AH(Authentication Header),封裝安全資料 ESP(Encapsulating Security Payload)。在 IP 封包從一台電腦傳到另一台電腦之前必須先建立安全 關係即安全參數。安全參數顧名思義就是一組參數,用來定義安全通 訊協定保護通訊時所需要的服務和機制,例如密鑰(Security KEY)。 Fig4.1 IPSEC 基本架構 Remote Client ISP Internet IPsec Tunnel Remote Gateway Intranet
IPsec 是設計來達到網路層中端點對端點(Point to Point)安全通訊 的第三層協定,它主要的架構是 IP 認証標頭(AH)以及 IP 封裝安全資 料(ESP)。 AH:IPSec 的另一個重要協定,專門用來進行驗證的工作,確保 封包在傳輸過程中沒被更改過,但沒有加密的作用。 ESP:IPSec 在 IP 的資料段(datagram)層級使用它來加密,其工 作是將資料加密後傳送來保障資料的安全並且可以限制流量(Traffic Flow)。一般來說,ESP 能被用在另一個 IP 封包的內部,所以 ESP 可 以在一般的 IP 通訊管道裡傳送。為了替代正常的 TCP 或 UDP 封包 的標示資訊,標頭資訊(Header)會被註明該封包的裝載資料己被處理 過,使得 ESP 能透過傳統的網路傳輸。 安全參數(Securit Associations,SA)
對 IPSec 來說,安全參數(SA)是個很基本的概念。AH 和 ESP 兩 者都利用 SAs,而 IKE 的一個主要功能就是 SA 的建立(establish)和維 護(maintenance)。所有的 AH 和 ESP 的實作都必須支援一般的 SA 概 念。SA 包含了資訊用來在網路上資料交流的雙方之間建立一安全的 通道,如封包加密或認證時用的演算法、加密和認證用的金鑰、加密 金鑰的存活期限、SA 的存活期限和防止封包複製攻擊的序號等。 而為何要用它的原因就是只 AH 和 ESP 並不夠安全,還必需在通 訊雙方(可能有一方是隱鏡人,即 Man-in-the-middle)之間有一套 SA 的機制存在。所以必須在通訊一開始時,雙方就必須能協調出要用哪 一把 Key。此外,溝通雙方更必須共同決定出該用哪種加密及驗證方 法,也就是下面要介紹的:
網際金鑰交換(Internet Key Exchange,IKE)
IKE 是一個在網路上的兩台主機之間自動建立、協商、修改和刪 除 SA 的協定。此外,IKE 是以 ISAKMP(Internet Security Association and Key Management Protocol)為基礎的實踐,在 ISAKMP 的金鑰管理 架構下支援了 Oakley 和 SKEME 的金鑰交換協定。由於 IPsec(Internet Protocol Security)需要一個協定來安全地管理、認證和交換 SA,所以 IKE 符合 IPsec 的需求,並提供 IPsec 同儕團體雙方的認證、IPsec 金 鑰的協商和 IPsec SA 的建立。
NOTE:
AH 確保 IP 表頭(Header)的安全,而 ESP 則著重於裝載資料(Payload) 的 保 密 ISAKMP/ Oakley TCP/UDP Transport Layer IPsec Driver Encrypted IP Packets TCP/UDP Transport Layer IPsec Driver ISAKMP/ Oakley Host A Host B SA Negotiation S A S A Internet Layer Fig4.2 IKE
IPSEC 的 傳 輸 模 式 : 1. 傳輸模式(Transport Mode): IPSEC 直接利用 AH 和 ESP 來進行認證加 密傳送,適用於內部網路。 2. 通道模式(Tunnel Mode): IPSEC 利用 AH 和 ESP 來達到資料一致性 和加密的功能,再傳送封包之前在封包外 再加上一層 IPSEC 的封包,透過 INTERNET 傳送到目的端,目的端再解開 IPSEC 封包來得到資料。 NOTE: 傳輸模式只針對資料(Payload)加密,而通道模式的加密對象則 包 括 了 表 頭 (Header)和 資 料 (Payload)。 4.3 適 用 範 圍 : IPSEC 通常可以使用在四種模式下
1. (端點對端點)END-TO-END security ,透過 Internet 或 Intranet:
HostA---HostB (Internet / Intranet)
傳送模式則可以使用運送(Transport) or 隧道(Tunnel)模式
Transport Tunnel
--- ---
[HostA’s IP][AH][upper] [HostB’s IP][AH][HostA’s IP][upper] [HostA’s IP][ESP][upper] [HostB’s IP][ESP][HostA’s IP][upper] [HostA’s IP][AH][ESP][upper] 2. 通訊閘對通訊閘(GATEWAY-TO-GATEWAY): 傳送模式只能使用隧道(Tunnel)模式 Tunnel ---
[HostB’s IP][AH][HostA’s IP][upper] [HostB’s IP][ESP][HostA’s IP][upper]
HostA---Local Intranet----SG1 SG2---Local Intranet----HostB
Fig4.4 GATEWAY-TO-GATEWAY (Internet)
3. 端點對端點加上通訊閘對通訊閘(END-TO-END and GATEWAY-TO-GATEWAY):
4. 端點對通訊閘和端點對端點(END-TO-GATEWAY and END-TO-END)
HostA---Internet---
HostA---Local Intranet----SG1 SG2---Local Intranet----HostB
Fig4.5 END-TO-END and GATEWAY-TO-GATEWAYA (Internet)
第 五 章 GRE(Generation Routing Encapsulation) 5.1 Introduction 用於 VPN 中的 tunnel 技術封包技術與 ip in ip 和 ip over ip 十分 相似,但是因為他忽略掉一些少許的差異性使得他比其他的技術更具 通用性,例如:他並不需要建立特定的情況之下就可以進行封包的包 裝。 一般的情況之下系統會接收一些類似封包以及 router 的訊號或 數據,我們通常稱這一些為 payload packet,然而在經過 GRE 的包裝 過後有了另一個名稱,GRE packet 緊接著這個封包又會再度被包裹在 其他協議當中,最後被 forward 出去這種外部的協議稱之為 delivery protocol。
此為通過 GRE 之後被包裝完成的封包形式
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 c Reserved0 ver Protocol type
Checksum(optional) Reserved1(optional) Checksum present(bit o) 檢查是否合法為 1 是不合法為 0 則是合法。 Reserved0(bits 1-12) 當 1-5 的位元中有一個不為 0 則不得接收封包,而位元 6-12 則必須設 為 0 並且忽略接收。 Version number(bits 13-15)
Version number field 內的值必須為 0。 Delivery header
GRE header
Payload packet
Fig5.1 GRE 封裝形式
protocol type(2 octets)
protocol type 中必須包含 payload packet 的協定形式,而 payload packet 中是具有有限的 protocol types,例如:下表所示,若不在下列的 protocol 則此封包不被接受。
Protocol Family PTYPE
Reserved 0000 SNA 0004 OSI network layer 00FE PUP 0200 XNS 0600 IP 0800 Chaos 0804 ARP 0806 Frame Relay ARP 0808 VINES 0BAD VINES Echo 0BAE VINES Loopback 0BAF DECnet (Phase IV) 6003 Transparent Ethernet Bridging 6558
Raw Frame Relay 6559 Apollo Domain 8019 Ethertalk (Appletalk) 809B Novell IPX 8137 TCP/IP compression 876B IP Autonomous Systems 876C Secure Data 876D Reserved FFFF
(當 GRE payload in ipv4 時 protocol type 應該要被設做為 0*800)
Checksum(2 octets)
包含了 ip ,GRE Header 與 payload packet 的 checksum 共計 16bits,為 了要計算 checksum,通常 checksum field 的值會為 0,除非 checksum present 的值為 1 時,checksum field 的值就不會為 0。
received1(2 octets)
recieved1 的存在是為了以後使用的,當 checksum present 為 1 時也就 是 checksum field 的值不為 0 時,recieved1 將傳送出一個訊號 0。
GRE packet header 的形式如下:
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 C R K S s Recur Flags Ver Protocol type
Checksum(optional) Offset(optional) Key(optional)
Sequence number(optional) Routing(optional)
Flags and version(2 octets)
GRE 的 Flags 被編碼在前兩個八位元中 bit 0 是第一個位元,而 bits15 則是最後一個,bits13-15 是作為 version field bits5-12 必須設為 0。
Checksum present(bit 0)
Checksum present 若設為 0 則 checksum field 則含有不合法的資訊, 若 checksum present 位元或 routing present 位元其中之一沒有設置完 成,則 checksum 與 offset fields 就會出現在 GRE packet 當中。
Routing present(bit 1)
若 routing field 設為 1 則表示 offset 與 routing field 含有不合法的資 訊,若 checksum present 位元或 routing present 位元其中之一沒有設置 完成,則 checksum 與 offset fields 就會出現在 GRE packet 當中。 Key present(bit 2)
若 key present 位元被設為 1,則 key field 會出現在 GRE Header;反 之則不會發生。
Sequence Number Present(bit 3)
若 sequence present number 被設為 1,則 sequence present number field 會出現在 GRE Header;反之則不會發生。
Strict source route(bit 4)
當所有的 strict source routes 都出現在 routing 資訊中,Strict source route 就只會被設為 1。
Recursion control(bits 5-7)
包括了三個額外未簽署允許概括無號整數應該被定義為 0。
Version Number(bits 13-15)
Version number field 必須為 0。
Protocol type(2 octets)
Payload packet 的 protocol type 在 protocol type field 中。一般而言,封 包的 protocol type 應該是為 ethernet protocol type。
Offset(2 octets)
當 checksum present 或者 routing present 被設為 1 時,且包含有不合法 的資訊而 routing present 位元被設為 1 ,offset field 的值就會呈現。
checksum(2 octets)
包含了 ip ,GRE Header 與 payload packet 的 checksum,共計 16bits。 為了要計算 checksum 通常 checksum field 的值會為 0,除非 checksum present 的值為 1 時,checksum field 的值就不會為 0。
key(4 octets)
擁有四組八位元內部的數字,是用來接收真實的封包來源端,若擁有 key field 的資料時 key present field 將被設為 1。
Sequence Number(4 octets)
內部有 32 位元的無號整數可將來自內部封包加以編號。
Routing(variable)
Routing field 是由一串的 Source Route Entries(SREs)組成的。 而 SREs 的形式如下圖所示:
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 Address Family SRE offset SRE Length
Routing Information…
Address Family(2 octets)
包含了兩組八位元的 routing information field 的語法和語義。
SRE offset(1 octets)
含有來源處資訊的八位元無號整數。
SRE Length(1 octets)
含有 SRE 八位元組的數字,若 SRE Length 為 0,則此 SRE 乃為 routing field 中的最後一組 SRE。 Routing Information(variable) 擁有封包發送時的資料。 5.2、 GRE packets 的 傳 遞 通常而言,一個傳遞多層封包的系統是分辨不出 GRE 封包和其 他的封包有何不同,所以透過特殊的傳輸方式可以幫傳遞系統將 GRE packet 正確分辨出來。簡而言之,若 key ,sequence number ,checksum field 有錯誤的訊息那麼相同的 flags 也有可能會被一並檢查。當 routing field 被設為 1 時 Address family 應該要去檢查 SRE Length 的語意以及 SRE Length ,SRE offset ,Routing field 的用處,一但所有的 SREs 都被 處理過之後,則來源路徑也應完整。故 GRE Header 將被分離而存在 的 payload 的 TTL 必須減少,payload packet 也應該被當作一般的封 包向前傳送,他所傳遞的方式則根據 protocol Type field 中所規定的。
第 六 章 RADIUS
6.1、 RADIUS 的 主 要 特 徵
Client / Server Model
一個 NAS(Network Access Server)可以是 RADIUS 的 Client,而它 的主要任務是傳送客戶的資訊給 RADIUS Server 以及對 RADIUS Server 的回應採取一些相關的動作。
RADIUS Server 負責接收 client 的要求、對客戶作認證、以及回 應一些相關的設定訊息給 client,client 再以這些回應的資料對客戶開 啟服務。
RADIUS Server 也可以以 proxy client 的形式存在於 RADIUS Server 和 client 之間。
Network Security
Client 和 RADIUS Server 之間存在著一組 shared secret,而這組 shared secret 並不會被傳送到 Internet。Client 和 Server 之間都會把資 料經過加密才送至不安全的 Internet 傳送至對方,這樣的機制能降低 資料再傳遞時被一些惡意的竊聽者將資料攔截。
Flexibility Authentication Mechanism
RADIUS 提供許多種的方式來對客戶作認證,當客戶使用他們的 Username 和 Password 作認證時,RADIUS 可支援 PPP、PAP、CHAP、 UNIX Login,和其他的認證方式幫客戶作任證。
6.2、 RADIUS 的 運 作
當一個 client 被設定使用 RADIUS,當屬於這個 client 的客戶提出 認證的要求,Client 則會立即的處理客戶的認證。客戶可能輸入的是 他們的 Username 和 password,而客戶有可能是以 PPP(Point-to-Point Protocol)或其他的方式要求認證。
當 client 接收到客戶的要求認證的資訊時,client 會立即採取 RADIUS 認證的方式和 RADIUS Server 溝通。這時 client 產生一個 “Access-Request”,其中包含了 User-Name、User-Password,以及 client 的 ID 和客戶存取 Client 的 Port-ID 這些屬性。並使用 RSA Message Digest Method (MD5),替客戶的資料加密,以防止被竊聽。
當 “Access-Request”透過 Internet 傳送到 RADIUS Server 時,如果 一段時間沒有得到來自 Server 的回應,則再重新傳送數次的要求。當 RADIUS Server 當機,client 可以選擇使用其他的備援 RADIUS Server 來要求認證。
當 RADIUS Server 到來自 Client 的要求時,先判斷要求中是否含 有 Client 和 Server 之間的 Share secret,如果沒有這個要求將被丟棄 掉,若 client 的合法性通過了,RADIUS Server 將去存取資料庫,並 尋找要求中的客戶資料是否和資料庫中的紀錄相符合。在 database 裡 的客戶資料包含了客戶的認證資料、客戶的要求、以及定義哪些 client(s)或 port(s)可以被該客戶存取。
RADIUS Server 也可以 RADIUS Client 的行為模式,來對其他的 RADIUS Server 要求認證。 如 果 有 任 何 的 Proxy-State 屬 性 存 在 於 ”Access-Request”中 , RADIUS Server 必須不經過任何的修改且依照原先的順序的複製屬 性到回應封包中。而其他的屬性加在後面或前面。 End Users RADIUS Client RADIUS Server INTERNET Fig6.1 RADIUS 基本示意圖 Data hidden by MD5
這項要求是不被允許的。RADIUS Server 可能會加入一些文字訊息 在”Access-Reject”中 ,而這些訊息也有可能在客戶端被顯示出來。任 何 的 ”Access-Reject” 回 應 都 不 能 包 含 任 何 屬 性 但 是 可 以 包 含 Proxy-State 屬性。
如 果 所 有 的 條 件 都 符 合 , 而 且 RADIUS Server 希 望 使 用 Challenge,則 RADIUS Server 回應一個”Access-Challenge”,客戶收 到 這 個 回 應 , 也 必 須 回 應 Server 。 RADIUS Server 所 回 應 的”Access-Challenge”可能包含一些文字訊息,這些訊息由 client 顯示 給客戶看,提示客戶收到一個 challenge 的回應。
如 果 Client 接 收 到 一 個 challenge 的 回 應 , client 並 且 支 援 challenge/response 模式,它會將收到的訊息顯示給客戶,並且指出回 應給客戶。Client 重新傳送一個原始的”Access-Request”給 RADIUS Server,其中包含了一個新的 Request ID、回應所包含以加密過的 User-Password 屬性,以及一個標明著 Access-Challenge 的 State 屬性 ( 一 定 要 含 有 這 個 屬 性 ) 。 而 當 RADIUS Server 再 次 收 到”Access-Request”時,則會回應 Access-Accept、Access-Reject 或是 開啟另一個 challenge 的階段。 6.3、 RADIUS Challenge/Response 在 Challenge/Response 認證模式中,客戶端先提供一個不預期的 數字,要求將這個不預期的數字加密,並且送回結果。經過授權的客 戶裝配著一種特殊的裝置像是 Smart card,或是一個特殊的軟體,來 算出正確的回應。而非經授權的客戶將缺乏這類裝置以及對必要的 key 缺乏認知,他們只能用猜的猜出正確的結果。 一個”Access-Challenge”通常包含了一個 “Reply-Message”其中包 含了對客戶的質疑並顯示出來給客戶,像是一些數字的資料但是他們 不可能重複。通常這些資料都是由外在的伺服器產生,這個伺服器知 道哪種認證者是經過授權的客戶並立即產生一個長度合適的隨機或 不重複的假隨機號碼。 之後,客戶輸入質詢的內容到他的特殊的裝置中(或軟體)把回應 的訊息計算出來,並產生第二個 Access-Request 給 client 由 client 轉 送給 RADIUS Server,如果這個 Access-Request 符合 RADIUS Server 所預期的內容,則 RADIUS Server 回應一個 Access-Accept,反之則 回應 Access-Reject。
6.3、 為 什 麼 使 用 RADIUS 使 用 UDP 在可靠性方面來說,TCP 通常是優於 UDP 的,但是為什麼 RADIUS 要使用這種不安全的連線方法呢? 1、如果主要的認證伺服器停止服務了,則會向次要的認證伺服器提 出要求 為了達到這個目的,有數個要求等待在 Transport layer 看要去哪 一個認證伺服器,這表示重送的計時器是需要的。 2、這個特別的協定對於時間上的要求更不同於 TCP RADIUS 不需要偵測遺失的資料,客戶將會等待幾秒鐘認證完 成,而一般的 TCP retransmission 是不需要的,也不需要增加額外的 TCP acknowledgement。 事實上,客戶不必等待數分鐘完成認證。如果使用 TCP 來傳送不 到 1 秒的資料是很浪費的一件事,如果使用 UDP 的話將會加快客戶 的認證速度,能讓客戶及早得到服務。 3、使用 UDP 將簡化這個協定 在使用 Client/Server model 下,系統可能重開機或有一些不可抗 End Users RADIUS Client RADIUS Server
Fig6.2 RADIUS Challenge Access Request (1) Challenge Response Access Request (1) Display Challenge Access Request (2) Access Request (2) Access-Accept / Access-Reject / Other Challenge Display Result
TCP 連線,所以在程式中就必須加入處理這些事件的判斷以及處理方 式。而使用 UDP 的話,將可以排除這些特殊的事件。
4、UDP 簡化了系統操作
在早期的 RADIUS 是採用 Single thread 來運作,這表示單一的要 求從接收、處理到送出結果都是由這個單一的 thread 完成,而一些環 境的因素是不能被控制的像是不能保證後端的安全機制能夠提供 real-time 的保證。Server 的 request queue 將會被填滿,客戶必須要一 段相當長的時間等待前面的要求處理完畢,而解決的方法是將 RADIUS Server 設計成 Multi-thread,讓處理的部分能夠迅速切換到每 一個要求,並且直接使用 UDP Packet 回應給客戶,縮減處理程序及 回應時間。
第 七 章 PPTP、 IP GRE、 IPSec、 RADIUS 實 作 過 程
7.1 PPTP (Point to Point Tunnel Protocol)服 務
PPTP 是 Microsoft 所力推的 Tunnel 技術,而他是起源於 IP GRE Tunneling 的技術並加以改良,為 Server-Client 架構,使用 CHAP 認 證。再私有網路以外的人只要有一組 PPTP Service 的帳號和密碼,通 過 PPTP Server 的認證,即可透過 INTERNET 建立一條私有的通道, 直接的存取私有網路裡的資料。 Fig7.1 PPTP 架構示意圖 建立 PPTP Server: 系統需求:
較新版本的 Linux(像是 Redhat、Slackware 等等),Kernel 版本 2.2.x 以上、PPP daemon 2.3.8(PPTP 需用到 PPP 協定)、PoPToP v1.0
安裝 PoPToP
先到 http://www.poptop.org找到最新版的程式(Source Code 通 INTERNET
PPTP Server
PPTP 服務客戶端
LAN Router
常是以.tar.gz 的形式),立刻抓下來,以下列步驟執行:
修改/etc/pptpd.conf(在安裝目錄中的 sample/中,須自行 copy 到 etc 中),將 option 選項設為”option /etc/ppp/options.pptpd”、 localip 和 remoteip 項目是情況自行決定,將安裝目錄 sample 中的 options copy 到/etc/ppp/中並 mv 成“options.pptp”,編輯
/etc/ppp/chap-secrets 將使用者的帳號和密碼加入(格式:name * password *。空白部分為 TAB 鍵)。執行 pptpd,用 ps –ax 指令查詢如果 pptpd 跑起來了代表成功。 Windows 2000 設定: 由開始->設定->控制台進入網路與撥號連線,開啟後執行建 立新的連線,下一步後選取透過 Internet 連線到私人網路,下一 步後鍵入 PPTP 伺服器的位址再按下一步,選擇只供自己使用再 按下一步,鍵入自行選擇的名連線名稱後按完成,在進入內容, 進入安全性選單把要求資料加密取消掉在按確定。之後再鍵入正 確的使用者名稱和密碼後,即可連線。
7.2 GRE (Generic Routing Encapsulation) Tunneling
GRE 原本是 Cisco 開發的 Tunneling 協定,相較於 IP-in-IP Tunneling,GRE 的功能較 IP-in-IP 廣大,例如,能夠透過 GRE Tunnel 傳送 IPv6 封包或 Multicast 封包。
系統需求:
Linux 較新版本(Redhat or slackware 等 )、Linux kernel 2.2 以上、iproute2 套件 IPv4 Tunneling 網路的架構如下: 1. tar zxvf pptpd-1.0.0.tgz 2. cd pptpd-1.0.0 3. ./configure --prefix=/your/install/path 4. make 5. make install
網路 C(也可以說 C 是 Internet)。
Network A:
Network 192.168.0.0 Netmask 255.255.255.0 Router 192.168.0.254
Network 的 Router 有一個 Network C 的 IP Address 172.16.17.18(neta)。
Network B:
Network 192.168.3.0 Netmask 255.255.255.0 Router 192.168.3.254
Network B 的 Router 有一個 Network C 的 IP Address 172.20.19.33(netb)。
Network C (internet)假設它能夠雙向的傳送封包。
如要建立 GRE Tunnel 的話在 router A 上設定
ip tunnel add neta mode gre local 172.16.17.18 remote 172.20.19.33 ttl 255
ip link set neta up
ip addr add 192.168.0.254 dev neta ip route add 192.168.3.0/24 dev neta 在 router B 上設定:
ip tunnel add netb mode gre local 172.20.19.33 remote 172.16.17.18 ttl 255
ip link set netb up
ip addr add 192.168.3.254 dev netb ip route add 192.168.0.0/24 dev netb
解 析 :
在設定的第一行 ip tunnel add neta mode gre local 172.16.17.18 remote 172.20.19.33 ttl 255,也就是說新增一個 Tunnel 的設備名字叫 做 neta (ip tunnel add neta),而這個 tunnel 使用的是 GRE 的方法(mode gre),再來後面的就是指定這個 Tunnel 的入口和出口,由 router A 的 172.16.17.18 到 router B 的 172.19.20.33(local 172.16.17.18 remote 172.19.20.33),再把封包的 ttl 欄位設為 255(ttl 255)。
第二行 ip link set neta up,是將這個裝置啟動。
第三行 ip addr add 192.168.0.254 dev neta,是給予剛剛新增的裝置 一個位址,通常是 router A 在 network A 的位址。
第四行 ip route add 192.168.3.0/24 dev neta,是讓 router 知道,當 遇到往 192.168.3.0 的網路時,要從 neta 這個裝置出去。注意 IP 位址 的 netmask 以 CIDR 的方式表示了(192.168.3.0/24),/24 表示使用 24 個 bit 作為網路遮罩。
如果需要將 tunnel 解除掉只要下列指令即可 ip link set neta down
ip tunnel del neta
要把 netb 移除掉也是用相同的指令,只要把 neta 換成 netb 即可。 192.168.3.254 192.168.0.254 172.19.20.33 172.16.17.18 LAN A 192.168.0.0 LAN B 192.168.3.0 Fig7.2 GRE 架構 neta netb
7.3 FreeSWAN’s IPSec Project IPSec 的方法來做 Tunnel 的話,它會把所傳送的資料封包經過一 種演算法運算過後,在將其封裝透過 Internet 送至對方,在用共同的 key 解碼,變為可讀的明文,由於資料量有可能非常的大,會造成 CPU 相當大的負擔,所以 IPSec 通常都是由硬體來完成。而 FreeSWAN project 正是以軟體的方式做到 IPSec。 系統需求
Linux 較新版本(Redhat or slackware 等 )、Linux kernel 2.2 以上、 Freeswan1.5
Installation:
首先到http://www.freeswan.org 下載 freeswan 1.5 版本的 kernel patch,再去 http://www.kernel.org 下載 Linux Kernel 2.2.18。
把下載回來的 Linux kernel 解壓縮至/usr/src/ cp linux-2.2.18.tar.gz /usr/src
cd /usr/src
tar zxvf linux-2.2.18.tar.gz
把 freeswan kernel patch 解壓縮,進入它的目錄之下,並執行 make menugo
把 IPSec 的選項(再 Network Option)中通通選了編到核心中, 而其他的選項依照需要斟酌選取但是基本的東西(例如:CPU、 IDE 硬碟機、Chip set 等)都要有選取。接下來選擇 exit,其他的 Freeswan 會幫你完成。完成之後進入/usr/src/linux 中,執行:
make modules
make modules_install
進入/usr/src/linux/arch/i386/boot 中,把 bzImage 複製到/boot 中,進入/etc 編輯 lilo.conf 使 lilo 知道要用哪個 kernel 開機,執 行 lilo 後重開機變大公告成啦。
編輯/etc 裡的 ipsec.conf,範例如下:
# /etc/ipsec.conf - FreeS/WAN IPSEC configuration file
config setup interfaces=%defaultroute klipsdebug=none plutodebug=none plutoload=%search plutostart=%search conn %default keyingtries=0 spi=0x200 esp=3des-md5-96 espenckey=0x01234567_89abcdef_02468ace_13579bdf_123456 78_9abcdef0 espauthkey=0x12345678_9abcdef0_2468ace0_13579bdf leftrsasigkey=%dns rightrsasigkey=%dns # sample connection conn sample
# Left security gateway, subnet behind it, next hop toward right. type=tunnel
left=172.16.17.18
leftsubnet=192.168.0.0/24 leftnexthop=172.16.17.1
# Right security gateway, subnet behind it, next hop toward left. right=172.20.21.22
rightsubnet=192.168.3.0/24 rightnexthop=172.20.21.1
# Authorize this connection, but don't actually start it, at startup. auto=add
IPSec 網 路 架 構 : 有兩個網路,分別稱為 left 和 right,他們的資訊如下: left: network:192.168.0.0 submask:255.255.255.0 router:192.168.0.254 right: network:192.168.3.0 submask:255.255.255.0 router:192.168.3.254
left 的 IPSec gateway 有一組 public IP 172.16.17.18 並連 接到 router 172.16.17.1,right 的 IPSec gateway 有一組 public IP 連接到 router 172.20.21.1。假設兩個 router 能透過 Internet 互連。
ipsec.conf 解 析 :
config setup 區塊是定義整個 IPSec 服務所要使用的介 面、Debug 的 Log 檔,以及 Auto key generater 所要啟動的項 目。
interface = %defaultroute
指定 IPSec 的裝置要使用到哪個 interface 上,關鍵 字”%default route” 是讓 IPSec 的裝置自動的找到相對應 的網路卡使用。 right 172.20.21.22 left 172.16.17.18 rightnexthop 172.20.21.1 leftnexthop 172.16.17.1 Left subnet 192.168.0.0 Right subnet 192.168.3.0 Fig7.3 IPSec 網路架構
klipsdebug = none plutodebug=none
表示是否要開啟 Debug mode 來執行 IPSec 服務,如開啟 會造成 CPU 附載過高,如無必要,無須開啟。
plutoload=%search plutostart=%search
表示 pluto daemon(亂數 key 產生器,用在自動交換鑰匙的 模式下) 要為哪一個在 conn 區塊中定義的 auto 選項啟動 或載入 pluto daemon。
conn %default 式設定以下的 conn 連線定義區塊的預設設 定,也就是說,她再執行時會在每個 conn 連線定義區塊 中照抄一次。
keyingtries=0
每個連線判斷和認證 key 的次數。0 為永遠不放棄。
spi=0x200
spi(Security Parameters Index),它是一個數值,用來建立 或刪除 Security Associations(SA),範圍通常在 0x100~0xffffffff 之間 esp=3des-md5-96 用來定義資料加密和認證時所用的演算法,預設為空白, 目前設定為用 3DES 加密資料,96bits MD5 認證。 espenckey=0x01234567_89abcdef_02468… 代表用來加密資料的 key,使用固定式鑰匙的話,要注意 不要讓它給別人知道喔。 espauthkey=0x12345678_9abcdef0_246… 這是用來設定要求連線時的認證 key,使用固定式鑰匙的 話,一樣不要給別人知道了喔。
細節
type=tunnel
定義連線的型態為 IP-in-IP tunnel
left 和 right
說明 IPSec gateway 連接到 Internet 的 IP 位址。
leftsubnet 和 rightsubnet
用來敘述 IPSec 兩邊網路的網路號碼 leftnexthop 和 rightnexthop
敘述 IPSec gateway 所連接到 router 的 IP 位址
left 和 right 的定義其實是抽象的,可以把自己當作 left 也 可以把自己當作 right,只要兩邊的位址設對了,都是行 的通的。
auto=add
預設連線在載入時是否要啟動 add:手動啟動。
start:在設定 IPSec 裝置時,IPSec Tunnel 一並動作。
啟 動 :
當所有的設定檔都設定完成了,執行: /etc/init.d/ipsec start
/usr/local/sbin/ipsec –up auto YourConnectName 即可啟動 IPSec 服務。
7.4 FreeRADIUS project
RADIUS 是最近相當紅的一種使用者認證的方式,所以我們選擇 使用 RADIUS 作為允入的機制,RADIUS Authentication 分為兩種模 式,RADIUS Request and Response、RADIUS Challenge,因為是要設 計成為了要方便使用者的使用而不要在使用者的電腦上做任何的設 定,所以採用 RADIUS Request and Response 來”幫”使用者認證。
系統需求:
Linux 較新版本(Redhat or slackware 等 )、Linux kernel 2.2 以 上、MySQL 函式庫(MySQL 必須事先安裝好)。 安裝 FreeRADIUS 先到http://www.freeradius.org下載最新的板本。將其解壓縮後 進入它目錄,接著執行: ./configure --prefix=/Your/Install/Target/ \ --with-mysql-include-dir=/your/MySQL/DIR/include/ \ --with-mysql-lib-dir=/your/MySQL/DIR/lib/ \ --with-mysql-dir=/Your/MySQL/DIR/ make make install 安裝結束後,進入目錄底下的 etc/raddb 中,編輯 radiusd.conf, (我們沒用到 MySQL 所以只要選擇 file 的認證方式)。在 Module 區塊中的 Unix 部分,把下列選項 Comment 起來: #passwd = /etc/passwd #shadow = /etc/shadow #group = /etc/group 在 authorize 區塊中,選擇 file,不使用資料庫來提供使用者資料: authorize { preprocess suffix files
由於要產生使用者 Accounting 的紀錄,所以在 accounting 區塊設 定: accounting { acct_unique detail unix radutmp }
現在來加入使用 RDUIAS 的 client,編輯 client.conf,所謂的 client 也就是使用者要求認證的機器位址,包含了一組 IP 以及相對應的 密碼。他的格式如下:
client (hostname or ip ) {
secret = (enter secret here)
shortname = (enter here, this is used for logging purposes)
}
就照著格式,依序鍵入即可。
緊接著來加入 User,編輯 users 這個設定檔,而 user 的格式如下: ami Auth-Type:= local, User-Password == "reihino"
除了 User name 以及 password 外,還可以加入其它的屬性,以便 login 成功之後回應,EX:
"John Doe" Auth-Type := Local, User-Password == "hello"
Reply-Message = "Hello, %u"
確定都設定無誤後,接著就是要啟動 Server 了,進入他的 sbin 資 料夾,執行:
radiusd –a /your/accounting/log/folder –z –y 輸入指令:
ps –ax|grep radiusd
第 八 章 第 四 代 無 線 網 路 頻 寬 與 入 控 制 器 系 統 應 用 與 實 作 8.1、 系 統 簡 介 第四代無線網路頻寬與允入控制器,是以嵌入式 Linux 為基 礎,燒錄在 ROM 上的一個小型的系統,並且提供了無線網路認 證管理,不讓使用者能夠任意使用(浪費)網路資源,以及能夠管 理網路頻寬,讓使用者能夠在有品質的頻寬下,使用網路資源, 由於機器上並無硬碟等容易損壞的設備,硬體故障率低,節省置 換硬體的成本。 8.2、 系 統 目 的 為了解決無線網路管理的問題,不要讓無線網路的使用者任 意的使用連外的頻寬資源,造成頻寬的浪費,而設計的一個閘 門。達到管理無線網路對外存取的權利。並加入了 VPN 的功能, 能讓數個獨立的區域網路(LAN)互相連接起來,以節省營運成本。 8.3、 系 統 架 構 第四代無線網路頻寬與入控制器 網路管理員 對外網路設定 對內網路設定 無線網路管理 VPN 設定 網路快取服務 網路過濾器 連接埠轉送 系統資訊 啟動新設定 Fig8.1 系統架構圖
8.4、 功 能 簡 介
8.4.1、 無 線 網 路 認 證 管 理 8.4.1.1、 畫 面 :
Fig8.4 無線網路登入畫面
8.4.1.2、 功 能 :
當使用者使用網路對外存取網站時,無論如何,他都只能連接到 “無線網路登入畫面”,要求使用者輸入正確的使用者名稱以及密 碼,或只能在允許的網路範圍裡活動( 預設逢甲首頁 ),當使用者輸 入資料後,經過內建的File System 比對,或透過內建的 RADIUS Client 程式向外面的 RADIUS 伺服器作比對,如果回應是正確的,則將閘 門打開( 使用 ipchains 的 input chain 對使用者 IP 作鎖定) ,反之則 否。
當管理員進入“無線網路認證管理畫面”時,可以看到目前在線 上的使用者,故可以對使用者作強制斷線的動作,也就是說強制中斷 使用者使用連外頻寬的權利。如果使用 File system 作為認證方式時, 則會多出一個使用著和密碼的對應表,以便管理者維護內建的 User name& Password table。
並加入了容錯機制,當使用者的電腦當機,或更換別的 MAC Address(更換硬體) ,則會自動的回收該 IP 位址。
8.4.1.3 功 能 流 程 圖 Start 使用者進入強 制登入畫面 帳號和密碼是 否正確 儲存登入成功的 MAC 和帳號 對登入成功的使用者 開放對外頻寬使用權 END Start 使用者進入登 出畫面 帳號和密碼是 否正確 刪除確認成功的 MAC 和帳號 對登出成功的使用者 關閉對外頻寬使用權 END 顯示錯誤 否 是 是 否 Fig8.6 登入登出流程圖
Start 對在 log 檔裡有紀錄的位 址做 ARP 重新查詢,並建 立新的 ARP Table 比對現在的 ARP 和 log檔裡的是否 相符 檢查 ipchains 的 rule 並設定關閉連線 比對 log檔裡和目 前的 ARP 是否相 符 檢查 ipchains 的 rule 並設定關閉連線 修改 log 檔並將不 符合處刪除 End Fig8.7 IP 合法性偵測 流程圖 是 是 否 否
8.4.2、 網 路 快 取 服 務 8.4.2.1、 畫 面
8.4.2.2、 功 能
以 squid 為基礎,使用 RAM disk 當作它的快取空間,並設計一個 使用者介面,讓管理員能夠輕鬆的管理各子網路或單一位址對 proxy 存取的權限。
也可以使用 ipchains 的 REDIRECT 功能,讓網路中所有對 Port 80( 瀏覽網頁) 的連線,強制的使用 proxy 來對外存取,以避免重複 的連線,增加頻寬使用的效率。
8.4.2.3 功 能 流 程 圖 Start 輸入欲開啟 Proxy 的 網路區段 檢查 IP 格式 寫入 config 檔以及 log 檔 重新啟動 squid END 顯示錯誤 Fig8.9 Proxy 服務流程圖 是 否
8.4.3、 IPSec 通 道 設 定 8.4.3.1、 畫 面 8.4.3.2、 功 能 提供一條 IPSec 的連線,以確保資料在傳送時不會遭到攔截。即 使遭到攔截,收到的都是一些加密過的密文,破解將需要一段相當長 的時間,增加資料傳送時的安全性。 Fig8.10 IPSec 通道設定畫面
8.4.3.3、 系 統 流 程 圖 Start 輸入欲建立 IPSec 連線 的資訊 寫入資訊到 ipsec.conf 以 及 ipsec.secrets 產生 IPSec 虛擬裝置並啟 動,等待對方回應 回應是否正確,是 否 Time out? 連線成功 連線失敗,刪除 IPSec 虛擬裝置 END
8.4.4、 VPN 連 線 設 定 8.4.4.1、 畫 面 8.4.4.2 功 能 可以建立多組 VPN 連線,讓許多分散在各地的區域網路,能夠 透過 INTERNET 互相連接,行成一個邏輯上的 LAN。 Fig8.12 VPN 連線設定畫面
8.4.4.3、 系 統 流 程 圖 Start 輸入欲建立 VPN 連線 的詳細資料 格式是否正確? 存入設定檔中 啟動 IP GRE 連線 END 否 是 Fig8.13 VPN 連線流程圖
8.4.5、 PPTP 伺 服 器 8.4.5.1 畫 面 8.4.5.2、 功 能 在系統中建立一個 PPTP 伺服器,讓在分散在 Internet 各處的 Windows client 能夠直接的經過這個 PPTP 服務,建立個別的 VPN 連 線。
8.5、 系 統 在 實 際 環 境 應 用 的 架 構 RADIUS 伺服器 INTERNET 無線網路頻寬允入控制器 Clients Fig8.14 無線網路頻寬允入控制器實際架 VPN Tunnel Remote User
8.6、 適 用 環 境 包括了一些公開的場合,及無法控制使用者身份的地區為主,像 是航空站‚旅館,Coffee Shop,校園等地方。或是一般的公司用來做無線 網路的人員管制,不讓一般人能夠使用網路的資源以及敏感的資料。 8.7、 成 品 照 片 正面 內部構造
實作在 DOM 中(Disk on Module)
第 九 章 專 題 感 想 與 心 得 9.1 心 得 本來我們的專題題目是「VPN GATEWAY」,可是到了後來因為 如之前所提的上了大三的網路課,對「無線網路管理」產生了興趣, 於是我們便把主題放在「RADIUS 認證」上,這麼做也是為了因應目 前的無線網路“乏人管理”而做的改變,而最大的原因是因為受限於 系統的 DOM(Disk On Module,我們的系統只有 32M)放不下 File System 的密碼檔 (因為會成長),於是另尋它法,最後終於找到了 RADIUS 來解決。 在這過程當中,我們學到了有關 VPN 的架構和運作過程,也學 到了 RADIUS 的運作程序和基本架構,其中使我們受益最大的就是 RFC,基本上我們都是 follow 這些 standard 而來的。而我們所遇到的 大部分困難也都是由 RFC 中尋得解決的方法。最難能可貴的是:本 組在整個過程都能自動自發的完成自己的部分,充分發揮了「分工」 的效果,為自己將來就業時的團隊分工先有一個體驗。我們在想這也 許就是為何專題是必修的原因吧! 最後要感謝我們的幕後的支持者 ─ 賴坤助賴老師。如果沒有這 樣好的技術支援,我們也許無法完成這麼艱難的工作。所在全體組員 在此再一次為我們親愛的老師,致上最大的敬意。
Appendix
Reference
[1].RFC 2637 by K. Hamzeh, Ascend Communications, G. Pall, Microsoft Corporation, W. Verthein, 3Com, J. Taarud, Copper Mountain Networks, W. Little, July 1999
--- Point-to-Point Tunneling Protocol (PPTP)
[2].RFC 2401 by S. Kent, BBN Corp, R. Atkinson@Home
Network ,November 1998 --- Security Architecture for the Internet Protocol
[3]. RFC 2866 by C. Rigney Livingston June 2000 --- RADIUS Accounting
[4]. RFC 1701 by S. Hanks NetSmiths, Ltd.T. Li, D. Farinacci P., Traina, cisco Systems October 1994 --- Generic Routing Encapsulation (GRE) [5].RFC 2138 by C. Rigney Livingston,April 1997 --- Remote
Authentication Dial In User Service(RADIUS)
[6]. RFC 2865 by C. Rigney Livingston,April 2000 --- Remote Authentication Dial In User Service(RADIUS)
[7].Http://www.poptop.org/
[8].Http://www.quintillion.com/fdis/moat/ipsec+routing/ [9].Http://www.quintillion.com/moat/lisa/lisa.html
[10].Http://www.freeswan.org/
[11].Tunnel overIP in Linux-2.2 by Alexey N.Kuznetsov ,March 17,1999 [12].Linux HOWTO --- Advanced Routing HOWTO
附 件 1 Embedded Linux 嵌 入 式 Linux 系 統
嵌入式的 Linux 系統不外乎是使用在一些家電產品( 冰箱、機上盒 Set top box… 等)或是使用在一些網路設備上( 頻寬分享器、頻寬控制器… 等)。這種經過 精簡的 Linux 系統和一般的套裝桌上型電腦專用的系統有很大的差異: 第一: 它是為了一些專門的目的所設計的 Linux,雖然整個系統的架構不變, 但是隨著目的的不同,核心以及相關的 library 大都不相同。 第二: 它也有可能在不同的硬體環境上執行任務,有可能是 X86 的平台、有 可能是 StrongARM、MIPS 等平台,而當遇到這些特殊的硬體規格時,就必 須用支援這些 CPU 的 Linux compiler 來重新編譯整個系統。
第三: 因為是使用 ROM 作為 OS 的儲存媒介,所以通常這些儲存裝置的容量 不會太大,最小的可能只有幾 MB。必須將 Linux 以及應用程式縮減,以符 合 ROM 的容量。 以下略述 Linux 的開機過程: 開機 Lilo Kernel init Shell
當機器的電源開啟時,最先被執行的是存在於主機板上 ROM 裡的 loader(BIOS), 當他執行完應有的任務之後隨即執行存在於硬碟或 DOM(Disk on Module)裡的 lilo(Linux loader),這個 loader 負責了整個 Linux 核心的解壓縮以及初期的記憶體 配置,當 Kernel 載入之後,它也就功成身退了,接著換 init 上場,init 負責載入 系統的一些服務程式以及開機時使用者所希望載入的一些應用服務,同時也載入 給使用者登入的的環境。等 init 載入完成,接著就是等待 User 選擇它所需要的 shell 載入了。 實作嵌入式系統: 首先先使用一顆使用 hdc 作為 root 的硬碟開機,作為測試以及燒錄的平台。 在硬碟中分割一個磁區,注意此磁區須在 8GB 位址以前,否則將無法測試開機。 首先先在那個空白的磁區內先建立好主要的系統架構,在來就是將所需要的應用 程式和系統程式放入 bin 和 sbin 裡面(可以直接使用 busybox 不過有點不好用), 並且將/dev 裡的 nod 複製一份進到 dev 中,接下來就是尋找 library 的相依性,使 用 ldd 和 strace 指令找出各程式所需的 lib,並複製到 lib 以及 usr/lib 中,接下來 使用 chroo . 指令來確定各 lib 及程式間的運作都保持良好,接下來就是要為他造 一顆小的核心,通常大小都會控制在 600kB 左右,把核心的功能選取好後,執 行 make dep;make clean;make bzImage,把核心編譯出來,經過十幾分鐘的編譯過 程,如沒有任何的錯誤訊息,它會出現在/usr/src/linux/arch/i386/boot 裡面,將編 譯出來的核心(bzImage),複製到它的 boot 裡,並且也將該版本的 System.map 一 並複製,在來修改 lilo.conf,把開機的 kernel 以及磁區加入,執行 lilo 重新開機。 如果硬碟版的嵌入式 linux 執行無誤的話,即可進行燒錄的動作。把之前的 Image 先 tar 起來,在解壓縮至 ROM 的 mount 位置,一些比較會進行重複寫的目錄可 以把它製作到 ram disk 中,才不會破壞 ROM 的穩定性,接著編輯 Image 裡的 lilo.conf , 照 的 一 般 的 設 定 , 只 是 root 換 成 hda1 而 已 , 執 行 lilo –r /dom/mount/point,lilo 寫入成功的話,重新開機。如能順利的開機的話,最陽春 的 Linux Image 即完成。 採用增加法而不是縮減法,比較不會有一些不必要的東西存在,Image 也較 精簡,Debug 也容易。 DOM 實物
附 件 二 Linux ipchains firewall rule ipchains 的架構圖如下: ipchains 最主要的 3 個部分將逐一介紹: input chains : 當封包進入時,它必須要經過的第一個 chain,當封包進入了這個 chain 之後 將逐一檢查每一條 rule,而它的動作分別有 Accept、Reject、Deny、Redirect。 Redirect 是比較特別的地方,因為它會將符合這 rule 的封包 “ 重導向 “到別的 port 去。 forward chains: 檢查嘗試穿越這台主機對其他機器做存取的封包。其中的動作包含 Accept、 Reject、Deny、MASQ,而 MASQ 是較特別的機制,它是將每個符合 rule 的封包 的 Header 改成和自己一樣,之後收到回應的封包時,在 Demasqera 在送回原提 出要求的主機,這個機制通常應用在 NAT 之上。
Checksum sanity Input chain DeMASQerade Routing Decision Forward Cahin Output Cahin DENY DENY DENY/ Reject DENY/ Reject Local process Accept/ Redirect Accept Loop device
Output chains:
檢查欲從這台機器出去的封包,動作包括 Accept、Reject、Deny。 當封包進入主機時,Kernel 首先會將封包送給 input chains,而當它通過了 層層關卡之後,交由 kernel 決定封包下一個地點是哪裡(檢查 Routing table),當 決定完路徑之後,如果這個封包是要穿過這台主機存取別的地方的話,Kernel 則交給 forward chains 去檢查,如果只是要從這台主機出去,則交給 output chains 檢查。
附 件 三 RADIUS(Remote Authentication Dial In User Service) RADIUS 是近期才訂定的一種新的認證協定,它可以使用許多種方法來認 證,像是使用 PPP、PAP、CHAP… 等方法做認證,以及告知 client 當認證成功之 後要開放什麼樣的服務給客戶,同時它也可以存取 SQL 資料庫,其中記錄著客 戶的資訊以及服務的類型。RADIUS Accounting 也可以將客戶提出要求的時間以 及結束時間紀錄成 log 檔,以便追蹤何時客戶登入登出系統。也就是因為它提供 了多樣化的認證方式以及多項的服務,所以越來越多的產品,使用 RADIUS 作 為認證的方法。 RADIUS 基本架構:
當客戶向 RADIUS client 提出要求時,RADIUS client 就會透過 Internet 向外面的 RADIUS Server 提出該客戶的”Access-Request”要求,其中包括了 User-Name 以 及 User-Password,當 Server 收到這個要求時隨即比對 User-Name 以及 Password 是否符合,如果符合的話則送出一個”Access-Accept”給 RADIUS client,其中包 含 了 客 戶 的 服 務 資 訊 等 訊 息 , 如 果 不 符 合 的 話 則 送 出 ”Access-Reject”, Access-Reject 中不能包含其他的屬性但是除了 Proxy-state 以外,如果 RADIUS 被設定用來做 Challenge 時,收到”Access-Request”(由客戶端產生,裡面包含著 一些亂數的資訊)則會回應一個”Access-Challenge”,裡面有一些數字的資訊,並 且要顯示給客戶,而客戶端有一種特殊的裝置或軟體,將這個回應的資訊輸入這 個裝置(軟體)中,運算出正確的訊息,並再次送出一個”Access-Request”裡面包含 著這個運算出來的訊息,當 RADIUS 收到這個回應時,檢查客戶回應的訊息是 End Users RADIUS Client RADIUS Server INTERNET Data hidden by MD5