本篇重点来讲讲headscale的访问控制策略,headscale默认的配置是全放开,但它支持更高级的访问控制配置,非常有必要把这个功能利用起来。让我们为一个家庭网络构建一个示例用例,访问控制尽量遵循信息安全最小化原则,就拿我的家庭网络来说吧。
需求分析
假定我的家庭网络有两名成员,一个叫jmeade(Joseph Meade),一个叫lwilson(Lucas Wilson),jmeade为网络管理员,具有较多的设备管理权限,而lwilson则作为一名普通的用户,仅仅接入一些手机终端来访问家庭网络,jmeade和lwilson同时在异地时,可以进行互相访问对方的移动设备。
我的家庭异地信息资产主要就分两大类,一种为服务器资产,一种为移动终端。由于我的这类信息资产总量并不多,实际主要使用headscale的命名空间和组来标识分类设备,命名空间你可以理解为某个用户,服务器资产使用独立的命名空间,而移动终端以个人单位使用一个命名空间,允许它下面存在多个移动设备接入。整体资产访问控制规划如下。
源设备 | 目标资产 | 源标识 | 目标标识 | 描述 |
---|---|---|---|---|
移动终端 | 公网 | group:users | autogroup:internet | 允许移动终端可选路出口节点全局接管流量走家宽访问公网,方便应对不受信任公共网络环境安全上网需求。 |
移动终端 | 172.16.15.1 | group:users | 固定IP形式 | 允许移动终端访问自定义的dns服务 |
移动终端 | 10.32.0.2 | group:users | 固定IP形式 | 允许访问家庭web网关,由traefik统一管理web入口 |
移动终端 | 10.32.0.3 | group:users | 固定IP形式 | 允许访问堡垒机的ssh管理入口 |
家庭枢纽核心节点 | vps | headscale | vps | 允许核心节点对最近新买的vps进行网络连通性测试,其实主要是为了能让堡垒机接入而特意设置了此项,不然无法跨网访问,需确保核心节点与各设备有通信关系 |
家庭枢纽核心节点 | operate | headscale | operate | 允许核心节点访问异地笔记本电脑 |
10.32.0.3 | vps | 固定IP形式 | vps | 允许堡垒机访问新买vps的ssh端口 |
移动设备 | 移动设备 | group:users | group:users | 允许移动设备之间互相访问 |
配置实施
整理反馈到具体的acl配置文件里如下,本系列项目的配置我已经给大家创建好了,文件位置为项目根目录下headscale/config/acl.json
,各位根据自己需求修改调试这个文件即可,修改之后重启server容器即可生效:
{
"groups": {
"group:users": ["jmeade", "lwilson"],
"group:headscale": ["headscale"],
"group:vps": ["vps"],
"group:operate": ["operate"],
"group:guest": ["guest"]
},
"acls": [
{
"action": "accept",
"src": ["group:users"],
"dst": [
"autogroup:internet:*",
"172.16.15.1:*",
"10.32.0.2:*",
"10.32.0.3:22"
]
},
{
"action": "accept",
"src": ["headscale"],
"proto": "icmp",
"dst": ["vps:*", "operate:*"]
},
{
"action": "accept",
"src": ["10.32.0.3/32"],
"dst": [
"vps:2222"
]
},
{
"action": "accept",
"src": ["group:users"],
"dst": ["group:users:*"]
}
]
}
这里解释下autogroup:internet为内置的资产标识,专指因特网公网网段。users组包含了所有接入移动终端的命名空间。需要注意配置中目标必须跟上端口信息,全端口为星号。
命名空间创建如下
接入好的设备如下
按照如上访问控制规划分别标识各个设备对应的命名空间,在每个设备如下的位置进行修改
从移动终端视角查看,这里拿我的ipad举例,它仅能查看到与他有直接访问关系的设备信息,比如他是无法查看vps这台机器的信息,而默认的策略是所有设备信息都能查看到的,这样就能达到合理的访问控制目的了。
发散思维
当然本系列方案对接入点很友好,既能从边界家庭宽带的外网轻松接入,也可从家庭wifi接入,众所周知,wifi其实很容易被别人非法接入蹭网,带来一些安全威胁,我们可以将headscale作为家庭wifi准入控制的基础设施,仅允许授权的设备访问家庭信息资产,各种高阶用法就靠各位发挥聪明的脑瓜自行开发了,我就抛个砖哈。
官方参考