Menu Close
Settings Close

Language and Page Formatting Options

第 3 章 配置 Squid 缓存代理服务器

Squid 是一个代理服务器,可缓存内容以减少带宽并更快地加载 Web 页面。本章论述了如何将 Squid 设置为 HTTP、HTTPS 和 FTP 协议的代理,以及验证和限制访问。

3.1. 将 Squid 设置为没有身份验证的缓存代理

这部分论述了 Squid 的基本配置在没有身份验证的情况下作为缓存代理。此流程会根据 IP 范围限制对代理的访问。

先决条件

  • 该流程假定 /etc/squid/squid.conf 文件是由 squid 软件包提供的。如果您在之前编辑了这个文件,请删除该文件并重新安装该软件包。

步骤

  1. 安装 squid 软件包:

    # dnf install squid
  2. 编辑 /etc/squid/squid.conf 文件:

    1. 调整 localnet 访问控制列表(ACL),使其与允许使用代理的 IP 范围匹配:

      acl localnet src 192.0.2.0/24
      acl localnet 2001:db8:1::/64

      默认情况下,/etc/squid/squid.conf 文件包含 http_access allow localnet 规则,允许使用 localnet ACL 中指定的所有 IP 范围内的代理。请注意,您必须在 http_access allow localnet 规则之前指定所有 localnet ACL。

      重要

      删除所有与您的环境不匹配的现有的 acl localnet 条目。

    2. 以下 ACL 存在于默认配置中,并将 443 定义为使用 HTTPS 协议的端口:

      acl SSL_ports port 443

      如果用户也可以在其它端口上使用 HTTPS 协议,请为每个端口添加 ACL:

      acl SSL_ports port port_number
    3. 更新 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 中未定义的端口。

    4. cache_dir 参数中配置缓存类型、缓存目录的路径、缓存大小以及其它缓存类型的设置:

      cache_dir ufs /var/spool/squid 10000 16 256

      使用这些设置:

      • Squid使用 ufs 缓存类型.
      • Squid 将其缓存存储在 /var/spool/squid/ 目录中。
      • 缓存增长到 10000 MB。
      • Squid 在/var/spool/squid/目录中创建16 个一级子目录。
      • Squid 在每个一级目录中创建 256个子目录。

        如果您没有设置 cache_dir 指令,Squid 会将缓存存储在内存中。

  3. 如果您在 cache_dir 参数中设置了与 /var/spool/squid/ 不同的缓存目录:

    1. 创建缓存目录:

      # mkdir -p path_to_cache_directory
    2. 配置缓存目录的权限:

      # chown squid:squid path_to_cache_directory
    3. 如果您在 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 软件包。

  4. 在防火墙中打开 3128 端口:

    # firewall-cmd --permanent --add-port=3128/tcp
    # firewall-cmd --reload
  5. 启用并启动 squid 服务:

    # systemctl enable --now squid

验证步骤

要验证代理是否正常工作,请使用 curl 工具下载网页:

# curl -O -L "https://www.redhat.com/index.html" -x "proxy.example.com:3128"

如果 curl 没有显示任何错误,并且 index.html 文件可以下载到当前目录中,那么代理工作正常。