3. Proxy amb Squid

De Lordwektabyte Wiki
Salta a la navegació Salta a la cerca

Enunciat

Farem la instal·lació bàsica i prova del servidor Squid. El muntatge és senzill. Només cal crear:

  • Un Ubuntu Server com a servidor Squid amb 2 interfícies: NAT i xarxa interna.
  • Un Ubuntu Desktop com a client Web amb targeta a xarxa interna.
  • La xarxa interna tindrà l’identificador 192.168.1.0/24.

Instal·larem Squid amb la comanda

apt install squid3

i l'engegarem i habilitarem 'on-boot amb

guillem@squid-server:~$ sudo systemctl start squid
guillem@squid-server:~$ sudo systemctl enable squid

Podeu comprovar que funciona i està escoltant pel port Comprovació que funciona i està escoltant al port 3128 (des del client):

telnet ip 3128

Un cop instal·lat:

  • Els fitxers de configuració es troben a /etc/squid o bé a /etc/squid3
  • Els fitxers de log es troben a /var/log/squid: cache.log i access.log

Previ

  • Obrir fitxer de configuració /etc/squid.conf.
  • Buscar el bloc ACCESS CONTROLS. Per a permetre als equips d’una xarxa local determinada fer servir el proxy (normalment la xarxa LAN interna):
  • tag acl: buscar la línia acl localnet src (...) i treure el comentari. Editar la xarxa si cal.
  • tag http_access: buscar la línia http_access allow localnet i treure el comentari.
  • Assegurar-se que el servidor Proxy pot anar a internet i pot resoldre noms DNS (provar amb ping a un servidor d’Internet, per exemple 8.8.8.8 i després usar nslookup per a resoldre un nom DNS com ara www.google.es).
  • Al client Web, a preferències, buscar l’opció per configurar el servidor proxy o intermediari:
  • Posar l’adreça IP del servidor Proxy i el port 3128 (si no s’ha canviat).
  • Marcar l’opció de fer servir el mateix servidor proxy per a tots el protocols.
  • Al quadre de text Sense servidor intermediari per afegirem la IP del PfSense i les que volem que es puguin accedir directament sense passar pel proxy (així si el proxy no va podem continuar configurant o accedint a màquines de la xarxa local).
  • Fer una prova de navegació des del client.
  • Podem veure com ens limita el proxy si afegim una nova ACL i la seva http_access associada; per exemple
acl prohibit url_regex youtube sex
http_access deny prohibit

L’efecte serà que si anem a youtube o una URL que contingui la paraula “sex”, es blocarà l’accés (sempre que sigui una petició http. Si és https ens tornarà un error del navegador).


IMPORTANT: Per saber quina regla es compleix, podeu activar opcions de depuració (al fitxer squid.conf):

debug_options ALL,1 33,2

Es veurà quina regla es compleix al fitxer de logs. Cal desactivar aquestes opcions de registre un cop posem el proxy en producció real, ja que consumeix molts recursos.

Exercicis

Exercici 1

  • Volem aplicar restriccions de Squid en una petita empresa.
  • No hi ha autenticació i tots els controls es fan a partir de la IP d’origen.
  • Definiu l’horari de la pausa i la de treball.
  • Definiu també els fitxers de webs permeses i web prohibides.
  • Es vol que des de l’ordinador del jefe es pugui accedir sense restriccions (cap ni una) a internet.
  • Hi ha uns quants llocs web permesos per a qualsevol persona i a qualsevol hora.
  • No es permet l'accés als empleats a webs prohibides durant l'horari de treball, però si en horari de pausa.

Solució

Modificarem l'arxiu /etc/squid/squid.conf per a afegir-hi les ACLs corresponents i aplicar-les en l'ordre convenient

#Ordinador Guillem sense restriccions
acl pc_guillem src 192.168.1.77
http_access allow pc_guillem

#Webs ok
acl dominis_OK dstdomain "/etc/squid/permesos"
http_access allow dominis_OK

#Horari feina
acl dominis_KO dstdomain "/etc/squid/prohibits"
acl horari_feina time MTWHF 9:00-13:00 14:00-18:00
http_access deny dominis_KO horari_feina

#Horari descans
acl horari_descans time MTWHF 13:01-13:59
http_access allow dominis_KO horari_descans

Els arxius per a gestionar els dominis permesos i dominis prohibits:

/etc/squid/permesos
.empresa.com
.gmail.com
.lordwektabyte.tk
.linkedin.com
.ubuntu.com


/etc/squid/prohibits
.iescarlesvallbona.cat
.jugalo.info
.centos.org

Exercici 2

