Skip to content

网络规则匹配一个目标地址。有两种:

  • 主机规则不指定方法或路径,因此它匹配发往该目标地址的所有流量。Docker Home 编辑器 称其为 All traffic 规则。
  • HTTP 规则还会指定 HTTP 方法和 URL 路径,并可选择性地限制查询参数,因此策略可以 允许选定的 API 请求。

有关如何书写目标地址,请参阅目标地址。

HTTP 方法和路径 ​

HTTP 规则指定一个或多个方法、一个目标地址以及路径模式。每部分接受什么取决于你在哪里 配置该规则:

部分组织策略本地策略
方法列出的一种或多种方法ANY,或一种或多种方法
目标地址主机或 IP 地址主机
路径一种或多种绝对路径模式一种绝对路径模式

目标地址可以包含端口,路径模式形如 /api/**。

本地 HTTP 规则只接受主机模式,不接受 IP 地址或 CIDR 范围。要匹配 IP 地址或 CIDR 范围,请使用不带 --method 或 --path 的网络规则。本地 HTTP 规则也只接受一个路径, 因此每个路径都要添加一条单独的规则。

每条规则至少适用于一种方法。在 CLI 上,--method ANY 涵盖所有 HTTP 方法。在编辑器中, 至少要选择一种方法。未选择任何方法的规则会校验失败。关于可以单独选择的方法,对于 组织策略请参阅 网络规则可以匹配什么, 对于本地策略请参阅 允许或阻止 HTTP 方法和路径。

HTTP 路径匹配忽略 ASCII 字母的大小写:/API/** 匹配 /api/items。非 ASCII 字符仍然 区分大小写。这对允许规则和拒绝规则都适用。

路径模式使用与文件系统路径相同的通配符,其中 * 在一个路径段内匹配,** 匹配任意 深度。不含通配符的模式精确匹配该路径,因此 /repos 只匹配 /repos,不匹配其下的 任何内容。每个模式都必须以 / 开头,且不能包含查询字符串、片段或 .. 路径段。本地 规则的路径还必须是规范形式,因此不能包含百分号编码、控制字符、首尾空白、重复或 末尾的斜杠,或 . 路径段。

查询参数 ​

HTTP 规则还可以独立于路径限制查询参数。

使用精确的参数名和值,或者在值的开头或结尾使用单个 * 来匹配后缀或前缀。值为 * 匹配任意值,包括空值。参数名不能包含通配符。名称和值忽略 ASCII 字母的大小写,因此 Tag=PROD 匹配 tag=prod。非 ASCII 字符仍然区分大小写。

指定的每个参数都必须匹配。参数顺序无关紧要,请求可以包含额外的参数。在规则中重复 参数名,要求请求中出现分别匹配的多次出现。没有查询限制的规则无论查询参数如何都匹配。

请使用 URL 查询编码来书写名称和值的模式:空格用 + 或 %20,字面加号用 %2B, 字面星号用 %2A。不要把查询参数写进 --path。有关 CLI 示例,请参阅 允许或阻止 HTTP 方法和路径。 关于组织策略中的 Query parameters 字段,请参阅 HTTP 规则。

组合 HTTP 规则和主机规则 ​

HTTP 请求会同时针对这两类规则求值。主机规则设定了某个主机的基线,而 HTTP 规则按 方法、路径和查询参数收窄访问权限:

覆盖该主机的规则对 HTTP 请求的结果
只有主机允许任意方法和路径都被允许
只有 HTTP 允许只有规则匹配方法、路径和任何查询限制时才允许。其他一律被拒绝
主机允许和 HTTP 拒绝匹配 HTTP 拒绝的请求被拦截。其余请求保持允许
主机拒绝被拦截。HTTP 允许无法重新放行一个已被拒绝的主机

因此,主机拒绝是 HTTP 规则无法抬高的下限,而主机允许是 HTTP 规则可以从中切分的上限。

当规则要求作出 HTTP 判定时,沙箱 HTTP 代理会逐个请求分别求值,而不是按连接一次性 判定。

这些请求必须经过该代理。它无法检查的连接(例如以透明方式处理的连接)会被拦截,而 不是被求值。非 HTTP 流量(例如 SSH)不携带方法或路径,因此 HTTP 规则永远不会匹配 它们。请用主机规则控制这些目标地址。

目标地址 ​

网络规则用 connect:tcp 表示 TCP,用 connect:udp 表示 UDP。资源可以是主机名、 CIDR 范围或端口。UDP 需要 实验性的出站 UDP。ICMP 被阻止。

主机名模式 ​

主机名匹配不区分大小写:EXAMPLE.com 匹配 example.com。

模式示例匹配
精确主机名example.com任意端口上的 example.com,不含子域名
单层通配符*.example.com一级子域名,任意端口:api.example.com
多层通配符**.example.com任意深度,任意端口:api.example.com、v2.api.example.com
带端口的主机名example.com:443仅 443 端口上的 example.com

example.com 和 *.example.com 并不互相覆盖。如果你需要同时匹配根域名和它的子域名, 请把两者都写出来。

CIDR 范围 ​

IPv4 和 IPv6 记法都支持:10.0.0.0/8、192.168.1.0/24、2001:db8::/32。