home       inleiding       sysadmin       services       links       bash       werk       nothing      

squid & squidguard

 

  1. opbouw testomgeving
    opzet-squid-iptables-2016

     
    In virtualbox bouwen we een internal-network 172.16/16 met als naam FWnet.
    In dit FW-net zitten,
    een squid/firewall, iptbls-fw, met aan de binnenkant IP4-address 172.16.0.1,
    een mint-client met als ipv4-address 172.16.1.123,
    en een apache2 server (www-binnen) op 172.16.10.100 en 172.16.10.101 .
     
    De buitenkant van de machine iptbls-fw neemt deel aan het 'lokale'-netwerk van onze setup (10.104/16 bij syntra).
    In dit specifieke geval gebruik ik zelf 10.104.120.1/16, maar je kiest zelf een uniek adres in samenspraak met de anderen in het netwerk.
     
    We volgen o.a. de handleiding op http://old.linux800.be/lx-svs-info-squid-squidguard.php
     

  2. opdracht
     
    • installeer squid op de machine iptables/squid genaamd iptbls-fw
    • configureer squid voor netwerk 172.16/16
    • test mint-client naar squid (werkt dit zonder zonder NAT, zie volgend punt)
    • configureer iptbls-fw als een NAT-router en test op de client
    • configureer squidGuard met een blacklist op iptbls-fw
    • test de blacklist op mint-client
    • installeer apache op iptbls-fw en configureer een default page die wordt getoond als squidguard een pagina blacklist
    • configureer iptables als forwarder: GEEN poort 80, wel 53 en 22
    • configureer iptables als input filter: 3128 (squid), 80 (waarschuwingspagina), 22, e.a.
    • configureer de apache-server met een tweede ip-adres en configureer apache virtual hosts met 2 ip's;
    • configureer DNAT op iptables naar de apache-server binnen FWnet. Gebruik poort 80 voor het eerste ip, en poort 8080 voor het tweede ip. test op een client in het netwerk 10.102/16
       
  3. squid op iptbls-fw
     
    • de huidige netwerk-configuratie:
      user@iptbls-fw:~$ ip addr
      2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
      link/ether 08:00:27:51:f2:0e brd ff:ff:ff:ff:ff:ff
      inet 10.104.120.1/16 brd 10.104.255.255 scope global eth0
      valid_lft forever preferred_lft forever
      3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
      link/ether 08:00:27:55:b0:6b brd ff:ff:ff:ff:ff:ff
      inet 172.16.0.1/16 brd 172.16.255.255 scope global eth1
    • als op de machine iptbls-fw de firewall iptables nog geconfigureerd was van een vorige oefening, zorg er dan voor dat iptables niet meer actief is; test vervolgens met:
      user@iptbls-fw:~$ sudo iptables -t filter -L
      Chain INPUT (policy ACCEPT)
      target     prot opt source               destination         
      Chain FORWARD (policy ACCEPT)
      target     prot opt source               destination         
      Chain OUTPUT (policy ACCEPT)
      target     prot opt source               destination         
       
      user@iptbls-fw:~$ sudo iptables -t nat -L
      Chain PREROUTING (policy ACCEPT)
      target     prot opt source               destination         
      Chain INPUT (policy ACCEPT)
      target     prot opt source               destination         
      Chain OUTPUT (policy ACCEPT)
      target     prot opt source               destination         
      Chain POSTROUTING (policy ACCEPT)
      target     prot opt source               destination 

      het is echter altijd beter testen de draaien op clean gecloonde virtuals
       

    • installeer squid
      user@iptbls-fw:~$ sudo apt-get install squid
       
      Reading package lists... Done
      Building dependency tree       
      Reading state information... Done
      The following packages were automatically installed and are no longer required:
      linux-headers-3.19.0-58 linux-headers-3.19.0-58-generic
      linux-image-3.19.0-58-generic linux-image-extra-3.19.0-58-generic
      Use 'apt-get autoremove' to remove them.
      The following extra packages will be installed:
      libecap2 libltdl7 libmnl0 libnetfilter-conntrack3 squid-langpack squid3
      squid3-common
      ... ... ...

       

    • test squid
      user@iptbls-fw:~$ telnet localhost 3128
       
      Trying ::1...
      Connected to localhost.
      Escape character is '^]'.
      ^]
      telnet> quit
      Connection closed.

       

    • configureer squid voor 172.16/16
      user@iptbls-fw:~$ sudo vim /etc/squid3/squid.conf 
       
      ... ... ...
      # Example rule allowing access from your local networks.
      # Adapt to list your (internal) IP networks from where browsing
      # should be allowed
      #acl localnet src 10.0.0.0/8    # RFC1918 possible internal network
       
      acl localnet src 172.16.0.0/16  # RFC1918 possible internal network
       
      #acl localnet src 192.168.0.0/16        # RFC1918 possible internal network
      #acl localnet src fc00::/7       # RFC 4193 local private network range
      #acl localnet src fe80::/10      # RFC 4291 link-local (directly plugged) machines
       
      acl SSL_ports port 443
      acl Safe_ports port 80          # http
      acl Safe_ports port 21          # ftp
      acl Safe_ports port 443         # https
       
      ... ... ... ...
       
      http_access allow localnet
      http_access allow localhost
                                                                         902,1         12%

      uncomment acl localnet src 172.16.0.0/16
      en
      uncomment http_access allow localnet
       
      herstart daarna squid:
      $ sudo service squid3 restart
       

    • configureer de client
       
      In firefox ga naar preferences, advanced, network, settings ...
      proxy-setting-firefox

       ... en vul de juiste velden in ...
       

    • test de client
       
      Ga naar een website:
      squid-access-denied

      ... en in ons geval is het niet gelukt ...
       
      We zien dat deze pagina door squid is gegenereerd, en dat onze firefox-settings correct zijn.
      ... access is denied betekent dat onze acl's niet goed staan, ... of dat we zijn vergeten squid te herstarten ...

      $ sudo service squid3 restart
       
      [sudo] password for bert: 
      squid3 stop/waiting
      squid3 start/running, process 1783

      en nu lukt het wel ...
       

  4. squidGuard
     
    • install
      user@iptbls-fw:~$ sudo apt-get install squidGuard
       
      Reading package lists... Done
      Building dependency tree       
      Reading state information... Done
      ...
      The following NEW packages will be installed:
      libauthen-sasl-perl libencode-locale-perl libfile-listing-perl
      libfont-afm-perl libhtml-form-perl libhtml-format-perl libhtml-parser-perl
      libhtml-tagset-perl libhtml-tree-perl libhttp-cookies-perl
      libhttp-daemon-perl libhttp-date-perl libhttp-message-perl
      libhttp-negotiate-perl libio-html-perl libio-socket-inet6-perl
      libio-socket-ssl-perl liblwp-mediatypes-perl liblwp-protocol-https-perl
      libmailtools-perl libnet-http-perl libnet-smtp-ssl-perl libnet-ssleay-perl
      libsocket6-perl liburi-perl libwww-perl libwww-robotrules-perl squidguard

       

    • inventariseren
       
      We vinden een /etc/squidguard directory met hierin:
      user@iptbls-fw:/etc/squidguard$ ls
      squidGuard.conf.default  squidGuard.conf

      De twee bestanden zijn identiek. Het is dus niet nodig een veiligheidskopie te maken van squidGuard.conf
       
      Verder vinden we de volgende bestanden:

      $ dpkg -L squidguard
       
      /usr/lib/squidguard
      /usr/lib/squidguard/squidguard-data
      /usr/lib/squidguard/add-sg-to-squid
      /usr/lib/squidguard/del-sg-from-squid
      ...
      /usr/share/man/man1/hostbyname.1.gz
      /usr/share/man/man1/update-squidguard.1.gz
      /usr/share/man/man1/sgclean.1.gz
      /usr/share/man/man1/squidGuard.1.gz
      ...
      /usr/share/doc/squidguard
      /usr/share/doc/squidguard/README
      /usr/share/doc/squidguard/README.Debian
      /usr/share/doc/squidguard/copyright
      /usr/share/doc/squidguard/NEWS.Debian.gz
      /usr/share/doc/squidguard/examples
      /usr/share/doc/squidguard/examples/squidGuard.cgi.gz
      /usr/share/doc/squidguard/examples/squidGuard-simple-de.cgi.gz
      /usr/share/doc/squidguard/examples/babel.no
      /usr/share/doc/squidguard/examples/babel.es
      /usr/share/doc/squidguard/examples/babel.de
      /usr/share/doc/squidguard/examples/babel.ru
      /usr/share/doc/squidguard/examples/squidGuardRobot
      /usr/share/doc/squidguard/examples/squidGuardRobot/squidGuardRobot.gz
      /usr/share/doc/squidguard/examples/squidGuardRobot/RobotUserAgent.pm
      /usr/share/doc/squidguard/examples/squidGuardRobot/squidGuardRobot.in.gz
      /usr/share/doc/squidguard/examples/sample.conf
      /usr/share/doc/squidguard/examples/babel.fr
      /usr/share/doc/squidguard/examples/squidGuard-simple.cgi.gz
      /usr/share/doc/squidguard/examples/babel.nl
      /usr/share/doc/squidguard/examples/dest-snippet.txt.gz
      /usr/share/doc/squidguard/examples/babel.en
      /usr/share/doc/squidguard/CONFIGURATION.gz
      /usr/share/doc/squidguard/README.LDAP.gz
      /usr/share/doc/squidguard/changelog.Debian.gz
      /usr/share/doc/squidguard/ANNOUNCE.gz
      ...
      /usr/sbin/update-squidguard
      /usr/bin/hostbyname
      /usr/bin/sgclean
      /usr/bin/squidGuard
      ...
      /etc/squidguard
      /etc/squidguard/squidGuard.conf.default
      /etc/logrotate.d
      /etc/logrotate.d/squidguard
      ...
      /var/lib
      /var/lib/squidguard
      /var/lib/squidguard/db

       

    • minimumconfiguratie
       
      $ sudo vim /etc/squidguard/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
              }
      }

      De bovenstaande 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.

       
      In /var/lib/squidguard/db maak ik een directory webtv met twee subdirectories, domains en urls. Inhoud van de bestanden:

      user@iptbls-fw:/var/lib/squidguard/db$ find . -exec ls -l {} \; -exec cat {} \;
       
      drwxr-xr-x 2 root root 4096 Oct 13 11:55 webtv
      -rw-r--r-- 1 root root 22 Oct 13 11:47 domains
      -rw-r--r-- 1 root root 42 Oct 13 11:54 urls
       
      -rw-r--r-- 1 root root 22 Oct 13 11:47 ./webtv/domains
      vrt.be
      www.vrt.be
      vtm.be
      www.vtm.be
      vier.be
      www.vier.be
       
      -rw-r--r-- 1 root root 42 Oct 13 11:54 ./webtv/urls
      www.ketnet.be/kijken/diepzee/aflevering-4

      bijgevolg zijn straks de 3 domeinen en de ketnet url niet meer beschikbaar.
       

    • test squidguard
       
      user@iptbls-fw:~$ /usr/bin/squidGuard 
       
      2016-10-13 12:11:21 [3214] /usr/bin/squidGuard: can't write to logfile /var/log/squidguard/squidGuard.log
      2016-10-13 12:11:21 [3214] INFO: New setting: dbhome: /var/lib/squidguard/db
      2016-10-13 12:11:21 [3214] INFO: New setting: logdir: /var/log/squid
      2016-10-13 12:11:21 [3214] init domainlist /var/lib/squidguard/db/webtv/domains
      2016-10-13 12:11:21 [3214] init urllist /var/lib/squidguard/db/webtv/urls
      2016-10-13 12:11:21 [3214] /usr/bin/squidGuard: can't write to logfile /var/log/squid/squidGuard.log
      2016-10-13 12:11:21 [3214] INFO: squidGuard 1.5 started (1476353481.669)
      2016-10-13 12:11:21 [3214] INFO: squidGuard ready for requests (1476353481.724)
      ^C

      De volgende melding is niet goed:
      /usr/bin/squidGuard: can't write to logfile /var/log/squid/squidGuard.log
      Pas op, we squidguard gestart als gewone gebruiker, en dan zijn log-files altijd onbeschrijfbaar, maar ....
       
      Als we toch kijken met ls zien we hetvolgende:

      $ ls -ld /var/log/squi*
      drwxr-xr-x 2 proxy proxy 4096 Oct 13 10:51 /var/log/squid3
      drwxr-x--- 2 proxy proxy 4096 Oct 13 11:30 /var/log/squidguard

       
      inderdaad, de log setting in squidGuard.conf is verkeerd:
      logdir /var/log/squid
      en moet worden aangepast naar
      logdir /var/log/squidguard
       

    • test squid + squidguard
       
      We plaatsen nu de volgende regel bovenaan de config van squid3:
      $ sudo vim /etc/squid3/squid.conf
      redirect_program /usr/bin/squidGuard -c /etc/squidguard/squidGuard.conf
      ...

       
      en herstarten squid ...
       
      $ sudo service squid3 restart
       
      Als het niet werkt moet je de log files in
      /var/log/squid en /var/log/squidguard nakijken;
      desnoods kan het helpen /usr/bin/squidGuard of /usr/sbin/squid3 direct als root te starten vanaf de CLI.
       
      In ons geval krijgen we op de test-pc keurig de pagina van perdu.com te zien.
      ...

  5. default page

    We installeren apache2 op iptbls-fw
    en plaatsen de volgende default pagina:
    $ cat /var/www/html/index.html

    ! IK BEN DE FIREWALL  !!<br />
    ! Gij moogt niet binnen !

    Vervolgens passen we de /etc/squidguard/squidGuard.conf file aan:

    # CONFIG FILE FOR SQUIDGUARD
    # minimum configuratie
    dbhome /var/lib/squidguard/db
    logdir /var/log/squidguard
    dest webtv {
        domainlist webtv/domains
        urllist webtv/urls
    }
    acl { default { pass !webtv all
    #redirect http://www.perdu.com/index.html
    redirect http://localhost/index.html
                }
    }

    Vermits squid/squidguard draaien op dezelfde machine is localhost de juiste keuze.

    We herstarten squid:

    # service squid3 restart
    squid3 stop/waiting
    squid3 start/running, process 1520

    en testen op onze client naar http://vrt.be --
    ...
    na een refresh (met flushing of cache op de client) verschijnt onze nieuwe pagina.
     
    vervolg van de de oefening: linux800.be/services/iptables/iptables-squid