0x00 背景
客户原有深澜认证(学校及企业用户较多)系统实现全单位的互联网wifi及有线终端的实名密码认证,现购置了深信服上网行为管理一台,实现对全单位互联网用户的行为审计管理及流控,AC以网桥模式部署在出口主干上,其他网络环境不多做描述。
0x01 思路
由于之前在上一个项目相同场景下,参照社区“SANGFOR_AC_SG_v11.0_深澜单点登录测试指导书”去实施,最终却导致和400一起排查各种问题才解决顺利解决。很明显,这种依靠第三方厂家单一开放的接口对接的方式,由于众所周知的原因,维护和更新都会比较慢,相应的BUG数量及处理时间都会随着版本更新增加。
难道就没有更有效稳定的方式吗?
接着通过查阅深澜认证的部署文档发现,深澜认证系统有一个核心MYSQL数据库,里面记录着所有用户及上线信息。随即想到我们AC不是有数据库认证吗,这样直接查询认证信息然后同步过来不是更稳定吗?
0x02 验证
通过联系深澜的工程师,获取到相应数据库的地址及查询权限账号,通过数据库工具查看数据库
我们可以看到2个重要的表单,online_radius和users
分别查看
可以看到online_radius存储的是实时的上线用户及相关信息。
其中user_name为深澜认证的用户登录账号,IP为在线IP,还有MAC等信息。
可以看到users表中存储的是用户的详细信息。
其中user_name为深澜认证的用户登录账号,user_real_name为真实备注姓名,还有手机号等信息。
既然数据库结构都清晰了,下面就轮到AC的设置了
配置认证服务器
“用户认证与管理”---“用户认证”---“认证服务器”
点击“新增”选择“数据库服务器”
数据库类型:MYSQL
服务器地址:深澜数据库地址
用户名密码:与深澜工程师联系,获取数据库服务器的登录查询权限的账号
数据库名称:与深澜工程师联系,深澜4K数据库名为srun4k(小写)
测试有效性,提交
配置单点登陆查询语句
“用户认证与管理”---“用户认证”---“单点登陆”------数据库认证
输入查询语句
select user_name,ip from online_radius;
点击测试有效性,可以查询到实时在线的用户名及IP地址信息
测试配置认证策略
“用户认证与管理”---“用户认证”---“认证策略”
认证方式:单点登陆
单点登陆失败的用户:不需要认证,自动上线
由于深澜认证允许多终端使用同一账号登陆,因此勾选允许多人同时使用
查看在线用户信息,可以看到相关用户上线。
0x03 新的需求
当把在线用户结果信息,呈现给客户查看时,客户却说这不是他想要的效果,他希望用户名呈现的是每个用户的真实姓名,初一听心里一想那不很简单嘛,改个查询的对象不就行了嘛,不就是把user改成user_real_name就行了,结果一试却发现不能成功,仔细查看回想之前的数据库分析发现原来online_radius这个表单里没有user_real_name这一列,user_real_name只存在users这个表单里。
由于AC设备的方式只能通过一条语句查询数据库,且固定第一列为用户名,第二列为IP,那么我们的语句就是需要一条语句实现跨表查询并呈现结果,通过查询相关资料在数据库测试查询语句 :
select A.user_real_name,B.ip from users A, online_radius B where A.user_name=B.user_name;
查询结果符合期望
更改AC数据库查询语句并测试
测试结果有效
确认提交后,进入测试用户组删除已有用户,让用户重新认证查看在线用户列表,结果符合客户要求。
0x04 结论
如果采用社区原有配置文档的方式对接,明显不能满足本次项目的客户要求,也反映了作为工程师我们需要理解配置的基本原理,才能更加灵活的去面对解决客户变化的需求。
在进行数据查询测试时,一定要仔细谨慎审核语句,避免破坏数据库完整性,同时在测试查询时加入限制语句,避免影响数据库性能。
AC的现有的数据认证方式同步内容比较简单方式比较单一,也希望研发后期能丰富更多功能,实现灵活的与各种平台系统对接。