我安装了 squid 代理来过滤来自 docker 的出站流量。具体来说,我使用 docker 创建了一个 jupyterhub 环境,以便隔离每个用户并为他们提供虚拟环境。
现在我想去过滤出站流量,以便它们只能访问某些域和使用 jupyterhub 的 docker 本地安装的服务。
使用 cURL 调用代理可以正常工作。它仅允许输入的域并让我们访问本地 jupyterhub 服务。但是,从 Web 界面打开它时,会出现此错误:
我已经启用服务ip 172.17.0.1和端口8081并且cUrl测试正在运行。
我该如何修复它?
一些配置:
配置.json(〜/ .config.json):
{
"proxies":
{
"default":
{
"httpProxy": "http://127.0.0.1:3128",
"httpsProxy": "http://127.0.0.1:3128",
"noProxy": "127.0.0.0/8"
}
}
}
squid.conf(/etc/squid/squid.conf):
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl localnet src fc00::/7 # RFC 4193 local private network range
acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines
acl localnet src 172.17.0.1/32
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 443 # https
acl CONNECT method CONNECT
#### 23/06/2021 #############
acl jupyterhub_port port 8081
acl jupyterhub_addr dst 172.17.0.1
http_access allow jupyterhub_port jupyterhub_addr
# Deny requests to certain unsafe ports
http_access deny !Safe_ports
# Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !SSL_ports
# Only allow cachemgr access from localhost
http_access allow localhost manager
http_access deny manager
###### 18/06/2021
acl whitelist dstdomain .python.org .pypi.org .pythonhosted.org .pypa.io .yahoo.com
http_access allow whitelist
# And finally deny all other access to this proxy
http_access deny all
# Squid normally listens to port 3128
http_port 3128
# Leave coredumps in the first cache dir
coredump_dir /var/spool/squid
# Add any of your own refresh_pattern entries above these.
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320
通过代理 curl:
curl http://172.17.0.1:8081/hub/api --proxy 127.0.0.1:3128
{"version": "1.4.1"}
答案1
最后,我的配置文件是正确的;)我只是错误地在 config.json (~/.config.json) localhost 中指定了 ip LAN 地址(docker 是一个外部环境):
{
"proxies":
{
"default":
{
"httpProxy": "http://172.31.31.111:3128",
"httpsProxy": "http://172.31.31.111:3128",
"noProxy": "172.31.33.81/8"
}
}
}