### 房间的服务器访问控制列表(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 的服务器。