Diferència entre revisions de la pàgina «ASIX/M11/UF3/EX3»

De Lordwektabyte Wiki
Salta a la navegació Salta a la cerca
m (Guillem ha mogut M11/UF3/EX3 a ASIX/M11/UF3/EX3 sense deixar una redirecció: Crear subnivell ASIX)
 
(Hi ha 16 revisions intermèdies del mateix usuari que no es mostren)
Línia 8: Línia 8:
 
*La xarxa interna tindrà l’identificador 192.168.1.0/24.
 
*La xarxa interna tindrà l’identificador 192.168.1.0/24.
  
==Procediment==
+
Instal·larem Squid amb la comanda
Instal·lar i configurar bàsicament: http://www.alcancelibre.org/staticpages/index.php/19-0-como-squid-general
 
 
<source>apt install squid3</source>
 
<source>apt install squid3</source>
 +
 +
i l'engegarem i habilitarem 'on-boot'' amb
 +
<source>guillem@squid-server:~$ sudo systemctl start squid
 +
guillem@squid-server:~$ sudo systemctl enable squid</source>
 +
 +
Podeu comprovar que funciona i està escoltant pel port
 +
Comprovació que funciona i està escoltant al port 3128 (des del client):
 +
<source>telnet ip 3128</source>
  
 
Un cop instal·lat:
 
Un cop instal·lat:
*Els fitxers de configuració es troben a /etc/squid” o bé a /etc/squid3”
+
*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
+
*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 <code>acl localnet src (...)</code> i treure el comentari. Editar la xarxa si cal.
 +
:*tag ''http_access'': buscar la línia <code>http_access allow localnet</code> 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
 +
<source>acl prohibit url_regex youtube sex
 +
http_access deny prohibit</source>
 +
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):
 +
<source>debug_options ALL,1 33,2</source>
 +
 
 +
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 <code>/etc/squid/squid.conf</code> per a afegir-hi les ACLs corresponents i aplicar-les en l'ordre convenient
 +
<source>
 +
#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
 +
</source>
 +
 
 +
Els arxius per a gestionar els dominis permesos i dominis prohibits:
 +
<source>/etc/squid/permesos</source>
 +
<source>
 +
.empresa.com
 +
.gmail.com
 +
.lordwektabyte.tk
 +
.linkedin.com
 +
.ubuntu.com
 +
</source>
 +
 
 +
 
 +
<source>/etc/squid/prohibits</source>
 +
<source>
 +
.iescarlesvallbona.cat
 +
.jugalo.info
 +
.centos.org
 +
</source>
 +
 
 +
===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 <code>webs-prohibides-profes</code>.
 +
:*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 <code>webs-autoritzades-alumnes</code>.
 +
:*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''.
 +
<source>zypper in apache2 apache-utils</source>
 +
 
 +
Una vegada complert el requeriment, podem configurar Squid amb les noves ACLs i les aplicarem segons ens convingui:
 +
<source>
 +
#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
 +
</source>
 +
 
 +
===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:
 +
*<source>apt install squidguard</source>
 +
*Editar <code>/etc/squidguard/squidGuard.conf</code>
 +
*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).
 +
<source>squidGuard -d -C all
 +
chown -R <squiduser> /var/lib/squidguard/*</source>
 +
 
 +
Un fitxer bàsic d’exemple seria aquest. Cal assegurar-se que dbhome i logdir apunten a directoris correctes:
 +
<source>
 +
#
 +
# CONFIG FILE FOR SQUIDGUARD
 +
#
 +
 
 +
dbhome /var/lib/squidguard/db
 +
logdir /var/log/squidguard/logs
  
Obriu una consola per editar els fitxers de configuració i una altra pels fitxers de log.
+
dest porn {
 +
        domainlist porn/domains
 +
        urllist porn/urls
 +
        }
  
 +
acl {
 +
        default {
 +
                pass !porn all
 +
                redirect http://localhost/block.html
 +
        }
 +
}
 +
</source>
  
Comprovació que funciona i està escoltant al port 3128 (des del client):
+
*Cal assegurar-se que els directoris de la base de dades (categories) es corresponen als que escriviu al fitxer squidGuard.conf.
<source>telnet ip 3128</source>
+
 
Apareixerà text que podem veure que pertany al proxy.
+
Podeu provar el funcionament sense Squid (prova a mà del redirector):
 +
<source>echo "http://www.example.com 10.0.0.1/ - - GET" | squidGuard -c /etc/squidguard/squidGuard.conf -d</source>
 +
<source>
 +
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)
 +
</source>
 +
 
 +
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ó):
 +
<source>url_rewrite_program /usr/local/bin/squidGuard -c /usr/local/squidGuard/squidGuard.conf</source>
 +
====Solució====

Revisió de 11:31, 15 abr 2020

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ó