实验环境
fedora6 kernel:2.6.18-1.2798.fc6
mysql 5.0.22
freeradius 1.1.7
该模块可以生成一个临时的check属性,该属性的值通过sql语句从sql数据库中的raddacct表统计数据,然后将它与数据库radcheck或者 radgroupcheck表中的该属性的值(已经被
添加到check items中)进行比较,符合规则的才会通过authorize。
eg.
sqlcounter noresetcounter {
counter-name = Max-All-Session-Time #没有发现有什么用
check-name = Max-All-Session #对应radcheck表中的attribute
reply-name = Session-Timeout #返回给NAS的attribute type,这里为Session-Timeout
sqlmod-inst = sql #指定查询类型
key = User-Name #
reset = never #sqlcounter重置频率,通常为hourly, daily, weekly, monthly,never
query = "SELECT SUM(AcctSessionTime) FROM radacct WHERE UserName=’%{%k}’"
}
将上边的内容加到radiusd.conf的modules中(在modules中已经有sqlcounter的示例),并在authorize中加入noresetcounter,这样在认证过程中就会调用这个sqlcounter,radius
会去计算radacct表中该用户的所有AcctSessionTime之和,也就是累计上线时间,并与radcheck表中该用户的Max-All-Session进行比较,如果Max-All-Session大于
AcctSessionTi
fedora6 kernel:2.6.18-1.2798.fc6
mysql 5.0.22
freeradius 1.1.7
该模块可以生成一个临时的check属性,该属性的值通过sql语句从sql数据库中的raddacct表统计数据,然后将它与数据库radcheck或者 radgroupcheck表中的该属性的值(已经被
添加到check items中)进行比较,符合规则的才会通过authorize。
eg.
sqlcounter noresetcounter {
counter-name = Max-All-Session-Time #没有发现有什么用
check-name = Max-All-Session #对应radcheck表中的attribute
reply-name = Session-Timeout #返回给NAS的attribute type,这里为Session-Timeout
sqlmod-inst = sql #指定查询类型
key = User-Name #
reset = never #sqlcounter重置频率,通常为hourly, daily, weekly, monthly,never
query = "SELECT SUM(AcctSessionTime) FROM radacct WHERE UserName=’%{%k}’"
}
将上边的内容加到radiusd.conf的modules中(在modules中已经有sqlcounter的示例),并在authorize中加入noresetcounter,这样在认证过程中就会调用这个sqlcounter,radius
会去计算radacct表中该用户的所有AcctSessionTime之和,也就是累计上线时间,并与radcheck表中该用户的Max-All-Session进行比较,如果Max-All-Session大于
AcctSessionTi

本文介绍了如何使用Freeradius的rlm_sqlcounter模块来实现用户的时间和流量限制。通过设置sqlcounter模块,计算并比较用户在radacct表中的累计上线时间和Max-All-Session限制,达到限制用户最大上线时间的目的。同时,利用Chillispot-Max-All-Octets等属性限制流量,防止超出限制的用户再次登陆。实验环境包括Fedora、MySQL和Freeradius 1.1.7。注意不同版本可能存在的属性命名差异和配置问题。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



