Show Table of Contents
Chapter 20. Squid Caching Proxy
Squid is a high-performance proxy caching server for web clients, supporting FTP, Gopher, and HTTP data objects. It reduces bandwidth and improves response times by caching and reusing frequently-requested web pages.[17]
In Red Hat Enterprise Linux, the squid package provides the Squid Caching Proxy. Enter the following command to see if the squid package is installed:
~]$ rpm -q squid
package squid is not installed
If it is not installed and you want to use squid, use the
yum utility as root to install it:
~]# yum install squid20.1. Squid Caching Proxy and SELinux
When SELinux is enabled, Squid runs confined by default. Confined processes run in their own domains, and are separated from other confined processes. If a confined process is compromised by an attacker, depending on SELinux policy configuration, an attacker's access to resources and the possible damage they can do is limited. The following example demonstrates the Squid processes running in their own domain. This example assumes the squid package is installed:
- Run the
getenforcecommand to confirm SELinux is running in enforcing mode:~]$
getenforceEnforcingThe command returnsEnforcingwhen SELinux is running in enforcing mode. - Enter the following command as the root user to start the
squiddaemon:~]#
systemctl start squid.serviceConfirm that the service is running. The output should include the information below (only the time stamp will differ):~]#
systemctl status squid.servicesquid.service - Squid caching proxy Loaded: loaded (/usr/lib/systemd/system/squid.service; disabled) Active: active (running) since Mon 2013-08-05 14:45:53 CEST; 2s ago - Enter the following command to view the
squidprocesses:~]$
ps -eZ | grep squidsystem_u:system_r:squid_t:s0 27018 ? 00:00:00 squid system_u:system_r:squid_t:s0 27020 ? 00:00:00 log_file_daemonThe SELinux context associated with thesquidprocesses issystem_u:system_r:squid_t:s0. The second last part of the context,squid_t, is the type. A type defines a domain for processes and a type for files. In this case, the Squid processes are running in thesquid_tdomain.
SELinux policy defines how processes running in confined domains, such as
squid_t, interact with files, other processes, and the system in general. Files must be labeled correctly to allow squid access to them.
When the
/etc/squid/squid.conf file is configured so squid listens on a port other than the default TCP ports 3128, 3401 or 4827, the semanage port command must be used to add the required port number to the SELinux policy configuration. The following example demonstrates configuring squid to listen on a port that is not initially defined in SELinux policy configuration for it, and, as a consequence, the server failing to start. This example also demonstrates how to then configure the SELinux system to allow the daemon to successfully listen on a non-standard port that is not already defined in the policy. This example assumes the squid package is installed. Run each command in the example as the root user:
- Confirm the
squiddaemon is not running:~]#
systemctl status squid.servicesquid.service - Squid caching proxy Loaded: loaded (/usr/lib/systemd/system/squid.service; disabled) Active: inactive (dead)If the output differs, stop the process:~]#
systemctl stop squid.service - Enter the following command to view the ports SELinux allows
squidto listen on:~]#
semanage port -l | grep -w -i squid_port_tsquid_port_t tcp 3401, 4827 squid_port_t udp 3401, 4827 - Edit
/etc/squid/squid.confas root. Configure thehttp_portoption so it lists a port that is not configured in SELinux policy configuration forsquid. In this example, the daemon is configured to listen on port 10000:# Squid normally listens to port 3128 http_port 10000
- Run the
setseboolcommand to make sure thesquid_connect_anyBoolean is set to off. This ensuressquidis only permitted to operate on specific ports:~]#
setsebool -P squid_connect_any 0 - Start the
squiddaemon:~]#
systemctl start squid.serviceJob for squid.service failed. See 'systemctl status squid.service' and 'journalctl -xn' for details.An SELinux denial message similar to the following is logged:localhost setroubleshoot: SELinux is preventing the squid (squid_t) from binding to port 10000. For complete SELinux messages. run sealert -l 97136444-4497-4fff-a7a7-c4d8442db982
- For SELinux to allow
squidto listen on port 10000, as used in this example, the following command is required:~]#
semanage port -a -t squid_port_t -p tcp 10000 - Start
squidagain and have it listen on the new port:~]#
systemctl start squid.service - Now that SELinux has been configured to allow Squid to listen on a non-standard port (TCP 10000 in this example), it starts successfully on this port.

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.