建立於: 4年前 ( 更新: 4年前 )
AP提供了WPA2/EAP功能,但不會用嗎?
本文介紹我如何透過docker的ubuntu:21.04 image,極速建立Radius伺服器,
與Wifi的WPA2/EAP等相關運用。
先來看看我的試用結果吧:

GitHub放於此處下載:
https://github.com/DevinY/radius
原則上請依README.md進行即可,這裡我會解做更詳細的操作說明:
在開始前,首先我們需要有docker。
一、下載下來後,進入radius目錄中,請透過docker-compose的build功能來建立image。
在目錄不改變的情況下,會產生radius_radius的image。
二、產生自簽憑證,在radius目錄中執行,會產生兩個檔案server.crt及server.key。
您是可以自行調整subj的內容的,我不想一天到晚改憑證,這裡設定了3650天,
另外在這裡的金鑰是沒密碼的,我想如果您需有有密碼,容器啟動後可到容器中去make,再拷出來用。
目錄為/etc/freeradius/3.0/certs
三、取得radius設定檔,radius註解很多修改及觀看不容易,在這裡我提了一隻bash可以把設定檔拷出來。
並且移除掉所有的註解,在後面的radius_radius為image的名稱。
可以看到我對原始設定檔做了那些變更。:)
四、啟動容器
-h db為資料庫容器的服務名稱,有些環境下需要,有些環境下不需要,必免不必要的問題,就打上吧。
資料庫的密碼,請自行調整。
七、進入radius容器內,建立schema
完成上方的資料庫建立,我們就能來建立radius伺服器後端資料庫mysql的schema啦,執行下方進入
radius的容器服務。
我們能用control+d跳離。

貼上下方指令,就能建立所有需要的table到radius資料庫囉,如果您在第六步中使用了自訂的密碼
,記得要調整下方指令,密碼的部份。
回到host端,我這個repo,我提供一個簡單的指令,來產生radius的帳號及密碼。
第一個參數是帳號及第二個參數是密碼。
當然在Radius的環境下,後端資料庫是有多種平台可以選擇的。
十、修改clients.conf
您可以變更您想用的secret。
由於在容器中ip是隨機,所以我用*。如果您想使用一個特定IP,需視您執行的環境而定。
如果您對docker有一定的了解,我想絕對不難才是,當您的host在Linux環境下,
可透過network_mode: host進行,當然您是需要自行調整docker-compose.yml,
如果您不了解相關,那別浪費時間了,讓他是ipaddr = *號就沒錯了。
dialect及driver刪掉,貼上下面五行。
原內容
重啟容器使用參數--remove-orphans在啟動時看起來較沒問題。
有時會啟動失敗,不太清楚為何。
我們能用下方指令查看狀態,看到兩個Up,我想大概沒啥問題了。
「chmod 750 檔名」調整,特別是eap、clients.conf、default等檔案。
最後,我們可以透過上方的logs模式,觀察Client的連線結果是否正常,在AP的設定如下,示意圖:

在MacOS及iOS環境會需要有Apple Configurator2的描速檔才能正常連線。
大至內容如下:

額外測試EAP-TTLS功能
一、進入radius容器內

本文介紹我如何透過docker的ubuntu:21.04 image,極速建立Radius伺服器,
與Wifi的WPA2/EAP等相關運用。
先來看看我的試用結果吧:

