FreeRadius的安装和PPPOE中mac地址与帐号的绑定

类别:软件工程 点击:0 评论:0 推荐:

上星期开始接触RouterOS, 现在也发一贴共享下我的研究,呵呵
我是在Solaris 9 sparc下安装的,事先已经安装和配制好gcc的环境。

一、要先安装好openssl才可以安装freeradius,从sunfreeware.com上下回来openssl的package,

gzip -d openssl-0.9.6i-sol9-sparc-local.gz

pkgadd -d openssl-0.9.6i-sol9-sparc-loca

二、从www.freeradius.org下回来最新的freeradius-1.0.2.tar.gz(—to 2005.03.21),

gzip -d freeradius-1.0.2.tar.gz

tar xvf freeradius-1.0.2.tar

cd freeradius-1.0.2

cp /usr/local/ssl/include/openssl/* src/include/

#(由于我之前在make时报告说不到openssl的des.h,所以此处先行把openssl下的头文件都拷贝过来了再编译,应该可以利用编译的环境变量来去掉这个错误,但是我现在还不知道该怎么做。:) )


./configure --prefix=/usr/local/FreeRadius             #我喜欢加上路径

make

make install

cd src/modules/rlm_sql/drivers/rlm_sql_mysql   

连接上mysql,create database radius          #创建radius的数据库
mysql -uroot -p密码 radius < db_mysql.sql    #导入数据表结构

现在已经安装好了FreeRadius,下面是进行配置文件的修改(参考了http://www.linuxbyte.net/view.php?skin=art&ID=3570)

编辑/usr/local/etc/raddb/radius.conf使其支持SQL,修改后如下:
authorize{
preprocess
chap
mschap
suffix
sql
}
accounting{
……
sql
……
}
修改sql.conf,如下所示:
更改sql.conf
  server="localhost"
  login="root"
  password="mysql的root的密码"
  radius_db="radius"


client.conf中保存的客户端能否连接上来的配置,默认配置下localhost是可以有连接权限的,而别的IP都没有权限,所以我们可以根据自己的需要添加IP,简单的配置是(复杂的配置我还没有看。:) )

client 192.168.1.2{
        secret   =通讯用的密码
        shortname=hehemyradius     #为这个连接使用的别名
}

往数据库radius中添加一些测试用的数据

insert into radgroupreply (groupname,attribute,op,value) values (‘user’,’Auth-Tyep’,’:=’,’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-Netmask’,’:=’,’255.255.255.0’);
#我查阅了doc/rlm_sql。根据文档的描述,op值不能为空,代表了校对用户名和密码的方式. 可以为:
#   :=    !=   ==  等几种方式

  加入测试账号
insert into radcheck (UserName,Attribute,op,Value) values ('test','User-Password',':=','test');

  测试账号加入组
insert into usergroup (UserName,GroupName) values ('test','user');

现在可以启动freedius到调试模式. 

    /usr/local/FreeRadius/sbin/radiusd -X

注,网上说报找不到文件rlm_sql_mysql这个时候只要把库文件加入系统搜索的目录里,但是我的机器可能以前就已经配置过mysql了,所以没有出错。万一真的出错就
  cp /usr/local/lib/* /usr/lib

   这时会看到radius启动的信息,新开一个终端,运行

   radtest test teset localhost 0 testing123

看到debug模式接收到的信息就可以了


在使用时发现默认情况下RouterOS就已经很增长的读取到了radius的帐号和密码信息,验证通过,而且通过后pppoe的连接信息会被freeradius记录到

检测了一下freeradius接收到的信息

rad_recv: Access-Request packet from host 192.168.1.1:32769, id=19, length=1
89
        Service-Type = Framed-User
        Framed-Protocol = PPP
        NAS-Identifier = "MikroTik"
        NAS-Port = 39
        NAS-Port-Type = Ethernet
        User-Name = "test"
        Calling-Station-Id = "0f:05:5D:66:F1:f4"
        Called-Station-Id = "PPPOETest"
        NAS-Port-Id = "vlan_info"
        MS-CHAP-Challenge = 0x9683c4b8ccbc81d00f92db8cd31fb500
        MS-CHAP2-Response = 0x010005267ced3a094795c5a3ae2066441ba100000000000000
008351b4df589f1e93f0c0a1058c0df4282bb48cf3fdcdca4d
        NAS-IP-Address = 192.168.1.2
  Processing the authorize section of radiusd.conf


说明有发送pppoe客户端的用户名和物理地址过来,也就是应该可以进行用户名和物理地址的混合验证,努力修改中......先记录下来再说。

19:03pm  总算是完成了可以用RouteOS+radius+mysql实现首次记录mac地址,之后pppoe拨号时就把pppoe的帐号和mac地址绑定认证了

为mysql的数据库radius中的表radcheck增加一个mac字段,varchar(50)类型

在上面的radiusd.conf中加多一个步骤
post-auth {
     sql             #去掉原来的注释语句
 }

修改sql.conf中的authorize_check_query为
#这里修改验证方式,加上mac验证(我是使用了大小写不敏感的那条sql语句改写)
        authorize_check_query = "SELECT id,UserName,Attribute,Value,op FROM ${au
thcheck_table} WHERE Username = '%{SQL-User-Name}' and (mac='%{Calling-Station-I
d}' or isnull(mac) or mac='') ORDER BY id"
#如果需要对大小写敏感的话使用下面的语句
#       authorize_check_query = "SELECT id,UserName,Attribute,Value,op FROM ${au
thcheck_table} WHERE STRCMP(Username, '%{SQL-User-Name}') = 0 and (mac='%{Calling-Station-I
d}' or isnull(mac) or mac='')  ORDER BY id"     
修改postauth_query语句
#change here 把postauth_query改为记录mac地址的过程了
        postauth_query = "UPDATE ${authcheck_table} set mac='%{Calling-Station-I
d}'  WHERE Username = '%{SQL-User-Name}' and (mac='' or isnull(mac))"


然后在RouterOS中开启radius并指向radius服务器,radius服务器开启radiusd,就可以实现使用Radius进行验证,同时会在用户首次登陆时记录其mac地址,下一次要验证时就会是用户名和mac地址相符才可以通过验证了。

本文地址:http://com.8s8s.com/it/it32078.htm