上星期开始接触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