GitHub放於此處下載:
https://github.com/DevinY/radius
原則上請依README.md進行即可,這裡我會解做更詳細的操作說明:
在開始前,首先我們需要有docker。
一、下載下來後,進入radius目錄中,請透過docker-compose的build功能來建立image。
在目錄不改變的情況下,會產生radius_radius的image。
docker-compose build --no-cache
如果您不想使用此image的名稱,docker-compose.yml內的radius服務記得指定您自己build的image名稱。二、產生自簽憑證,在radius目錄中執行,會產生兩個檔案server.crt及server.key。
您是可以自行調整subj的內容的,我不想一天到晚改憑證,這裡設定了3650天,
另外在這裡的金鑰是沒密碼的,我想如果您需有有密碼,容器啟動後可到容器中去make,再拷出來用。
openssl req -x509 \
-subj '/C=TW/ST=Taiwan/L=Panchiao/CN=ccc.tc' \
-nodes -newkey rsa:2048 -keyout server.key -out server.crt -days 3650
如果到容器中make,您至少需改三個檔案ca.cnf、client.cnf及server.cnf。目錄為/etc/freeradius/3.0/certs
三、取得radius設定檔,radius註解很多修改及觀看不容易,在這裡我提了一隻bash可以把設定檔拷出來。
並且移除掉所有的註解,在後面的radius_radius為image的名稱。
./getconfig.sh radius_radius
換句語說,如果您想了解所有的內容或註解說明,您可以進入容器上觀看哦。
docker run --rm -ti radius_radius bash
主要的設定檔放那裡,可以透過cat查看bash內容,應該不難發現。
cat getconfig.sh
另外,在這個repo中,我也方了一個diff.html,可透用瀏覽器開啟,可以看到我對原始設定檔做了那些變更。:)
四、啟動容器
docker-compose up -d
五、我們可以透過ps來查看是否有正確啟動。
docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------------------------
radius_db_1 docker-entrypoint.sh mysqld Up 0.0.0.0:33060->3306/tcp
radius_radius_1 /usr/sbin/freeradius -X Up 0.0.0.0:1812->1812/udp, 0.0.0.0:1813->1813/udp
六、確認db是up的情況,就能來建立DB了。-h db為資料庫容器的服務名稱,有些環境下需要,有些環境下不需要,必免不必要的問題,就打上吧。
docker-compose exec db mysql -h db -e "create database radius"
docker-compose exec db mysql -h db -e "grant all on radius.* to 'radius'@'%' identified by 'hlOTg2ZmNk'"
第一行指令,建立了radius資料庫,第二行則是授權radius使用者,有完整的權限可存取radius資料庫。資料庫的密碼,請自行調整。
七、進入radius容器內,建立schema
完成上方的資料庫建立,我們就能來建立radius伺服器後端資料庫mysql的schema啦,執行下方進入
radius的容器服務。
docker-compose exec radius bash
八、可以先來測看看,連db服務是否有問題。
mysql -uradius -phlOTg2ZmNk -h db
密碼與參數可以不需空格,所以上方指令沒打錯喔,「hlOTg2ZmNk」為密碼,正常進入後,我們能用control+d跳離。

