|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
×
[原创]Freeradius的安装和PPPOE的客户端Mac和帐号的绑定实现这里的title太短了,把我的标题也去尾了。 上星期开始接触routeros,在这里找到了不少好的资料,现在也发一贴共享下我的研究,呵呵FreeRadius我是在Solaris 9 sparc下安装的,事先已经安装和配制好gcc的环境。一、要先安装好openssl才可以安装freeradius,从sunfreeware.com上下回来openssl的package,gzip -d openssl-0.9.6i-sol9-sparc-local.gzpkgadd -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.gztar xvf freeradius-1.0.2.tarcd freeradius-1.0.2mkdir src/include/opensslcp /usr/local/ssl/include/openssl/* src/include/openssl/#(由于我之前在make时报告说不到openssl的des.h,所以此处先行把openssl下的头文件都拷贝过来了再编译,应该可以利用编译的环境变量来去掉这个错误,但是我现在还不知道该怎么做。 )./configure --prefix=/usr/local/FreeRadius #我喜欢加上路径makemake installcd 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{preprocesschapmschapsuffixsql}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=189 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 = 0x010005267ced3a094795c5a3ae2066441ba100000000000000008351b4df589f1e93f0c0a1058c0df4282bb48cf3fdcdca4d 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 ${authcheck_table} WHERE Username = '%{SQL-User-Name}' and (mac='%{Calling-Station-Id}' or isnull(mac) or mac='') ORDER BY id"#如果需要对大小写敏感的话使用下面的语句# authorize_check_query = "SELECT id,UserName,Attribute,Value,op FROM ${authcheck_table} WHERE STRCMP(Username, '%{SQL-User-Name}') = 0 and (mac='%{Calling-Station-Id}' or isnull(mac) or mac='') ORDER BY id" 修改postauth_query语句#change here 把postauth_query改为记录mac地址的过程了 postauth_query = "UPDATE ${authcheck_table} set mac='%{Calling-Station-Id}' WHERE Username = '%{SQL-User-Name}' and (mac='' or isnull(mac))"然后在Routeros中开启radius并指向radius服务器,radius服务器开启radiusd,就可以实现使用Radius进行验证,同时会在用户首次登陆时记录其mac地址,下一次要验证时就会是用户名和mac地址相符才可以通过验证了。 |
|