Traefik IPAllowList 中间件文档
IPAllowList(IP 白名单)
ipAllowList 中间件根据客户端 IP 接受或拒绝请求。
配置示例
YAML 格式:
yaml
# 仅接受来自已定义 IP 的请求
http:
middlewares:
test-ipallowlist:
ipAllowList:
sourceRange:
- "127.0.0.1/32"
- "192.168.1.7"Kubernetes 格式:
yaml
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: test-ipallowlist
spec:
ipAllowList:
sourceRange:
- 127.0.0.1/32
- 192.168.1.7配置选项
| 字段 | 描述 | 默认值 | 必填 |
|---|---|---|---|
sourceRange | 允许的 IP 列表(可使用 CIDR 表示法表示 IP 段)。 | - | 是 |
ipStrategy.depth | 从右起在 X-Forwarded-For 头中选择 IP 的深度位置。0 表示无深度。如果大于 X-Forwarded-For 中的 IP 总数,则 client IP 为空。如果大于 0,则忽略 excludedIPs 选项。 | 0 | 否 |
ipStrategy.excludedIPs | 允许 Traefik 扫描 X-Forwarded-For 头并选择第一个不在该列表中的 IP。如果指定了 depth,则忽略 excludedIPs。 | [] | 否 |
ipStrategy.ipv6Subnet | 如果提供了 ipv6Subnet 且选中的 IP 是 IPv6,则该 IP 会被转换为其所属子网的第一个 IP。 | "" | 否 |
ipStrategy
ipStrategy 选项定义两个参数,配置 Traefik 如何确定客户端 IP:depth 和 excludedIPs。
如果未设置任何策略,则默认行为是将 sourceRange 与请求中找到的远程地址匹配。
作为中间件,白名单检查在实际代理到后端之前发生。此外,前一跳网络节点仅在代理的最后阶段(即白名单检查通过之后)才被附加到 X-Forwarded-For。因此,在白名单检查期间,由于前一跳尚未出现在 X-Forwarded-For 中,因此无法与 sourceRange 匹配。
ipStrategy.depth
depth 选项告诉 Traefik 使用 X-Forwarded-For 头并获取位于 depth 位置(从右起)的 IP。
- 如果
depth大于X-Forwarded-For中的 IP 总数,则 client IP 将为空。 - 如果
depth值小于或等于 0,则忽略depth。
如果提供了 ipStrategy.ipv6Subnet 且选中的 IP 是 IPv6,则该 IP 会被转换为其所属子网的第一个 IP。
ipStrategy.ipv6Subnet
此策略仅适用于 Depth 和 RemoteAddr 策略。 如果提供了 ipv6Subnet 且选中的 IP 是 IPv6,则该 IP 会被转换为其所属子网的第一个 IP。
这对于将 IPv6 地址分组到子网中很有用,可防止通过获取新 IPv6 来绕过此中间件。
- 如果
ipv6Subnet的值在 0-128 范围之外,则会被忽略。
ipv6Subnet 示例
| IP | ipv6Subnet | clientIP |
|---|---|---|
"::abcd:1111:2222:3333" | 64 | "::0:0:0:0" |
"::abcd:1111:2222:3333" | 80 | "::abcd:0:0:0:0" |
"::abcd:1111:2222:3333" | 96 | "::abcd:1111:0:0:0" |
在生产环境使用 Traefik OSS?
如果你在工作中使用 Traefik,可以考虑为其添加企业级 API 网关能力或获取 Traefik OSS 的商业支持。