交互式授权
本章主要讲述 MSST-Net 的交互式授权机制。
什么是交互式授权
交互式授权是 MSST-Net 在没有匹配防火墙规则时的默认处理机制。
当某设备尝试访问本机的某个端口,但现有规则均不匹配时,系统不会直接拒绝,而是向控制器发送一条授权请求,由用户实时决定是否放行。
触发条件
交互式授权并不会对所有未知流量都触发。只有来自以下设备的连接请求才会触发授权通知:
| 情形 | 说明 |
|---|---|
| 当前用户的其他设备 | 同一账号下的设备之间默认可触发 |
| 近期通信过的设备 | 与本机有过近期通信记录的设备 |
| 规则中明确引用的设备 | 防火墙规则中出现过该设备 ID 的连接 |
| 房间内的成员设备 | 在房间模式下,房间内的所有成员 |
不满足上述条件的连接请求会被静默丢弃,不会触发任何通知。
授权请求内容
触发交互式授权时,控制器会收到以下信息:
- 来源设备 ID
- 来源设备显示名称(若已知)
- 所属用户信息(若已知)
- 目标协议(TCP / UDP)
- 目标端口
- 服务名称(若为已知服务,如 Minecraft、SSH 等)
授权决定
用户可在控制器中做出以下四种决定之一:
| 决定 | 含义 |
|---|---|
| 允许一次 | 临时放行该连接,10 分钟后自动失效 |
| 始终允许 | 永久放行,自动创建允许规则 |
| 拒绝一次 | 临时拒绝该连接,10 分钟后自动失效 |
| 始终拒绝 | 永久拒绝,自动创建拒绝规则 |
选择"始终允许"或"始终拒绝"后,系统会自动生成对应的防火墙规则并持久保存。
数据包缓冲
交互式授权对 TCP 和 UDP 的处理方式有所不同。
TCP
触发授权请求时,系统会立即向发送方回送一个 TCP RST,通知对端连接被拒绝(ECONNREFUSED)。
若用户选择允许,对端可在授权通过后重新发起连接,连接正常建立。
若用户选择拒绝,后续连接将被规则匹配并拒绝。
之所以采用 RST 而非缓冲,是因为 TCP 连接建立依赖握手时序——缓冲 SYN 包再重放往往导致对端应用已超时放弃连接。立即发送 RST 可让对端迅速得到明确反馈,并在授权通过后第一时间重试。
UDP
触发授权请求时,触发该请求的数据包会被暂时缓冲(最多缓冲 32 个包或 256 KB)。
若用户选择允许,缓冲的数据包会在授权后立即补发至本机,连接可无缝继续。
若用户选择拒绝,缓冲的数据包会被丢弃。
超时机制
授权请求在发出后 60 秒内未做出响应时,视为超时。
超时后,缓冲的数据包会被丢弃,访问日志中该请求的状态会更新为静默拒绝。
与防火墙规则的关系
交互式授权是防火墙规则的补充机制,两者共同构成完整的访问控制体系:
- 规则匹配优先:若有匹配的防火墙规则,直接按规则执行,不触发交互式授权
- 无规则时触发:当没有任何规则匹配时,才进入交互式授权流程
- 授权可转化为规则:选择"始终允许/拒绝"后,系统自动生成规则,后续相同连接不再触发授权