allowlist

package
v0.1.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 4, 2026 License: Apache-2.0 Imports: 6 Imported by: 0

Documentation

Overview

Package allowlist 为主机名与 IP 地址提供拉取白名单,供 ofd-server 使用。

服务会按调用方给的 URL 拉取待转换的文档,也会按预注册的地址投递通知。这两个 方向如果不做限制,调用方就能让服务去请求内网地址、云元数据端点或本机端口, 等于把服务变成跳板。这里把策略集中在一处,入站拉取与出站通知共用。

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type List

type List struct {
	// contains filtered or unexported fields
}

List 是一份主机名白名单。零值不可用:不含任何条目时 EverythingAllowed 返回 false,即"默认拒绝"。

条目形如 "cdn.example.com"(精确)、"*.corp.example.com"(子域通配,仅匹配一级以上 的子域,不匹配 "corp.example.com" 本身)或 "10.20.0.0/16"(CIDR,也接受单个 IP)。

func Parse

func Parse(entries []string) (*List, error)

Parse 解析白名单条目。空串与空白项被忽略,非法条目返回错误——配置写错应当在启动 时失败,而不是运行时静默放行或静默拒绝。

func (*List) AllowAddr

func (l *List) AllowAddr(addr netip.Addr) error

AllowAddr 判断一个解析后的地址是否可访问。默认拒绝一切非公网单播地址:回环、 私有网段、链路本地(含 169.254.169.254 云元数据)、未指定、多播。

注意:这是"不得命中敏感网段"的黑名单式判断,不是"必须在公网白名单内"。白名单条目 里的 CIDR 用来在受控内网中放行特定网段(例如内部对象存储),因此 AllowedHost 为真并不能单独成为放行依据,两者要同时满足。

func (*List) AllowResolved

func (l *List) AllowResolved(addrs []netip.Addr) error

AllowResolved 校验一组解析结果:必须全部通过 AllowAddr,且至少有一个地址可用。 只要有一个地址指向敏感网段就整体拒绝,避免"多数解析结果正常"掩盖恶意记录。

func (*List) AllowedHost

func (l *List) AllowedHost(host string) bool

AllowedHost 判断主机名是否在白名单内。CIDR 与单个 IP 条目在此不参与匹配,它们 作用于解析后的地址(见 AllowAddr)。

func (*List) Describe

func (l *List) Describe() string

Describe 返回条目数量,供启动日志与 /healthz 展示,不泄露条目内容。

func (*List) Empty

func (l *List) Empty() bool

Empty 报告白名单是否为空。为空时 EverythingAllowed 恒为 false。

func (*List) EverythingAllowed

func (l *List) EverythingAllowed() bool

EverythingAllowed 报告白名单是否处于"不限制"状态。空白名单即不限制外部访问, 服务据此在启动时给出告警并在请求时直接拒绝这类操作。

func (*List) ResolveAndCheck

func (l *List) ResolveAndCheck(host string) ([]netip.Addr, error)

ResolveAndCheck 按白名单校验 host 的解析结果,返回可用的地址列表。调用方应当把 校验放在真正拨号的那一刻(自定义 net.Dialer.DialContext)执行,否则检查与连接之间 存在时间窗,攻击者可用 DNS rebinding 在窗口内把域名改指到内网。

func (*List) ResolveAndCheckContext

func (l *List) ResolveAndCheckContext(ctx context.Context, host string) ([]netip.Addr, error)

ResolveAndCheckContext 按白名单校验 host 的解析结果,并使 DNS 查询响应 ctx 取消。 拨号前的校验应使用请求自身的 context,避免 DNS 阻塞绕过请求超时。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL