2010年10月7日 星期四

Freeradius2 POP3 over SSL 認證

2014.06.13 更新 :如何自行選用pop3 serve;參考來源都失效了,但我目前懶得再找XD 
2016.06.15 更新參考來源位置。

Freeradius2已經附Perl模組,要做各種認證法都很容易了,比起網路上一堆用exec的範例感覺安全多了,不過卻很少人提到這新功能,就由我來介紹一下吧~
以FreeBSD 8.1環境示範,注意是裝net/freeradius2net/freeradius還是1.x版
lang/perl5.12 make時可啟用threads
參考來源:



前提:假設使用者帳號是user@mail.XX.edu.tw,而pop3主機剛好也是mail.XX.edu.tw。


/usr/local/etc/raddb/proxy.conf
最後面增加

 

realm mail.XX.edu.tw {
       authhost        = LOCAL
       accthost        = LOCAL
}

接著使用Perl作POP3 over SSL認證

先安裝
mail/p5-Mail-POP3Client 

security/p5-IO-Socket-SSL

# cp -p /usr/local/etc/raddb
/example.pl /usr/local/etc/raddb/pop3s.pl

修改/usr/local/etc/raddb/pop3s.pl
開頭增加

use Mail::POP3Client;
use IO::Socket::SSL;
....
修改認證函式

...
sub authenticate {
       # For debugging purposes only
#       &log_request_attributes;

       my $pop = new Mail::POP3Client( USER => $RAD_REQUEST{'Stripped-User-Name'},
               PASSWORD => $RAD_REQUEST{'User-Password'},
               HOST    => $RAD_REQUEST{'Realm'},
              #如果pop3 server 和Realm不一樣,HOST看你想要寫死或判斷哪個realm用哪台...
               USESSL => 1,
               );

       if ($pop->Login()) {
               $RAD_REPLY{'要回應的訊息'} = "1";
               return RLM_MODULE_OK;
       }
       else {
               return RLM_MODULE_REJECT;
       }
       $pop->Close();
}


# cp -p
/usr/local/etc/raddb/module/perl /usr/local/etc/raddb/module/pop3perl
(新檔名可隨便取,反正在radius.conf中是讀整個module資料夾

將pop3.perl中修改

 
perl pop3 {
...
module = ${confdir}/pop3s.pl

再到
/usr/local/etc/raddb/sites-avaliable/default

/usr/local/etc/raddb/sites-avaliable/
inner-tunnel分別加入幾行

...

authorize {
    ...
    files
    +pop3
}

...

authenticate {
       +Auth-Type POP3s {
               +pop3
       +}
    ...
}
注意這裡pop3是對應module中首行perl "pop3"這module名。


/usr/local/etc/raddb/users
在最後加入 

DEFAULT Auth-Type = POP3s, Realm != DEFAULT

9 則留言:

  1. 想請教一下

    若是用Gmail的Server作pop3-SSL驗證
    該如何更改?
    謝謝

    回覆刪除
  2. 您好 想請問一個問題
    本篇最上面的部分
    假設使用者帳號是user@mail.XX.edu.tw,而pop3主機剛好也是mail.XX.edu.tw
    如果 pop3主機不一樣的話 還要修改哪個部分

    回覆刪除
    回覆
    1. 以上兩個問題,都是pop3s.pl中認證部份 HOST 不直接用Realm而是判斷要用哪臺pop3 server 就行啦

      刪除
  3. 您好 我使用上有些問題想請教 當我使用perl pop3.pl pop.gmail.com XX XX 1時沒問題
    但是當我使用radiusd -X 時會出現下面錯誤 請問有無解決方法 謝謝
    Exec-Program output: Exec-Program: FAILED to execute /etc/raddb/pop3.pl: Exec format error

    回覆刪除
    回覆
    1. 如果你把那檔案+x後直接也有問題,就是第一行寫錯了吧~

      刪除
  4. 作者已經移除這則留言。

    回覆刪除
  5. 您好 我按照上述步驟設定完後,使用radtest [username] [password] localhost 0 testing,並且適用radius -X 觀看,發現他並不會使用pop3s.pl中我設定的HOST,為什麼會這樣
    謝謝

    回覆刪除
    回覆
    1. 後來印出Message 發現問題是could not connect SSL socket 有什麼解決辦法嗎

      刪除
    2. 我這裡不負責翻譯英文,您該先考慮是radius could not還是你的主機 could not..

      刪除