3. Proxy amb Squid
Contingut
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.
- tag acl: buscar la línia
- 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ó.
- Podran accedir en horari de classe a totes les pàgines web excepte les prohibides al fitxer
- 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.
- Només podran accedir a les pàgines web autoritzades que apareixeran a un fitxer
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