31 lines
No EOL
2.1 KiB
Markdown
31 lines
No EOL
2.1 KiB
Markdown
### 房间的服务器访问控制列表(ACLs)
|
||
|
||
在某些场景下,房间管理员可能希望阻止恶意或不受信任的服务器参与他们的房间。向房间发送一个 [m.room.server_acl](#mroomserver_acl) 状态事件,是在联邦层面上阻止服务器参与房间的有效方法。
|
||
|
||
服务器 ACL 也可用于使房间仅与有限的服务器集合联邦,或事后让房间不再与任何其他服务器联邦,这类似于在 [m.room.create](#mroomcreate) 事件中设置 `m.federate` 值。
|
||
|
||
{{% event event="m.room.server_acl" %}}
|
||
|
||
{{% boxes/note %}}
|
||
端口号不受支持,因为解析器无法确定应该匹配端口号还是 IP 地址字面量。此外,几乎不会有人只信任某个域上的特定端口而不信任其他端口,尤其是考虑到服务器主机可以轻易更换端口。
|
||
{{% /boxes/note %}}
|
||
|
||
{{% boxes/note %}}
|
||
CIDR 表示法不支持 IP 地址,因为 Matrix 并不鼓励使用 IP 作为服务器的身份标识。相反,提供了一个通用的 `allow_ip_literals` 选项用于全面禁止它们。
|
||
{{% /boxes/note %}}
|
||
|
||
#### 客户端行为
|
||
|
||
客户端除了发送该事件外,无需执行任何额外操作。客户端应在用户界面中描述对服务器 ACL 的更改,例如在时间线上展示。
|
||
|
||
客户端可以选择在拒绝服务器访问房间之前,先踢出受影响的用户,以帮助防止这些服务器参与,并向用户提供被排除在房间之外的反馈。
|
||
|
||
#### 服务器行为
|
||
|
||
当房间状态中存在 [m.room.server_acl](#mroomserver_acl) 事件时,服务器必须阻止被列入黑名单的服务器发送事件或参与房间。具体受影响的 API,在服务器-服务器 API 规范中有详细说明。
|
||
|
||
如果被拒绝的服务器仍然是房间成员,服务器仍应向其发送事件。
|
||
|
||
#### 安全性考量
|
||
|
||
服务器 ACL 只有在房间内的每个服务器都遵守它们时才有效。不遵守 ACL 的服务器仍可能允许被拒绝服务器发送的事件进入房间,并将其泄露给房间内的其他服务器。要在房间有效执行 ACL,还应在房间内拒绝那些不遵守 ACL 的服务器。 |