网络访问控制策略(NACP)
1 介绍
飞网零信任的网络访问控制策略(即NACP,Network Access Control Policy),允许您自行决定飞网中的用户或设备间的访问关系。
飞网NACP默认“默认拒绝”任何访问,只有在NACP中明确允许的策略才会被允许,否则访问会被拒绝。
初始创建飞网网络时,为了方便用户的使用,飞网采用“全部允许”的初始访问策略({"源地址": ["任意"],"目的地址": ["任意:任意"]
),允许所有接入飞网网络的设备相互访问。当需要限制访问时,可以通过“控制面板”的“访问控制”编辑访问控制规则。
访问规则可以利用用户组
和设备组
来简化规则的数量。组可以将多台设备归入一组并统一管理;设备组
可以按设备用途分配,实现基于属性的访问控制。用户组
和设备组
结合可以实现强大的基于角色的访问控制。
飞网会将所有者与管理员定义的访问规则推送到网络中的所有设备,并由每个设备本地实施规则匹配和执行。
只有所有者、管理员或网络管理员才能编辑飞网网络访问控制策略。
2 NACP的总体结构
飞网的访问控制策略使用的是一个JSON
类型的文本文件,基础格式如下所示:
{
"用户组": {"设计用户组":["张伟"],...},
"节点": {"web节点":"192.168.1.1",...},
"设备组":{"记录器设备组": ["张三"],...},
"允许访问策略": [{..规则1..},{..规则2..},...],
"ssh策略": [{..规则1..},{..规则2..},...],
"自动批准": {"子网网关":{},"出口网关":[]},
"节点属性": [],
"禁用ipv4": false,
"随机客户端端口号": false
}
3 访问控制策略文件包含几个配置段,详细如下:
3.1 用户
用户使用个人的用户标识
,您可以在源地址和目的地址等字段中指定用户标识,用户标识
可在控制面板中用户网络的菜单栏中查看及修改。
3.2 用户组
使用用户组
,可以便于对同组用户及同组用户的设备配置允许访问控制策略。注:同一个用户可以同时隶属于两个用户组
,但一个用户组不能嵌套另一个用户组。
{
······
"用户组": {
"营销用户组": [
"张三",
"李四"
],
"开发用户组":[
"张伟"
]
}
······
}
3.2.1 集合
集合
是一个特殊的组,它会自动包含具有相同属性的用户、用户名或目的地址,然后您可以在访问规则中使用它们。
作为的类型 | 集合名称 | 说明 |
---|---|---|
目的地址 | 出口网关集合 | 用于允许任何用户通过飞网中的任何出口节点进行访问。 |
目的地址 | 个人集合 | 用于允许与源用户身份相同的任何用户进行访问。 |
源地址 、目的地址 、设备组 、自动批准 | 成员集合 | 用于允许作为飞网的直接成员的任何用户访问。 |
源地址 、目的地址 、设备组 、自动批准 | 所有者集合 | 用于允许访问飞网中角色为所有者 的用户。 |
源地址 、目的地址 、设备组 、自动批准 | 管理员集合 | 用于允许访问飞网中角色为管理员 的用户。 |
源地址 、目的地址 、设备组 、自动批准 | 审计员集合 | 用于允许访问飞网中角色为审计员 的用户。 |
源地址 、目的地址 、设备组 、自动批准 | 网络管理员集合 | 用于允许访问飞网中角色为网络管理员 的用户。 |
源地址 、目的地址 、设备组 、自动批准 | 设备管理员集合 | 用于允许访问飞网中角色为设备管理员 的用户。 |
作为SSH 连接登录的用户 | 非root集合 | 用于允许飞网SSH访问非root的任何用户 |
3.3 节点
给设备IP地址(或网络范围)指定一个别名作为节点名
,该节点名需要以节点
结尾,你可以在策略中用该节点名
代替该IP。
{
.....
"节点": {
"dns服务器节点": "100.1.2.3",
"研发区节点": "10.0.0.0/8"
}
.....
}
3.4 允许访问策略
默认访问规则是拒绝的,也就是黑名单模式,只有在访问规则明确允许的情况下设备之间才能通信。格式如下:
{
.....
"允许访问策略":[
{
"源地址": [..源地址集合..],
"目的地址": [..目的地址..],
"协议": "tcp", // 可选,例如:tcp、udp..
}
]
.....
}
3.4.1 源地址
源地址
列表中的每个元素可以是以下元素之一:
类型 | 示例 | 含义 |
---|---|---|
任意 | 任意 | 对来源无限制 |
用户标识 | 张三 | 张三 用户身份的所有设备 |
用户组 | 营销用户组 | 包含开发组下的所有用户 |
飞网IP | 100.14.22.3 | 仅包含拥有给定飞网IP的设备 |
子网网段范围 | 192.168.1.0/24 | 给定子网范围内的任何IP |
节点 | 研发区节点 | 研发区节点 字段中定义的IP或网段 |
设备组 | 产品设备组 | 包含分配产品设备组 的所有设备 |
集合 | 成员集合 、管理员集合 | 包含具有相同属性的用户、用户名或目的地址的设备 |
3.4.2 源地址
目的地址
字段,表示访问目标列表,列表中的每个元素的格式为:<目的地址>:<端口>
来表示。
类型 | 示例 | 含义 |
---|---|---|
任意 | 任意 | 无限制(即所有访问目标) |
用户标识 | 张三 | 张三 用户身份的所有设备 |
用户组 | 营销用户组 | 营销用户组 下的所有用户 |
飞网IP | 100.14.22.3 | 仅包含拥有给定飞网IP的设备 |
子网网段范围 | 192.168.1.0/24 | 给定子网范围内的任何IP |
节点 | 研发区节点 | 研发区节点 字段中定义的IP或网段 |
设备组 | 产品设备组 | 包含分配产品设备组 的所有设备 |
集合 | 成员集合 、管理员集合 | 包含具有相同属性的用户、用户名或目的地址的设备 |
3.4.3 协议
协议
字段可选,可用于指定规则适用的协议。如果没有协议,则访问规则适用于所有TCP和UDP流量。 您可以指定IANA 协议编号,或者填写受支持的协议名称的别名,以下是受支持的协议名称的别名列表:
协议名称 | 别名 | IANA 协议编号 |
---|---|---|
互联网组管理协议(ICMP) | igmp | 2 |
IPv4封装 | ipv4 | 4 |
传输控制协议(TCP) | tcp | 6 |
外部网关协议(EGP) | egp | 8 |
任何私人内部网关 | igp | 9 |
用户数据包协议(UDP) | udp | 17 |
通用路由封装协议(GRE) | gre | 47 |
封装安全负载(ESP) | esp | 50 |
身份认证头协议(AH) | ah | 51 |
流控制传输协议(SCTP) | sctp | 132 |
3.4.4 端口
端口
取值范围,可以是一下任何类型:
类型 | 示例 |
---|---|
任意端口 | 任意 |
单个端口 | 22 |
多个端口 | 80,443 |
端口范围 | 1000-2000 |
3.5 设备组
设备组
定义了可以应用于设备的设备组
,以及允许分配和使用的用户列表,组名需要以设备组
结尾。设备组
代替了用户标识,也就是说,此时设备在飞网中的身份,已经不属于某个特定用户,而是属于分配给它的这个设备组
,针对用户的访问控制规则,将不再适用于配置了该标签的设备,而取决于该标签的访问控制策略。
{
.....
"设备组": {
"安全服务器设备组": [ // 指定的‘设备组’名称
"安全用户组", // 允许该用户组下的用户分配使用该设备组
"张三" // 允许用户分配使用该设备组
]
"网络服务器设备组": [
"设计用户组"
],
},
.....
}
3.6 ssh策略
ssh策略
字段用于控制源地址
设备可以通过飞网建立SSH连接目的地址
的设备(gmzta ssh [用户@]<主机> [参数...]
),以及限制登录连接的登录用户
以下示例中表示每个成员可以使用ssh连接自己的设备,且授权时间12小时后需要重新授权。
{
.....
"ssh策略": [
{
"类型": "检查", // 可选类型‘检查’ 或 ‘允许’
"源地址": ["成员集合"],
"目的地址": ["个人集合"],
"登录用户":["非root集合"],
"检查周期": "12h", // 检查周期默认为12小时
"启用操作记录": false, // 可选,默认为 false
}
]
.....
}
类型
ssh连接的检查类型,‘检查’ 或 ‘允许’。检查:ssh连接时,授权时间超过指定检查周期
后需要重新授权;允许:ssh连接不需要经过授权。源地址
连接的源地址,可以是用户标识、用户组、设备组、集合。目的地址
连接的目的地址,用户标识、用户组、设备组、集合。注意:与允许访问策略
不同的是不能指定端口,默认为22
端口。登录用户
允许通过gmzta ssh
连接登录的用户名,例如:root
非root集合
检查周期
当检查类型为‘检查’时,表示授权时间超过指定检查周期
后需要重新授权,此时需要重新授权成功后才能继续连接。’
3.7 禁用ipv4
表示飞网客户端在进行设备间通信时将同时使用IPv4和IPv6。如果设置为true,则只使用IPv6进行连接。默认为false
。
3.8 随机客户端端口号
表示飞网客户端在连接设备时将使用固定的端口进行通信。如果设置为true,则每次连接会使用随机端口。默认为false
。
3.9 允许访问策略测试
测试部分允许您为访问控制规则编写断言,这些断言将在每次更改访问控制策略文件时进行检查。如果有断言未通过,新的访问控制策略文件将不被允许保存。
{
.....
"允许访问策略测试": [
{
"源地址": "张三",
"允许": ["主机-1节点:20", "主机-2节点:80"],
"禁止": ["10.10.10.1:22"]
}
],
.....
}
• 源地址
字段指定正在测试的用户身份。这可以是用户标识、组、ACL标签或映射到IP地址的主机。
• 测试用例将从对应的用户、组、标签或主机的角度运行,以检查ACL是否按预期工作。
• 允许
和禁止
字段分别指定ACL规则应接受或拒绝的目标。
3.10 ICEMap
自定义飞网的ICE中继服务器
"ICEMap": {
"OmitDefaultRegions": false,
"Regions": {
"901": {
"Nodes": [
{
"Name": "sx",
"RegionID": 901,
"HostName": "icesx.gmzta.com",
"ICEPort": "44380",
"STUNPort": "43478",
"STUNOnly": false
}
],
"RegionID": 901
}
}
}
4 配置访问控制策略
您可以访问飞网控制面板中的-访问控制进行策略修改。页面采用编辑表单的形式编辑访问控制策略
,同时还可以点击顶部工具栏
中的修改变化
直接对策略文本进行编辑。
注意:
访问控制策略
仅允许角色为所有者
、管理员
、网络管理员
的用户进行修改,且访问控制页面不对个人团队
开放,个人团队
默认使用的策略为“全部允许”({"源地址": ["任意"],"目的地址": ["任意:任意"]}
)。
4.1 使用表单形式编辑
4.1.1 添加一个用户组
- 在飞网控制面板-访问控制页面中,可以看到
用户组
面板,其中显示的内容为已经添加的用户组,暂无数据
则表示您还未添加用户组
,点击面板
中的添加
按钮,或者点击顶部工具栏
中的添加用户组
按钮打开新增用户组
对话窗口。如图所示:
- 需要输入
组名
和成员
,每个组名需要以‘用户组’结尾(已经自动添加后缀),且不能含有其他类型关键字,如:节点、设备组、集合、任意。例如:需要添加组名为销售用户组
的用户组,输入销售
即可。 - 每个
用户组
可以包含多个成员,点击成员
下方+添加一条记录
按钮可以继续添加。只能填写用户标识,为了避免混淆成员身份,用户组不能包含其他用户组。 - 点击右下角
保存
按钮,即可完成用户组的添加。
4.1.2 添加一个设备组
- 在飞网控制面板-访问控制页面中,可以看到
设备组
面板,其中显示的内容为已经添加的设备组,暂无数据
则表示您还未添加设备组
,点击面板
中的添加
按钮,或者点击顶部工具栏
中的添加设备组
按钮打开新增设备组
对话窗口。如图所示:
- 需要输入
设备组名
和成员
,每个组名需要以‘设备组’结尾(已经自动添加后缀),且不能含有其他类型关键字,如:节点、设备组、集合、任意。例如:需要添加组名为销售设备组
的用户组,输入销售
即可。 - 每个
设备组
可以包含多个成员,点击成员
下方+添加一条记录
按钮可以继续添加。只能填写用户标识,或者用户组。 - 点击右下角
保存
按钮,即可完成设备组的添加。
4.1.3 添加一个节点
- 在飞网控制面板-访问控制页面中,可以看到
节点
面板,其中显示的内容为已经添加的节点,暂无数据
则表示您还未添加节点
,点击面板
中的添加
按钮,或者点击顶部工具栏
中的添加节点
按钮打开新增节点
对话窗口。如图所示:
- 需要输入
节点名
和IP
,每个组名需要以‘节点’结尾(已经自动添加后缀),且不能含有其他类型关键字,如:节点、设备组、集合、任意。例如:需要添加组名为节点设备组
的用户组,输入节点
即可。 - 可以填写设备IP、子网IP,可以是
单个IP
范围
,例如:192.168.1.1、192.168.1.0/24 - 点击右下角
保存
按钮,即可完成节点的添加。
4.1.4 添加自动批准
在飞网控制面板-访问控制页面中,可以看到
自动批准
面板,其中分为出口网关
和子网网关
两种类型。
添加出口网关自动批准:
- 在飞网控制面板-访问控制页面中,可以看到
自动批准
面板,点击面板
中的添加
按钮,类型选择出口网关
目标集合
可以包含多个,点击目标集合
下方+添加一条记录
按钮可以继续添加。可填写用户标识、用户组、设备组、集合。- 点击右下角
确认编辑
按钮,即可完成出口网关的编辑。
添加子网网关自动批准:
- 在飞网控制面板-访问控制页面中,可以看到
自动批准
面板,点击面板
中的添加
按钮,类型选择子网网关
。 - 填写网关地址,内容为开启子网网关的网关地址。
目标集合
可以包含多个,点击目标集合
下方+添加一条记录
按钮可以继续添加。可填写用户标识、用户组、设备组、集合。- 点击右下角
保存
按钮,即可完成子网网关的添加。
4.1.5 添加允许访问策略
- 在飞网控制面板-访问控制页面中,可以看到
允许访问策略
面板,点击默认策略
则会自动添加一条所有设备之间访问的策略({"源地址": ["任意"],"目的地址": ["任意:任意"]}
);点击添加
按钮,打开添加允许访问策略
对话框。
访问源地址
为必填信息,可以包含多个,点击访问源地址
下方+添加一条记录
按钮可以继续添加。可填写任意、用户组、子网网关、设备组、节点、用户标识、飞网IP、集合。目的地址
格式为目的:端口号
均为为必填信息,点击目的地址
下方+添加一条记录
按钮可以继续添加。
- 目的地址可选类型:任意、用户组、子网IP、设备组、节点、用户标识、飞网IP、集合。
- 端口号可选类型:任意、单个(例如:22)、多个(例如:80,443)、范围(例如:22-80)
- 除此之外还可以指定访问策略面向的协议,可以直接指定
IANA IP 协议号
,或者填写受支持的协议名称的别名。详情参考3.4.3 协议
- 点击右下角
保存
按钮,即可完成允许访问策略的添加。
4.1.6 添加SSH策略
- 在飞网控制面板-访问控制页面中,可以看到
SSH策略
面板,点击默认策略
则会自动添加一条仅允许个人连接自己的设备的策略;点击添加
按钮,打开添加SSH策略
对话框。
类型
为SSH连接授权类型(必选),允许
或检查
,详情参考3.6 ssh策略
。访问源地址
可以包含多个(必填),点击访问源地址
下方+添加一条记录
按钮可以继续添加。可填写用户标识、用户组、设备组、集合。目的地址
可以包含多个(必填),点击目的地址
下方+添加一条记录
按钮可以继续添加。可填写任意、用户组、子网IP、设备组、节点、用户标识、飞网IP、集合。SSH登录用户
目标主机的用户名(必填),点击SSH登录用户
下方+添加一条记录
按钮可以继续添加。飞网将仅使用已经存在的账户进行登录,不会创建新账户。例如:root、非root集合。启用会话记录
(可选),当勾选启用会话记录
时,还需要选择记录器
用于记录会话日志,仅允许设备组
内的设备当做记录器。- 点击右下角
保存
按钮,即可完成允许SSH策略的添加。
4.2 使用编辑器形式编辑/撤销更改/修改变化
- 点击顶部
工具栏
中的修改变化
按钮,即可打开编辑器。不仅可以查看访问策略的修改变化,还可以直接对访问策略文本进行编辑。 - 左侧为更改的
旧数据
(只读),右侧为当前的新数据
可以直接进行编辑修改。 - 当数据发生修改时,该窗口会按照每行显示更改差异,存在差异的每行中间会显示一个
→
标识,点击可以撤销更改
。
- 关闭窗口后,如果当前页面发生更改,需要点击底部的
提交修改
按钮提交修改,否则修改将不会生效。参考4.3 提交修改/保存
4.3 提交修改/保存
- 当表单页面发生修改时,数据不会立即生效,您还可以继续添加或者删除其他数据,待添加完成后点击底部
提交修改
按钮提交最终的修改。 - 如果想要查看修改的内容,参考
4.2 使用编辑器形式编辑/...
5 飞网访问控制策略示例:
{
// 对设备IP(或网段)设备设定的别名
"节点": {
"dns服务器节点": "100.1.2.3",
"研发区节点": "10.0.0.0/8",
"sql服务器节点": "100.2.3.4"
},
// 添加“安全用户组”与“员工用户组”
"用户组": {
"安全用户组": [
"李四",
"王五"
],
"员工用户组": [
"李四",
"张三",
"王五",
"赵六"
],
"设计用户组": [
"张伟"
]
},
"设备组": {
"soc设备组": ["张三"],
"安全设备组": ["安全用户组"],
"websites设备组": ["设计用户组"]
},
"允许访问策略": [
// “张三”用户下的所有设备可以访问节点名为“dns服务器节点”的设备
{
"源地址": ["张三"],
"目的地址": ["dns服务器节点:任意"]
},
// “安全用户组”的用户可以访问所有的HTTPS服务器以及节点名为"研发区节点"的所有设备
{
"源地址": ["安全用户组"],
"目的地址": [
"任意:443",
"研发区节点:任意"
]
},
// “员工用户组”的用户可以通过HTTP访问“websites设备组”设备的80端口
{
"源地址": ["员工用户组"],
"目的地址": ["websites设备组:80"],
"协议": "tcp"
},
// “员工用户组”的用户仅允许TCP协议访问“设计用户组”用户的所有设备
{
"源地址": ["员工用户组"],
"目的地址": ["设计用户组:任意"],
"协议": "tcp"
},
// 用户“张三”和“设计用户组”的用户能访问设备组为“soc设备组”的设备
{
"源地址": ["张三", "设计用户组"],
"目的地址": ["soc设备组:任意"]
},
// 所有设备组为“soc设备组”的用户的设备之间可以互相访问.
{
"源地址": ["soc设备组"],
"目的地址": ["soc设备组:任意"]
},
// 每个用户可以访问自己设备的22端口。
{
"源地址": ["成员集合"],
"目的地址": ["个人集合:22"]
}
],
"ssh策略": [
{
// 所有的飞网用户都可以用户通过SSH连接到自己的设备,登录非root用户
"类型": "允许",
"源地址": ["成员集合"],
"目的地址": ["个人集合"],
"登录用户": ["非root集合"]
}
],
"禁用ipv4": false,
"随机客户端端口号": false
}