注意
ACL 是一项 可选功能。 如果您不使用 ACL, 只需将配置文件中的 “acl” 一项删除或留空即可。
ACL 文件描述如何处理传入请求。服务器和客户端都支持,并且遵循相同的语法(但客户端只有 SOCKS5/HTTP 模式支持 ACL,其余模式会全部走代理)。
语法 #
<处理方式> <条件类型> <条件表达式> <可选: 协议/端口> <可选: 处理方式参数>
4 种处理方式:
direct - 直接连接到目标服务器,不经过代理
proxy - 通过代理连接到目标服务器(仅在客户端上可用)
block - 拒绝连接建立
hijack - 把连接劫持到另一个目的地 (必须在参数中指定)
6 种条件类型:
domain - 匹配特定的域名(不匹配子域名!例如:apple.com 不匹配 cdn.apple.com)
domain-suffix - 匹配域名后缀(包含子域名,但 apple.com 仍不会匹配 fakeapple.com)
cidr - IPv4 / IPv6 CIDR
ip - IPv4 / IPv6 地址
country - 匹配国家 IP,ISO 两位字母国家代码
all - 匹配所有地址 (通常放在文件尾作为默认规则)
对于域名请求,Hysteria 将尝试解析域名并同时匹配域名规则和 IP 规则。换句话说,IP 规则能覆盖到所有连接,无论客户端是用 IP 还是域名请求。
协议/端口是可选的,可以用来匹配特定协议和端口的请求。比如要匹配 TCP 80 端口,写 tcp/80。要匹配 UDP 12450 端口,写 udp/12450。要同时匹配 TCP 和 UDP 的 443 端口,写 */443。要匹配所有 UDP 端口,写 udp/*。要匹配所有连接,可直接省略这个字段,或者写 * 或者 */*。
只有特定的处理方式才需要处理方式参数。目前只有 hijack 需要参数(来指定劫持到的目标地址)。
Hysteria 根据文件中第一个匹配到规则对每个请求进行操作。当没有匹配时默认的行为是代理连接。可以通过在文件的末尾添加一个规则加上条件 “all” 来设置默认行为。
样例 #
# 注释用 # 开头
# 直连 "evil.corp" 域名
direct domain evil.corp
# 代理 "google.com" 以及 "*.google.com" 域名
proxy domain-suffix google.com
# 屏蔽 IP 1.2.3.4
block ip 1.2.3.4
# 屏蔽所有中国 IP
block country cn
# 劫持日本 IP 的 UDP 53 端口到 8.8.8.8
hijack country jp udp/53 8.8.8.8
# 劫持局域网 IP 到 127.0.0.1
hijack cidr 192.168.1.1/24 127.0.0.1
# 代理所有 HTTP 协议
proxy all tcp/80
# 代理所有 HTTPS 协议
proxy all tcp/443
# 屏蔽一切没有匹配到上面规则的请求
block all