為Freeradius3.0配置sql與EAP-TLS
前言
新學期課程開始了,其中有一門神奇的課要求構建一個安全的公司內網接入訪問控制系統。第一個要部署的就是中心認證伺服器(Authentication Server)。認證伺服器選取freeradius的很多,但是相關文件非常稀有且古老。CSDN甚至只能找出幾年前關於EAP-TLS的配置文件,實在是讓人踩了不少坑。故寫下這篇文章,希望對後來者起到作用。
安裝
本文假定你已經有了樹莓派/遠端伺服器/虛擬機器作為安裝平臺。要注意的第一個坑就是Windows下的Linux子系統對freeradius極其不友好,會出現無法收到request包的情況,需要配置防火牆(坑1),所以建議不要使用Windows下的Linux子系統進行安裝配置。
首先需要安裝freeradius最新版本與mysql、openssl。對於debian/ubuntu,直接使用apt安裝即可:
sudo su apt update apt-get install freeradius freeradius-mysql mysql openssl
配置
Freeradius基礎配置
接著需要進行初步配置,確保freeradius可以在本機執行與測試。3.0版本以後的freeradius安裝路徑改為了/etc/freeradius/3.0 /,導致幾乎所有搜尋到的step-by-step教程都無法直接使用(坑2)。
首先需要修改users檔案,加入第一個測試使用者,便於進行測試。Freeradius可以使用文字文件或資料庫檢索使用者,測試當然先使用文字文件方式。這裡要注意的是,很多文件,甚至官方how-to都會讓你修改mods-config/files/authorize檔案,但freeradius已經為我們做好了軟連結,將其連結到了根目錄下的users檔案,我們直接修改即可(坑3)
cd /etc/freeradius/3.0/ nano users
此時可以在合適位置新增一行
testingCleartext-Password := "password"
這句話的意思是,定義一個使用者名稱為testing,密碼為password的使用者。當然也可以將檔案中的bob解註釋,用以測試。
此時你已經可以在本機測試Freeradius了。首先在本終端中執行以下語句:
freeradius -X
若出現Ready to process requests字樣,代表伺服器啟動成功,可以接收認證包。此時開啟另一個終端或新建一個ssh連線,執行以下語句:
sudo radtest testing password localhost 0 testing123
這個語句的意思是:向本地伺服器傳送一個認證請求,賬號為testing,密碼為password,對稱金鑰為testing123。若收到Access-Accept包,則代表認證成功,可以進行下一步的配置。
下一步要修改的是位於根目錄的clients.conf檔案,這個檔案定義了每一個可以接受的認證終端與使用的對稱金鑰,如果認證終端(通常為無線接入點)的ip地址不存在於本檔案中,該終端的所有請求都將被拒絕。
nano clients.conf
在適當的位置新增如下語句
client client1 { #client1是認證終端的別名 ipaddr = 192.168.0.1 #這是認證終端地址,通常為路由器LAN介面地址。 #如果想允許整個子網的使用,可以加/子網掩碼,如192.168.0.0/24 #如果是IPv6網路,可以使用ipv6addr = <IPv6地址>/<子網掩碼> #如果網記憶體在DNS伺服器,此處也可以為一個域名 secret = testing123 #共享對稱金鑰,可以任意修改,注意在路由器引數也需要修改以匹配 require_message_authenticator = no #建議為no,舊版本協議裝置不支援message authenticator #還有一些引數可以修改,詳見clients.conf中的註釋,此處對於日常使用已經足夠 }
此時我們可以接收來自於192.168.0.1的路由器的認證請求了。對於大多數路由器,只需要將WLAN安全設定改為WPA-EAP/WPA2-EAP/WPA-Enterprise/WPA2-Enterprise,並配置好認證伺服器地址與對稱金鑰就可以了。
TLS模組的配置
現在讓我們來轉向如何使用Freeradius中的TLS模組以確保傳輸安全或使用證書完成認證過程。首先要進行的是生成一套測試用證書檔案:
cd /etc/freeradius/3.0/certs make
經過一段時間的金鑰生成,一套證書被存在了certs資料夾內,其中如下檔案對我們而言具有作用:
ca.pem: 自簽發根證書,用於伺服器驗證客戶證書或客戶驗證伺服器證書。
server.pem: 伺服器證書
server.key: 伺服器私鑰,保護密碼為whatever
client.p12: PKCSv12編碼的個人證書檔案,包含了證書,私鑰,並由密碼“whatever”保護,需要匯出並在自有裝置上安裝。
將client.p12用郵件傳送至iPhone裝置即可安裝,或儲存至Android手機也可安裝,windows10下直接雙擊安裝即可。
接下來我們需要修改freeradius配置檔案使其支援TLS,此時需要編輯mods-enabled/eap(坑4,幾乎沒有文件指出該檔案的位置):
cd /etc/freeradius/3.0/mods-enabled nano eap
接著修改如下引數(未列出的不修改)
eap{ default_eap_type=tls#其實不修改也可以,Freeradius會自己根據請求包呼叫相應的方法 tls-config tls-common { private_key_password = whatever#伺服器私鑰密碼 private_key_file = ${certdir}/server.key #也可以為絕對路徑,伺服器私鑰 certificate_file = ${certdir}/server.pem #也可以為絕對路徑,伺服器證書 ca_file = ${cadir}/ca.pem #也可以為絕對路徑,CA根證書 dh_file = ${certdir}/dh #也可以為絕對路徑,Diffie-Hellman引數 } }
此時,重啟freeradius伺服器,EAP-TLS/EAP-TTLS已配置成功。
SQL模組的連結
最後一步是連結mysql到Freeradius中。首先需要配置MySQL,為其配置資料庫與賬號密碼:
mysql -uroot CREATE USER radius IDENTIFIED by 'radpass'; CREATE DATABASE radius; GRANT allon radius.* to radius@'localhost' identified by 'radpass';
然後需要匯入資料表結構(坑5,資料表結構存放位置改變了):
mysql -uradius -pradpass radius source /etc/freeradius/3.0/mods-config/sql/main/mysql/schema.sql
最後修改相關配置檔案mods-enabled/sql(坑6,配置檔案位置貌似也變了):
cd /etc/freeradius/3.0/mods-enabled nano sql
修改配置檔案如下(未列出的不修改):
sql { driver = "rlm_sql_mysql" dialect = "mysql" server = "localhost" port = 3306 login = "radius" password = "radpass" }
接著重啟freeradius服務,如果沒有錯誤資訊,說明sql模組載入成功。