现有环境说明:
[[email protected] ~]# uname -r
2.6.32-358.el6.i686
[[email protected] ~]# cat /etc/redhat-release
CentOS release 6.4 (Final)
freeradius-mysql-2.1.12-4.el6_3.i686
freeradius-2.1.12-4.el6_3.i686
安装MySQL及数据库及freeradius
yum install mysql mysql-server freeradius freeradius-mysql
/etc/raddb/radiusd.conf
为 freeradius 创建数据库并创建用户:
方法一:
[[email protected] ~]# mysql -uroot -p
mysql> CREATE DATABASE radius;
mysql> GRANT ALL ON radius.* TO [email protected] IDENTIFIED BY "radpass";
mysql> exit
方法二:
[[email protected] ~]# mysql -uroot -p
mysql> CREATE DATABASE radius;
mysql> source /etc/raddb/sql/mysql/admin.sql;
mysql> exit
接下来为radius数据库导入相应的表结构:
[[email protected] ~]# cd /etc/raddb/sql/mysql
[[email protected] mysql]# mysql radius < schema.sql
为 freeradius 启用 MySQL 支持及启用 Rlm sqlcounter 模块:
[[email protected] ~]# vi /etc/raddb/radiusd.conf
# 取消注释700行, $$INCLUDE sql.conf
# 取消注释712行, $INCLUDE sql/mysql/counter.conf
[[email protected] ~]# vi /etc/raddb/sites-enabled/default
# 找到 authorize {}模块,注释掉170行的 files,然后去掉 sql 前的 #号(177 行)
# 找到 accounting {}模块,注释掉396行的 radutmp, 注释掉去掉406行的 sql 前面的 #号
。
可在 /etc/raddb/sql.conf 修改 sql 连接设置,由于之前我们的用户名密码已经按此设置过
了,所以暂时不用修改。
然后需要允许认证客户端连接。默认 freeradius 只允许本地客户端发起认证,这里假设有一
台提供 VPN 服务的服务器名字是 red,ip 为 1.2.3.4,设置的共享密码为 asdf1234,其中
IP 必须为客户端 IP,shortname 是可以随意设置的,客户端连接的时候会被要求提供
secret:
[[email protected] ~]# vi /etc/raddb/clients.conf
在最后一行加上:
client 172.17.88.88 {secret = METENenglish
shortname = MetenVPN
}
"/etc/raddb/clients.conf" 238L, 6778C written
配置流量统计功能
[[email protected] ~]# vi /etc/raddb/sql/mysql/counter.conf
在文件最后添加以下代码(按月进行统计,从数据库的radacct表中,根据用户名(%k)将所有
入站和出站流量累加,时间可自定义months、weeks、days、hours,也可以指定具体值,如三
天重置一次 "reset = 3 d"):
sqlcounter monthlytrafficcounter {
counter-name = Monthly-Traffic
check-name = Max-Monthly-Traffic
reply-name = Monthly-Traffic-Limit
sqlmod-inst = sql
key = User-Name
reset = monthly
query = "SELECT SUM(acctinputoctets + acctoutputoctets) FROM radacct
WHERE UserName=‘%{%k}‘ AND UNIX_TIMESTAMP(AcctStartTime) > ‘%b‘"
}
启用Traffic Counter流量计数器
[[email protected] ~]# vi /etc/raddb/sites-enabled/default
# 找到 authorize {}模块,在此模块当中的最后一行添加monthlytrafficcounter
添加字典
[[email protected] ~]# vi /etc/raddb/dictionary
在文件最后添加两行:
ATTRIBUTE Max-Monthly-Traffic 3003 integer
ATTRIBUTE Monthly-Traffic-Limit 3004 integer
五、数据库插入流量限制值
1)这里插入到radgroupcheck表,是限制某个用户组的流量。也可以插入到radcheck表,以限
制某个用户的流量。
2)流量值以 byte 为单位,1G = 1073741824 bytes
3)VIPgroup是用户组
mysql -uroot -p;
use radius;
# 每月最大流量(1G)
INSERT INTO radgroupcheck (groupname,attribute,op,value) VALUES (‘VIPgroup‘,‘Max-
Monthly-Traffic‘,‘:=‘,‘1073741824‘);
# 流量统计时间的间隔(60秒)
INSERT INTO radgroupcheck (groupname,attribute,op,value) VALUES
(‘VIPgroup‘,‘Acct-Interim-Interval‘,‘:=‘,‘60‘);
# 在数据库中限制用户组的最大流量为1M(本例中的用户组名为user)
mysql> INSERT INTO radgroupcheck (groupname,attribute,op,VALUE) VALUES
(‘VIPgroup‘,‘Max-Monthly-Traffic‘,‘:=‘,‘1048576‘);
# 流量统计时间的间隔(60秒)
mysql> INSERT INTO radgroupcheck (groupname,attribute,op,VALUE) VALUES
(‘VIPgroup‘,‘Acct-Interim-Interval‘,‘:=‘,‘60‘);
# 加入一个新的VPN用户(用户名Youki,密码qwe456)
mysql> INSERT INTO radcheck (UserName, Attribute, Value) VALUES (‘Youki‘,
‘Password‘, ‘qwe456‘);
# 将用户Youki加到组里
mysql> insert into radusergroup(username,groupname) VALUES (‘Youki‘,‘VIPgroup‘);
# 限制同时登陆人数,注意是在 radgroupcheck 表
INSERT INTO radgroupcheck (groupname,attribute,op,VALUE) VALUES
(‘VIPgroup‘,‘Simultaneous-Use‘,‘:=‘,‘3‘);
# 退出Mysql
mysql> exit
# 重启radius让其生效
/etc/init.d/radiusd restart
参考资料:
1. http://wiki.freeradius.org/Rlm_sqlcounter
2. http://freeradius.org/rfc/attributes.html
在PPTP配置文件中增加radius支持:
[[email protected] ~]# vi /etc/ppp/options.pptpd
末尾处添加
plugin /usr/lib/pppd/2.4.5/radius.so
plugin /usr/lib/pppd/2.4.5/radattr.so
radius-config-file /etc/radiusclient-ng/radiusclient.conf