Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

19.4. 配置示例

19.4.1. Squid 连接到非标准端口

以下示例提供了 SELinux 如何通过强制上述布尔值补充 Squid 的真实演示,默认情况下仅允许访问某些端口。此示例随后将演示如何更改 布尔值并演示允许访问。
请注意,这只是一个示例,并演示 SELinux 如何影响简单的 Squid 配置。Squid 综合文档已超出本文档的讨论范畴。详情请查看官方 Squid 文档。此示例假定 Squid 主机有两个网络接口,即 Internet 访问,并且任何防火墙已配置为允许使用 Squid 侦听的默认 TCP 端口(TCP 3128)对内部接口进行访问。
  1. 确认已安装了 squid
    ~]$ rpm -q squid
    package squid is not installed
    
    如果没有安装该软件包,以 root 用户身份使用 yum 工具安装它:
    ~]# yum install squid
  2. 编辑主配置文件 /etc/squid/squid.conf,并确认 cache_dir 指令没有被注释,如下所示:
    cache_dir ufs /var/spool/squid 100 16 256
    
    此行指定要在本示例中使用的 cache_dir 指令的默认设置;它由 Squid 存储格式(ufs)、缓存所在系统上的目录(/var/spool/squid)组成,以兆字节为单位的磁盘空间大小(分别为16256 ,最后包含 Squid 存储格式(ufs)。
  3. 在同一配置文件中,确保 http_access allow localnet 指令已被取消注释。这允许来自 localnet ACL 的流量(在 Red Hat Enterprise Linux 上的 Squid 默认安装中自动配置)。它将允许任何现有 RFC1918 网络上的客户端计算机通过代理进行访问,这足以满足这个简单示例。
  4. 在同一配置文件中,确保 see _hostname 指令未注释,并且已配置为计算机的主机名。该值应该是主机的完全限定域名(FQDN):
    visible_hostname squid.example.com
    
  5. 以 root 身份,输入以下命令启动 squid 守护进程。由于这是 squid 首次启动时,这个命令会按照 cache_dir 指令上方指定的缓存目录初始化,然后启动守护进程:
    ~]# systemctl start squid.service
    确保 squid 启动成功。输出将包括以下信息,只有时间戳会有所不同:
    ~]# systemctl status squid.service
    squid.service - Squid caching proxy
       Loaded: loaded (/usr/lib/systemd/system/squid.service; disabled)
       Active: active (running) since Thu 2014-02-06 15:00:24 CET; 6s ago
    
  6. 确认 squid 进程 ID(PID)已作为受限服务启动,如 squid_var_run_t 值所示:
    ~]# ls -lZ /var/run/squid.pid 
    -rw-r--r--. root squid unconfined_u:object_r:squid_var_run_t:s0 /var/run/squid.pid
    
  7. 此时,连接到先前配置的 localnet ACL 的客户端计算机能够将此主机的内部接口用作其代理。这可以在适用于所有常见 Web 浏览器或系统范围的设置中配置。Squid 现在侦听目标计算机的默认端口(TCP 3128),但目标计算机将仅允许通过通用端口与 Internet 上的其他服务的传出连接。这是由 SELinux 本身定义的策略。SELinux 将拒绝对非标准端口的访问,如下一步中所示:
  8. 当客户端通过 Squid 代理(如侦听 TCP 端口 10000 的网站)使用非标准端口发出请求时,会记录类似如下的拒绝:
    SELinux is preventing the squid daemon from connecting to network port 10000
    
  9. 要允许此访问,必须修改 squid_connect_any 布尔值,因为它默认是禁用的:
    ~]# setsebool -P squid_connect_any on
    注意
    如果您不希望 setsebool 更改在重新引导后保留,则不要使用 -P 选项。
  10. 现在,客户端可以访问 Internet 上的非标准端口,因为现在允许 Squid 代表其客户端发起到任何端口的连接。