Cicle formatiu: Administració de sistemes informàtics en xarxa (ASIX)
Mòdul: 0378. Seguretat i alta disponibilitat
Farem servir un escenari típic de laboratori, semblant al de thos.local:
| Màquina | IP | Rol |
|---|---|---|
srv-proxy (Debian 12) |
192.168.10.10 | Servidor Squid |
pc-client01 |
192.168.10.50 | Client Windows/Linux |
srv-web01 |
192.168.10.20 | Servidor web intern (destinació del reverse proxy) |
| Xarxa interna | 192.168.10.0/24 | LAN de l’aula |
Adapteu les IP i noms d’interfície (ens18, eth0…) al vostre entorn real abans d’executar les
ordres.
Un servidor proxy és un intermediari entre un client i un servidor de destinació que intercepta, filtra o modifica les peticions i respostes. Segons la seva posició i funció, distingim:
accel.| Criteri | Tipus |
|---|---|
| Anonimat | Transparent / Anònim / Elit (no revela ni que hi ha proxy) |
| Protocol | HTTP/HTTPS proxy, SOCKS proxy, DNS proxy |
| Funció principal | Proxy-cache, proxy de filtratge de contingut, proxy d’autenticació, WAF/reverse proxy |
Farem servir Squid, el proxy-cache de referència en entorns Linux.
sudo apt update
sudo apt install -y squid squid-commonServeis i fitxers principals:
| Element | Ruta |
|---|---|
| Configuració principal | /etc/squid/squid.conf |
| Cau en disc | /var/spool/squid |
| Logs d’accés | /var/log/squid/access.log |
| Logs de cau | /var/log/squid/cache.log |
| Binari de gestió | squid -k reconfigure / systemctl |
Fem una còpia de seguretat abans de tocar res:
sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.origConfiguració mínima funcional
(/etc/squid/squid.conf):
# Port d'escolta del proxy
http_port 3128
# Xarxes permeses
acl xarxa_local src 192.168.10.0/24
http_access allow xarxa_local
http_access deny all
# Identificació del cache
visible_hostname srv-proxy.thos.local
cache_mgr admin@thos.localL’ordre de les regles http_access importa: Squid avalua
de dalt a baix i s’atura a la primera que coincideix. Per això deny all sempre ha d’anar al final.
# Cau en memòria RAM (objectes petits, molt consultats)
cache_mem 256 MB
# Cau en disc: tipus ufs, ruta, mida total (MB), nivells de directoris
cache_dir ufs /var/spool/squid 10000 16 256
# Mida màxima/mínima d'objecte que es guarda a la cau
maximum_object_size 100 MB
minimum_object_size 0 KB
# Temps que es manté un objecte encara que el servidor no doni pistes de caducitat
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern \.(deb|rpm|iso)$ 10080 90% 43200
refresh_pattern . 0 20% 4320Inicialitzem l’estructura de directoris de la cau (obligatori la primera vegada):
sudo squid -z
sudo systemctl restart squid
sudo systemctl enable squidComprovació d’estat:
sudo systemctl status squid
sudo tail -f /var/log/squid/cache.logexport http_proxy="http://192.168.10.10:3128"
export https_proxy="http://192.168.10.10:3128"Navegador (Firefox/Chrome): Configuració manual
del proxy → HTTP Proxy 192.168.10.10, port 3128.
Windows: Configuració → Xarxa i
Internet → Proxy → activar “Utilitza un servidor proxy” i
indicar IP i port, o bé via GPO al domini THOS.LOCAL.
Fitxer proxy.pac servit per un web intern:
function FindProxyForURL(url, host) {
if (isInNet(host, "192.168.10.0", "255.255.255.0")) {
return "DIRECT";
}
return "PROXY 192.168.10.10:3128; DIRECT";
}Amb WPAD, el client descobreix automàticament aquest
fitxer mitjançant DNS (wpad.thos.local) o DHCP (opció 252),
sense haver de distribuir l’URL manualment a cada equip.
Squid admet diversos helpers d’autenticació. Els més habituals:
| Mètode | Helper | Ús típic |
|---|---|---|
| Basic | basic_ncsa_auth |
Fitxer local d’usuaris/contrasenyes |
| Digest | digest_file_auth |
Similar a Basic però sense enviar la contrasenya en clar |
| NTLM/Negotiate | ntlm_auth / negotiate_kerberos_auth |
Integració amb Active Directory (SSO) |
sudo apt install -y apache2-utils
sudo htpasswd -c /etc/squid/passwd alumne1
sudo htpasswd /etc/squid/passwd alumne2A squid.conf:
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwd
auth_param basic realm Proxy THOS.LOCAL
auth_param basic credentialsttl 2 hours
acl usuaris_autenticats proxy_auth REQUIRED
http_access allow xarxa_local usuaris_autenticats
http_access deny allBasic envia la contrasenya codificada en Base64, no
xifrada. Cal combinar-lo amb HTTPS cap al proxy (via https_port) si es vol protegir les credencials, o
utilitzar-lo només en xarxes internes de confiança.
Si srv-proxy és membre del domini THOS.LOCAL (via Samba/winbind o sssd):
sudo apt install -y winbind libnss-winbind libpam-winbind smbclientauth_param negotiate program /usr/lib/squid/negotiate_wrapper_auth --ntlm /usr/lib/squid/ntlm_auth --kerberos /usr/lib/squid/negotiate_kerberos_auth
auth_param negotiate children 10
auth_param negotiate keep_alive on
acl usuaris_ad proxy_auth REQUIRED
http_access allow xarxa_local usuaris_adAmb aquesta configuració els usuaris del domini s’autentiquen de manera transparent des de navegadors configurats per a Negotiate/Kerberos, sense haver d’introduir cap contrasenya (SSO).
En mode transparent, el trànsit HTTP es desvia cap al proxy a escala de tallafocs, sense configurar res al client.
http_port 3129 intercept
acl xarxa_local src 192.168.10.0/24
http_access allow xarxa_local
http_access deny allEl mode intercept requereix que el paquet arribi a Squid
ja redirigit, normalment mitjançant iptables/nftables a la mateixa màquina o a un
router/tallafocs intermedi.
srv-proxy fa també de
router/gateway)sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 \
-j REDIRECT --to-port 3129Persistir la regla:
sudo apt install -y iptables-persistent
sudo netfilter-persistent saveacl dominis_bloquejats dstdomain .facebook.com .instagram.com .tiktok.com
acl paraules_bloquejades url_regex -i "porn|casino"
http_access deny dominis_bloquejats
http_access deny paraules_bloquejadesacl llista_negra dstdomain "/etc/squid/blacklist.txt"
http_access deny llista_negrasudo nano /etc/squid/blacklist.txt.facebook.com
.tiktok.com
.betfair.com
acl horari_lectiu time MTWHF 08:00-15:00
acl xarxa_alumnes src 192.168.20.0/24
http_access deny xarxa_alumnes !horari_lectiuacl descarregues_prohibides urlpath_regex -i \.(exe|bat|msi)$
http_access deny descarregues_prohibidesPer a categories completes (adults, xarxes socials, jocs…) es recomana un motor especialitzat:
sudo apt install -y squidguardSquidGuard es crida des de Squid com a redirector
(url_rewrite_program) i treballa amb bases de dades de
categories de dominis descarregables (blacklists públiques o
comercials), oferint un manteniment molt més escalable que llistes
manuals.
Metodologia de diagnòstic esglaonada:
ping 192.168.10.10
telnet 192.168.10.10 3128Si telnet no connecta: problema de xarxa, tallafocs o
Squid aturat.
sudo ss -tlnp | grep squid
sudo systemctl status squidsudo tail -f /var/log/squid/access.log
sudo tail -f /var/log/squid/cache.logCodis de resultat habituals a access.log:
| Codi | Significat |
|---|---|
TCP_HIT |
Servit des de cau |
TCP_MISS |
No estava a la cau, es va anar a buscar |
TCP_DENIED |
Bloquejat per una ACL |
NONE/407 |
Falta autenticació |
| Símptoma | Causa probable |
|---|---|
“Access Denied” (TCP_DENIED) |
ACL massa restrictiva o mal ordenada
(http_access deny all abans d’hora) |
| El client no arriba mai al proxy | Configuració incorrecta al navegador, o WPAD no resol |
| Funciona en HTTP però no en HTTPS | Cal https_port amb SSL Bump, o el mode transparent no
cobreix el 443 |
| Autenticació demanada en bucle | Helper d’autenticació no arrenca (ps aux | grep squid)
o permisos incorrectes al fitxer passwd |
| Molt lent | Cau plena, disc ple (df -h /var/spool/squid), o refresh_pattern mal ajustat |
sudo squid -k parse
sudo squid -k reconfigurereconfigure aplica canvis sense tallar les connexions
actives; restart és més dràstic i s’ha de reservar per a
canvis estructurals (com cache_dir).
curl -x http://192.168.10.10:3128 http://example.com
curl -x http://usuari:contrasenya@192.168.10.10:3128 http://example.comsquidclientsquidclient -h 192.168.10.10 mgr:info
squidclient -h 192.168.10.10 mgr:menusudo apt install -y sargConfiguració mínima (/etc/sarg/sarg.conf):
access_log /var/log/squid/access.log
output_dir /var/www/html/sarg
Generació d’informes:
sudo sarg -xEls informes es publiquen com a pàgines HTML amb gràfics de: usuaris amb més trànsit, dominis més visitats, hores de més ús, i percentatge de trànsit servit des de cau.
thos.local): es
pot afegir un template de Squid via SNMP o mitjançant un script
que llegeixi mgr:info i mgr:5min i publiqui
els valors com a items (peticions/segon, ràtio de cau,
connexions actives), integrant el proxy als mateixos dashboards que la
resta d’infraestructura.http_port 80 accel defaultsite=intranet.thos.local
acl backend_web dstdomain intranet.thos.local
cache_peer 192.168.10.20 parent 8080 0 no-query originserver name=web01
http_access allow backend_webAmb aquesta configuració, les peticions que arriben a Squid pel port
80 amb Host: intranet.thos.local es reenvien internament a 192.168.10.20:8080, mentre el client només veu la IP
pública/del proxy.
Molt habitual en producció per la seva senzillesa i rendiment amb TLS:
server {
listen 443 ssl;
server_name intranet.thos.local;
ssl_certificate /etc/ssl/certs/intranet.crt;
ssl_certificate_key /etc/ssl/private/intranet.key;
location / {
proxy_pass http://192.168.10.20:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
cache_peer/upstream.Tota implantació de proxy s’ha d’acompanyar de documentació tècnica que permeti a un altre administrador mantenir-la. Com a mínim ha d’incloure:
squid.conf.# Instal·lació
sudo apt install -y squid squid-common apache2-utils sarg squidguard
# Inicialitzar cau
sudo squid -z
# Validar i aplicar configuració
sudo squid -k parse
sudo squid -k reconfigure
sudo systemctl restart squid
# Diagnòstic
sudo systemctl status squid
sudo ss -tlnp | grep squid
sudo tail -f /var/log/squid/access.log
squidclient -h <IP> mgr:info
# Usuaris d'autenticació Basic
sudo htpasswd -c /etc/squid/passwd usuari1
sudo htpasswd /etc/squid/passwd usuari2
# Informes de trànsit
sudo sarg -x