Squid Web Cache Wiki

Squid Web Cache 文档

🔗 配置 Squid 和 Webwasher 代理链

作者:Christoph Haas

🔗 目录

Squid 是一款出色的缓存代理软件。但它缺少内容过滤组件。Squid 管理员经常接到阻止下载病毒感染文件或过滤成人内容的命令。市面上存在像 Dansguardian 或 Squidguard 这样的软件,它们试图做到这一点。但在企业环境中,这根本不够。

Squid 3.x 包含一个 ICAP 客户端,至少可以连接支持 ICAP 的内容过滤器。但即使是 Squid 2.x,您也可以将其他代理连接到“代理链”中。因此,本文将介绍 Webwasher 代理软件(由 Secure Computing 出品)的集成。

:warning: 免责声明:Webwasher 是一款价格相对昂贵的软件。如果您想在家保护孩子免受色情网站的侵害,本文不适合您。本文存在的目的是因为我们在工作中使用了它。它不代表任何广告。此设置比较复杂,您应该熟悉 Squid 和 LDAP 的基本知识。

🔗 示例设置

我们的做法是根据 LDAP 数据库对用户进行身份验证。由于不同用户在互联网上需要允许访问的内容不同,因此有几个 LDAP 组为用户分配特定的配置文件。例如:不允许任何人使用公共电子邮件服务,但邮件服务器管理员组被授予此权限,以便他们可以从互联网上测试自己的服务器。

下面描述的设置大致如下:

全局图

bigpicture.png

Webwasher 的功能

Webwasher 目前不具备的功能

🔗 Squid 配置

Squid 代理主要用于复杂的 ACL。一些用户/客户端 IP 不需要进行身份验证。某些 URL 被手动阻止。Squid 的 ACL 非常适合这项工作。

🔗 LDAP 身份验证和授权

首先定义 LDAP 身份验证的工作方式

auth_param basic children 50
auth_param basic realm Proxy
auth_param basic credentialsttl 1 minute
auth_param basic program /usr/lib/squid/ldap_auth -b o=ourcompany -h ldapserver -D cn=proxyauth,o=ourcompany -w secretpassword -f (&(objectclass=person)(cn=%s))

有趣的部分是 **ldap_auth** 调用。以下是相应参数的含义:

o=ourcompany 定义 LDAP 树的起点 DN(专有名称)
ldapserver 用于查询的 LDAP 服务器的 DNS 名称或 IP 地址
cn=proxyauth,o=ourcompany 用于验证用户用户名和密码的 LDAP 用户的 DN
secretpassword 上述 LDAP 用户查询 LDAP 服务器所需的密码
(&(objectclass=person)(cn=%s)) 一个 LDAP 表达式,用于限制您正在搜索的 LDAP 对象/用户的类型

如果您希望 Squid 查询 LDAP 数据库以确定某个用户是否属于某个 LDAP 组,您还需要定义 LDAP 查询。

external_acl_type ldapgroup ttl=60 concurrency=20 %LOGIN /usr/lib/squid/squid_ldap_group \
   -b o=ourcompany -f (&(objectclass=person)(cn=%v)(groupMembership=cn=%a,ou=groupcontainer,o=ourcompany)) \
   -D cn=proxyauth,o=ourcompany -w secretpassword -h ldapserver

这里有趣的部分是 **(&(objectclass=person)(cn=%v)(groupMembership=cn=%a,ou=groupcontainer,o=ourcompany))**。这个 LDAP 表达式用于查询 (1) 所有人员,其中 (2) 名称为 **%v** [这将在稍后的 ACL 中定义],以及 (3) 您在 ou=groupcontainer,o=ourcompany 分支内的组中进行查找。

使用身份验证的最小 ACL/http_access 配置如下所示:

acl ldap-auth proxy_auth REQUIRED
http_access deny !ldap-auth
http_access allow all

可选

您可能希望创建一个特殊的 LDAP 组,其中包含允许通过代理浏览的用户。也许您有一个 LDAP 目录,其中列出了所有用户,并且您不想允许每个人访问互联网。因此,您可以创建一个 LDAP 组 **user_can_surf**,并将所有特权用户列在那里。示例配置:

acl ldap-auth proxy_auth REQUIRED
http_access deny !ldap-auth
acl ldapgroup-enabled external ldapgroup user_can_surf
deny_info denied-ldapenabled ldapgroup-enabled
http_access deny !ldapgroup-enabled
http_access allow all

为了告诉用户访问被拒绝的原因,您应该考虑使用 **deny_info** 语句来定义自己的错误页面。有关详细信息,请参阅您的 squid.conf。

🔗 代理链

现在 Squid 的用户身份验证工作已完成,并且 Squid 已决定允许访问,您希望将请求转发到 Webwasher。这可以通过“代理链”来实现。在您的 squid.conf 中设置一个缓存对等体:

cache_peer localhost parent 9090 0 no-query no-digest default login=*:foobar

您可以将 Webwasher 进程与 Squid 运行在同一台主机上。这就是为什么对等主机是 localhost。附加选项 **no-query** 和 **no-digest** 告诉 Squid Webwasher 不了解 ICP 查询和对等关系。但这里有一个特殊之处:**login=*:foobar**。此选项会将 HTTP **Proxy-Authorization** 头转发到父代理,但会将用户的密码替换为字符串 **foobar**。这样,Webwasher 稍后就可以使用当前 Squid 用户的名称来分配特定的配置文件。

还要告诉您的 Squid,您希望所有请求都转发到 Webwasher 代理,而无需直接获取 URL。

never_direct allow all

如果您有某些 URL 希望直接查询,因为它们是您的内部网站点,或者因为 Webwasher 对该网站存在问题,您始终可以使用 **always_direct allow …** 将特定类型的查询直接从 Squid 发送到 Web 服务器。

🔗 Webwasher 配置

由于 Web 界面中的配置选项在版本 5.x 和 6.x 之间有所变动,因此我将不详细描述具体路径。如果您不知道在哪里找到某个选项,只需使用右上角的搜索框即可。

首先,定义您的配置文件。您可能已经对不同类型的用户有所了解,并为每种用户创建一个配置文件。

🔗 LDAP 授权

在 Web 界面中找到“策略管理”选项。然后选择“Web 映射”。在这里,您可以定义将哪个配置文件分配给特定用户。您可以通过以下方式实现:

当然,您需要已经配置好 LDAP。设置取决于您的 LDAP 软件。这是一个示例配置:

(使用 ethereal/ethershark 进行 LDAP 查询调试非常有用。)

🔗 常见问题解答

  1. 为什么要使用 Squid?看起来 Webwasher 可以在没有 Squid 的情况下满足您的所有需求。
    • Squid 用于缓存以及其灵活的 ACL。如果您不需要这些,也可以只使用 Webwasher,让它进行身份验证。

⚠️ Disclaimer: Any example presented here is provided "as-is" with no support
or guarantee of suitability. If you have any further questions about
these examples please email the squid-users mailing list.

类别: ConfigExample

导航:网站搜索网站页面分类🔼 向上