第 6 章 配置 Squid 缓存代理服务器
Squid 是一个代理服务器,可缓存内容以减少带宽并更快地加载 Web 页面。本章论述了如何将 Squid 设置为 HTTP、HTTPS 和 FTP 协议的代理,以及验证和限制访问。
6.1. 将 Squid 设置为没有身份验证的缓存代理
您可以将 Squid 配置为没有身份验证的缓存代理。此流程会根据 IP 范围限制对代理的访问。
先决条件
- 
						流程假设 /etc/squid/squid.conf文件是由squid软件包提供的。如果您在之前编辑了这个文件,请删除该文件并重新安装该软件包。
流程
- 安装 - squid软件包:- yum install squid - # yum install squid- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 编辑 - /etc/squid/squid.conf文件:- 调整 - localnet访问控制列表(ACL)以匹配应该允许使用代理的 IP 范围:- acl localnet src 192.0.2.0/24 acl localnet 2001:db8:1::/64 - acl localnet src 192.0.2.0/24 acl localnet 2001:db8:1::/64- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 默认情况下, - /etc/squid/squid.conf文件包含- http_access allow localnet规则,该规则允许使用- localnetACL 中指定的所有 IP 范围的代理。请注意,您必须在- http_access allow localnet规则前指定所有- localnetACL。重要- 删除所有与您的环境不匹配的现有 - acl localnet条目。
- 以下 ACL 存在于默认配置中,并将 - 443定义为使用 HTTPS 协议的端口:- acl SSL_ports port 443 - acl SSL_ports port 443- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 如果用户也可以在其它端口上使用 HTTPS 协议,请为每个端口添加 ACL: - acl SSL_ports port port_number - acl SSL_ports port port_number- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 更新 - 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 - acl Safe_ports port 21 acl Safe_ports port 80 acl Safe_ports port 443- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 默认情况下,配置包含 - http_access deny !Safe_ports规则,该规则定义禁止对定义在- Safe_portsACL 中端口的访问。
- 在 - cache_dir参数中配置缓存类型、缓存目录的路径、缓存大小以及特定于其它缓存类型的设置:- cache_dir ufs /var/spool/squid 10000 16 256 - cache_dir ufs /var/spool/squid 10000 16 256- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 有了这些设置: - 
										squid 使用 ufs缓存类型。
- 
										Squid 将其缓存存储在 /var/spool/squid/目录中。
- 
										缓存增长到 10000MB。
- 
										Squid 在 /var/spool/squid/目录中创建16level-1 子目录。
- Squid 在每个 level-1 目录中创建 - 256个子目录。- 如果您没有设置 - cache_dir指令,Squid 会在内存中存储缓存。
 
- 
										squid 使用 
 
- 如果您在 - cache_dir参数中设置了与- /var/spool/squid/不同的缓存目录:- 创建缓存目录: - mkdir -p path_to_cache_directory - # mkdir -p path_to_cache_directory- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 配置缓存目录的权限: - chown squid:squid path_to_cache_directory - # chown squid:squid path_to_cache_directory- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 如果您在 - enforcing模式下运行 SELinux,请为缓存目录设置- squid_cache_t上下文:- semanage fcontext -a -t squid_cache_t "path_to_cache_directory(/.*)?" restorecon -Rv path_to_cache_directory - # semanage fcontext -a -t squid_cache_t "path_to_cache_directory(/.*)?" # restorecon -Rv path_to_cache_directory- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 如果系统上没有 - semanage工具,请安装- policycoreutils-python-utils软件包。
 
- 在防火墙中打开 - 3128端口:- firewall-cmd --permanent --add-port=3128/tcp firewall-cmd --reload - # firewall-cmd --permanent --add-port=3128/tcp # firewall-cmd --reload- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 启用并启动 - squid服务:- systemctl enable --now squid - # systemctl enable --now squid- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
验证
					要验证代理是否正常工作,请使用 curl 工具下载网页:
				
curl -O -L "https://www.redhat.com/index.html" -x "proxy.example.com:3128"
# curl -O -L "https://www.redhat.com/index.html" -x "proxy.example.com:3128"
				如果 curl 没有显示任何错误,并且 index.html 文件可以下载到当前目录中,那么代理工作正常。