我是一所学校的网络管理员。学校通过我控制范围之外的设备上实施的 VPN 连接到外界(所有校内主机都有 10.xxx IP 地址)。唯一通往网络的途径是通过为多所学校服务的上游过滤代理服务器。
学校有一个完全由我控制的本地 Squid 代理,学校的所有浏览器都配置为使用该代理。目前,它设置为使用上游代理作为其父级,并通过用户凭据传递,但白名单中的域和 URL 除外,我已让 Squid 为其提供预设凭据。除其他外,这使我能够让学生访问选定的 YouTube 视频,即使上游(域级)过滤器将整个 YouTube 限制为仅供教职员工使用,并且让更新检查等操作悄悄进行,而不会在不方便的时候打扰用户提供凭据。
Upstream 最近决定将其 ISP 提供的网络过滤器切换到 Zscaler,后者似乎不使用 HTTP 身份验证;而是通过重定向、HTTPS 和 cookie 进行一些复杂的基于浏览器的操作。
是否有人知道如何配置 Zscaler 以要求每个请求而不是每个浏览器会话都提供身份验证凭据,并配置 Squid 来提供这些凭据?
答案1
所以事实证明,实际上没有合理的方法可以做到这一点,我需要求助于权宜之计。权宜之计还不错,但毕竟还是权宜之计。
Zscaler 可以将链接到它的代理识别为“组织的 Internet 网关位置”。对于通过代理链接从组织的本地代理服务器到达 Zscaler 的请求,即使 Zscaler 未进行任何基于 cookie 的身份验证,您也可以根据网关位置应用默认过滤策略。这也很好,因为最终用户实际上可以通过将浏览器设置为使用虚假的用户代理字符串来禁用基于 cookie 的身份验证。
Zscaler 站点管理员还可以创建“子位置”,允许为多个本地代理分别设置默认过滤策略。Zscaler 通过链接到它的代理服务器的 IP 地址来识别主位置和所有子位置。这些内容都在“Internet 网关和 SSL”下的管理页面中,其中一个有用的选项是能够完全关闭任何给定位置或子位置的身份验证。
我的学校只有一个校区和一个校区内的 Squid 代理服务器,但从 Zscaler 的角度来看,该代理现在看起来像四个。以及静态分配给eth0并在 Zscaler 注册为我们的互联网网关位置,现在又有三处分配给eth0:1,eth0:2和eth0:3具有相应的子位置(乌贼,职员和学生) 在 Zscaler 端进行设置,并关闭所有身份验证。
所以现在我可以在本地进行所有用户身份验证并使用acl 代理身份验证squid.conf 中的标签将用户标记为教职员工或学生,以及tcp_outgoing_address标签来选择 Zscaler 根据我的本地用户和站点规则查看我的请求的 IP 地址。
三个具有仅限本地身份验证的子位置加上一个保留 Zscaler 身份验证的主位置(用于携带自己的 Zscaler 凭据的来访员工)为我提供了与在旧过滤器上使用的一样的粒度,并且希望我的现场用户甚至不会注意到任何变化。
答案2
在 Apache 中使用 SetHeader 模块完成,使用 wget 的用户代理字符串,运行完美。这会绕过身份验证,因为 zscaler 知道 wget 永远无法进行非标准身份验证。