Questa guida descrive l'installazione di Squid, IL proxy server.
L'immagine di apertura mostra un polpo e quindi non c'entra nulla con il contenuto di questa pagina, anche perché, al massimo, qui si parla di un calamaro.
Sarebbe utile creare due macchine identiche, magari virtuali (nota 5), ma su hardware diverso.
Configurazione tipo:
Installare Debian Buster (10), senza interfaccia grafica e server di stampa, con server sshd.
Le password di root e dell'utente saranno scritte in una busta sigillata. E' consigliabile installare i propri certificati per l'accesso remoto senza password; da valutare l'opportunità di lasciare l'accesso remoto tramite password all'utente (comunque mai a root, default).
Installazioni opzionali:
root@proxy:~# apt install molly-guard
root@proxy:~# apt install ntp ntpdate
root@proxy:~# ntpq -pn
La configurazione della macchina:
root@proxy:~# nano /etc/network/interfaces
[...]
# LAN
allow-hotplug ens33
iface ens33 inet static
address 192.168.10.100
# Internet
allow-hotplug ens32
iface ens32 inet static
address 172.16.88.141/24
gateway 172.16.88.2
root@proxy:~# nano /etc/resolv.conf
nameserver 1.1.1.1
nameserver 8.8.8.8
L'idea è impedire di default tutto il traffico di forward (non è un
router) e permettere solo i seguenti accessi:
* ssh: da tutte le interfacce
* Proxy (3128): da tutte le interfacce interne
* Ping: da tutte le interfacce interne
Attenzione: se lavorate in REMOTO… cercate di stare a pochi metri dal
server!
È opportuno scrivere il tutto in uno script (utile per le modifiche).
root@proxy:~# nano /root/firewall.sh
#!/bin/sh
INTERNET=ens32
LAN=ens33
iptables -F
iptables -t mangle -F
iptables -t nat -F
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
ip6tables -F
ip6tables -X
ip6tables -t mangle -F
ip6tables -t mangle -X
ip6tables -P INPUT DROP
ip6tables -P OUTPUT DROP
ip6tables -P FORWARD DROP
# Generale
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Ping
iptables -A INPUT -p icmp --icmp-type 8 -m length --length 128:65535 -j DROP
iptables -A INPUT -i $LAN -p icmp --icmp-type 8 -j ACCEPT
# Traffico locale
iptables -A INPUT -i lo -j ACCEPT
iptables -A FORWARD -i lo -j ACCEPT
ip6tables -A INPUT -i lo -j ACCEPT
ip6tables -A OUTPUT -o lo -j ACCEPT
# ssh
iptables -A INPUT -p TCP --dport ssh -j ACCEPT
# Squid
iptables -A INPUT -i $LAN -p TCP --dport 3128 -j ACCEPT
root@proxy:~# chmod +x /root/firewall.sh
root@proxy:~# /root/firewall.sh
Rendiamo le regole permanenti, operazione da fare dopo ogni modifica (nota 7):
root@proxy:~# dpkg-reconfigure iptables-persistent
Dal server:
root@proxy:~# ip route
default via 172.16.88.2 dev ens32 onlink
172.16.88.0/24 dev ens32 proto kernel scope link src 172.16.88.141
192.168.10.0/24 dev ens33 proto kernel scope link src 192.168.10.100
root@proxy:~# dig www.vincenzov.net (nota 3)
root@proxy:~# mtr www.vincenzov.net (nota 4)
root@proxy:~# speedtest-cli (nota 6)
Da una macchina locale:
vv@vv-i7-buster:~$ ping 192.168.10.100
root@proxy:~# apt install squid
root@proxy:~# cp /etc/squid/squid.conf /etc/squid/squid.conf-ORIGINALE
Modificare le seguenti opzioni (versione base-base, il numero finale è la riga indicativa a cui si trova l'opzione all'interno di squid.conf):
root@proxy:~# nano -c /etc/squid/squid.conf
http_access allow localnet # // 1407
forward_max_tries 25 // 3322 Office 3655
maximum_object_size 4 GB // 3477
cache_dir ufs /var/spool/squid 50000 16 256 // 3635 (nota
1)
Creare l’albero delle directory e riavviare il servizio (l'operazione dura
qualche decina di secondi):
root@proxy:~# systemctl stop squid # Se necessario, ci mette molto
root@proxy:~# squid -z
root@proxy:~# systemctl restart squid.service
Verificare il log, cercando errori evidenti:
root@proxy:~# tail /var/log/squid/cache.log -n 100
Navigare da una macchina della LAN, dopo aver configurato il proxy e, nel contempo, verificare che nel log vengano mostrate le pagine “navigate”:
root@proxy:~# tail /var/log/squid/access.log -f
A volte il server è utilizzato in reti con un gran numero di utenti, nel mio caso centinaia in contemporanea. Questo può causare l'impossibilità di navigare a causa del gran numero di file aperti. Per risolvere
root@proxy:~# nano /usr/lib/systemd/system/squid.service
Modifichiamo la voce seguente (il valore di default è 1024):
LimitNOFILE=50000
Quindi:
root@proxy:~# systemctl daemon-reload
root@proxy:~# systemctl restart squid.service
Per verificare se il numero inserito è corretto, in un momento di traffico intenso, occorre verificare se il numero di descrittori disponibili è ragionevolmente elevato:
root@proxy12:~# squidclient mgr:info | grep 'file descri'
Maximum number of file descriptors: 50000
Available number of file descriptors: 49943
Reserved number of file descriptors: 100
Finito...
Configurare la cache per l'aggiornamento della macchina locale e verificare l’uso del proxy:
root@proxy:~# nano /etc/apt/apt.conf
Acquire::http::Proxy "http://localhost:3128";
root@proxy:~# apt update ; apt upgrade
root@proxy:~# tail /var/log/squid/access.log
Ovviamente se si cambia l'indirizzo del proxy server questa tecnica è utilizzabile (e consigliabile) si tutte le macchine della LAN.
Se il server è predisposto per usare più connessioni ad Internet, Squid può utilizzare questa possibilità per aumentare la banda disponibile. Tipico è il caso in cui le due connessioni saranno utilizzate in base all'indirizzo IP della macchina locale che avvia lo richiesta. Vediamo un esempio:
Il parametro da configurare all'interno di squid.conf è tcp_outgoing_address, insieme alle corrispondenti ACL:
root@proxy:/etc/squid# cat squid.conf
[...]
acl ISPA src 172.16.1.0/24
acl ISPB src 172.16.2.0/24
tcp_outgoing_address 192.168.169.100 ISPA
tcp_outgoing_address 192.168.169.101 ISPB
Data di creazione di questa pagina: luglio 2020
Ultima modifica: 20 settembre 2024
Il taccuino tecnico - Permanentemente in fase di
riscrittura
Copyright 2013-2024, Vincenzo Villa (https://www.vincenzov.net)
Quest'opera è stata rilasciata con licenza Creative Commons | Attribuzione 4.0 Internazionale (CC BY 4.0)