How to Create an HTTP Proxy Using Squid on CentOS 8

How to Create an HTTP Proxy Using Squid on CentOS 8

Squid is a caching and forwarding HTTP web proxy. It has a wide variety of uses, including speeding up a web server by caching repeated requests, caching web, DNS and other computer network lookups for a group of people sharing network resources, and aiding security by filtering traffic.

An HTTP proxy acts as a high-performance content filter on traffic received by an HTTP client and HTTP server. The HTTP proxy protocol routes client requests from web browsers to the internet and supports rapid data caching.

Create an HTTP proxy using squid on CentOS 8; Through this tutorial, we will learn how to create an HTTP proxy using squid on centOS 8.

How to Create an HTTP Proxy Using Squid on CentOS 8

Follow the following steps to create an HTTP proxy using squid on CentOS 8:

  • Step 1 – Update System Packages
  • Step 2 – Install Squid Proxy Server
  • Step 3 – Configure IP Based Authentication
  • Step 4 – Configure User Based Authentication
  • Step 5 – Configure Combined Authentication
  • Step 6 – Configure Squid to Anonymize Traffic
  • Step 7 – Test Squid Proxy

Step 1 – Update System Packages

First of all, open terminal or command line and execute the following command to update base system with the latest available packages:

dnf update -y

Step 2 – Install Squid Proxy Server

Execute the following command on command line or terminal to install squid proxy server:

dnf install squid -y

Once the installation is completed, execute the following command line or terminal to start the Squid proxy service and enable it to start at reboot:

systemctl start squid
systemctl enable squid

Step 3 – Configure IP Based Authentication

Execute the following command on command line or terminal to configure ip based authentication Squid using the file at /etc/squid/squid.conf:

nano /etc/squid/squid.conf

Add the following line at the beginning of the file:

acl user1 src 192.168.0.10
acl user2 src 192.168.0.11
http_access allow user1 user2

Save and close the file when we are finished, then restart the Squid service to apply the changes:

systemctl restart squid

In the above step, substitute your relevant information as below:

user1 and user2 is the name that identifies the client computers.

192.168.0.10 and 192.168.0.11 is the IP address of the client computer.

Step 4 – Configure User Based Authentication

Now, execute the following command on command line or terminal to configure Squid to authenticate a client with usernames and passwords.

First, install the Apache utility package in your system:

dnf install httpd-tools -y

Next, create a file to store Squid users and passwords and change the ownership of the password file:

touch /etc/squid/squid_passwd
chown squid /etc/squid/squid_passwd

Next, create a new squid user with name user1 using the following command:

htpasswd /etc/squid/squid_passwd user1

We will be asked to create a password for this user as shown below:

New password:
Re-type new password:
Adding password for user user1

Next, create another user named user2 with the following command:

htpasswd /etc/squid/squid_passwd user2

Provide a password for this user as shown below:

New password:
Re-type new password:
Adding password for user user2

We can now verify both users with the following command:

cat /etc/squid/squid_passwd

You should get the following output:

user1:$apr1$szXO3OTj$37MuRy2V06mIAOiRpFjnr1
user2:$apr1$MCAckv0h$0VwDLLhAfMLaLm3Xvk3H/0

Next, edit the Squid configuration file:

nano /etc/squid/squid.conf

Add the following lines at the beginning of the file:

auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/squid_passwd
acl ncsa_users proxy_auth REQUIRED
http_access allow ncsa_users

Save and close the file, then execute the following command on command line or terminal to restart the Squid proxy service to make the changes:

systemctl restart squid

Step 5 – Configure Combined Authentication

Then execute the following command on the command line or terminal to configure Squid to authenticate a client based on the IP address and username/password.

Edit the Squid default configuration file:

nano /etc/squid/squid.conf

Find the following lines which we added earlier:

auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/squid_passwd
acl ncsa_users proxy_auth REQUIRED
http_access allow ncsa_users
acl user1 src 192.168.0.10
acl user2 src 192.168.0.11
http_access allow user1 user2

And replace them with the following lines:

acl user1 src 192.168.0.10
acl user2 src 192.168.0.11
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/squid_passwd
acl ncsa_users proxy_auth REQUIRED
http_access allow user1 user2 ncsa_users

Save and close the file, then execute the following command on command line or terminal to restart the Squid proxy service to make the changes:

systemctl restart squid

Step 6 – Configure Squid to Anonymize Traffic

Next move, we will need to add some rules to mask client IP addresses from the servers that receive traffic from your Squid HTTP proxy.

We can do it by editing the Squid default configuration file:

nano /etc/squid/squid.conf

Add the following lines at the beginning of the file:

forwarded_for off
request_header_access Allow allow all
request_header_access Authorization allow all
request_header_access WWW-Authenticate allow all
request_header_access Proxy-Authorization allow all
request_header_access Proxy-Authenticate allow all
request_header_access Cache-Control allow all
request_header_access Content-Encoding allow all
request_header_access Content-Length allow all
request_header_access Content-Type allow all
request_header_access Date allow all
request_header_access Expires allow all
request_header_access Host allow all
request_header_access If-Modified-Since allow all
request_header_access Last-Modified allow all
request_header_access Location allow all
request_header_access Pragma allow all
request_header_access Accept allow all
request_header_access Accept-Charset allow all
request_header_access Accept-Encoding allow all
request_header_access Accept-Language allow all
request_header_access Content-Language allow all
request_header_access Mime-Version allow all
request_header_access Retry-After allow all
request_header_access Title allow all
request_header_access Connection allow all
request_header_access Proxy-Connection allow all
request_header_access User-Agent allow all
request_header_access Cookie allow all
request_header_access All deny all

Save and close the file, then execute the following command on command line or terminal to restart the Squid proxy service to make the changes:

systemctl restart squid

Step 7 – Test Squid Proxy

Finally, Squid proxy server is configured to accept client connections based on the IP address and username/password and anonymously handle Internet traffic.

Recommended CentOS Tutorials

AuthorAdmin

My name is Devendra Dode. I am a full-stack developer, entrepreneur, and owner of Tutsmake.com. I like writing tutorials and tips that can help other developers. I share tutorials of PHP, Python, Javascript, JQuery, Laravel, Livewire, Codeigniter, Node JS, Express JS, Vue JS, Angular JS, React Js, MySQL, MongoDB, REST APIs, Windows, Xampp, Linux, Ubuntu, Amazon AWS, Composer, SEO, WordPress, SSL and Bootstrap from a starting stage. As well as demo example.

Leave a Reply

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