架设基于FreeRADIUS带有认证计费功能的Open***
一、文档预习
在查看下面博文之前,请大家先预览一下我前几篇关于Open***的部署,一遍与大家更好的了解:
二、FreeRadius简介
RADIUS认证服务器(Remote Authentication Dial In User Service,远程用户拨号认证系统)是目前应用最广泛的AAA协议(AAA=authentication、Authorization、Accounting,即认证、授权、计费)。随着网络安全需求提高,中小企业的局域网集中用户认证,特别是使用VPDN专网的也逐渐需要建立自己的认证服务器以管理拨号用户。但这些用户不需要使用昂贵的专业系统,采用PC服务器和Linux系统的FreeRADIUS+MySQL就能可靠地实现。
FreeRADIUS包含一个radius服务器和radius-client,可以对支持radius协议的网络设备进行鉴权记账,常见的开源路由器操作系统:如Openwrt,DD-wrt等,都支持radius协议,对PPPOE,热点,***等服务器进行账户管理认证,记账。
Open***及FreeRADIUS 已经开发出了现成的Open***+FreeRADIUS 协同工作的插件。open***官方插件是PAM-Radius,FreeRADIUS官方插件是radiusplugin,这两者不同的之处是,PAM-Radius仅有认证功能,不能向FreeRADIUS服务器发送计费报文,这里我使用的是挂载FreeRadius 官方的radiusplugin模块,因为此模块可以向FreeRADIUS服务器发送计费报文,从而实现计费功能。
三、安装FreeRadius
1、方案介绍
由于历史的遗留问题,将Open***、FreeRADIUS及MySQL部署在了同一台机器上,但是如果是在新的环境中部署,在硬件允许的情况下应该将它们部署在不同的机器上。daloRADIUS是一个用PHP语言写的Web应用程序,将其部署到一台有PHP环境的Apache的服务器上就行。
Open***、MySQL以及的安装我这里不再介绍,大家可以看我前面的博文,安装也非常简单。
1、环境准备
+/ # are loaded. The modules are initialized ONLY if they are # referenced in a processing section, such as authorize, # authenticate, accounting, pre/post-proxy, etc. # $INCLUDE ${confdir}/modules/ # Extensible Authentication Protocol # # For all EAP related authentications. # Now in another file, because it is very large. # $INCLUDE eap.conf # Include another file that has the SQL-related configuration. # This is another file only because it tends to be big. # $INCLUDE sql.conf #打开这里的注释 # # This module is an SQL enabled version of the counter module. # # Rather than maintaining seperate (GDBM) databases of # accounting info for each counter, this module uses the data # stored in the raddacct table by the sql modules. This # module NEVER does any database INSERTs or UPDATEs. It is # totally dependent on the SQL module to process Accounting # packets. 1d25b # $INCLUDE sql/mysql/counter.conf #打开这里的注释 #[p]3、配置radius认证文件
修改/etc/raddb/site_enabled下的defoult文件,默认是使用的文件认证,现在取消文件认证,改为sql认证,差不多少有file的注释掉,sql的启用,下面是我的模板。[root@ios*** ~]# grep -Ev "^#|[:spcae:]*#|^$" /etc/raddb/sites-enabled/default authorize { preprocess chap mschap digest suffix eap { ok = return } sql #去掉注释,开启sql expiration logintime pap } authenticate { Auth-Type PAP { pap } Auth-Type CHAP { chap } Auth-Type MS-CHAP { mschap } digest unix eap } preacct { preprocess acct_unique suffix # files } accounting { detail unix radutmp sql #去掉注释 exec attr_filter.accounting_response } session { radutmp sql } post-auth { sql exec Post-Auth-Type REJECT { attr_filter.access_reject } } pre-proxy { } post-proxy { eap }4、配置与mysql数据库连接的配置文件sql.conf
其实按照上面的参数设定的话,这个文件不需要修改的,文件内容如下:[root@ios*** ~]# grep -Ev "^#|[:spcae:]*#|^$" /etc/raddb/sql.conf
sql {
database = "mysql"
driver = "rlm_sql_${database}"
server = "localhost"
login = "radius"
password = "radpass"
radius_db = "radius"
acct_table1 = "radacct"
acct_table2 = "radacct"
postauth_table = "radpostauth"
authcheck_table = "radcheck"
authreply_table = "radreply"
groupcheck_table = "radgroupcheck"
groupreply_table = "radgroupreply"
usergroup_table = "radusergroup"
deletestalesessions = yes
sqltrace = no
sqltracefile = ${logdir}/sqltrace.sql
num_sql_socks = ${thread[pool].max_servers}
connect_failure_retry_delay = 60
lifetime = 0
max_queries = 0
nas_table = "nas"
$INCLUDE sql/${database}/dialup.conf
}5、测试FreeRADIUS和MySQL的通信认证
配置到这里我们简单测试一下FreeRADIUS的认证是否可以了。需要命令radtest,如果没有这个命令,我们可以通过安装软件包来添加。yum install freeradius-utils -y # 启动freeradius,可以使用radiusd -X开启Debug模式 service radiusd start 用radtest测试test用户,密码是test。[root@ios*** ~]# radtest test test localhost 0 testing123 Sending Access-Request of id 239 to 127.0.0.1 port 1812 User-Name = "test" User-Password = "test" NAS-IP-Address = 127.0.0.1 NAS-Port = 0 Message-Authenticator = 0x00000000000000000000000000000000 rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=239, length=20 服务器如果返回有“Access-Accept”的字样,代表认证成功了,如果有“Access-Reject”字样则认证失败,这时可以停用radiusd服务,用命令radiusd -X开启服务从全部的debug信息中找到问题并解决,如果NAS-IP-Address显示的不是127.0.0.1那说明你没有配置主机名解析,请在hosts里面配置一下。
[root@ios*** ~]# grep -Ev "^#|^$" /etc/open***/radiusplugin.cnf NAS-Identifier=Open*** Service-Type=5 Framed-Protocol=1 NAS-Port-Type=5 NAS-IP-Address=127.0.0.1 Open***Config=/etc/open***/server.conf subnet=255.255.255.0 overwriteccfiles=true nonfatalaccounting=false server { # The UDP port for radius accounting. acctport=1813 # The UDP port for radius authentication. authport=1812 # The name or ip address of the radius server. name=127.0.0.1 # How many times should the plugin send the if there is no response? retry=1 # How long should the plugin wait for a response? wait=1 # The shared secret. sharedsecret=testing123 #和FreeRadius的客户端配置文件保持一致 }[p]3、Open***服务端配置文件
通过plugin字段让Open***调用RadiusPlugin插件。[root@ios*** ~]# grep -Ev "^#|^$|^]4、Open***客户端配置文件
我这里是Windows的客户端,配置文件如下:client dev tun proto tcp remote 211.152.x.x 1194 #Open***服务器的IP地址 nobind persist-key persist-tun ca ca.crt ;cert client.crt ;key client.key comp-lzo verb 3 auth-user-pass #客户端使用账号密码登录 reneg-sec 3600005、***连接测试
重启Open*** 服务端后客户端就可以用“用户名/密码”的形式登录***了,如果要添加新的用户只需要在radius数据库的radcheck表插入新的记录即可,很是方便快捷。
在/var/log/radius和/var/log/open***下面有很多日志是记录连接状态的,如果连接有问题可以查看日志查找原因。
下面是我的Open***的日志,如果你的FreeRADIUS开启Debug模式的话也可以看到登录成功的信息。
到此为止,Open***用户已经成功通过了FreeRADIUS验证,而且也成功登录了Open***服务器,因此通过FreeRADIUS验证Open***用户登录Open***服务器也便全部完成了。
六、了解Open***的使用情况
要了解Open***的使用情况,可以使用FreeRADIUS服务器提供的命令,例如radwatch、radwho、radlast等等,这些命令是freeradius和freeradius-utils软件包带来的。
七、使用daloRADIUS Web程序管理FreeRADIUS服务
因为篇幅的原因,关于Web管理的部署配置请点击查看下面的文章。
- ftp文件传输协议及基于openssl对ftp进行认证功能
- 基于OpenLayer地块标识信息查询功能Javascript类定义
- 基于freeradius的无线认证
- Java开发之spring security实现基于MongoDB的认证功能
- 用笔记本电脑架设WiFi无线热点认证与计费网关
- 多功能复合机基于用户认证功能的实现过程详解 推荐
- 基于BCB开发具有身份认证功能的邮件发送程序
- 【tcp-ip学习总结】基于udp的多人聊天室,带有登录注册功能
- MongoDB 启动基于角色的登录认证功能
- 基于 orange(nginx+openresty) + docker 实现微服务 网关功能
- Open开发平台,认证,授权,计费
- 架设PPPOE Server及Radius Server(OpenLDAP+Mysql) 实现PPOE 计费系统
- 基于ipfire的open***功能--client to net (Roadwarrior)配置(一)
- iOS即时通讯功能之服务端架设(Mac OS X +openfire+Mysql)
- Ubuntu下freeradius的EAP-MD5/EAP-PEAP-MSCHAPV2/EAP-TTLS-MD5/EAP-TTLS-MSCHAPV2方式认证(基于mysql)
- 基于mediaPlayer实现的播放器,带有分级的目录功能;
- 基于单片机的带有日历功能的数字时钟
- 基于basic认证机制配置httpd服务器拥有用户访问控制功能