How to Install Squid Proxy on Ubuntu

How to Install Squid Proxy on Ubuntu

In web hosting, system administrators often face challenges related to managing internet traffic and ensuring optimal web server performance. One such challenge is efficiently handling the flow of data packets between users and the internet.

This is where proxy servers come into play. A proxy server acts as an intermediary between a user’s computer and the internet, providing various benefits such as improved performance, security, and content filtering.

Squid is a renowned proxy server software that has gained immense popularity among server administrators and webmasters. It’s not just any proxy server; it’s a caching proxy for the Web supporting HTTP, HTTPS, FTP, and more. By deploying Squid on your server, you can cache requested web content, reducing bandwidth usage and speeding up access for users by serving cached content when a request is made.

This tutorial will guide you through the process of installing Squid on an Ubuntu server. By the end of this guide, you’ll have it up and running on your Ubuntu machine.

Let’s get started!

Step 1: Update Your System

Before installing any new software, it’s always a good practice to update your system’s package list. This ensures you get the latest version of the software and its dependencies.

sudo apt update
sudo apt upgrade

Step 2: Install Squid

With your system updated, you can now install Squid directly from the Ubuntu repositories.

sudo apt install squid

Step 3: Configure Squid

Once installed, you’ll need to configure Squid according to your needs. The main configuration file for Squid is located at /etc/squid/squid.conf.

sudo nano /etc/squid/squid.conf

Inside this file, you can set various parameters like ACLs, cache size, and allowed IP ranges. Make sure to read the comments in the configuration file to understand each setting.

Squid Basic Configuration File

# Squid Default Configuration File

# HTTP and HTTPS ports
http_port 3128

# Define the disk cache settings
cache_dir ufs /var/spool/squid 100 16 256

# Access Control Lists (ACLs)
acl localnet src  # RFC 1122 "this" network (LAN)
acl localnet src             # RFC 1918 local private network (LAN)
acl localnet src          # RFC 6598 shared address space (CGN)
acl localnet src         # RFC 3927 link-local (directly plugged) machines
acl localnet src          # RFC 1918 local private network (LAN)
acl localnet src         # RFC 1918 local private network (LAN)
acl localnet src fc00::/7               # RFC 4193 local private network range
acl localnet src fe80::/10              # RFC 4291 link-local (directly plugged) machines

# Safe ports and SSL ports
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
acl Safe_ports port 70          # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http
acl SSL_ports port 443          # https

# Deny requests to certain unsafe ports
http_access deny !Safe_ports

# Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !SSL_ports

# Only allow cachemgr access from localhost
http_access allow localhost manager
http_access deny manager

# We strongly recommend the following be uncommented to protect innocent
# web applications running on the proxy server who think the only
# one who can access services on "localhost" is a local user
http_access deny to_localhost


# Example rule allowing access from your local networks.
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
http_access allow localnet
http_access allow localhost

# And finally deny all other access to this proxy
http_access deny all

# Logging settings
access_log /var/log/squid/access.log squid

# Refresh patterns to determine how frequently Squid checks objects in its cache
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern .               0       20%     4320

# Squid normally listens to port 3128
http_port 3128

# Uncomment and adjust the following to add a disk cache directory.
#cache_dir ufs /var/spool/squid 100 16 256

# Leave coredumps in the first cache dir
coredump_dir /var/spool/squid

# Add any of your own refresh_pattern entries above these.
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern .               0       20%     4320

Step 4: Start and Enable Squid Service

After configuring, start the Squid service and enable it to launch at boot.

sudo systemctl start squid
sudo systemctl enable squid

Step 5: Verify Squid Installation

To ensure that Squid is running correctly, you can check its status.

sudo systemctl status squid

Step 6: Set Up Access Control

Squid provides a robust mechanism to control who can access the web through your proxy. By default, Squid denies access to all requests. You’ll need to set up access control lists (ACLs) to define who can access what.

sudo nano /etc/squid/squid.conf

Find the section on ACLs. To allow all machines on your local network to use the proxy, you might add:

acl localnet src
http_access allow localnet

Remember to deny all other requests:

http_access deny all

Step 7: Configure Cache Settings

Caching is one of the primary features of Squid. You can define how much disk space you want to allocate for caching and where the cache directory is located.

cache_dir ufs /var/spool/squid 100 16 256

This configuration sets up a cache directory at /var/spool/squid with 100MB space.

See also  How to Setup Squid Proxy Server on Linux CentOS 6.3

Example Configuration File:

# Define the port Squid listens on
http_port 3128

# Define the disk cache settings
cache_dir ufs /var/spool/squid 100 16 256

# Access Control Lists (ACLs)
# Define local network
acl localnet src

# Allow local network to use the proxy
http_access allow localnet

# Deny all other access
http_access deny all

# Define the name of the machine (change 'your_hostname' to your machine's hostname)
visible_hostname your_hostname

# Logging settings
access_log /var/log/squid/access.log squid
cache_log /var/log/squid/cache.log

# Refresh patterns to determine how frequently Squid checks objects in its cache
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern .               0       20%     4320

