我已经使用 Kerberos 身份验证设置了 squid。我还使用 squidguard 作为 URL 重定向器来屏蔽网络上常见的恶意内容。不过,有些网站我们允许某些用户访问,而其他网站则不允许。如果我没有使用任何流媒体,这一切都运行良好。
根据我所做的 squid 日志和 wireshark 跟踪,当发送初始流式传输请求时,一切都很好,经过身份验证的用户名会随请求一起发送到 squidguard。问题是,在后续流量中,用户名不会发送到 squidguard,导致它根据默认策略被阻止。
我曾经尝试使用 squid 内置的允许/拒绝功能,但是它相对笨重,而到目前为止 squidguard 相当容易和快速。
问题来了:
- 我如何让 Squid 在所有请求中传递用户名?(有些东西告诉我这不是最好的方法)
- 我如何让 squidguard 看到流量已针对特定用户进行身份验证,即使未传递用户名?
- 还有其他方法可以实现这一点吗?
一些可能重要的细节:
- 我正在使用存储在文本文件中的用户列表与 squidguard 进行比较。
- 我正在使用 Squid 进行完整的 Kerberos 身份验证。
- CentOS 6.0
- Squid 3.1.4
- 鱿鱼卫士 1.3
编辑
为了澄清起见,我添加了以下鱿鱼片段来演示正在发生的事情:
wsXX.domain.local 534 5.99 34M 3.04 1 69.93
*.outsidedomain.com 204 14.22 5M 20.66 0 92.14
<error> 137 0.00 0M 0.00 0 589.16
[email protected]@wsXX.domain.local 115 0.00 1M 0.00 70 0.16
*.outsidedomain.com 84 0.00 1M 0.00 73 0.17
<error> 24 0.00 0M 0.00 21 0.00
* 编辑 *
随着我进一步深入研究,我发现它似乎没有针对 HTTP 请求的回复进行身份验证。事实上,如果我在声明中输入
http_reply_access deny !auth
它不允许任何 https 流量,但允许大多数 http 流量。我完全被难住了,它实际上看起来像是让未经身份验证的流量通过(今天将对此进行测试)[经过测试,它将允许未经身份验证的 http 流量,但允许热 https],尽管我的 squid.conf 中有以下几行:
http_access deny !auth
http_access allow auth
http_access deny all
* 编辑 * 我已经修复了未经身份验证的 http 和 httpsm,一切似乎都运行良好,除了流媒体网站仍然:(
无论如何,我必须在配置中更改以下行
http_access deny !Safe_ports
到
http_access deny !Safe_ports !auth
答案1
所以,我搞清楚了这一点。原来,我的 squid.conf 中还有一些其他 ACL 允许未经身份验证的流量通过代理。由于这些规则在拒绝未经身份验证的流量的规则之前就被执行,因此流量是通过未经身份验证的发送的。
我希望这可以为任何尝试做类似事情的人提供良好的资源。