Micro-Net-Hub 项目当前(v0.3.2)实现了一个 Radius 认证服务, 和一个简单的 LDAP Search/Bind 服务。
基于这两种认证协议的加持,
可以使用这两种认证方式去对接远程办公登录 (Ocserv, Anylink...)。
本文就项目和 Ocserv,Anylink 的对接展开,希望对有类似需求的伙伴提供些许思路。
背景
轻资产运行的互联网公司,有些是没有物理机房的,所有服务器资源都采用公有云服务。
除了暴露在公网上的产品,
一定还有些不便于公开的内部网站,仅允许员工使用的内部服务.
这个时候你可能就会用到//远程办公网络接入//,让公司员工通过//远程办公网络接入// 访问这些内部服务。
企业级 //远程办公网络接入//
我常用到的就是基于 "ietf-openconnect 协议" 实现的 Ocserv 和 Anylink 这两个 //远程办公网络接入// Server.
- Ocserv 算是一个老牌的,开源较早的项目, 性能较好。
- Anylink 则是一个相对较新的项目,虽然性能上,可能差一点。但是有图形管理界面,对管理员更友好。
对接
😂,语文一直不及格,词汇贫乏,就先用 ”对接“ 描述 //远程办公网络接入// Server 配置使用 Micro-Net-Hub 进行用户认证的过程。
对接就两步,有繁有简:
1. 启动 Micro-Net-Hub,包括依赖的 Mysql 和 Openldap。 (因为我实现的那个 ldap Search/Bind 功能还不足以覆盖所有场景。)
先按照代码仓库中的文档启动 Micro-Net-Hub,
Micro-Net-Hub --- 基于 go-ldap-admin 边学边练的二开项目 也有介绍。
记得修改配置文件 email 相关部分,方便您接收新建用户的账户信息。
指定可以用于 BIND 的 LDAP 账户角色 Keyword。
查看日志, 如果有以下几行,那就说明启动成功了。
2024-07-13 15:19:49 INFO radiussrv/radius.go:124 micro-net-hub/internal/radiussrv.NewRadiusServer New radius server on: 0.0.0.0:1812
2024-07-13 15:19:49 INFO dnssrv/dnssrv.go:24 micro-net-hub/internal/dnssrv.NewDnsServerUdp New dns server on UDP: 0.0.0.0:53
2024-07-13 15:19:49 INFO dnssrv/dnssrv.go:45 micro-net-hub/internal/dnssrv.NewDnsServerTcp New dns server on TCP: 0.0.0.0:53
2024-07-13 15:19:49 INFO ldapsrv/ldapsrv.go:16 micro-net-hub/internal/ldapsrv.NewLdapServer New Ldap server on: 0.0.0.0:1389
2024-07-13 15:19:49 INFO ldapsrv/ldapsrv.go:33 micro-net-hub/internal/ldapsrv.NewLdapServerWithTotpVerify New Ldap server With Totp Verify on: 0.0.0.0:1390
2024-07-13 15:19:49 INFO server/server.go:57 micro-net-hub/internal/server.NewGinServer New Gin server on: 0.0.0.0:9000
日志显示了监听 53/UDP -- DNS服务,1389/TCP -- LDAP服务,1390/TCP -- LDAP(密码加TOTP验证)服务,1812/UDP -- Radius服务,9000/TCP -- Micro-Net-Hub后台。
启动完成后,登录管理界面,创建角色、用户组和用户,准备后续登录 //远程办公网络接入//。
-
创建用于 bind 的用户角色 (用户没有 bind 角色,不能被用于 LDAP Bind)
-
创建组
-
创建用户
-
创建完用户收到的邮件
2. //远程办公网络接入// 配置关联 Radius/LDAP service, 启动后测试。
2.1 Ocserv
我们开始一直使用 Ocserv 提供 //远程办公网络接入// 服务,主要通过修改服务器上配置文件完成关联。
使用 yum/apt 安装完 Ocserv 之后,会有 /etc/ocserv 和 /etc/radcli 两个相关的配置目录自动创建。
修改以下配置文件。我贴出来了关键配置行。 Ocserv 使用 Radius 建立认证关联。
- /etc/radcli/servers
### "default-radius-secret" 是Micro-Net-Hub Radius 配置的默认密码。
micro-net-hub default-radius-secret
- /etc/radcli/radcli.conf
authserver micro-net-hub
servers /etc/radcli/servers
- /etc/ocserv/ocserv.conf
auth = "radius[config=/etc/radcli/radcli.conf,groupconfig=true]"
都配置完成后, 执行 systemctl start ocserv , 就配置成功了。
现在你就可以用一个已创建好的账户, 用 Anyconnect 客户端登录检测一下了。
密码是 Micro-Net-Hub 用户的密码直接跟上 TOTP 动态码。
比如:
用户名:example
密码: password
TOTPcode: 234567
Ocserv 使用 Radius 认证:
用户名: example
密码: password234567
2.2 Anylink
现在有个要求,我们希望 //远程办公网络接入// 提供的账户,可以针对不同的用户,下发不同的路由和 DNS。并方便管理。
Ocserv 可以实现上述需求,但是仍需要在配置文件上修改。
这个时候,有后台管理界面的 Anylink 实现,就极大程度的减轻了针对不同用户管理规则的烦恼。
说明:
- Anylink 可以使用 Radius 认证关联。
- Anylink 使用 LDAP 认证关联可以通过 LDAP Filter 进行分组。
为了实现统一管理用户,并且 //远程办公网络接入// 可以给不同用户下发不同路由/DNS 策略。
我们让 Micro-Net-Hub 把用户按需求分组, Anylink 按 LDAP 组进行 Filter 用户,并配置规则,就可以实现这个需求。
2.2.1 通过管理后台配置
到这里,您可能会有疑问,为什么不直接用 openldap 呢?
因为, 一般来说 //远程办公网络接入// 安全要求较高,登录密码加上 TOTP 验证是个不错的选择。
- 截图中的配置, 密码是 用户的密码
password。 - 如果您修改 LDAP服务器地址 为
127.0.0.1:1390, 密码就是 用户的密码直接跟上 TOTP 动态码password234567了。
2.2.2 最后也贴出一个 Radius 配置参考
瑕疵
我自己实现的 LDAP 仅仅实现了 Bind 和 Search 方法,主要是为了认证,并且适配了 Anylink 的登录。
其余常用的开源工具, 如 Gitlab, Nexus 等已经测试过了,配置和测试结果都在这里: Micro-Net-Hub -- LDAP认证服务支持的开源工具。
文中没有罗列的,如果要对接,可以参考已经测试过的先试一试,
还是不行的话,就是先用 Micro-Net-Hub 管理的 OpenLDAP, 或者留言给我。
Micro-Net-Hub 项目地址 https://github.com/bagechashu/micro-net-hub
最后,欢迎大家的批评和意见,谢谢啦