所有 Squid 代理服务器设置都在 /etc/squid/squid.conf 文件中进行。首次启动 Squid 时,不必在此文件中进行任何更改,但是外部客户程序最初不具备访问权。代理可供 localhost 使用。默认端口为 3128。预装的配置文件 /etc/squid/squid.conf 提供了有关选项的详细信息和许多示例。几乎所有项都以 # 开头(各行都标有注释)并且在行尾可找到相关描述。给定值几乎总与默认值相关,因此多数情况下,仅删除注释符号而不更改任何参数实际上没有什么影响。如果可能,保持示例不变,并将选项连同修改的参数一起插入下一行。这样,便可容易地恢复默认值,并将其与所作更改进行比较。
![]() | 更新后调整配置文件 |
|---|---|
如果已从较早的 Squid 版本更新,建议编辑新的 | |
这是 Squid 侦听客户机请求所用的端口。默认端口为 3128,但也常使用 8080。如果需要,可指定多个以空格分隔的端口号。
hostnametypeproxy-porticp-port
在此输入父代理(如果您想使用 ISP 的代理)。在主机名中输入要使用代理的名称或 IP 地址,在类型中输入 parent。对于 proxy-port,输入同样是由父代理运营商设置的在浏览器中使用的端口号,通常为 8080。如果父代理的 ICP 端口未知并且该端口的使用与提供商无关,请将 icp-port 设为 7 或 0。此外,端口号后应指定 default 和 no-query 以禁止使用 ICP 协议。借助提供商的代理,Squid 就可以像普通浏览器那样操作了。
此项定义 Squid 可用于常用答复的内存大小。默认为 8 MB。它不指定 Squid 的内存使用率,并且可能已经超过。
cache_dir 项定义在磁盘上储存所有对象的目录。末尾的数字表示可用的最大磁盘空间(以 MB 为单位)以及第一级和第二级目录数。不要改动 ufs 参数。默认情况下,在 /var/cache/squid 目录内占用 100 MB 磁盘空间,并在该目录内创建 16 个子目录,每个又可以再包含 256 个子目录。指定要使用的磁盘空间时,应预留足够的磁盘空间。在此最为合理的值应该是可用磁盘空间的 50%(最小)到 80%(最大)。在增大目录的后两个数字时一定要小心,因为目录过多也可能导致性能问题。如果有多个磁盘共享缓存,请输入多个 cache_dir 行。
这三个条目将指定 Squid 记录其所有操作的路径。通常不做任何更改。如果 Squid 因使用频繁而负担过重,则可能需要将缓存和日志文件分散到多个磁盘上。
如果该项设置为 on,则可以获取可读的日志文件。但有一些评估程序不能对此作出解释。
有了此条目,便可在日志文件中屏蔽客户机的 IP 地址。如果在此输入 255.255.255.0,IP 地址的最后一位将被设为 0。可以使用此方法来保护客户机的私密。
使用此项可以设置 Squid 执行匿名 FTP 登录时应使用的密码。在此可以指定有效的电子邮件地址,因为有些 FTP 服务器需要通过这种方式来验证有效性。
一个电子邮件地址,Squid 在意外崩溃时会向该地址发送信件。默认为 webmaster。
如果运行 squid -k rotate,Squid 可以循环使用受保护的日志文件。在此过程中会给文件编号,并且在达到指定值后重写最旧的文件。默认值为 0,因为 SUSE Linux Enterprise Server 中日志文件的存档和删除是由配置文件 /etc/logrotate/squid 中设置的 cron job(定时执行的任务)完成的。
使用 append_domain 可指定自动追加的域(如果没有指定域)。通常,在此输入的是您自己的域,所以在浏览器中输入 www 将访问您自己的 Web 服务器。
如果将此项设置为 off,Squid 会将客户机的 IP 地址和系统名称从 HTTP 请求中删除。否则,它会向标题中添加以下行
X-Forwarded-For: 192.168.0.1
一般不必更改这些值。但如果使用拨号连接,因特网有时可能无法访问。Squid 会记录失败的请求并拒绝发出新的请求,即便重新建立因特网连接也无济于事。在这种情况下,将分钟改为秒钟,然后单击浏览器中的重装载,拨号进程会在几秒钟后重新启动。
acl_name
要防止 Squid 直接从因特网接受请求,应使用上述命令强制连接到另一个代理。事先必须已在 cache_peer 中输入该代理。如果将 acl_name 指定为 all,会强制所有请求直接转发给父代理。有时这可能是必要的,例如在您的提供商严格规定使用它的代理或拒绝通过其防火墙直接访问因特网时。
Squid 为控制针对代理的访问提供了一套周密的系统。通过实施 ACL 可以轻松并全面地进行配置。这涉及一些依次处理的规则的列表。使用 ACL 之前必须先定义 ACL。一些默认的 ACL 已经存在,如 all 和 localhost。但是,仅仅定义 ACL 并不意味着实际应用 ACL。只有在与 http_access 规则一同使用时才不是这样。
ACL 至少需要三个规范值来定义。名称 <acl_name> 可以任意选择。对于 <type>,可以在多种不同的选项中选择(在 /etc/squid/squid.conf 文件的 ACCESS CONTROLS 部分中可以找到这些选项)。<data> 的值取决于各 ACL 的类型,并且可以从文件中读取(例如,通过主机名、IP 地址或 URL)。以下是一些简单的示例:
acl mysurfers srcdomain .my-domain.com acl teachers src 192.168.1.0/255.255.255.0 acl students src 192.168.7.0-192.168.9.0/255.255.255.0 acl lunch time MTWHF 12:00-15:00
http_access 定义谁可以使用代理,以及谁能够访问因特网上的什么内容。为此必须指定 ACL。上面已经定义了 localhost 和 all,这两个 ACL 可以通过 deny 或 allow 相应地拒绝或允许访问。可以创建一个包含任何数量 http_access 项的列表,按从上到下的顺序处理各个项,并且根据出现的先后顺序允许或拒绝访问相应的 URL。最后一项应始终是 http_access deny all。在下例中,localhost 可随意访问任何内容,而其他所有主机全部被拒绝访问。
http_access allow localhost http_access deny all
在另外一个使用这些规则的示例中,teachers 组总能访问因特网。students 组只能在星期一到星期五的午餐时间访问。
http_access deny localhost http_access allow teachers http_access allow students lunch time http_access deny all
为提高可读性,只应该在 /etc/squid/squid.conf 文件的指定位置输入带有 http_access 项的列表。即在文本
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR # CLIENTS
和最后的
http_access deny all
使用此选项可以指定重定向器(如 squidGuard),允许拦截不需要的 URL。通过代理身份验证和适当的 ACL 可以控制不同的用户组访问因特网。squidGuard 是一个可以安装和配置的独立包。
如果必须在代理上验证用户,请设置一个相应的程序(如 pam_auth)。当首次访问 pam_auth 时,用户会看到一个用于输入用户名和密码的登录窗口。此外,仍然需要 ACL,只允许提供有效登录信息的客户机使用因特网:
acl password proxy_auth REQUIRED http_access allow password http_access deny all
可以用授权用户名的列表或指向此类列表的路径来替换 proxy_auth 后的 REQUIRED。
使用此选项,可以为 ACL 定义的所有客户机都运行 ident 请求以查找各个用户的身份。如果对 <acl_name> 应用 all,此选项对所有客户机都有效。另外,必须在所有客户机上运行 ident 守护程序。对于 Linux,可为此安装 pidentd 包。对于 Microsoft Windows,可从因特网上下载免费软件。为确保只有成功进行 ident 查找的客户机才有权访问,请在此定义相应的 ACL:
acl identhosts ident REQUIRED http_access allow identhosts http_access deny all
这里同样需要用授权用户名列表来替换 REQUIRED。使用 ident 会明显延缓访问时间,因为每个请求都要重复进行 ident 查找。