Follow Techotopia on Twitter

On-line Guides
All Guides
eBook Store
iOS / Android
Linux for Beginners
Office Productivity
Linux Installation
Linux Security
Linux Utilities
Linux Virtualization
Linux Kernel
System/Network Admin
Programming
Scripting Languages
Development Tools
Web Development
GUI Toolkits/Desktop
Databases
Mail Systems
openSolaris
Eclipse Documentation
Techotopia.com
Virtuatopia.com
Answertopia.com

How To Guides
Virtualization
General System Admin
Linux Security
Linux Filesystems
Web Servers
Graphics & Desktop
PC Hardware
Windows
Problem Solutions
Privacy Policy

  




 

 

Red Hat Enterprise Linux 9 Essentials Book now available.

Purchase a copy of Red Hat Enterprise Linux 9 (RHEL 9) Essentials

Red Hat Enterprise Linux 9 Essentials Print and eBook (PDF) editions contain 34 chapters and 298 pages

Preview Book

Chapter 9. Squid Caching Proxy

From the Squid Caching Proxy project page:
"Squid is a caching proxy for the Web supporting HTTP, HTTPS, FTP, and more. It reduces bandwidth and improves response times by caching and reusing frequently-requested web pages. Squid has extensive access controls and makes a great server accelerator."
In Red Hat Enterprise Linux, the squid package provides the Squid Caching Proxy. Run rpm -q squid to see if the squid package is installed. If it is not installed and you want to use squid, run the following command as the root user to install it:
# yum install squid

9.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:
  1. Run getenforce to confirm SELinux is running in enforcing mode:
    $ getenforce
    Enforcing
    
    The getenforce command returns Enforcing when SELinux is running in enforcing mode.
  2. Run service squid start as the root user to start squid:
    # service squid start
    Starting squid:                                            [  OK  ]
    
  3. Run ps -eZ | grep squid to view the squid processes:
    $ ps -eZ | grep squid
    unconfined_u:system_r:squid_t:s0 2522 ?        00:00:00 squid
    unconfined_u:system_r:squid_t:s0 2524 ?        00:00:00 squid
    unconfined_u:system_r:squid_t:s0 2526 ?        00:00:00 ncsa_auth
    unconfined_u:system_r:squid_t:s0 2527 ?        00:00:00 ncsa_auth
    unconfined_u:system_r:squid_t:s0 2528 ?        00:00:00 ncsa_auth
    unconfined_u:system_r:squid_t:s0 2529 ?        00:00:00 ncsa_auth
    unconfined_u:system_r:squid_t:s0 2530 ?        00:00:00 ncsa_auth
    unconfined_u:system_r:squid_t:s0 2531 ?        00:00:00 unlinkd
    
    The SELinux context associated with the squid processes is unconfined_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 the squid_t domain.
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 /etc/squid/squid.conf 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 squid, and, as a consequence, squid failing to start. This example also demonstrates how to then configure the SELinux system to allow squid 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:
  1. Run service squid status to confirm squid is not running:
    # service squid status
    squid is stopped
    
    If the output differs, run service squid stop to stop the process:
    # service squid stop
    Stopping squid:                                            [  OK  ]
    
  2. Run semanage port -l | grep -w squid_port_t to view the ports SELinux allows squid to listen on:
    semanage port -l | grep -w -i squid_port_t
    squid_port_t                   tcp      3128, 3401, 4827
    squid_port_t                   udp      3401, 4827
    
    
  3. Edit /etc/squid/squid.conf as the root user. Configure the http_port option so it lists a port that is not configured in SELinux policy configuration for squid. In this example, squid is configured to listen on port 10000:
    # Squid normally listens to port 3128
    http_port 10000
    
  4. Run the setsebool command to make sure the squid_connect_any Boolean is set to off. This ensures squid is only permitted to operate on specific ports:
    setsebool -P squid_connect_any 0
    
  5. Run service squid start to start squid:
    # service squid start
    Starting squid: ....................                       [FAILED]
    
    An SELinux denial 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
    
  6. For SELinux to allow squid to listen on port 10000, as used in this example, the following command is required:
    # semanage port -a -t squid_port_t -p tcp 10000
    
  7. Run service squid start again to start squid and have it listen on the new port:
    # service squid start
    Starting squid:                                            [  OK  ]
    
  8. Now that SELinux has been configured to allow squid to listen on a non-standard port (TCP 10000 in this example), squid starts successfully on this port.

 
 
  Published under the terms of the Creative Commons License Design by Interspire