Debian / Ubuntu Linux: Install SquidGuard Web Filter Plugin For Squid 3.x To Block Unwanted Sites

by on August 21, 2012 · 26 comments· LAST UPDATED June 11, 2013

in , ,

How do I install and configure SquidGuard - a web filter plugin for Squid to restrict access to domains/URLs based upon access control lists? How do I block porn, gambling, and other web-sites using squid proxy server version 3.x under Debian or Ubuntu Linux server for my school?

Tutorial details
DifficultyIntermediate (rss)
Root privilegesYes
Estimated completion time20 minutes
squidGuard is flexible and ultra fast filter, redirector and access controller plugin for squid proxy server (it works with both squid version 2.x and 3.x). It lets you define multiple access rules with different restrictions for different user groups on a squid cache. squidGuard uses squid's standard redirector interface.

Step #1: Install squidguard

Open a terminal and type the following command as root on the server:
# apt-get install squidguard

Step #2: Install Blacklist

The blacklists are the heart of every URL filter. Squidgurd supports both free and commercial distributions of blacklists on the net or create and use your own (or any combination of them). List of free databases:

  1. MESD blacklists (free).
  2. Shalla's Blacklists (free for non commercial/private use).
  3. Urlblacklist (commercial)

Use wget command to download blacklists from as follows:
# cd /tmp
# wget -c

Sample outputs:

--2012-08-22 00:34:16--
Connecting to||:80... connected.
HTTP request sent, awaiting response... 206 Partial Content
Length: 9935263 (9.5M), 7448411 (7.1M) remaining [application/x-tar]
Saving to: `shallalist.tar.gz'
100%[++++++++++++++============================================>] 99,35,263    475K/s   in 16s
2012-08-22 00:34:33 (459 KB/s) - `shallalist.tar.gz' saved [9935263/9935263]

Untar tar ball, enter:
# tar -zxvf shallalist.tar.gz
Sample outputs:


In this example, install porn blacklist as follows using the cp command:
# cp -avr BL/porn/ /var/lib/squidguard/db/
Sample outputs:

`BL/porn/' -> `/var/lib/squidguard/db/porn'
`BL/porn/domains' -> `/var/lib/squidguard/db/porn/domains'
`BL/porn/urls' -> `/var/lib/squidguard/db/porn/urls'

Finally, create the database from text files as follows:
# cd /var/lib/squidguard/db/porn
# squidGuard -b -C domains
# squidGuard -b -C urls

Sample outputs:

Processing file and database /var/lib/squidguard/db/porn/domains
    [==================================================] 100 % done
Processing file and database /var/lib/squidguard/db/porn/urls
    [==================================================] 100 % done


  • -b : Show on progress bar when updating the blacklists.
  • -C fileName : Create new .db files from urls/domain files, which are specified in "fileName".

Set permissions so that squid can read the files using chown command:
# chown proxy:proxy -R /var/lib/squidguard/db/

Step #3: Configure Squid 3

I'm assuming that Squid 3 is installed and configured properly. Edit /etc/squid3/squid.conf, enter:
# vi /etc/squid3/squid.conf
You need to specify the location of the executable for the URL rewriter using url_rewrite_program as follows:

url_rewrite_program /usr/bin/squidGuard

Save and close the file.

Step #4: Configure SquidGuard

Finally edit /etc/squid/squidGuard.conf, enter:
# vi /etc/squid/squidGuard.conf
Add the following directives:

## Block adult/porn sites for school  ##
dest porn {
        domainlist      porn/domains
        urllist         porn/urls

Edit / update acl as follows:

acl {
        default {
                pass  !porn all

Save and close the file. Create a blocked.html on web server:

		<title>URL Blocked</title>
		<h1>URL Blocked</h1>
		<p>Access to this site / url has been blocked.</p>
		<p>If you think this is an error, please contact the help-desk:</p>
		<p>Call us - 123-456-789 (ext. 333)</p>
		<p>Email us -</p>

Finally, reload the squid 2/3 proxy server:
# /usr/sbin/squid3 -k reconfigure
Verify that both squid and squidguard working properly, run:
# tail -f /var/log/squid3/cache.log
Sample outputs:

2012/08/22 01:23:40| Processing Configuration File: /etc/squid3/squid.conf (depth 0)
2012/08/22 01:23:40| Squid modules loaded: 0
2012/08/22 01:23:40| Adaptation support is off.
2012/08/22 01:23:40| Store logging disabled
2012/08/22 01:23:40| DNS Socket created at [::], FD 8
2012/08/22 01:23:40| DNS Socket created at, FD 9
2012/08/22 01:23:40| Adding nameserver from /etc/resolv.conf
2012/08/22 01:23:40| helperOpenServers: Starting 5/5 'squidGuard' processes
2012/08/22 01:23:40| Accepting  HTTP connections at [::]:3128, FD 30.
2012/08/22 01:23:40| HTCP Disabled.
2012/08/22 01:23:40| Loaded Icons.
2012/08/22 01:23:40| Ready to serve requests.

Step #5: Verify the configuration

Type the following command to verify that squidguard is working and blocking the urls:

echo "http://DOMAIN-NAME-HERE / - - GET" | squidGuard -d
echo " / - - GET" | squidGuard -d

Sample outputs:

2012-08-22 01:26:05 [3365] New setting: dbhome: /var/lib/squidguard/db
2012-08-22 01:26:05 [3365] New setting: logdir: /var/log/squid3
2012-08-22 01:26:05 [3365] destblock good missing active content, set inactive
2012-08-22 01:26:05 [3365] destblock local missing active content, set inactive
2012-08-22 01:26:05 [3365] init domainlist /var/lib/squidguard/db/porn/domains
2012-08-22 01:26:05 [3365] loading dbfile /var/lib/squidguard/db/porn/domains.db
2012-08-22 01:26:05 [3365] init urllist /var/lib/squidguard/db/porn/urls
2012-08-22 01:26:05 [3365] loading dbfile /var/lib/squidguard/db/porn/urls.db
2012-08-22 01:26:05 [3365] squidGuard 1.4 started (1345578965.473)
2012-08-22 01:26:05 [3365] Info: recalculating alarm in 23635 seconds
2012-08-22 01:26:05 [3365] squidGuard ready for requests (1345578965.476)
2012-08-22 01:26:05 [3365] source not found
2012-08-22 01:26:05 [3365] no ACL matching source, using default /- - -
2012-08-22 01:26:05 [3365] squidGuard stopped (1345578965.477)

Or you can see the following in browser:

This URL Has Been Blocked - Opera Browser - SquidGuard with Squid 3 Proxy Server

Fig.01: SquidGuard in action

How do I block other categories?

Update /etc/squid/squidGuard.conf as follows. Define your categories. Just like you did above for porn:

dest gamble {
        domainlist      gamble/domains
        urllist         gamble/urls
dest alcohol {
        domainlist      alcohol/domains
        urllist         alcohol/urls

Update acl entry as follows:

acl {
        default {
                pass  !porn !gamble !alcohol all

You also need to install database in /var/lib/squidguard/db/ directory:
# cd /tmp
# cp -avr BL/alcohol/ /var/lib/squidguard/db/
# cp -avr BL/gamble/ /var/lib/squidguard/db/

To initializing the blacklists, run:
# squidGuard -C all
Or just initializing newly created categories:
# squidGuard -C /var/lib/squidguard/db/alcohol/domains
squidGuard -C /var/lib/squidguard/db/alcohol/urls

Finally, set permissions:
# chown proxy:proxy -R /var/lib/squidguard/db/
Reload the squid 3:
# /usr/sbin/squid3 -k reconfigure

Do not allow URL filter bypass by the IP addresses

To make sure that users don't bypass the URL filter by simply using the IP addresses instead of the FQDNs, edit acl entry as follows with !in-addr directive:

acl {
        default {
                pass  !porn !gamble !alcohol !in-addr all

Reload the squid as follows:
# /usr/sbin/squid3 -k reconfigure

Tweet itFacebook itG+ itDownload PDF versionFound an error/typo on this page?

{ 26 comments… read them below or add one }

1 muzzo August 22, 2012 at 2:34 am

Does it block ultrasurf? How do i blok unwanted or timely block certain http.sites..or httpa site?


2 CTime August 22, 2012 at 5:56 am

Very good tutorial. Thank you very much!

Seems really useful to me!


3 Astax August 22, 2012 at 6:25 am

Is it possible to block https websites?


4 milano94 September 3, 2012 at 1:57 pm

I don’t think squidguard capable to blocking https website,but you could consider using iptables as an alternative


5 diego July 13, 2013 at 12:58 pm

you should block from squid.conf

Look for

acl Safe_ports port 443 # https

and comment the line, then reload squid.


6 bords300 August 23, 2012 at 1:41 am

Can you put the server inline (between the router and cable modem) to filter the URL of the all PC’s behind the router?


7 iAppleFanBoie August 23, 2012 at 2:00 pm

Yes, just put squid proxy in transparent mode and users won’t notice it at all.


8 Ugyen November 19, 2012 at 4:50 am

i was just confused, i did everything as show here, but the main problem is that all sites are getting blocked?
i m not sure, maybe i lacked somewhere in the configuration?
need some help pls…Thanks


9 mmajor December 19, 2012 at 2:41 pm

Very good tutorial. Thank you very much!


10 Anish January 29, 2013 at 2:21 pm

Yes, we block the porn sites. Is it possible to block particular URL- ??


11 Pitto March 25, 2013 at 2:54 pm

Lovely tutorial but my squid will not start if I add “url_rewrite_program /usr/bin/squidGuard” to my squid.conf

If I do a test with “echo “ / – – GET” | squidGuard -d” it works perfectly…

What is wrong?


12 ukfromit March 7, 2014 at 11:42 am

Attention Pitto.

You have to check our squidGuard.conf file

sudo vi /etc/squid/squidGuard.conf


13 Andrew April 30, 2013 at 4:26 am

I do not understand the line:

Save and close the file. Create a blocked.html on web server:

what web server? I made the blocked.html file but where do I put it?


14 sanny May 1, 2013 at 2:33 pm


I am also confused about this line:
Create a blocked.html on web server:

what is the location to save this file?


15 nixCraft June 11, 2013 at 1:18 pm

@ Andrew / sanny,

You need to install Apache2 and put file in /var/www/ directory.



16 Harkirat Behl December 5, 2014 at 10:51 am

Enter the IP address of your new Proxy server
what does this mean?


17 Charles June 10, 2013 at 8:51 pm


I’ve put together a little script that will update that blacklists. Basically it will download, extract, move the files into place, rebuild the squidGuard databases, and reload the squidGuard processes. Will also send email notifying of success or failure.

With minor modifications it should work on any system. Tested on Ubuntu 10.04 with distro squid3, and squidGuard 1.6 compiled from

Feel free to download at hopefully it will be of use to someone.


18 SAMEE ULLAH December 14, 2013 at 3:17 am

Dear Tutor,

Please help us in blocking facebook with I have tried it using Squid on CentOS and DansGuardian for url filtering. But all in vain because users are successful in wasting their time by using fb all day long.

Please provide UNIX based perfect and industry standard solution to block specifically fb with HTTPS.

Best Regards,
Virtual University of Pakistan


19 Prosper March 20, 2014 at 2:24 pm


I tried to follow through with the tutorial, but the thing is, I’m new and a novice, so I will just describe my situation and you guys should help me through it pls.

I have a simple network with about 20 users, A Cisco 1940 Series router with IOS 15.01, which is connected to the ISP modem on port g0/1.

The router’s g0/0 interface is connected to a switch where all the hosts are connected. the Router’s g0/0 interface is, cos I’m using a network

I also have a Linux Server with Ubuntu 12.04LTS installed which will act my my Transparent Proxy server to block all unwanted websites (facebook, politics, porn, https) and manage bandwidth, I have installed Squid on the Linux Server. The Linux server IP is

Can anyone please help me with the configuration (on squid, linux and router) required to achieve this?



20 Vasanth August 26, 2014 at 6:29 pm

please let me know is there have any possibilities to unblock sites by domain names using wiildcard *.ph


21 mrd3 November 16, 2014 at 7:02 am

Having error i this part sir. What seems to be the error? I already chown to proxy:proxy
Finally, create the database from text files as follows:
# cd /var/lib/squidguard/db/porn
# squidGuard -b -C domains
# squidGuard -b -C urls


22 mrd3 November 16, 2014 at 7:04 am

Having error i this part sir. What seems to be the error? I already chown to proxy:proxy.

Finally, create the database from text files as follows:
# cd /var/lib/squidguard/db/porn
# squidGuard -b -C domains
# squidGuard -b -C urls

Nothing happens when I typed these commands.


23 Muhammad anis November 19, 2014 at 7:15 am

Please provide UNIX based perfect and industry standard solution to block specifically facebook with HTTPS


24 Harkirat Behl December 2, 2014 at 7:53 am

Squidguard works fine with the echo command but
Squidguard is not blocking via browser


25 mohit December 31, 2014 at 5:01 am

is there any process to unblock the proxy site…


26 Jose Fuentes March 11, 2015 at 9:56 pm

Only works witch echo blocking websites but is not working via broser, what can i do?


Leave a Comment

Tagged as: , , , , , , ,

Previous Faq:

Next Faq: