用Raspberry Pi自建服務 提供安全Wi-Fi認證機制

本次實作將在Raspberry Pi單板電腦上架設OpenWrt以提供Wi-Fi服務,並透過後端的FreeRADIUS Server執行帳號以及密碼驗證機制來提高其安全性。

之前文已示範過如何側錄以WPA進行加密的SSID連線,取得其封包並嘗試比對密碼檔,藉此取得其密碼。在破解過程中,可以看出現行Wi-Fi安全機制若能結合802.11X的機制,在原先的PSK密碼上再搭配帳號密碼的認證機制,可以確實地增加Wi-Fi的安全性。 

在本文中,將示範如何在Raspberry Pi上架設OpenWrt(目的是提供易於管理的介面)提供Wi-Fi服務,並結合後端FreeRADIUS Server提供帳號密碼驗證機制以提高其安全性。 

了解測試架構 準備所需軟硬體 

圖1所示為本次測試使用的架構圖。將在AP(192.168.1.14)上設定認證機制,讓Notebook在與AP連立連線時須透過Radius Server(192.168.1.4)進行身分驗證,認證通過後,才可以透過AP連線至Internet。 

 

▲圖1 測試架構示意圖。

本次測試所需的軟硬體,說明如下: 

·硬體:AP部分使用的是Raspberry Pi 2(以下稱Pi2),使用的Wi-Fi網卡為TP-LINK TL-WN722N。 

·韌體:在Pi2上安裝OpenWrt,其版本為15.05.1,並安裝了TL-WN722N Wi-Fi Dongle的驅動程式以及Wi-Fi相關套件。OpenWrt下載連結為「https://downloads.openwrt.org/chaos_calmer/15.05.1/brcm2708/bcm2709/openwrt-15.05.1-brcm2708-bcm2709-sdcard-vfat-ext4.img」,其原始網站是「https://wiki.openwrt.org/toh/raspberry_pi_foundation/raspberry_pi」,若有新版可在該網頁取得下載的連結。 

·軟體:Radius Server部分則是在運行Windows 7的電腦上安裝FreeRADIUS.net-1.1.7-r0.0.2,其下載連結是「http://www.freeradius.net/Downloads/FreeRADIUS.net-1.1.7-r0.0.2.exe」,而原始網站為「http://freeradius.net/Downloads.html」。 

安裝與設定OpenWrt 

先下載並安裝OpenWrt,操作的部分可參考網站連結「http://www.netadmin.com.tw/article_content.aspx?sn=1507030005&jump=1」的說明。 

安裝完成之後,接著使用瀏覽器開啟網頁「http://192.168.1.1」(此為OpenWrt的預設IP,登入後可依現況進行調整),預設帳號為「root」,沒有密碼。登入後記得設定密碼及更新時區設定,設定方式可參考筆者之前的教學(http://www.netadmin.com.tw/article_content.aspx?sn=1507030005&jump=2)。 

設定密碼後,便可使用SSH登入。接著,將Wi-Fi網卡裝到Pi2上,並下載安裝驅動程式(請務必確認OpenWrt此時可連上網路): 

 

隨後更新opkg的索引檔,並安裝kmod-ath9k-htc的驅動程式,在安裝過程中,會自行安裝所需的相關程式。 

在此補充說明,安裝完成後若網卡能夠正常驅動,在「/etc/config/」目錄內會自動產生一個名叫「wireless」的檔案。但筆者在安裝TP-LINK TL-WN722N這張Wi-Fi Dongle測試時,安裝過程中看似順利,但並未自動產生wireless設定檔,此時可使用「wifi detect > /etc/config/wireless」指令來手動產生。 

若使用的是Pi常用的EDIMAX EW-7811Un網卡,則可使用下列指令進行安裝: 

 

這張網卡在安裝完成後,將會自動產生「/etc/config/wireless」設定檔。 

安裝完成後,使用cat指令檢視wireless檔案的內容,如圖2所示。 

 

▲圖2 檢視wireless檔案內容。

在wireless檔案內,上方的config wifi-device radio0代表的是網卡的實體層設定,option disabled 1則代表目前該網卡為停用狀態。下方config wifi-iface所表示的是資料連結層的設定,Wi-Fi Dongle運作模式為ap(站台模式),SSID的名稱為OpenWrt,目前並未加密。 

本次實作將在Raspberry Pi單板電腦上架設OpenWrt以提供Wi-Fi服務,並透過後端的FreeRADIUS Server執行帳號以及密碼驗證機制來提高其安全性。

在挑選使用Wi-Fi Dongle時,請先在網路上做一些功課並選擇網路上已有成功案例的網卡,避免在不支援的硬體上耗費大量的時間。 

如果有Multi-SSID的需求,例如想把訪客和企業內部分別給予不同的SSID並做可存取網段控管,記得要挑選支援Multi-SSID的Wi-Fi Dongle。據筆者實測的結果,確認EDIMAX EW-7811Un這張網卡不支援Multi-SSID,而TP-LINK TL-WN722N可以設定Multi-SSID。 

這裡補充說明一下,由於OpenWrt必須依賴各種套件的支援,才能讓AP的各種模式順利運作,為避免大家虛擲光陰於無謂的測試,將相關模式整理如下: 

·Client Mode:若運作於用戶端模式,無論加密與否,均須安裝wpa-supplicant。 

·AP Mode:若作為站台使用,必須以加密強度區分。若不加密或僅提供WEP加密,則須安裝hostapd。若需要提供WPA以上等級的加密,請安裝wpad(若未安裝此套件,OpenWrt網頁介面的下拉式選單將不提供對應選項)。這三個套件是互相衝突的,因此在規劃階段就必須考慮要提供的加密等級。若遇到套件衝突,可使用opkg remove指令將該套件移除。若有其他的狀況,亦可使用logread指令或至網頁介面中Status裡的System Log或Kernal Log查看無法正常運作的原因,通常是未安裝正確的套件導致欠缺某個程式而致使網卡無法正確設定。 

設定Wi-Fi AP站台 

開始使用OpenWrt的圖形化介面繼續後面的設定,先測試Wi-Fi Dongle是否能正常運作。在此先設定一個簡單的AP站台,供使用者連線。 

這裡的設定邏輯是先設定wifi(OSI第二層),再去設定Interface(OSI第三層),最後再去設定Firewall(OSI第四層以上)。 

將Wi-Fi Dongle設定為AP Mode並提供WPA的加密,需要安裝wapd這個程式。選擇System裡面的Software,接著如圖3所示,在Download and install package欄位,輸入「wpad」,並按下〔OK〕按鈕。如果之前有重開機過,記得先更新opkg的索引檔。 

 

▲圖3 設定成「wpad」並按下〔OK〕按鈕。

接著進行網路設定,先選擇Network裡面的Interfaces,然後點選Add New Interface。 

如圖4所示,在Name of the new interface欄位填入「WWAN」,而Cover the following interface部分選擇「Wireless Network」,然後按下右下角的〔Submit〕。 

 

▲圖4 設定Interface內容。

在Protocol部分,使用預設的Static address,因此需要填入IP。這裡先將DHCP Server功能開啟。而下方的DHCP Server部分,則選擇Setup DHCP Server,如圖5所示。 

 

▲圖5 選擇Setup DHCP Server。

接著再回頭設定IP位址,如圖6所示,IPv4 address的部分填入「10.0.0.1」,「IPv4 netmask」設定則選擇【255.255.255.0】。 

 

▲圖6 設定IP位址。

設定完成後,點選右下角的〔Save&Apply〕,進行存檔及重啟網路設定。存檔後,將之歸屬到Firewall的zone以便於之後的維護。然後,如圖7所示點選Firewall Settings,將之修改為wan,並點選右下角的〔Save&Apply〕。 

 

▲圖7 進入Firewall Settings內修改成wan。

網路設定完成後,再回頭調整WIFI所屬的Interface。選擇Network內的WiFi並編輯之,接著選擇Advanced Settings,將Network中的lan取消勾選,若有修改SSID名稱的需求,可在此修改ESSID的欄位,並點選〔Save&Apply〕讓新設定生效,如圖8所示。 

 

▲圖8 修改ESSID設定內容。

最後必須調整一下Firewall的設定,讓WWAN可以收到Wi-Fi用戶的DHCP Request。選擇Network裡面的Firewall,找到wan這一行中的Input,將之改為【accept】(允許封包進入),然後再點選〔Save&Apply〕,如圖9所示。 

 

▲圖9 找到wan的Input,將其設定改成【accept】。

然後點選Network裡面的WiFi,在Wireless Overview中點選Enable,將無線網路開啟,如圖10所示。 

 

▲圖10 點選Enable將無線網路開啟。

緊接著,點選Network裡面的Interfaces,並按下〔Connect〕按鈕以開啟網路,如圖11所示。開啟網路之後,在TX的下方會出現「IPv4:10.0.0.1」的訊息。 

 

▲圖11 按下〔Connect〕按鈕來開啟網路。

本次實作將在Raspberry Pi單板電腦上架設OpenWrt以提供Wi-Fi服務,並透過後端的FreeRADIUS Server執行帳號以及密碼驗證機制來提高其安全性。

此時,使用手機或筆電試著連線OpenWrt這個SSID,應該就可以取得10.0.0.X的IP網段。但會發現雖然已連上SSID,但卻不能開啟任何網頁,原因是沒有設定封包偽裝和封包跨Zone的Firewall Rule。 

回到Firwall Zones的設定,如圖12所示,將Masquerading及MSS clamping這兩個選項由原先的wan修改為上方的lan to wan,以進行封包偽裝及封包大小調節,完成後記得點選〔Save&Apply〕。 

 

▲圖12 修改Masquerading和MSS clamping的設定內容。

接著編輯wan這一行,如圖13所示找到WWAN這一列,並按下〔Edit〕按鈕進行編輯。 

 

▲圖13 找到WWAN這一列,按下〔Edit〕按鈕進行編輯。

將畫面再往下拉找到Inter-Zone Forwarding,如圖14所示,在Allow forward to destination zones設定中勾選lan,並點選〔Save&Apply〕。 

 

▲圖14 在Allow forward to destination zones設定中勾選lan。

再測試一下Internet連線是否正常,如無意外應該可以正常連線。基本的Wi-Fi AP設定至此完成。接下來,介紹如何結合FreeRadius提供802.11X的認證功能。 

安裝及設定FreeRadius Server 

筆者原先計畫在OpenWrt的平台上安裝freeradius2套件,讓OpenWrt同時扮演Radius Server的角色。但在此版本的OpenWrt上找不到打包好的套件包,因此額外準備一部已安裝Windows 7的電腦,並在其作業系統安裝FreeRADIUS.net-1.1.7-r0.0.2,之後再調整其設定檔。 

下載程式並安裝完成後,它會自動常駐在右下角。對右下角的FreeRADIUS常駐程式圖示按下滑鼠右鍵,就可以看到其操作畫面,如圖15所示。 

 

▲圖15 開啟FreeRADIUS程式執行選單。

設定檔預設所在目錄為「C:\FreeRADIUS.net\etc\raddb」,可直接編輯相關設定檔,也可透過其GUI介面選擇對應的檔案進行編輯。但不管用何種方式進行修改,記得要回到GUI介面中點選Restart FreeRADIUS.net Service,才能夠讓新設定生效。 

需要編輯的有users.conf、radiusd.conf、clients.conf這三個檔案。如果打算提供EAP加密方式,則需要手動安裝openssl,手動核發金鑰及憑證檔,並修改eap.conf提供正確的路徑和檔案名稱。 

在此做一簡單示範,先編輯clients.conf這個檔案,clients.conf檔是用來設定AP如何與Radius Server進行身分驗證。 

由於這裡OpenWrt的IP是192.168.1.X,因此找到如下對應的區塊: 

 

將secret部分設定為一組新密碼「mypassword」,並新增nastype為「other」。 

接著編輯users.conf檔案,這個檔案是用來設定使用者的帳號密碼,請在最下方新增以下的設定: 

 

klting代表使用者帳號,密碼則放在Cleartext-Password欄位中。需要注意的是,Cleartext-Password後方是冒號和等號,並使用雙引號包覆之。Fall-Through若設定為no,則代表是最後一個使用者,若非最後一個使用者,必須設定為yes。 

radiusd.conf的部分主要是修改其bind的IP位址,預設為*,代表在伺服器所有IP位址均提供此服務。為了避免衍生後續資安問題,建議指定該伺服器的IP為佳,例如: 

 

設定完成後,回到GUI介面重啟其服務。 

要設定wifi使用Radius認證,需要安裝wpad套件,在加密的欄位才能選擇WPA2-EAP,所以要記得安裝。 

接著設定OpenWrt,點選Network裡的Wifi,找到之前建立的SSID OpenWrt進行編輯,並點選Wireless Security,修改其Encryption為【WPA2-EAP】,Radius-Authentication-Server欄位請填寫Radius Server的IP,此例為192.168.1.4,Radius-Authentication-Secret的值則為clients.conf中secret的資料,如圖16所示。設定完成後,記得要點選〔Save&Apply〕。 

 

▲圖16 修改Wireless Security設定內容。

最後,回到手機,測試能否進行帳號密碼的驗證,在連線至該SSID時會詢問是否信任FreeRADIUS.net-Server發行的憑證,由於這裡是自己發的憑證,因此可能會有不受信任的提示,請忽略。如圖17所示,點選「信任」,繼續後面的設定。 

 

▲圖17 點選「信任」繼續後面的設定。


 

本次實作將在Raspberry Pi單板電腦上架設OpenWrt以提供Wi-Fi服務,並透過後端的FreeRADIUS Server執行帳號以及密碼驗證機制來提高其安全性。

信任該憑證後,會自動帶出輸入使用者名稱及密碼的頁面,依照之前在users.conf設定的帳號密碼輸入即可,如圖18所示。 

 

▲圖18 輸入之前在users.conf設定的帳號和密碼。

這裡同時也側錄其封包(OpenWrt可以安裝tcpdump,直接擷取封包),觀察其運作情形。如圖19所示,可以發現192.168.1.14(OpenWrt),持續與192.168.1.4(Radius Server)進行溝通,待溝通完成後,手機就可以取得IP,並連線後端的Internet。

 

▲圖19 側錄其封包,觀察運作情形。

進行可存取網段設定 

接下來,示範如何限制AP用戶存取內部主機(但同時可存取Internet),在OpenWrt要限制網路的存取是在防火牆中做設定。 

先選擇Network裡面的Firewall,再選擇Traffic Rule。往下找到Open ports on router部分,在Name欄位輸入「DenyAttck」,在Protocol欄位則使用預設的【TCP+UDP】,並按下〔Add〕按鈕以新增一個Traffic Rule,如圖20所示。 

 

▲圖20 新增Traffic Rule。

接著進入此Rule的詳細設定,在Protocol部分原先為TCP/UDP,改為【Any】,而Source zone部分保持預設的wan,如圖21所示。 

 

▲圖21 設定Rule的內容。

然後,在Destination zone部分點選lan,如圖22所示。 

 

▲圖22 Destination zone部分選擇lan。

Destination address的部分,預設為any,如圖23所示,開啟下拉式選單將其改為【custom】。 

 

▲圖23 修改Destination address的設定。

改為custom之後,就可以自行輸入,在此輸入的是lan的IP網段「192.168.1.0/24」。在Action部分,則改為【reject】,如圖24所示。 

 

▲ 圖24 將Action設定改選成【reject】。最後,別忘了要點選〔Save&Apply〕。

設定完成後,測試一下成效。在設定Firewall rule之後,還是ping得到ptt.cc,但原先可ping到的192.168.1.1,變成Request timeout,如圖25所示。 

 

▲圖25 設定完成後,用Ping測試一下。

還可以發想一些應用,例如發射兩個SSID,一個是給訪客使用,使用簡單的WPA2加密,但僅能存取公網(如本文中範例所示),另一個SSID是給員工使用,可以存取內部網站也能存取公網,但加上內部主機的帳號控管,增加駭客同時破解WPA2密碼和取得Radius Server(或其他認證主機)的帳號密碼的難度。 

如此一來,就能同時兼顧安全性與便利性。這兩個SSID可以給予不同的DHCP IP POOL,並且在「/etc/config/wireless」中SSID的設定,將之設定為: 

 

讓這兩個在實體上達到完全隔離的效果,以避免訪客使用的SSID遭破解後,駭客攻擊企業內部使用的SSID,從而攻擊內部電腦或伺服器。 

結語 

由於這裡是在內網使用(AP與Radius之間透過內網傳遞資料),資料被擷取破解的機率較低,因此只做Radius Server的身分驗證。 

若是使用在公共網路上,記得要搭配EAP的相關設定(最好是可以搭配需手動進行安裝的憑證檔),好讓自身的網路更加安全。 

<本文作者:丁光立,在ISP工作多年。對於Cisco設備較熟悉,除此之外也研究Linux,這幾年慢慢把觸角伸到資安的領域,並會在自己的blog(http://tiserle.blogspot.com/)分享一些實務上的經驗和測試心得。> 

文章來源: http://www.netadmin.com.tw/article_content.aspx?sn=1610280005&jump=4

圖片來源: https://pixabay.com/

 


You may also like...

發佈留言