rlm_rest 模块默认是不会安装的,需要手动编译安装 freeradius 服务,编译安装freeradius-rest 模块时,需要进入 /src/modules/rlm_rest 模块执行 ./configure 检查是否确少依赖包,安装完对应的依赖包,否则会导致 freeradius 安装成功,而 rlm_rest 模块编译失败的问题
配置rest模块通过软连接启用rest模块
ln -s /usr/local/etc/raddb/mods-available/rest /usr/local/etc/raddb/mods-enabled/rest修改rest相关配置
vim /usr/local/etc/raddb/mods-enabled/rest //设备认证服务网关 connect_uri = "http://127.0.0.1:2017" //设置转发参数和具体URL authorize { uri = "${..connect_uri}/user/authorize" method = 'post' body = 'json' data = '{"user_name":"%{User-Name}","eap_message":"%{EAP-Message}","mac_id":"%{Calling-Station-Id}"}' tls = ${..tls} }修改default文件,认证流程添加rest模块
vim /usr/local/etc/raddb/sites-enabled/default authorize{ rest } authenticate{ Auth-Type rest{ rest } } accouting{ rest }重启 freeradius认证服务 即可实现认证请求的转发
实验验证环境搭建:需要一台UOS客户端两台(一台设备信息已录入,一台设备信息未录入,安装经过改造后的802.1X协议的客户端),一台UOS服务端(编译安装freeradius),一台支持802.1X协议交换机(设置端口开启802.1X协议认证)
场景一:测试 账号密码正确+设备信息未登记 场景如图所示:
客户端2发起802.1X认证请求,账号为:yangyi,密码为:testing,设备摘要信息为:a4de2da2c87361550d24110dd18eb4c021e20db461102e677683aab5490e3484,在 EAP-MD5 请求 Response MD5-Challenge 节点,将经过加密后的摘要信息发送到设备认证服务器端,因为此设备摘要信息未在设备认证服务器端登记,所以交换机响应 Failure 状态,用户入网失败
场景二:测试 账号密码正确+设备信息已登记 场景如图所示:
客户端1发起802.1X认证请求,账号为:yangyi,密码为:testing,设备摘要信息为:21e20db461102e677683aab5490e3484a4de2da2c87361550d24110dd18eb4c0,在EAP-MD5 请求 Response MD5-Challenge 节点,将经过加密后的摘要信息发送到设备认证服务器端,因为此设备摘要信息已在设备认证服务器端登记,所以交换机响应 Success 状态,用户入网成功
小结以上介绍了802.1X基于端口访问控制协议的相关技术,提出并实现基于账号密码+设备信息双重认证的方案,以及对802.1X协议的扩展。整个系统是在Linux平台上基于802.1X认证的开源客户端工具和服务器端软件FreeRADIUS进行新功能开发和改进,并最终实现了用户账号密码认证和设备信息双重认证的功能。所实现的系统在用户发起入网请求时,客户端软件会自动获取终端设备信息,并生成设备信息摘要,和经过MD5加密后密码,一起发送到FreeRADIUS认证服务器,使得FreeRADIUS服务器在完成对用户身份验证的同时也可以完成对终端设备信息的可信认证。最后的测试结果显示,该方案可以满足可信网络连接的基本功能需求,将来可以实际应用于可信网络的接入控制。
但目前的该方案也存在以下一些不足之处:
EAP—MD5协议目前只能支持有线网络接入认证,对于无限网络接入认证,还需要进一步的研究
设备扩展信息虽然通过RSA非对称加密后的密文进行传输,但公钥保存在客户端,可能存在泄漏的风险,可以考虑对公钥进行密码保护,或者需要管理员权限才可以读取到公钥信息,或者直接由服务端下发证书给客户端的方案
参考资料freeradius官方文档
freeradius源码
基于golang的802.1x客户端命令行工具