Skip to content

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:depthexcludedIPs

如果未设置任何策略,则默认行为是将 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

此策略仅适用于 DepthRemoteAddr 策略。 如果提供了 ipv6Subnet 且选中的 IP 是 IPv6,则该 IP 会被转换为其所属子网的第一个 IP。

这对于将 IPv6 地址分组到子网中很有用,可防止通过获取新 IPv6 来绕过此中间件。

  • 如果 ipv6Subnet 的值在 0-128 范围之外,则会被忽略。

ipv6Subnet 示例

IPipv6SubnetclientIP
"::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 的商业支持。

基于 MIT 协议发布