# MoonDNS 安全边界

本文记录当前代码实现的输入检查和资源边界，不把测试覆盖等同于对所有攻击输入的安全保证。

## DNS 报文输入

- 压缩域名解码器检查指针目标是否在当前指针之前、是否位于报文范围内，并限制跳转数为 128，同时检测重复目标。
- Decoder 将截断、非法标签和恶意指针转换为 `DnsError`。安全回归用例覆盖自指、循环、越界、深度过长及短报文。
- UDP 接收缓冲区上限为 65,535 字节。无 EDNS0 时，响应按传统 512 字节 UDP 上限截断；请求提供 OPT 时使用协商 payload 上限。
- TCP 使用两字节大端长度帧。完整 payload 经既有纯 packet pipeline 处理；零长度帧、读写失败或畸形 DNS 消息会终止当前客户端连接，不应停止 listener。

## 服务资源边界

- TCP 并发连接默认上限为 64，可用 `--max-connections` 配置。
- 单个 TCP DNS payload 由 16 位长度字段限制在 65,535 字节内。
- UDP 畸形输入只记录累计丢弃数：首次及每 1,000 个报文输出一次，不记录完整 DNS 查询内容。
- 当前没有请求速率限制、源地址封禁、运行期 Zone 热重载或服务端认证；监听地址和防火墙仍由部署者决定。

## Zone 配置输入

Zone parser 校验所支持的字段数值、TTL、IPv6 表示及记录类型，并在解析错误中附带起始行号。`check`/`serve` 在启动前检查 apex SOA/NS、owner 边界和 CNAME 排他性。解析范围及未支持语法见 [scope.md](scope.md)。

## 验证边界

Native 回环测试验证畸形 UDP 后合法请求仍可处理、分块写入的 TCP 帧与连续帧处理、零长度帧只关闭当前客户端，以及端口 0 启动时 TCP/UDP 使用同一实际端口。协议单元测试提供针对性回归证据；项目不声称已经进行外部渗透测试、形式化验证、内存泄漏检测或生产流量压测。
