紅帽RHEL5U3平台實現pppoe接入記賬認證伺服器的配置文檔

火星人 @ 2014-03-04 , reply:0


紅帽RHEL5U3平台實現pppoe接入記賬認證伺服器的配置文檔

早先做得一個文檔,跟大家共享一下。

文檔只寫了簡單的製作過程,沒有涉及到相關基礎知識的講解,僅供大家參考。

:mrgreen: :mrgreen: :mrgreen: :mrgreen:


紅帽RHEL5U3平台實現pppoe接入記賬認證伺服器

作者:zorro

郵件:zorro@uplooking.com

軟體需求:
        紅帽自帶的:rp-pppoe,ppp,freeradius,freeradius-mysql,mysql。
        另需:freeradius-2.1.3以及ppp2.4.4的源代碼包。

第一部分:實現簡單的pppoe撥號服務

        檢查系統上的rp-pppoe以及ppp軟體是否安裝,命令:

        #rpm -q rp-pppoe ppp

        如果安裝則會有顯示軟體包的名稱,若未安裝,找到安裝盤上的相關rpm包安裝。

        然後配置/etc/ppp/pppoe-server-options文件,內容為:

        # PPP options for the PPPoE server
        # LIC: GPL
        require-chap
        login
        lcp-echo-interval 10
        lcp-echo-failure 2
        defaultroute
        ms-dns 192.168.1.1
        logfile /var/log/pppod.log
       
        文件內容不做解釋,可以通過man pppd查尋相關幫助。此時pppoe伺服器從/etc/ppp/ chap-secrets文件中讀取驗證的用戶名和密碼信息,此文件格式為:

        # Secrets for authentication using CHAP
        # client        server        secret                        IP addresses

        "zorro"        *        "123456"                *

        想要多添加用戶,再加入新行即可。

        然後可以啟動pppoe服務了,命令是:

        #pppoe-server -I eth0 -L $LOCALIP -R $REMOTEIP -N $CONNLIMIT

        命令詳細信息查詢man pppoe-server。

        註:紅帽自帶的pppoe伺服器,在RHEL5至RHEL5U2的版本上與系統的syslog服務有衝突。可現關閉syslog服務,讓pppoe伺服器正常運行。
第二部分:讓pppoe服務使用freeradius伺服器進行驗證

        首先更改/etc/ppp/pppoe-server-options,添加一行設置:

        # PPP options for the PPPoE server
        # LIC: GPL
        require-chap
        login
        lcp-echo-interval 10
        lcp-echo-failure 2
        defaultroute
        ms-dns 192.168.1.1
        logfile /var/log/pppod.log
        plugin /usr/lib/pppd/2.4.4/radius.so

        表示讓pppoe-server在運行時加入pppd的radius查檢,可以讓pppoe服務通過freeradius來驗證和記賬。添加此行之後,可以創建/etc/radiusclient/目錄,創建完之後,我們需要使用一下ppp的源代碼,因為紅帽沒有給我們提供相應的配置文件。解壓ppp的源代碼目錄:

        #tar xvfz ppp-2.4.4.tar.gz
        #cd ppp-2.4.4
        #cd pppd/plugins/radius/etc/
        #cp * /etc/radiusclient/

        這個目錄下有我們需要的所有相關的配置文件,其中最重要的是/etc/radiusclient/radiusclient.conf,我們先打開此文件配置,其內容為(已去掉註釋):

        auth_order        radius
        login_tries        4
        login_timeout        60
        nologin /etc/nologin
        issue        /etc/radiusclient/issue
        authserver         localhost:1812
        acctserver         localhost:1813
        servers                /etc/radiusclient/servers
        dictionary         /etc/radiusclient/dictionary
        login_radius        /sbin/login.radius
        seqfile                /var/run/radius.seq
        mapfile                /etc/radiusclient/port-id-map
        default_realm
        radius_timeout        10
        radius_retries        3
        login_local        /bin/login
       
        欄位相關意義清參考文件自帶的註釋。

        另外,還需更改此目錄下的servers文件,此文件用來指定讀取的radius伺服器的主機名稱以及key值(需要在freeradius配置中指定)。
        此時pppoe服務已經可以通過radius認證了。然後進行freeradius的配置。
        首先檢查freeradius是否安裝:

        #rpm -q freeradius freeradius-mysql

        其中freeradius-mysql包使用來讓freeradius連接mysql資料庫的,本部分還用不到。

        首先打開/etc/raddb/clients.conf配置客戶端訪問控制,文件內容如下(已刪除註釋):

        client 127.0.0.1 {
                secret                = hello
                shortname        = localhost
                nastype     = othe
        }

        表示客戶端之允許從127.0.0.1的ip登錄radius服務,並且需要驗證的secret為hello,就是在上面的servers文件中需要配置的信息。若要實現可以從別的機器訪問,請參考註釋獲得幫助。

        然後配置naslist文件,內容為:

        # NAS Name                Short Name        Type
        #----------------        ----------        ----
        #portmaster1.isp.com        pm1.NY                livingston
        #portmaster2.isp.com        pm1.LA                livingston
        localhost                local                portslave

        此文件用來配置記錄有哪些指定的nas伺服器需要使用radius進行記賬。現在指定的是localhost。

        主控配置文件是radiusd.conf,目前沒有需要改的,可通過註釋學習其中配置方法。此文件主要是用來指定freeradius伺服器默認的驗證和記賬方式。我們目前使用本地的文件方式,就是/etc/raddb/users文件,在其中添加我們需要提供給pppoe服務認證的用戶信息,內容如下(某段截取):

        zorro   Auth-Type := Local, Simultaneous-Use := 1, User-Password == "zorro"
                     Service-Type = Framed-User,
                        Framed-Protocol = PPP,
                        Framed-IP-Address = 10.0.0.33,
                      Framed-IP-Netmask = 255.255.255.255

        其中Simultaneous-Use := 1欄位用來設置每個用戶同時登錄的個數。所有欄位信息都在freeradius的源代碼中有文檔給予解釋。另外要注意,添加的用戶欄位應寫在文件DEFAULT欄位前面添加,否則可能不會生效。

        都配置完畢后,可以通過radiusd -X命令以排錯方式啟動,此時再啟動pppoe-server,用客戶端撥號驗證一下,檢查pppoe服務是否成功通過freeradius來驗證用戶。如果成功,這一部分完成。可通過 service radiusd restart來正常啟動radius服務。



第三部分:配置freeradius從mysql資料庫讀取用戶信息

        首先更改/etc/raddb/radiusd.conf,首先將$INCLUDE  ${confdir}/sql.conf欄位這行原有的註釋去掉,然後找到authorize欄位中的sql將註釋取消掉,以及accouting欄位中的sql的註釋取消。然後需要更改sql.conf中的設置,主要是設置讀取的mysql伺服器的相關信息,可更改如下一些欄位:

        server = "localhost"                                                 #資料庫伺服器
    login = "mysql_username"                                         #資料庫用戶
    password = "mysql_password"                                #資料庫密碼
        radius_db = "radius"                                                #資料庫名稱

        當然前提是你要現把mysql服務設置好,設置方法是:

        先啟動你的mysqld:
                service mysqld start
        然後設置root帳戶密碼:
                mysqladmin –uroot –p password 12345
        創建radius資料庫
                mysqladmin –uroot –p123456 create radius
       
        建立mysql的資料庫raius的表,我們可以通過軟體已經給出的sql腳本導入資料庫:
                mysql -uroot –p123456 radius < /usr/share/doc/freeradius-1.1.3/examples/mysql.sql
        這樣,所有radius需要的資料庫和表都已經建立好了。
        此時可以添加測是帳號來測試是否正常工作。具體方法就不在這說了。我們待會要使用freeradius源代碼自帶的dialup_admin來進行資料庫的管理工作,那是一個基於web的管理界面,使用php編寫,要比直接用sql語句方便的多。
        這裡要注意的是,如何在資料庫里添加限制沒用戶同時登錄個數的限制,比如,我先用sql語句添加一個測試用戶,然後來限制他的登錄個數,語句是:

        mysql -uroot –p123456 radius

        insert into radgroupreply (groupname,attribute,op,value) values ('user','Auth-Type',':=','Local');

        insert into radgroupreply (groupname,attribute,op,value) values ('user','Service-Type',':=','Framed-User');

        insert into radgroupreply (groupname,attribute,op,value) values ('user','Framed-IP-Address',':=','255.255.255.254');

        insert into radgroupreply (groupname,attribute,op,value) values ('user','Framed-IP-Netmask',':=','255.255.255.0');

        insert into radcheck (username,attribute,op,value) values ('test','User-Password',':=','test');

        insert into usergroup (username,groupname) values ('test','user');

        這樣就給我們的資料庫中添加了一個帳戶測試帳戶test,並讓test帳戶屬於user組。
        然後我們可以通過設置user組的檢查屬性來設置此組帳戶的登錄數限制,以後只要用戶加入這個組,登錄數都不能超過1次:

        INSERT INTO radgroupcheck (GroupName, Attribute, op, Value) values("user", "Simultaneous-Use", ":=", "1");

        好了,限制完成。我們現在可以使用test帳戶登錄,並測試是否是通過mysql資料庫驗證的。並且可以檢查是不是只能登錄一個。