Step 8: Restart Squid to Apply Changes

After making all the necessary configurations, restart Squid to apply the changes.

sudo systemctl restart squid

Step 9: Monitor and Maintain Squid

Regularly check Squid’s logs to ensure it’s operating correctly and efficiently. The logs can be found at /var/log/squid/. Regular maintenance, like clearing the cache or rotating logs, ensures optimal performance.

sudo tail -f /var/log/squid/access.log

Step 10: Set Up Squid as a Transparent Proxy (Optional)

Setting up Squid as a transparent proxy means that the clients in your network will not need to configure their browsers or applications to use the proxy server. Instead, all web traffic will be automatically redirected through the Squid proxy without the client’s knowledge. This is particularly useful in large networks where configuring each client individually would be cumbersome.

See also  How to Configure Squid Proxy Server for Web Content Caching

Here’s how to set up Squid as a transparent proxy:

1. Configure Squid for Transparent Proxying

Edit the Squid configuration file:

sudo nano /etc/squid/squid.conf

Add or modify the following line to enable transparent proxying:

http_port 3128 intercept

2. Redirect Traffic Using iptables

You’ll need to set up `iptables` rules to redirect all web traffic (port 80) to Squid (port 3128).

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

Replace eth0 with the name of your network interface if it’s different.

3. Save iptables Rules

To ensure that the `iptables` rules persist after a reboot, save them:

sudo sh -c "iptables-save > /etc/iptables.rules"

4. Adjust Squid ACLs

By default, Squid denies all traffic and you need to allow the local network. Add or modify the following lines in the Squid configuration:

acl localnet src
http_access allow localnet

Adjust the IP range ( to match your local network.

5. Restart Squid

After making the necessary changes, restart Squid to apply them:

sudo systemctl restart squid

6. Test the Configuration

From a client machine, try accessing a website. If everything is set up correctly, the website should load as expected, and the traffic will pass through the Squid proxy transparently.

7. Monitor Squid Logs

To ensure that the transparent proxy is working correctly, monitor the Squid access logs:

sudo tail -f /var/log/squid/access.log

Commands Mentioned:

  • sudo apt update – Updates the package list for upgrades.
  • sudo apt upgrade – Upgrades all upgradable packages.
  • sudo apt install squid – Installs the Squid proxy server.
  • sudo nano /etc/squid/squid.conf – Opens the main configuration file for Squid.
  • sudo systemctl start squid – Starts the Squid service.
  • sudo systemctl enable squid – Enables the Squid service to start on boot.
  • sudo systemctl restart squid – Restarts the Squid service to apply configuration changes.
  • sudo systemctl status squid – Checks the status of the Squid service.
  • sudo tail -f /var/log/squid/access.log – Monitors the Squid access log in real-time.
  • sudo iptables -t nat -A PREROUTING… – Redirects web traffic to Squid.
  • sudo sh -c “iptables-save > /etc/iptables.rules” – Saves iptables rules.
See also  How to Monitor and Analyze Squid Proxy Server Logs (with Examples)


Congratulations! You’ve successfully installed, configured, and optimized Squid on your Ubuntu server. This powerful proxy server will not only enhance your server’s performance but also provide an added layer of security. By caching frequently accessed content, you’re ensuring faster response times and reduced server load. Moreover, with Squid’s robust access control mechanisms, you can have granular control over who accesses what, adding a layer of security to your network.

Remember, while we’ve covered the basics of setting up Squid, there’s a lot more to explore. Squid offers a plethora of features, from advanced configurations to integration with other software. See our Squid howtos for more tips and tricks.

Whether you’re on a dedicated server, VPS, or cloud hosting setup, Squid can be a valuable asset.

I hope this tutorial has been informative and helpful.

If you have any questions or face any issues, please leave a comment. We’re here to help!


  1. Why should I use Squid on my Ubuntu server?

    Squid is a powerful caching proxy server that can improve your server’s performance by caching frequently accessed web content. It reduces bandwidth usage, speeds up access for users, and provides enhanced security features.

  2. How do I customize Squid configurations?

    You can customize Squid configurations by editing the `/etc/squid/squid.conf` file. This file contains various parameters and settings, each explained with comments, allowing you to tailor Squid to your specific needs.

  3. Can I use Squid with other web servers like Nginx or Apache?

    Yes, Squid can be used in conjunction with other web servers like Nginx or Apache. It acts as an intermediary, handling requests and serving cached content, while the web server handles dynamic content generation.

  4. Is Squid suitable for all types of hosting?

    Squid is versatile and can be integrated into various hosting setups, including dedicated servers, VPS, cloud hosting, and even shared hosting. However, its benefits are most pronounced in environments with significant traffic, where caching can lead to substantial performance improvements.

  5. How do I ensure Squid is running optimally?

    To ensure Squid runs optimally, regularly monitor its performance, check logs for any errors, and keep it updated. Additionally, fine-tune the configurations based on your server’s resources and traffic patterns to achieve the best performance.


Leave a Reply

Your email address will not be published. Required fields are marked *