Squid

squid or octopus?

In fase di sviluppo Leggere le avvertenze In fase di sviluppo

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.

Operazioni preliminari

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

Scenario (esempio)

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

Firewall

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

Verifiche

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

Squid

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...

Configurazioni opzionali

Aggiornamenti locali

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.

Blocklist per Squid - In preparazione

Rapporti di navigazione - In preparazione

Uso di più connessioni - in preparazione

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

Note

  1. La dimensione del disco potrebbe essere critica a causa dei log e della cache (di seguito impostata a 50 GB)
  2. In genere il server che ospita Squid non è anche un router: non sono quindi richieste le configurazioni corrispondenti
  3. root@proxy:~# apt install dnsutils
  4. root@proxy:~# apt install mtr-tiny
  5. root@proxy:~# apt install open-vm-tools
  6. root@proxy:~# apt install speedtest-cli
  7. root@proxy:~# apt install iptables-persistent


Data di creazione di questa pagina: luglio 2020
Ultima modifica: 20 settembre 2024


Pagina principaleAccessibilitàNote legaliPosta elettronicaXHTML 1.0 StrictCSS 3

Vai in cima