第四部分:使用dialup_admin來管理radius伺服器

        伺服器搭建成功后如果需要web管理,freeradius自帶了一個web管理程序dialup_admin。
        首先測試Apache與PHP安裝的正確性。Apache的WEB目錄在 /var/www/html 下首先測試Apache,在瀏覽器輸入 Http://127.0.0.1 下看到Apache界面表示正常。
        編輯一個PHP測試文件,內容為  ,保存為 phpinfo.php。在瀏覽器輸入Http://127.0.0.1/phpinfo.php 看到php相關信息頁面,表示php運作正常。
        直接將freeradius源代碼中的dialup_admin/文件夾全部拷貝到Apache網頁目錄下/etc/local下。
        修改dialup_admin/conf/下的admin.conf文件中的如下參數:
                sql_type:mysql
                sql_server:localhost                    //sql地址
                sql_port:3306                         //默認埠
                sql_username:root
                sql_password:123456                   //密碼
                sql_database:radius                     //資料庫名

                general_base_dir: /usr/local/dialup_admin //dialup_admin主目錄
                general_domain: company.com     //這個可改也可不改,沒什麼影響,改了還看點而已
                general_radius_server_auth_proto: chap   //將pap改成chap
                general_encryption_method: clear        //將crypt改成clear
        說明一下,general_encryption_method: clear是必須得改的,否則用web管理界面添加用戶後會出現密碼被加密后無法識別導致認證失敗,clear方式是以明文存儲密碼,freeradius默認是用明文存儲密碼,兩者要對應,所以這裡要用clear方式。
        修改dialup_admin/conf/下的naslist.conf文件如下
                nas1_name: nas1.%{general_domain}
                nas1_model: Computer                 //NAS伺服器的類型
                nas1_ip: 192.168.1.1                 //NAS伺服器的IP地址
                nas1_port_num: 15
                nas1_community: public
        其他的通通刪掉或用#號註釋掉,這樣修改的目的是方便在web管理界面中直觀的看到每個NAS伺服器連接用戶的情況。
        導入相關資料庫表
                cd /usr/local/dialup_admin/sql
                mysql -uroot –p123456 radius < userinfo.sql
                mysql -uroot –p123456 radius < totacct.sql
                mysql -uroot –p123456 radius < mtotacct.sql
                mysql -uroot –p123456 radius < badusers.sql
        dialup_admin用的是php3格式的文件,需要web伺服器支持這種格式,
        修改/etc/httpd/conf/httpd.conf文件,在此文件最後添加
                AddType application/x-httpd-php .php .html .htm .php3
        並在默認的主頁目錄下建立一個指向/usr/local/dialup_admin/htdocs的符號連接htdocs
        保存后重啟httpd服務
                service httpd restart
訪問:http://localhost/htdocs/index.html
        能正常打開各頁面就ok了。默認是打開的sql調試模式。可以在admin.conf中找到sql_debug.把true改為false即可關閉。
至此,整個Radius伺服器搭建完成。

[ 本帖最後由 jerry017cn 於 2009-5-7 22:08 編輯 ]
《解決方案》

收藏先
《解決方案》

回復 #1 jerry017cn 的帖子

應該是要變比syslogd 規避一個bug問題
《解決方案》

好文章,頂一個
《解決方案》

收藏。
《解決方案》

:oops: :oops: :oops:
人氣不是很旺的樣子。。。。。


現在的cu怎麼了?

嘿嘿。

沒關係拉。還是非常感謝看了回帖的人。
《解決方案》

原創的文章,一定要支持!
《解決方案》

支持原創,好貼一定要頂。。。
《解決方案》

收著。
《解決方案》

原帖由 jerry017cn 於 2009-5-7 22:01 發表 http://linux.chinaunix.net/bbs/images/common/back.gif
紅帽自帶的pppoe伺服器,在RHEL5至RHEL5U2的版本上與系統的syslog服務有衝突。

怎麼紅帽子這個毛病還沒改好?好幾年的老毛病了吧?:outu: :outu: :outu:
圖省事的話,可以把ppp-2.4.2 上的pppd 拷來用,不怕麻煩就去改源碼,main.c里有BUG(不好意思,太久了,忘了在哪改了,你自己找去吧~~~),改完了MAKE,再把裡面的PPPD拷過去覆蓋就可以了。




[火星人 via ] 紅帽RHEL5U3平台實現pppoe接入記賬認證伺服器的配置文檔已經有219次圍觀

http://www.coctec.com/docs/service/show-post-20857.html