Skip to content

FreeRadius+Rest实现路由认证#

FreeRadius安装#

  1. 安装freeradius
    sudo apt-get install freeradius freeradius-mysql
    
  2. 手动关闭freeradius
    service freeradius stop
    
  3. 给/etc/freeradius目录权限
    sudo chmod -R 777 /etc/freeradius
    
    后面重启freeradius如果有提示:
    "/etc/freeradius/" is globally writable.  Refusing to start due to insecure configuration.
    
    就需要执行
     sudo chmod -R o-w /etc/freeradius
    
  4. 修改文件/etc/freeradius/3.0/users取消掉以下代码注释,作为测试数据
    steve        Cleartext-Password := "testing"
            Service-Type = Framed-User,
            Framed-Protocol = PPP,
            Framed-IP-Address = 172.16.3.33,
            Framed-IP-Netmask = 255.255.255.0,
            Framed-Routing = Broadcast-Listen,
            Framed-Filter-Id = "std.ppp",
            Framed-MTU = 1500,
            Framed-Compression = Van-Jacobsen-TCP-IP
    
  5. 重启freeradius(-X表示调试)
    sudo freeradius -X
    
  6. 开一个新终端进行测试,其中参数分别为用户名、密码、IP和端口、key(key是 /etc/freeradius/3.0/clients.conf中的secret)
    radtest steve testing localhost 1812 testing123
    
    客户端预期结果如下 BnTOMc.png 服务端预期结果如下 BnTPC5.png 可以看到验证成功的Access 从上面的服务端输出描述可以得出以下信息 上面是接收到了一个Request,然后radius进行验证,注意,他执行的文件是/etc/freeradius/3.0/sites-enabled/default,其中的authorize模块就是他读取认证配置信息的地方,可以看到这里都是FALSE,说明都失败了,然后他提示User-Name=notfound,说明没找到用户名,随后返回了一个认证拒绝的信息。

FreeRadius支持Rest登录#

  1. 打开/etc/freeradius/3.0/sites-enabled/default文件
    在authenticate节点中加入Auth-Type
    Auth-Type rest{
        rest
    }
    
  2. 建立软链接
    cd /etc/freeradius/3.0/mods-enabled
    ln -s ../mods-available/rest .
    
  3. 在/etc/freeradius/3.0/users文件中,配置身份验证类型
    DEFAULT Auth-Type := rest
    
  4. 修改/etc/freeradius/3.0/mods-available/rest
    注释掉以下节点的内容
    connect_uri
    preacct
    accounting
    post-auth
    pre-proxy
    post-proxy
    编辑authorize节点
    authorize {
        uri = "http://loopbing.natapp1.cc/api/v1/tenant/4da114ce-e115-44a0-823b-d372114425d0/com_longgui_app_protocol_radius_server/radius_login/?action=authorize"
        method = 'post'
        body = 'json'
        data = '{ "username": "%{User-Name}", "password": "%{User-Password}" }'
    }
    编辑authenticate节点
    authenticate {
        uri = "http://loopbing.natapp1.cc/api/v1/tenant/4da114ce-e115-44a0-823b-d372114425d0/com_longgui_app_protocol_radius_server/radius_login/?action=authenticate"
        method = 'post'
        body = 'json'
        data = '{ "username": "%{User-Name}", "password": "%{User-Password}" }'
    }
    
    注意上面authorize和authenticate节点中的uri需要替换为龙归的radius服务端插件提供的登录地址
  5. 开启外网连通 修改文件(/etc/freeradius/3.0/clients.conf),这里的ipaddr是客户端本地ip
    client test_client {
        ipaddr = 111.19.83.95
        secret = testing123
    }
    
    同时打开云服务器的UDP协议的1812端口
  6. 启动radius服务
    sudo freeradius -X
    
    如果提示端口被占用可以先跑
    ps aux | grep radius 找到进程
    sudo kill -9 3452 杀掉进程
    
  7. 测试登录
    radtest admin admin localhost 1812 testing123
    

评论