LX-SVS-INFO-squid

Updated sep/23/10 15:47

squid en squidGuard - debian

squid is een proxyserver en web-cache daemon.
squidGuard is een plugin in squid waarmee je domeinen kunt blokkeren.

http://en.wikipedia.org/wiki/Squid_proxy

A. squid

  1. installatie

    installeer squid met:

    # apt-get install squid

  2. testen

    De kans is groot dat squid nu reeds actief is en werkt voor de machine localhost; je kan dit testen met:

    # telnet localhost 3128
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    get http://www.perdu.com/index.html
    <html><head><title>Vous Etes Perdu ?</title></head><body><h1>Perdu sur l'Internet ?</h1><h2>Pas de panique, on va vous aider</h2><strong><pre>    * <----- vous &ecirc;tes ici</pre></strong></body></html>
    Connection closed by foreign host.


    of ook met de volgende foute url:

    # telnet localhost 3128
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.

    get http://www.perdu.non
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <HTML><HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
    <TITLE>ERROR: The requested URL could not be retrieved</TITLE>
    <STYLE type="text/css"><!--BODY{background-color:#ffffff;font-family:verdana,sans-serif}PRE{font-family:sans-serif}--></STYLE>
    </HEAD><BODY>
    <H2>The requested URL could not be retrieved</H2>
    <HR noshade size="1px">
    <P>While trying to retrieve the URL:<A HREF="http://www.perdu.non/">http://www.perdu.non/</A>
    <P>The following error was encountered:
    <BLOCKQUOTE>Unable to determine IP address from host name for<I>www.perdu.non</I></BLOCKQUOTE>
    <P>The dnsserver returned:
    <BLOCKQUOTE>Name Error: The domain name does not exist.</BLOCKQUOTE>
    <P>This means that:
    <PRE> The cache was not able to resolve the hostname presented in the URL.  Check if the address is correct. </PRE>
    <P>Your cache administrator is <A HREF="mailto:webmaster">webmaster</A>.
    <BR clear="all">
    <HR noshade size="1px">
    <ADDRESS>
    Generated Thu, 10 Jun 2010 10:11:15 GMT by cassandra (squid/2.7.STABLE3)
    </ADDRESS>
    </BODY></HTML>
    Connection closed by foreign host.


  3. eenvoudige configuratie

    configureer squid nu voor je lokaal netwerk:

    # vim /etc/squid/squid.conf

    plaats het volgende in het begin van de configuratiefile:

    # ...
    visible_hostname <uw hostnaam>
    http_port 3128
    ...

    zoek in de squid.conf file naar "acl localnet" en voeg de volgende tekst in vetjes toe (ook de hekjes om het bestaande localnet af te punten):

    ...
    # acl localnet src 10.0.0.0/8
    # acl localnet src 172.16.0.0/12
    # acl localnet src 192.168.0.0/16
    acl localnet 172.16.0.0/16

    ...

    http_access allow localnet

    http_access allow localhost

  4. squid herstarten

    # /etc/init.d/squid restart


    Kijk of squid draait met ps -A:

    # ps -A | grep squid
    3031 ?        00:00:00 squid
    3033 ?        00:00:00 squid

    Indien squid niet draait kijk dan naar de errormessages die /etc/init.d/squid genereert, en indien je hiervan ook niet wijzer wordt,
    start je squid direct als binary en probeer je zelf te debuggen:

    # /usr/sbin/squid

    2010/06/10 12:26:48| aclParseAclLine: missing ACL type.
    FATAL: Bungled squid.conf line 2580: acl mynet
    Squid Cache (Version 2.7.STABLE3): Terminated abnormally.

  5. proxy client

    Als squid draait, kan je eerst op je eigen machine en daarna op een andere machine de internet-browser configureren met de proxy gegevens van jouw squid,
    vb.: http proxy: 172.16.31.15 port: 3128
    en daarna test je of je kunt surfen via deze proxy.



B. squidguard

squidGuard is een domain blocker. Hij kan werken met blacklists (alles in de blacklist wordt geblokkeerd) of met whitelists (alleen domeinen in de whitelist worden toegestaan)

  1. installeer squidguard

    In deze documentatie benoemen we squidGuard zoals zijn binary geschreven wordt, met een hoofdletter G in het midden. Erg standvastig zijn de makers van squidGuard niet geweest. Het pakket installeren met apt-get doen we zonder hoofdletter, als volgt:

    # apt-get install squidguard


    squidGuard staat niet op de eerste debian dvd, en je moet desgewenst de apt repositories aanpassen

    Je kan squidGuard ook downloaden als .deb pakket en dan installeren met
    dpkg -i

  2. blacklist downloaden

    Dat doen we als volgt:

    # cd ~
    # wget http://www.shallalist.de/Downloads/shallalist.tar.gz

  3. blacklist installeren

    Installeer de blacklist in de directory /var/lib/squidguard/db/


    # tar -xvf shallalist.tar.gz

    # mv BL/* /var/lib/squidguard/db/


  4. Toevoegen als plug-in in squid

    Pas squid.conf aan en voeg de volgende regel toe, ergens bovenaan:



    redirect_program /usr/bin/squidGuard -c /etc/squid/squidguard.conf

  5. squidGuard configureren

    We beginnen alvast met het herbenoemen van /etc/squid/squidGuard.conf zonder hoofdletter G - daarenboven "archiveren" we hem met de extentie ori

    # cd /etc/squid
    # mv squidGuard.conf squidguard.conf.ori

    Nu maken we een minimumconfiguratie:

    #
    vim squidguard.conf
    # CONFIG FILE FOR SQUIDGUARD
    # minimum configuratie

    dbhome /var/lib/squidguard/db
    logdir /var/log/squid

    dest webtv {
            domainlist webtv/domains
            urllist webtv/urls
    }

    acl { default { pass !webtv all
                    redirect http://www.perdu.com/index.html
                    }
    }

    Deze configuratie bestaat uit een declaratie van de blacklist webtv
    en een acl (access control list) die default (iedereen) alles doorgeeft, behalve webtv. Indien een website van de blacklist webtv wordt opgevraagd, geeft squidGuard de website www.perdu.com door.
  6. squid herstarten

    Omdat squidGuard een plug-in is moeten we hem opstarten vanaf squid:


    # /etc/init.d/squid restart

    Kijk met ps -A of squidGuard echt draait, (je moet hem normaal 5 keer zien)
    en reageer op eventuele foutmeldingen door te kijken in de logfiles:

    # tail /var/log/squid/squidGuard.log
    2008-10-13 11:26:39 [9135] init domainlist /var/lib/squidguard/db/adv/domains
    2008-10-13 11:26:39 [9135] /var/lib/squidguard/db/adv/domains: Permission denied
    2008-10-13 11:26:39 [9136] init domainlist /var/lib/squidguard/db/adv/domains
    2008-10-13 11:26:39 [9136] /var/lib/squidguard/db/adv/domains: Permission denied
    2008-10-13 11:26:39 [9137] init domainlist /var/lib/squidguard/db/adv/domains
    2008-10-13 11:26:39 [9137] /var/lib/squidguard/db/adv/domains: Permission denied
    2008-10-13 11:26:39 [9133] /var/lib/squidguard/db/adv/domains: Permission denie


    Repareer zo nodig (in dit geval met # chmod -R 755  /var/lib/squidguard/db/* )

  7. testen

    Test de configuratie op testdomein www.vrt.be
    Kijk voor alle zekerheid eerst of dit domein in webtv/domains is opgenomen:

    # grep "vrt.be" /var/lib/squidguard/db/webtv/domains
    vrt.be
    www.vrt.be


    We stoppen nu een request voor vrt.be in een telnet sessie naar squid:

    # telnet localhost 3128

    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    get http://www.vrt.be
    <html><head><title>Vous Etes Perdu ?</title></head><body><h1>Perdu sur l'Internet ?</h1><h2>Pas de panique, on va vous aider</h2><strong><pre>    * <----- vous &ecirc;tes ici</pre></strong></body></html>
    Connection closed by foreign host.


    We vroegen vrt.be en krijgen perdu.com - squidGuard werkt!

  8. Een nuttige configuratie

    Nu gaan we de configuratie aanpassen zodat die nuttig wordt:

    dbhome /var/lib/squidguard/db
    logdir /var/log/squid

    src admins { ip 172.16.31.101/32 }
    src nt12   { ip 172.16.31.0/28
                 127.0.0.0/8         }
              
    dest webtv {
            domainlist webtv/domains
            urllist webtv/urls
        }
    dest news {
            domainlist news/domains
            urllist news/urls
        }

    acl { nt12 { pass !webtv !news all
            redirect http://www.perdu.com/index.html
            }
        }

    acl { admins { pass all } }

    acl { default { pass none
            redirect http://localhost
            }
        }

    In dit voorbeeld zijn er drie gebruikersgroepen:

    de admins: momenteel maar één lid: 172.16.31.101
    de nt12: de localhost en alle ip-adressen 172.16.31.0 tot 172.16.31.14
    default: alle anderen.

    De admins mogen alles zien, ook vrt.be,
    de nt12 mogen alles zien behalve webtv en news,
    default mag niets, en wordt geredirigeerd naar een lokale webpagina.

  9. en nog eens testen

    Deze keer testen we op een andere manier. We sturen de GET request rechtstreeks naar squidGuard doorheen een pipe met een echo:

    In dit eerste geval gebeurt er niets want 172.16.31.101 is lid van admins.

    #
    echo "http://www.vrt.be 172.16.31.101/ - - GET" | squidGuard -c /etc/squid/squidguard.conf -d
    2010-06-10 13:06:37 [4596] init domainlist /var/lib/squidguard/db/webtv/domains
    2010-06-10 13:06:37 [4596] init urllist /var/lib/squidguard/db/webtv/urls
    2010-06-10 13:06:37 [4596] squidGuard 1.2.0 started (1276167997.108)
    2010-06-10 13:06:37 [4596] squidGuard ready for requests (1276167997.113)
    2010-06-10 13:06:37 [4596] squidGuard stopped (1276167997.115)


    In het volgende geval wordt vrt.be geblokkeerd:

    # echo "http://www.vrt.be 172.16.31.1/ - - GET" | squidGuard -c /etc/squid/squidguard.conf -d
    2010-06-10 13:06:53 [4598] init domainlist /var/lib/squidguard/db/webtv/domains
    2010-06-10 13:06:53 [4598] init urllist /var/lib/squidguard/db/webtv/urls
    2010-06-10 13:06:53 [4598] squidGuard 1.2.0 started (1276168013.063)
    2010-06-10 13:06:53 [4598] squidGuard ready for requests (1276168013.068)
    http://www.perdu.com/index.html 172.16.31.1/- - -
    2010-06-10 13:06:53 [4598] squidGuard stopped (1276168013.069)


    In een derde geval wordt alles geblokkeerd:

    # echo "http://www.google.be 192.168.0.1/ - - GET" | squidGuard -c /etc/squid/squidguard.conf -d

    2010-06-10 13:10:38 [4609] init domainlist /var/lib/squidguard/db/webtv/domains
    2010-06-10 13:10:38 [4609] init urllist /var/lib/squidguard/db/webtv/urls
    2010-06-10 13:10:38 [4609] squidGuard 1.2.0 started (1276168238.882)
    2010-06-10 13:10:38 [4609] squidGuard ready for requests (1276168238.887)
    http://localhost 192.168.0.1/- - -
    2010-06-10 13:10:38 [4609] squidGuard stopped (1276168238.889)


  10. opstarten duurt lang

    Indien het opstarten lang duurt (vooral pornodomains is een hele grote file en die wordt 5 keer gecompileerd bij opstart), kan je eventueel wat bijsturen in je squid.conf file:
    url_rewrite_children 2
    Er worden dan maar 2 instanties opgestart van squidGuard, ipv de gebruikelijke vijf.
  11. whitelist

    Het hierna volgende voorbeeld maakt ook gebruik van een whitelist:
    dbhome /var/lib/squidguard/db
    logdir /var/log/squid

    src admins { ip 172.16.31.101/32 }
    src nt12   { ip 172.16.31.0/28
            127.0.0.0/8    }
    src innocent { ip 172.16.31.128/25 }

    dest webtv {
            domainlist webtv/domains
            urllist webtv/urls
        }

    dest whitelist {
            domainlist wlist/domains
            urllist wlist/urls
        }


    acl { innocent { pass whitelist none
             redirect http://localhost/white.html
            }
        }

    acl { nt12 { pass !webtv all
            redirect http://www.perdu.com/index.html
            }
        }

    acl { admins { pass all } }

    acl { default { pass none
            redirect http://localhost
            }
        }