https://stackoverflow.com/questions/3297196/how-to-set-up-a-squid-proxy-with-basic-username-and-password-authentication Volem configurar restriccions al servidor Proxy de manera que els usuaris tinguin l’accés controlat a Internet.

  • En una acadèmia petita es vol controlar l’accés a Internet dels usuaris. Tenim dos grups d’usuaris:
  • Professors
  • Alumnes
  • Tindrem dos blocs d’adreces IP:
  • Professors: 192.168.1.20-192.168.1.40
  • Alumnes: 192.168.1.50-192.168.1.254
  • Cal autenticar els usuaris, i per tant hi ha d’haver un fitxer d’usuaris. (Opcional: Un usuari no es pot autenticar si no és des d’una IP del seu grup).
  • L’horari de classes s’estipula en: 8h a 14:30h de dilluns a divendres i de 15h a 18:30h els dimarts i dijous.
  • Els professors:
  • Podran accedir en horari de classe a totes les pàgines web excepte les prohibides al fitxer webs-prohibides-profes.
  • Fora d’aquest horari, podran accedir a les pàgines web que necessitin sense restricció.
  • Els alumnes:
  • Només podran accedir a les pàgines web autoritzades que apareixeran a un fitxer webs-autoritzades-alumnes.
  • L’horari d’ús per a ells serà de 8h a 14:30h de dilluns a divendres i de 15h a 18:30h els dimarts i dijous.

Solució

Requeriment previ: necessitarem tenir instal·lat un servidor web Apache amb utilitats per a poder fer que el servidor web pugui autenticar per HTTP a partir d'arxius .htaccess i .htpasswd.

zypper in apache2 apache-utils

Una vegada complert el requeriment, podem configurar Squid amb les noves ACLs i les aplicarem segons ens convingui:

#autenticació HTTP
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwd
acl autenticacio_users proxy_auth REQUIRED

#Grups
acl professors proxy_auth profe1
acl alumnes proxy_auth alumne1

#Rang adreces profes i alumnes
acl ip_professors src 192.168.1.20-192.168.1.40
acl ip_alumnes src 192.168.1.50-192.168.1.254

#horari lectiu
acl horari_lectiu time MWF 8:00-14:30 TH 15:00-18:30

#dominis
acl prohibit_profes dstdomain "/etc/squid/prohibit-profes"
acl permes_alumnes dstdomain "/etc/squid/permes-alumnes"

#Autenticacio profes
http_access deny autenticacio_users professors ip_professors horari_lectiu prohibit_profes
http_access allow autenticacio_users professors ip_professors

#Autenticacio alumnes
http_access allow autenticacio_users alumnes ip_alumnes horari_lectiu permes_alumnes

#Fem un "deny all" si no es compleix cap ACL anterior
http_access deny localnet

Exercici 3

SquidGuard és un "redirector" dissenyat per a Squid. - Un redirector és un programa extern que rep la URL que es vol accedir en la petició i fa una comprovació amb ella.

En el cas d’SquidGuard, mira si la URL es troba en alguna categoria en concret de la seva base de dades i si s’ha configurat alguna restricció, retorna a Squid una URL que apunti a una pàgina d’error. Si la URL no es limita, no es torna res a Squid. SquidGuard afegeix un filtrat per bases de dades de llocs web a Internet, que es pot afegir al filtrat que fa Squid per URL (amb paraules clau, per exemple).

Existeixen llistes a internet amb milers de llocs web organitzats per categories. Per exemple, categories com "comerç electrònic", "porno", "armes", etc. que es poden permetre o denegar. Per exemple: http://www.shallalist.de/Downloads/shallalist.tar.gz

Tota la informació per a posar en marxa els filtres amb Squid es troba a: http://squidguard.org/

La forma més ràpida de posar-lo en marxa és:

  • apt install squidguard
  • Editar /etc/squidguard/squidGuard.conf
  • Baixeu i descomprimiu la BD d’un lloc web on hi hagi una blacklist per a squidGuard (http://squidguard.org/blacklists.html). Mireu de posar-la on indica el fitxer de configuració. Podeu veure la quantitat de llocs web catalogats.
  • Compileu la BD (-d per a veure els errors). Es crearan fitxers .db amb les dades dels fitxers de text, en un format binari apte per a fer cerques de forma ràpida (amb els fitxers de text funcionaria però moooooooolt lent).
squidGuard -d -C all
chown -R <squiduser> /var/lib/squidguard/*

Un fitxer bàsic d’exemple seria aquest. Cal assegurar-se que dbhome i logdir apunten a directoris correctes:

#
# CONFIG FILE FOR SQUIDGUARD
#

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

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

acl {
        default {
                pass !porn all
                redirect http://localhost/block.html
        }
 }
  • Cal assegurar-se que els directoris de la base de dades (categories) es corresponen als que escriviu al fitxer squidGuard.conf.

Podeu provar el funcionament sense Squid (prova a mà del redirector):

echo "http://www.example.com 10.0.0.1/ - - GET" | squidGuard -c /etc/squidguard/squidGuard.conf -d
2007-03-25 16:18:05 [30042] squidGuard ready for requests (1174832285.085)
(aquí hi aniria la URL de redirecció si el lloc es bloca, si no, en blanc)
2007-03-25 16:18:05 [30042] squidGuard stopped (1174832285.089)

Ja només resta afegir el redirector a Squid. Busquem al fitxer de Squid el tag url_rewrite_program i el configurem així (busquem primer on es troba el programa squidGuard per posar la ruta correctament, així com la ruta del fitxer de configuració):

url_rewrite_program /usr/local/bin/squidGuard -c /usr/local/squidGuard/squidGuard.conf

Solució