貼上下方指令,就能建立所有需要的table到radius資料庫囉,如果您在第六步中使用了自訂的密碼
,記得要調整下方指令,密碼的部份。
mysql -uradius -phlOTg2ZmNk -h db radius < /etc/freeradius/3.0/mods-config/sql/main/mysql/schema.sql
九、建立帳號回到host端,我這個repo,我提供一個簡單的指令,來產生radius的帳號及密碼。
第一個參數是帳號及第二個參數是密碼。
./adduser.php devin test
radius提供了相當多的attribute類型,如下表:
Header Attribute Description
------ --------- -----------
{clear} Cleartext-Password Clear-text passwords
{cleartext} Cleartext-Password Clear-text passwords
{crypt} Crypt-Password Unix-style "crypt"ed passwords
{md5} MD5-Password MD5 hashed passwords
{base64_md5} MD5-Password MD5 hashed passwords
{smd5} SMD5-Password MD5 hashed passwords, with a salt
{sha} SHA-Password SHA1 hashed passwords
SHA1-Password SHA1 hashed passwords
{ssha} SSHA-Password SHA1 hashed passwords, with a salt
{sha2} SHA2-Password SHA2 hashed passwords
{sha224} SHA2-Password SHA2 hashed passwords
{sha256} SHA2-Password SHA2 hashed passwords
{sha384} SHA2-Password SHA2 hashed passwords
{sha512} SHA2-Password SHA2 hashed passwords
{ssha224} SSHA2-224-Password SHA2 hashed passwords, with a salt
{ssha256} SSHA2-256-Password SHA2 hashed passwords, with a salt
{ssha384} SSHA2-384-Password SHA2 hashed passwords, with a salt
{ssha512} SSHA2-512-Password SHA2 hashed passwords, with a salt
{nt} NT-Password Windows NT hashed passwords
{nthash} NT-Password Windows NT hashed passwords
{md4} NT-Password Windows NT hashed passwords
{x-nthash} NT-Password Windows NT hashed passwords
{ns-mta-md5} NS-MTA-MD5-Password Netscape MTA MD5 hashed passwords
{x- orcllmv} LM-Password Windows LANMAN hashed passwords
{X- orclntv} NT-Password Windows NT hashed passwords
我選擇後端採用mysql就是因為這我覺的要更新比較方便,至少我自己覺的會比ldap來的容易..:p當然在Radius的環境下,後端資料庫是有多種平台可以選擇的。
十、修改clients.conf
您可以變更您想用的secret。
由於在容器中ip是隨機,所以我用*。如果您想使用一個特定IP,需視您執行的環境而定。
如果您對docker有一定的了解,我想絕對不難才是,當您的host在Linux環境下,
可透過network_mode: host進行,當然您是需要自行調整docker-compose.yml,
如果您不了解相關,那別浪費時間了,讓他是ipaddr = *號就沒錯了。
client wifi {
ipaddr = *
secret = testing123
}
十一、修改sql檔dialect及driver刪掉,貼上下面五行。
原內容
dialect = "sqlite"
driver = "rlm_sql_null"
變更為(資料庫密碼於第六步若有變更,請自行調整)
dialect = "mysql"
driver = "rlm_sql_${dialect}"
server = "db"
port = 3306
login = "radius"
password = "hlOTg2ZmNk"
十二、重啟測試囉重啟容器使用參數--remove-orphans在啟動時看起來較沒問題。
有時會啟動失敗,不太清楚為何。
docker-compose down --remove-orphans
docker-compose up -d
十三、檢視服務功能我們能用下方指令查看狀態,看到兩個Up,我想大概沒啥問題了。
docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------------------------
radius_db_1 docker-entrypoint.sh mysqld Up 0.0.0.0:33060->3306/tcp
radius_radius_1 /usr/sbin/freeradius -X Up 0.0.0.0:1812->1812/udp, 0.0.0.0:1813->1813/udp
如果radius,沒啟動成功,可以重新執行第十二部看看,或是先看一下log,指令如下:
docker-compose logs -f radius
例如,我碰過在我家的Synology NAS上安裝,檔案權限太開放啟動失敗,這時可以透過「chmod 750 檔名」調整,特別是eap、clients.conf、default等檔案。
最後,我們可以透過上方的logs模式,觀察Client的連線結果是否正常,在AP的設定如下,示意圖:

在MacOS及iOS環境會需要有Apple Configurator2的描速檔才能正常連線。
大至內容如下:

額外測試EAP-TTLS功能
一、進入radius容器內
docker-compose exec radius bash
二、安裝需要的檔案
apt install -y build-essential pkg-config libnl-3-dev libssl-dev libnl-genl-3-dev
三、取得測試的souce,並依次貼下指令
#下載souce
wget https://w1.fi/releases/wpa_supplicant-2.7.tar.gz
#解壓縮並進入目錄中
tar zxvf wpa_supplicant-2.7.tar.gz&&cd wpa_supplicant-2.7/wpa_supplicant
#建立並變更.config啟動CONFIG_EAPOL_TEST=y
sed 's/#CONFIG_EAPOL_TEST=y/CONFIG_EAPOL_TEST=y/g' defconfig > .config
#編譯及安裝eapol_test
make eapol_test;cp eapol_test /usr/local/bin
四、建立test.conf測試檔。內容請使用自己建立的帳號及密碼。
network={
ssid="SSID_OF_THE_WIFI_NETWORK"
key_mgmt=WPA-EAP
eap=TTLS
identity="devin"
anonymous_identity="anonymous"
password="test"
phase2="auth=PAP"
eapol_flags=3
}
五、執行指令測試
eapol_test -c test.conf -a 127.0.0.1 -p 1812 -s testing123
執行結果,看到SUCCESS,代表測試成功:)
No Comment
Post your comment