第 16 章 配置 Squid 缓存代理服务器
Squid 是一种代理服务器,可缓存内容以降低带宽并更快地加载 Web 页面。本章论述了如何将 Squid 设置为 HTTP、HTTPS 和 FTP 协议的代理,以及验证和限制访问。
16.1. 在不使用身份验证的情况下将 Squid 设置为缓存代理
这部分论述了 Squid 的基本配置在没有身份验证的情况下作为缓存代理。此流程会根据 IP 范围限制对代理的访问。
先决条件
- 这个过程假设
/etc/squid/squid.conf
文件是 squid 软件包提供的。如果您在之前编辑了这个文件,请删除该文件并重新安装该软件包。
流程
- 安装 squid 软件包:
# yum install squid
- 编辑
/etc/squid/squid.conf
文件:- 调整
localnet
访问控制列表(ACL),使其与允许使用代理的 IP 范围匹配:acl localnet src 192.0.2.0/24 acl localnet 2001:db8::/32
默认情况下,/etc/squid/squid.conf
文件包含 http_access allow localnet 规则,允许使用 localnet ACL 中指定的所有 IP 范围内的代理。请注意,您必须在 http_access allowlocalnet
规则之前指定所有 localnet ACL。重要删除所有与您的环境不匹配的现有 acl localnet 条目。 - 默认配置中存在以下 ACL,并将 443 定义为使用 HTTPS 协议的端口:
acl SSL_ports port 443
如果用户也可以在其它端口上使用 HTTPS 协议,请为每个端口添加 ACL:acl SSL_ports port port_number
- 更新 acl Safe_ports 规则列表,以配置 Squid 可以建立连接的端口。例如,若要配置使用代理的客户端只能访问端口 21(FTP)、80(HTTP)和 443(HTTPS)上的资源,在配置中仅保留以下 acl Safe_ports 语句:
acl Safe_ports port 21 acl Safe_ports port 80 acl Safe_ports port 443
默认情况下,配置中包含 http_access deny !Safe_ports 规则,该规则定义对 Safe_ports ACL 中没有定义的端口的访问拒绝。 - 在
cache_dir
参数中配置缓存类型、缓存目录的路径、缓存大小以及进一步缓存特定于类型的设置:cache_dir ufs /var/spool/squid 10000 16 256
使用这些设置:- Squid 使用ufs 缓存类型.
- Squid 将其缓存存储在
/var/spool/squid/
目录中。 - 缓存最多增长 10000 MB。
- Squid 在
/var/spool/squid/
目录中创建 16 级-1 子目录。 - Squid 在每个级别 1 目录中创建 256 个子目录。
如果您没有设置cache_dir
指令,Squid 会将缓存保存在内存中。
- 如果您在
cache_dir
参数中设置与/var/spool/squid/
不同的缓存目录:- 创建缓存目录:
# mkdir -p path_to_cache_directory
- 配置缓存目录的权限:
# chown squid:squid path_to_cache_directory
- 如果您以 enforcing 模式运行 SELinux,请为缓存目录设置
squid_cache_t
上下文:# semanage fcontext -a -t squid_cache_t "path_to_cache_directory(/.*)?" # restorecon -Rv path_to_cache_directory
如果您的系统中没有semanage
工具,请安装 policycoreutils-python-utils 软件包。
- 在防火墙中打开 3128 端口:
# firewall-cmd --permanent --add-port=3128/tcp # firewall-cmd --reload
- 启动
squid
服务:# systemctl start squid
- 在系统引导时启用
squid
服务自动启动:# systemctl enable squid
验证步骤
要验证代理是否正常工作,请使用
curl
实用程序下载网页:
# curl -O -L "https://www.redhat.com/index.html" -x "proxy.example.com:3128"
如果
curl
没有显示任何错误,并且 index.html
文件已下载到当前目录中,代理可以正常工作。