4. 通过ACL设置虚拟局域网中不同用户设备互相隔离
由于各种原因,虚拟局域网的某些设备有被攻击风险,不能让它与安全的设备互访,所以需要通过ACL隔离这些设备。
首先,在headscale上新建一个用户:
docker exec -it headscale headscale users create fragile_dev
docker exec -it headscale headscale preauthkeys create --user <fragile_dev的用户ID> --reusable -e 3600d
同样记下headscale给出的AuthKey,等会儿用最上面的命令加入这个局域网。
最重要的一步:在Headscale ACL添加访问控制。
4.1 编写ACL hujson文件
在我的配置中,编辑vim /etc/derp/headscale/acl.hujson
{
// 1. 定义组(Headscale 用户名末尾必须带 @)
"groups": {
"group:vnet": ["fragile_dev@"]
},
// 2. 访问控制列表
"acls": [
// 规则 1:只允许 vnet 组(即 fragile_dev 用户下的服务器)互相通信
{
"action": "accept",
"src": ["group:vnet"],
"dst": ["group:vnet:*"]
},
// 规则 2:允许其它所有普通用户的设备在“同用户内部”互访,阻断跨用户访问
{
"action": "accept",
"src": ["autogroup:member"],
"dst": ["autogroup:self:*"]
}
]
}
然后:wq保存。
4.2 配置ACL文件路径
server_url: https://<SERVER_URL>
listen_addr: 0.0.0.0:8080
metrics_listen_addr: 0.0.0.0:9090
grpc_listen_addr: 0.0.0.0:50443
grpc_allow_insecure: true
# 【加在这里】配置 ACL 文件路径(顶层参数,无缩进)
# 注意这里要写容器内部对应的acl.hujson路径
acl_policy_path: /etc/headscale/acl.hujson
private_key_path: /var/lib/headscale/private.key
noise:
private_key_path: /var/lib/headscale/noise_private.key
...
4.3 检查
由于现在有在运行中的局域网,所以需要测试配置文件无误后再应用。保存以上文件之后,输入命令测试headscale配置YAML文件:docker exec -it headscale headscale configtest
输入命令测试ACL访问控制文件:
docker exec -it headscale headscale policy check --file /etc/headscale/acl.hujson
确认输出 Policy is valid. 后,运行 docker restart headscale。
评论(0)
暂无评论