19.4. 配置示例
19.4.1. Squid 连接到非标准端口
以下示例提供了 SELinux 如何通过强制上述布尔值补充 Squid 的真实演示,默认情况下仅允许访问某些端口。此示例随后将演示如何更改 布尔值并演示允许访问。
请注意,这只是一个示例,并演示 SELinux 如何影响简单的 Squid 配置。Squid 综合文档已超出本文档的讨论范畴。详情请查看官方 Squid 文档。此示例假定 Squid 主机有两个网络接口,即 Internet 访问,并且任何防火墙已配置为允许使用 Squid 侦听的默认 TCP 端口(TCP 3128)对内部接口进行访问。
- 确认已安装了 squid :
~]$ rpm -q squid package squid is not installed
如果没有安装该软件包,以 root 用户身份使用yum
工具进行安装:~]# yum install squid
- 编辑主配置文件
/etc/squid/squid.conf
,并确认cache_dir
指令已取消注释,并类似于以下内容:cache_dir ufs /var/spool/squid 100 16 256
此行指定要在本示例中使用的cache_dir
指令的默认设置;它由 Squid 存储格式(ufs
)、缓存所在的系统上的目录(/var/spool/squid
)、要用于缓存的磁盘空间量(100
),最后是要创建缓存的第一个级别和第二级缓存目录的数量(分别为16
和256
)。 - 在同一配置文件中,确保
http_access allow localnet
指令已取消注释。这允许来自localnet
ACL 的流量,该流量在 Red Hat Enterprise Linux 上的 Squid 的默认安装中自动配置。它将允许任何现有 RFC1918 网络上的客户端计算机通过代理进行访问,这足以满足这个简单示例。 - 在同一配置文件中,确保
visible_hostname
指令已取消注释,并且配置为计算机的主机名。该值应该是主机的完全限定域名(FQDN):visible_hostname squid.example.com
- 以 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
- 确认
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
- 此时,连接到之前配置的
localnet
ACL 的客户端机器可以成功使用此主机的内部接口作为其代理。这可以在适用于所有常见 Web 浏览器或系统范围的设置中配置。Squid 现在侦听目标计算机的默认端口(TCP 3128),但目标计算机将仅允许通过通用端口与 Internet 上的其他服务的传出连接。这是由 SELinux 本身定义的策略。SELinux 将拒绝对非标准端口的访问,如下一步中所示: - 当客户端通过 Squid 代理(如侦听 TCP 端口 10000 的网站)使用非标准端口发出请求时,会记录类似如下的拒绝:
SELinux is preventing the squid daemon from connecting to network port 10000
- 要允许此访问,必须修改
squid_connect_any
布尔值,因为它默认是禁用的:~]# setsebool -P squid_connect_any on
注意如果您不希望 setsebool 更改在重启后保留,请不要使用 the-P
选项。 - 现在,客户端可以访问 Internet 上的非标准端口,因为现在允许 Squid 代表其客户端发起到任何端口的连接。