• freeradius防止用户异常断开无法重新链接上


    freeradius防止用户异常断开无法重新链接上

    http://www.cnblogs.com/klobohyz/archive/2012/02/08/2342532.html

    编辑default文件里

    vim /etc/freeradius/sites-enabled/default

    在authorize块中加入以下语句

    复制代码
    1 authorize{
    2 ...
    3 if(User-Name){
    4 if("%{sql: UPDATE radacct set AcctStopTime=ADDDATE(AcctStartTime,INTERVAL AcctSessionTime SECOND), AcctTerminateCause='Clear-Stale Session' WHERE UserName='%{User-Name}' and CallingStationId='%{Calling-Station-Id}' and AcctStopTime is null}"){
    5 }
    6 }
    7 }
    复制代码



    这是一条服务器每当接收客户端认证时发生时检查的sql语句、看清楚了、第二个if块里面可是一行内的、千万别拆成两行、

    解释下这条语句的作用吧、这里就是更新radacct表中的AcctStopTime字段、因为如果是异常断开的VPN用户、AcctStopTime会一直处于NULL的状态、这个时候、如果已经在freeradius设置成了单用户登录方式(通常都会这样)、所以就会禁止了VPN再次登录、而freeradius也一直在傻等着这个伪链接会几时断开、所以这里的处理方法是当用户再次登录上freeradius用户时、就把AcctStopTime的值设置为当前的会话时间加上开始的时间、具体的实现方法是用ADDDATE函数、AcctStartTime为被加时间、INTERVAL AcctSessionTime SECOND为关键字、以秒为单位、加上AcctSessionTime值、就成为了AccStopTime、而用户中止的类型也设置为Clear_stale Session、WHERE后面加了条件、条件为当前登录用户名、并且上次异常断开的IP这次登录的IP也要一致、而且AccStopTime的停止时间为空、当满足这三个条件后、就会自动把伪链接给强制断开、然后开启新会话接纳该用户

    这个会造成一个问题:就是当用户恶意使用非正常方法断开VPN时、流量数据和时间会填写为0、因为freeradius并不是实时写入数据的、这样会与计费流程背离、不过相信大部分人还是好的、实在有这些用户就把它加入黑名单屏蔽掉吧、

    配置freeradius各种限制

    http://www.cnblogs.com/klobohyz/archive/2012/02/07/2341652.html

    设置用户过期时间

    例如、限制名为sxy的用户过期日期为2006年7月6号14时55分22秒、只需要写在radcheck表就行了

    复制代码
    INSERT INTO  `radius`.`radcheck` (
    `id` ,
    `username` ,
    `attribute` ,
    `op` ,
    `value`
    )
    VALUES (
    NULL , 'sxy', 'Expiration', ':=', '06 Jun 2006 14:55:22'
    );
    复制代码

    也可以限制组、把sxy等用户添加在相应的组下面、然后在radgroupcheck、插入这些数据、就实现整个组的过期时间了

    设置每月的流量

    如设置一个用户组limit下、每个用户的流量为1GB

    编辑counter.conf文件

    vim /etc/freeradius/sql/mysql/counter.conf

    加入以下内容

    复制代码
    sqlcounter monthlytrafficcounter {
    counter-name = Monthly-Traffic
    check-name = Max-Monthly-Traffic
    reply-name = Monthly-Traffic-Limit
    sqlmod-inst = sql
    key = User-Name
    reset = monthly
    # DIV 1048576(equal 1024 * 1024),means set trafficcounter unit to MB
    query = "SELECT SUM(acctinputoctets + acctoutputoctets) DIV 1048576 FROM radacct WHERE UserName='%{%k}' AND UNIX_TIMESTAMP(AcctStartTime) > '%b'"
    }
    复制代码

    counter-name、暂时没发现有什么用

    check-name、这个属性非常重要、是到时加入sql的字段属性

    reply-name、验证的类型、到时在dictionary定义、后面会讲

    sqlmod-inst和key就不说了、基本不会变化

    reset意思是每月重置一次设置、也可以选never、dayly等等

    接下来就是一句SQL的查询语句、作用是查询这个月的总流量、SUM语句的作用是把流进流出的总流量加起来、然后再使用DIV除以1048576、因为流量单位是以字节为单位、非常的不方便、所以转换成以MB为单位1024字节等于1KB、1024KB等于1MB、所以1048576就这么来的、后面的WHERE是条件语句、%k代表key、key的值为User-Name、所以User-Name就是指代用户登录时的用户名、后来的UNIX_TIMESTAMP为从UNIX的某段时间至今的秒数、好像是从1976年吧、具体不记得、总之这个是一个定值、将连接的开始时间转换成总秒数和重置时间进行比较、%b就是从reset后的日期转化成UNIX_TIMESTAMP、这两个作比较、其实就是把最近一次重置时间之前的流量都忽略不计、只计算重置之后的总流量

    然后在radiusd.conf打开读取counter.conf的配置

    vim /etc/freeradius/radiusd.conf

    取消掉counter.conf前的#来读取设置

    #$INCLUDE sql/mysql/counter.conf

    然后再打开文件default

    vim /etc/freeradius/sites-enabled/default

    在authorize块中加上monthlytrafficcounter、其实就是刚刚在counter.conf里面添加的那段函数名

    authorize {

    monthlytrafficcounter
    }

    然后再在dictionary加上以上字段

    vim /etc/freeradius/dictionary

    然后在dictionary加上以下内容

    ATTRIBUTE Max-Monthly-Traffic 3003 integer
    ATTRIBUTE Monthly-Traffic-Limit 3004 integer

    这里就是前面counter.conf的reply-name所用到的字词、前面的属性值是固定的、接着就是在counter.conf那里的、接下来的3003和3004则是一个类似于属性ID值的冬冬、有两个条件、范围是3000到4000、而且不允许重复!再下来就是属性值的类型了、

    现在接着可以在SQL里定义相应的属性了、比如莪想限制一个用户组每月使用的流量是1G、便在radgroupcheck里定义以下内容

    INSERT INTO radgroupcheck(groupname, attribute, op,value) values('limitgp','Max-Monthly-Traffic',':=','1024');

    这句就是在组为limitgp的用户、限制每个月的流量为1024MB的方法、因为之前已经在counter.conf设置了单位为MB、所以这里直接写MB就可以了、不需要再使用字节了

  • 相关阅读:
    org.springframework.transaction.CannotCreateTransactionException Could not open
    org.springframework.web.util.NestedServletException Handler processing failed; n
    SSM 后台封装的有值, 到前台打印的时候没有值
    javax.net.ssl.SSLHandshakeException sun.security.validator.ValidatorException PK
    a 链接点击下载
    form图片上传遇到错误
    forever 启动nodejs
    nodejs 新建项目
    nodejs 安装
    nodejs 爬虫模板 map&array 数据模型
  • 原文地址:https://www.cnblogs.com/chulia20002001/p/7571270.html
Copyright © 2020-2023  润新知