Un servidor proxy és un intermediari entre els dispositius d’una xarxa local i Internet.
Quan un client (ordinador, mòbil, etc.) vol accedir a una pàgina web, en lloc de connectar-se directament al servidor de destinació, la petició passa primer pel proxy, que la reenvia en nom del client i retorna la resposta.
Control d’accés — permet bloquejar webs per categoria, horari o usuari (com fèiem amb SquidGuard).
Caché — emmagatzema còpies locals del contingut més visitat, reduint el consum d’amplada de banda i accelerant la navegació.
Seguretat — filtra contingut maliciós, oculta les IP internes de la xarxa i pot inspeccionar el tràfic.
Registre i auditoria — guarda logs de tota l’activitat de navegació, útil en entorns corporatius o educatius.
Anonimitat — el servidor de destinació veu la IP del proxy, no la del client.
sudo apt update
sudo apt install squid squidguard -y# Edita el fitxer de configuració principal
sudo nano /etc/squid/squid.confAquesta és una configuració bàsica per a proxy transparent:
# Port transparent (intercepta el tràfic HTTP)
http_port 3128
http_port 3129 intercept
# Port per a HTTPS transparent (si cal)
https_port 3130 intercept ssl-bump cert=/etc/squid/ssl_cert/myCA.pem key=/etc/squid/ssl_cert/myCA.key
# Xarxa local permesa
acl localnet src 192.168.1.0/24
http_access allow localnet
http_access allow localhost
http_access deny all
# Integració amb SquidGuard
url_rewrite_program /usr/bin/squidGuard -c /etc/squidguard/squidGuard.conf
url_rewrite_children 5
# Logs
access_log /var/log/squid/access.log squid
cache_log /var/log/squid/cache.log
# Cache
cache_dir ufs /var/spool/squid 1000 16 256
maximum_object_size 50 MB
sudo nano /etc/squidguard/squidGuard.conf# Directori de bases de dades
dbhome /var/lib/squidguard/db
logdir /var/log/squidguard
# Definició de temps
time workhours {
weekly mtwhf 08:00 - 18:00
}
# Definició de xarxes
src admin {
ip 192.168.1.1
}
src users {
ip 192.168.1.0/24
}
# Llistes negres (blacklists)
dest adult {
domainlist blacklists/adult/domains
urllist blacklists/adult/urls
}
dest ads {
domainlist blacklists/ads/domains
}
dest social {
domainlist blacklists/social/domains
}
# Regles d'accés
acl {
admin {
pass all
}
users within workhours {
pass !adult !ads all
}
users {
pass !adult !ads !social all
}
default {
pass none
redirect http://192.168.1.1/blocked.html
}
}
Pots usar les llistes de Shallalist o URLBlacklist:
# Crear directori
sudo mkdir -p /var/lib/squidguard/db
cd /var/lib/squidguard/db
# Descarregar Shallalist (exemple)
sudo wget http://www.shallalist.de/Downloads/shallalist.tar.gz
sudo tar -xzf shallalist.tar.gz
sudo mv BL blacklists
# Compilar les bases de dades
sudo squidGuard -C all
# Ajustar permisos
sudo chown -R proxy:proxy /var/lib/squidguard/dbPer fer el proxy realment transparent, has de redirigir el trànsit del port 80 cap a Squid:
# Redirigir HTTP (port 80) al port interceptor de Squid
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3129
# Permetre tràfic de Squid
sudo iptables -A INPUT -p tcp --dport 3129 -j ACCEPT
# Activar IP forwarding
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
# Fer-ho persistent
sudo nano /etc/sysctl.conf
# Afegeix: net.ipv4.ip_forward = 1Per fer les regles d’iptables persistents:
sudo apt install iptables-persistent -y
sudo netfilter-persistent save# Verificar configuració de Squid
sudo squid -k parse
# Reiniciar Squid
sudo systemctl restart squid
sudo systemctl enable squid
# Verificar estat
sudo systemctl status squid# Comprovar que Squid escolta als ports correctes
sudo ss -tlnp | grep squid
# Seguir els logs en temps real
sudo tail -f /var/log/squid/access.log
sudo tail -f /var/log/squidguard/squidGuard.log| Port | Funció |
|---|---|
| 3128 | Proxy estàndard |
| 3129 | Intercepció HTTP transparent |
| 3130 | Intercepció HTTPS (SSL Bump) |
Nota: Per interceptar HTTPS necessites configurar SSL Bump i distribuir el certificat CA als clients, cosa que té implicacions de privacitat i seguretat que cal tenir en compte.
SSL Bump permet que Squid intercepti i inspeccioni tràfic HTTPS. Funciona com un “man-in-the-middle” legítim dins la teva xarxa.
# Crear directori per als certificats
sudo mkdir -p /etc/squid/ssl_cert
sudo chown proxy:proxy /etc/squid/ssl_cert
sudo chmod 700 /etc/squid/ssl_cert
cd /etc/squid/ssl_cert
# Generar clau privada
sudo openssl genrsa -out myCA.key 4096
# Generar certificat CA autosignat (10 anys)
sudo openssl req -new -x509 -days 3650 -key myCA.key -out myCA.pem -subj "/C=ES/ST=Catalunya/L=Barcelona/O=La meva organització/CN=Proxy CA"
# Ajustar permisos
sudo chown proxy:proxy myCA.key myCA.pem
sudo chmod 600 myCA.key# Crear directori per a la caché de certificats
sudo mkdir -p /var/spool/squid/ssl_db
# Inicialitzar la base de dades SSL
sudo /usr/lib/squid/security_file_certgen -c -s /var/spool/squid/ssl_db -M 4MB
# Ajustar permisos
sudo chown -R proxy:proxy /var/spool/squid/ssl_db# Edita el fitxer squid.conf
sudo nano /etc/squid/squid.conf# Ports
http_port 3129 intercept
https_port 3130 intercept ssl-bump cert=/etc/squid/ssl_cert/myCA.pem key=/etc/squid/ssl_cert/myCA.key generate-host-certificates=on dynamic_cert_mem_cache_size=4MB
# Generador de certificats
sslcrtd_program /usr/lib/squid/security_file_certgen -s /var/spool/squid/ssl_db -M 4MB
sslcrtd_children 5
# Dominis que NO s'han d'interceptar (banques, etc.)
acl no_bump_domains ssl::server_name .bankinter.com
acl no_bump_domains ssl::server_name .caixabank.com
acl no_bump_domains ssl::server_name .lacaixa.com
# Estratègia SSL Bump
ssl_bump splice no_bump_domains # Deixar passar sense inspeccionar
ssl_bump stare all # Inspeccionar la resta
ssl_bump bump all
# Verificació de certificats del servidor
sslproxy_cert_error deny all
sslproxy_flags DONT_VERIFY_PEER # Només si cal per compatibilitat
# Opcions SSL
tls_outgoing_options min-version=1.2
# Redirigir HTTP
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3129
# Redirigir HTTPS
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 3130
# Guardar regles
sudo netfilter-persistent save# Copiar el certificat
sudo cp myCA.pem /usr/local/share/ca-certificates/proxy-ca.crt
# Actualitzar certificats del sistema
sudo update-ca-certificates
# Verificar
ls /etc/ssl/certs/ | grep proxyManual:
# Importar via PowerShell (com a administrador)
Import-Certificate -FilePath "myCA.pem" `
-CertStoreLocation Cert:\LocalMachine\RootVia GPO (recomanat en entorns corporatius):
Administració de directives de grupConfiguració de l'equip -> Configuració de Windows -> Configuració de seguretat -> Directrius de clau públicaAutoritats de certificació arrel de confiançamyCA.pem# Via terminal
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain myCA.pemO manualment:
myCA.pem a Clauer del
sistemamyCA.pem al dispositiuAndroid 7+ limita els certificats d’usuari per a apps. Necessites accés root o MDM per a una confiança total.
myCA.pem per AirDrop o correu# Reiniciar Squid
sudo systemctl restart squid
# Comprovar logs SSL
sudo tail -f /var/log/squid/access.log | grep CONNECT
# Provar des d'un client (hauria de mostrar l'emissor
# com "La meva organització")
curl -v https://example.com 2>&1 | grep "issuer"| Aspecte | Detall |
|---|---|
| Legalitat | Informa sempre els usuaris que el tràfic és inspeccionat |
| Privacitat | Evita inspeccionar serveis bancaris, mèdics o personals |
| Certificate Pinning | Algunes apps (WhatsApp, etc.) fallaran perquè verifiquen el certificat directament |
| HTTP/3 (QUIC) | Squid no suporta QUIC; bloqueja el port UDP 443 si cal |