Site icon KerKer 的模組世界

Freeradius+gmail+802.1X設定(POP3s)

&NewLine;<p class&equals;"wp-block-paragraph">邊做邊學,順便留個筆記,若有錯誤請不吝指教。<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">本篇使用Ubuntu1804版本,freeradius串接gmail pop3s進行認證,<br>802&period;1X為使用eap-gtc方法進行認證<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<&excl;--more-->&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">安裝freeradius、perl及perl的ssl、pop3函式庫,我們將使用freeradius內建的perl module來完成pop3s認證。<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"wp-block-code"><code>apt-get install freeradius perl libio-socket-ssl-perl libmail-pop3client-perl<&sol;code><&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">編輯client&period;conf,通常路徑為:&sol;etc&sol;freeradius&sol;3&period;0&sol;clients&period;conf<br>在clients&period;conf的最後面依以下格式加入Client:<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"wp-block-code"><code>client WiFi &lbrace;&NewLine; ipaddr &equals; 192&period;168&period;220&period;16&NewLine; secret &equals; KerKer&NewLine;&rcub;<&sol;code><&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">這個例子為建立一個名為WiFi的的Client,IP為192&period;168&period;220&period;16,當這個Client來進行Radius請求的密碼為KerKer,可以依自己的環境做替換。<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">將mods-available目錄底下的perl模組設定檔複製到mods-enabled目錄<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"wp-block-code"><code>cp &sol;etc&sol;freeradius&sol;3&period;0&sol;mods-available&sol;perl &sol;etc&sol;freeradius&sol;3&period;0&sol;mods-enabled&sol;perl<&sol;code><&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">編輯mods-enabled目錄底下的perl設定檔,將perl認證用程式改為pop3&period;pl:<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"wp-block-code"><code> filename &equals; &dollar;&lbrace;modconfdir&rcub;&sol;&dollar;&lbrace;&period;&colon;instance&rcub;&sol;example&period;pl&NewLine;--->&NewLine; filename &equals; &dollar;&lbrace;modconfdir&rcub;&sol;&dollar;&lbrace;&period;&colon;instance&rcub;&sol;pop3&period;pl<&sol;code><&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">將範例程式example&period;pl複製一份,並命名為pop3&period;pl供我們進行修改使用。<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"wp-block-code"><code>cp &sol;etc&sol;freeradius&sol;3&period;0&sol;mods-config&sol;perl&sol;example&period;pl &sol;etc&sol;freeradius&sol;3&period;0&sol;mods-config&sol;perl&sol;pop3&period;pl<&sol;code><&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">當然上述的兩個步驟也可以略過,直接編輯example&period;pl也是可以的。<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">再來我們要修改pop3&period;pl的程式碼,我們要將一開始安裝的兩個函式庫叫進來用,再程式碼中找到&&num;8221&semi;use Data&colon;&colon;Dumpe&semi;&&num;8221&semi;並在後面加上&&num;8221&semi;se Mail&colon;&colon;POP3Client&semi;&&num;8221&semi;及&&num;8221&semi;use IO&colon;&colon;Socket&colon;&colon;SSL&semi;&&num;8221&semi;:<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"wp-block-code"><code> use Data&colon;&colon;Dumper&semi;&NewLine;--->&NewLine; use Data&colon;&colon;Dumper&semi;&NewLine; use Mail&colon;&colon;POP3Client&semi;&NewLine; use IO&colon;&colon;Socket&colon;&colon;SSL&semi;<&sol;code><&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">再來修改認證的程式碼,在程式碼中找到 &&num;8220&semi;sub authenticate &lbrace;&&num;8221&semi; 把大括號裡的程式碼全部砍掉,把pop3認證的程式碼貼進去:<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"wp-block-code"><code> sub authenticate &lbrace;&NewLine; &period;&period;&period;&NewLine; &rcub;&NewLine;---> &NewLine; sub authenticate &lbrace;&NewLine; my &dollar;pop &equals; Mail&colon;&colon;POP3Client->new&lpar;&NewLine; USER &equals;> &dollar;RAD&lowbar;REQUEST&lbrace;'User-Name'&rcub;&comma;&NewLine; PASSWORD &equals;> &dollar;RAD&lowbar;REQUEST&lbrace;'User-Password'&rcub;&comma;&NewLine; HOST &equals;> "pop&period;gmail&period;com"&comma;&NewLine; USESSL &equals;> 1&comma;&NewLine; DEBUG &equals;> 1&comma;&NewLine; &rpar;&semi;&NewLine; if&lpar;&dollar;pop->Connect&lpar;&rpar;&rpar;&lbrace;&NewLine; return RLM&lowbar;MODULE&lowbar;OK&semi;&NewLine; &rcub;else&lbrace;&NewLine; return RLM&lowbar;MODULE&lowbar;REJECT&semi;&NewLine; &rcub;&NewLine; &dollar;pop->Close&semi;&NewLine; &rcub;<&sol;code><&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">程式碼中的my &dollar;pop這段是用來確認建立POP3連線的資訊用的,其中USER、PASSWORD是radius會自己帶進來的;HOST是mail server的IP或domain都可以,這裡我們用的是gmail的server;USESSL是使用SSL加密的pop3s,如果要用google的pop3是一定要開的;DEBUG則是是否開啟除錯資訊,如果之後測試都穩定了也可以拿掉。<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">再來就是嘗試建立pop3連線,如果成功連上則回報認證OK,否則回報REJECT,最後關閉pop3連線。<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">編輯&sol;etc&sol;freeradius&sol;3&period;0&sol;sites-available&sol;default,在authorize、authenticate、accounting三段的大括號內分別加入以下內容:<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"wp-block-code"><code>authorize &lbrace;&NewLine;&period;&period;&period;&NewLine; if &lpar;&excl;control&colon;Auth-Type &amp&semi;&amp&semi; User-Password&rpar; &lbrace;&NewLine; update control &lbrace;&NewLine; Auth-Type &colon;&equals; Perl&NewLine; &rcub;&NewLine; &rcub;&NewLine;&period;&period;&period;&NewLine;&rcub;&NewLine;&NewLine;authenticate &lbrace;&NewLine;&period;&period;&period;&NewLine; Auth-Type Perl &lbrace; &num;Add Auth-Perl auth&NewLine; perl&NewLine; &rcub;&NewLine;&period;&period;&period;&NewLine;&rcub;&NewLine;&NewLine;accounting &lbrace;&NewLine;&period;&period;&period;&NewLine; if &lpar;ok &vert;&vert; updated&rpar; &lbrace;&NewLine; update control &lbrace;&NewLine; Auth-Type &colon;&equals; Perl&NewLine; &rcub;&NewLine; &rcub;&NewLine;&period;&period;&period;&NewLine;&rcub;<&sol;code><&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">編輯&sol;etc&sol;freeradius&sol;3&period;0&sol;sites-available&sol;default&sol;inner-tunnel,在authenticate大括號內加入以下內容:<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"wp-block-preformatted">authenticate &lbrace;&NewLine;&period;&period;&period;&NewLine; Auth-Type Perl &lbrace; &num;Add Auth-Perl auth&NewLine; perl&NewLine; &rcub;&NewLine;&period;&period;&period;&NewLine;&rcub;<&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">編輯&sol;etc&sol;freeradius&sol;3&period;0&sol;proxy&period;conf,在尾端加入內容如下:<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"wp-block-code"><code>realm gmail&period;com&lbrace;&NewLine; authhost &equals; LOCAL&NewLine; accthost &equals; LOCAL&NewLine; nostrip&NewLine;&rcub;<&sol;code><&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">這裡可以確保當帳號包含&&num;8221&semi;&commat;gmail&period;com&&num;8221&semi;時能夠將&&num;8221&semi;&commat;gmail&period;com&&num;8221&semi;作為帳號的一部份保留下來。<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">到這邊可以開啟freeradius服務進行測試了,以除錯模式運行freeradius:<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"wp-block-code"><code>freeradius –X<&sol;code><&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">若正常運行則應該顯示&&num;8221&semi;Ready to process requests&&num;8221&semi;<br>若出現port已占用之情形請嘗試將服務關閉:<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"wp-block-code"><code>service freeradius stop<&sol;code><&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">如果仍然不行可以嘗試以下指令用來查詢進程代碼,並使用kill指令關閉該進程:<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"wp-block-code"><code>ps -ef &vert; grep freeradius&NewLine;kill -9 &lt&semi;PROCESS ID HERE><&sol;code><&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">當freeradius除錯模式正確運作時,請開啟另一個terminal,並使用已下指令測試:<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"wp-block-code"><code>radtest "User-name" "password" 127&period;0&period;0&period;1 0 "testing123"<&sol;code><&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">相應欄位請自行帶入mail address及密碼,ip填入本機IP,本機請求的預設secret為testing123。<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">到這邊基本可以確認與mail server串接正確了,再來我們要做802&period;1X的設定了。<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">修改&sol;etc&sol;freeradius&sol;3&period;0&sol;mods-enabled&sol;eap,改成EAP-GTC方法:<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"wp-block-code"><code> eap &lbrace;&NewLine; default&lowbar;eap&lowbar;type &equals; md5&NewLine; peap &lbrace;&NewLine; default&lowbar;eap&lowbar;type &equals; mschapv2&NewLine; &rcub;&NewLine; &rcub;&NewLine;--->&NewLine; eap &lbrace;&NewLine; default&lowbar;eap&lowbar;type &equals; peap&NewLine; peap &lbrace;&NewLine; default&lowbar;eap&lowbar;type &equals; gtc&NewLine; &rcub;&NewLine; &rcub;<&sol;code><&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">修改&sol;etc&sol;freeradius&sol;3&period;0&sol;sites-enabled&sol;default,因為GTC的auth-type是PAP,我們要將PAP的auth-type設定為perl:<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"wp-block-code"><code> Auth-Type PAP &lbrace;&NewLine; pap&NewLine; &rcub;&NewLine;--->&NewLine; Auth-Type PAP &lbrace;&NewLine; perl&NewLine; &rcub;<&sol;code><&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">etc&sol;freeradius&sol;3&period;0&sol;sites-enabled&sol;inner-tunnel也做相同的修改:<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<pre class&equals;"wp-block-code"><code> Auth-Type PAP &lbrace;&NewLine; pap&NewLine; &rcub;&NewLine;--->&NewLine; Auth-Type PAP &lbrace;&NewLine; perl&NewLine; &rcub;<&sol;code><&sol;pre>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">到這裡802&period;1X就設定完成了,可以再次用除錯模式執行freeradius,並嘗試用802&period;1X進行認證了!<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">不過這裡還有一點要注意的是,Google帳號預設式不允許應用程式存取的,所以想要認證成功還需要到https&colon;&sol;&sol;myaccount&period;google&period;com&sol;security去開啟&&num;8221&semi;低安全性應用程式存取權&&num;8221&semi;喔!<&sol;p>&NewLine;&NewLine;&NewLine;&NewLine;<p class&equals;"wp-block-paragraph">另外如果你的google帳號有開啟二階段驗證也不能使用這種方式認證,一樣到https&colon;&sol;&sol;myaccount&period;google&period;com&sol;security,並找到&&num;8221&semi;應用程式密碼&&num;8221&semi;選項,建立一組供應用程式登入用的密碼就可以了!<&sol;p>&NewLine;

Exit mobile version