![Squid 返回 400 到 GET / HTTP/1.1 和主机头](https://linux22.com/image/720858/Squid%20%E8%BF%94%E5%9B%9E%20400%20%E5%88%B0%20GET%20%2F%20HTTP%2F1.1%20%E5%92%8C%E4%B8%BB%E6%9C%BA%E5%A4%B4.png)
我需要演示和测试 Squid 设置,默认情况下应将其列入黑名单,并仅允许来自已知网络的白名单 URL 的请求。它目前在我的临时环境中运行,并且工作正常,但我想根据需要对其进行测试和演示,并获得比 curl 更好的反馈。
我已经部署了 Redbot (https://github.com/mnot/redbot),我已将其设置为通过 Squid 代理发送所有 HTTP 请求
使用curl -x
Redbot 机器,我的所有测试都通过了,但使用该应用程序,无论发生什么情况,Squid 都会返回 400。所有请求都发给 Squid,我看到了每个请求,但没有返回 403 和X-Squid-Error: ERR_ACCESS_DENIED 0
,也没有允许请求,而是每个请求都得到 400 和X-Squid-Error: ERR_INVALID_URL 0
。
深入研究日志和 tcpdump,我发现的主要区别是 Redbot 发送了以下形式的请求:
GET / HTTP/1.1
Host: chess.com
Curl 发送:
GET http://chess.com/ HTTP/1.1
Host: chess.com
从 RFC 来看,Redbot 的请求似乎完全有效,因此我觉得 Squid 应该做正确的事情,从主机头推断出 Redbot 想要什么,然后检查其 ACL。但是,它只是报错:
HTTP/1.1 400 Bad Request
Server: squid/3.5.27
Mime-Version: 1.0
Date: Mon, 23 Apr 2018 11:50:23 GMT
Content-Type: text/html;charset=utf-8
Content-Length: 3465
X-Squid-Error: ERR_INVALID_URL 0
X-Cache: MISS from proxy.redaction.com
Via: 1.1 proxy.redaction.com (squid/3.5.27)
这看起来像是 Squid 配置问题吗?还是我需要让 Redbot 像 Curl 那样发出请求?
更新:
添加intercept
指令后http_port
,Host 标头会进入 URL,但现在 Squid 给出了 403,即使 ACL 应该允许这样做:
z1524498993.558 0 10.8.0.33 TCP_MISS/403 3985 GET
http://www.openstreetmap.com/ - HIER_NONE/- text/html
1524498993.559 0 10.8.2.19 TCP_MISS/403 4077 GET
http://www.openstreetmap.com/ - ORIGINAL_DST/10.8.0.33 text/html
acl cluster src 10.8.0.0/16
acl streetmap dstdomain .openstreetmap.com
http_access allow cluster streetmap
http_access deny all