易雾君
Published on 2024-12-16 / 26 Visits
0
0

NAS党福音:近乎零成本优雅地实现家庭网络异地组网(五)

本篇重点来讲讲headscale的访问控制策略,headscale默认的配置是全放开,但它支持更高级的访问控制配置,非常有必要把这个功能利用起来。让我们为一个家庭网络构建一个示例用例,访问控制尽量遵循信息安全最小化原则,就拿我的家庭网络来说吧。

需求分析

假定我的家庭网络有两名成员,一个叫jmeade(Joseph Meade),一个叫lwilson(Lucas Wilson),jmeade为网络管理员,具有较多的设备管理权限,而lwilson则作为一名普通的用户,仅仅接入一些手机终端来访问家庭网络,jmeade和lwilson同时在异地时,可以进行互相访问对方的移动设备。

我的家庭异地信息资产主要就分两大类,一种为服务器资产,一种为移动终端。由于我的这类信息资产总量并不多,实际主要使用headscale的命名空间和组来标识分类设备,命名空间你可以理解为某个用户,服务器资产使用独立的命名空间,而移动终端以个人单位使用一个命名空间,允许它下面存在多个移动设备接入。整体资产访问控制规划如下。

源设备目标资产源标识目标标识描述
移动终端公网group:usersautogroup:internet允许移动终端可选路出口节点全局接管流量走家宽访问公网,方便应对不受信任公共网络环境安全上网需求。
移动终端172.16.15.1group:users固定IP形式允许移动终端访问自定义的dns服务
移动终端10.32.0.2group:users固定IP形式允许访问家庭web网关,由traefik统一管理web入口
移动终端10.32.0.3group:users固定IP形式允许访问堡垒机的ssh管理入口
家庭枢纽核心节点vpsheadscalevps允许核心节点对最近新买的vps进行网络连通性测试,其实主要是为了能让堡垒机接入而特意设置了此项,不然无法跨网访问,需确保核心节点与各设备有通信关系
家庭枢纽核心节点operateheadscaleoperate允许核心节点访问异地笔记本电脑
10.32.0.3vps固定IP形式vps允许堡垒机访问新买vps的ssh端口
移动设备移动设备group:usersgroup: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组包含了所有接入移动终端的命名空间。需要注意配置中目标必须跟上端口信息,全端口为星号。

命名空间创建如下

ca4757a3-f545-4151-87d4-6cbea48641eb.png

接入好的设备如下

b82c11fa-adc9-4d48-8c97-2c2798157705.png

按照如上访问控制规划分别标识各个设备对应的命名空间,在每个设备如下的位置进行修改

5f6fa1d2-7e1c-4293-9e36-ef245a1b5b93.png

从移动终端视角查看,这里拿我的ipad举例,它仅能查看到与他有直接访问关系的设备信息,比如他是无法查看vps这台机器的信息,而默认的策略是所有设备信息都能查看到的,这样就能达到合理的访问控制目的了。

9cda9964-b81b-4f13-a0b3-7b8df1d8a602.jpeg

发散思维

当然本系列方案对接入点很友好,既能从边界家庭宽带的外网轻松接入,也可从家庭wifi接入,众所周知,wifi其实很容易被别人非法接入蹭网,带来一些安全威胁,我们可以将headscale作为家庭wifi准入控制的基础设施,仅允许授权的设备访问家庭信息资产,各种高阶用法就靠各位发挥聪明的脑瓜自行开发了,我就抛个砖哈。

官方参考


Comment