In questa guida andrò a descrivere i passi da seguire per la realizzazione di un server proxy con Raspberry PI, in particolare con Squid. Il motivo per il quale utilizzarlo, in particolare in ambiente casalingo, è che ci permette di effettuare il caching di tutti i files scaricati via HTTP o FTP. Quindi se stiamo guardando un film in streaming e vogliamo proseguirne la visione da un altro PC o un qualsiasi altro dispositivo connesso alla nostra rete, non avremo problemi, dal momento che sarà già tutto nella cache del nostro server proxy, senza dover riscaricarlo tutto da capo (salvo il caso in cui si utilizzino i protocolli HTTPS/SFTP, non è possibile effettuare il caching delle risorse scaricate tramite essi, in quanto criptate).
Nello specifico ci serviranno:
- Raspberry PI modello B/B+ (si consiglia il Raspberry PI 2 B, che fornisce prestazioni migliori);
- Raspbian installato nella scheda SD o micro-SD (a seconda del modello di Raspberry PI che state utilizzando);
- Squid.
Per prima cosa aggiorniamo la lista dei pacchetti disponibili per il nostro sistema operativo (Raspbian), tramite il comando:
sudo apt-get update
Se siete loggati come utente normale (ad esempio pi), oppure come utente root:
apt-get update
Fatto ciò procediamo all’installazione di Squid, con il comando:
sudo apt-get install squid -y
Oppure come utente root:
apt-get install squid -y
A questo punto dovremo andare a configurare Squid, dal momento che è stato appena installato. Per farlo, assicuriamoci di avere l’editor di testo da terminale, ovvero nano, nello specifico bisognerà modificare il file situato in /etc/squid/squid.conf.
sudo nano /etc/squid/squid.conf
Oppure da root:
nano /etc/squid/squid.conf
Nel caso in cui l’editor di testo nano non sia installato, basterà utilizzare il seguente comando per installarlo:
sudo apt-get install nano -y
Oppure da root:
apt-get install nano -y
Adesso verifichiamo di avere un file di configurazione simile a questo:
acl all src all acl manager proto cache_object acl localhost src 127.0.0.1/32 acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 acl localnet src 192.168.0.0/24 # Rete Locale - MODIFICA QUI acl SSL_ports port 443 # https acl SSL_ports port 563 # snews acl SSL_ports port 873 # rsync acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl Safe_ports port 631 # cups acl Safe_ports port 873 # rsync acl Safe_ports port 901 # SWAT acl purge method PURGE acl CONNECT method CONNECT http_access allow manager localhost http_access deny manager http_access allow purge localhost http_access deny purge http_access deny !Safe_ports # Mettere un cancelletto all'inizio in caso di problemi http_access deny CONNECT !SSL_ports # Mettere un cancelletto all'inizio in caso di problemi http_access allow localhost http_access allow localnet http_access deny all icp_access allow localnet icp_access deny all http_port 3128 transparent # MODIFICA QUI, se vuoi cambiare la porta sulla quale starà in ascolto hierarchy_stoplist cgi-bin ? access_log /var/log/squid/access.log squid # Caching + durata refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 refresh_pattern -i \.(gif|png|jpg|jpeg|ico)$ 10080 100% 43200 override-expire ignore-no-cache override-lastmod reload-into-ims ignore-private ignore-reload refresh_pattern -i \.(iso|avi|wav|mp3|mp4|mpeg|swf|flv|x-flv)$ 43200 100% 432000 override-expire ignore-no-cache override-lastmod reload-into-ims ignore-private ignore-reload refresh_pattern -i \.(deb|rpm|exe|zip|tar|tgz|ram|rar|bin|ppt|doc|tiff|cab)$ 10080 100% 43200 override-expire ignore-no-cache override-lastmod reload-into-ims ignore-private refresh_pattern -i \.index.(html|htm)$ 0 40% 10080 refresh_pattern -i \.(html|htm|css|js)$ 1440 40% 40320 refresh_pattern . 60 100% 14400 dns_nameservers 8.8.4.4 8.8.8.8 acl shoutcast rep_header X-HTTP09-First-Line ^ICY.[0-9] upgrade_http0.9 deny shoutcast acl apache rep_header Server ^Apache broken_vary_encoding allow apache extension_methods REPORT MERGE MKACTIVITY CHECKOUT hosts_file /etc/hosts coredump_dir /var/spool/squid error_directory /usr/share/squid/errors/Italian # Pagine di errore in Italiano cache_mgr tuoindirizzo@email.it cache_mem 256 MB # RAM dedicata al salvataggio della cache, per un accesso più rapido maximum_object_size_in_memory 4 MB # Non salva in memoria files maggiori di 4 MB maximum_object_size 5120 MB # File di dimensioni massime nella cache su disco cache_dir ufs /var/cache/squid 10240 32 512 # 10 GB di cache sulla scheda SD o micro-SD, impiegando il percorso /var/cache/squid cache_swap_low 87 # Inizia a svuotare la cache quando arriva a 8.7 GB cache_swap_high 90 # Svuota la cache in maniera più aggressiva quando la soglia è 9 GB cache_effective_user proxy cache_effective_group proxy client_db off # Non effettua le statistiche per i client individuali auth_param basic program /etc/webmin/squid/squid-auth.pl /etc/webmin/squid/users positive_dns_ttl 30 seconds negative_dns_ttl 1 second minimum_expiry_time 600 seconds
Una volta salvato il file di configurazione, creiamo la cartella dove andrà a finire la cache:
mkdir /var/cache/squid
E assegniamo i permessi all’utente “proxy“, che utilizzerà squid per creare la cache:
chown -R proxy:proxy /var/cache/squid
Nel mio caso Squid accetterà richieste sulla rete 192.168.0.0/24 che normalmente è quella predefinita di ogni router domestico. Se non dovesse accettare richieste, provate con la rete 192.168.1.0/24, utilizzata quasi sempre dai router Telecom Italia e da altri provider. Inoltre, Squid riserverà 10 GB di spazio su disco per il caching degli oggetti e 256 MB di RAM sempre per effettuare il caching delle risorse. È consigliato cambiare questi parametri in base alla propria situazione, nel mio caso avendo una scheda micro-SD da 32 GB, 10 GB per il caching è perfetto.
Ora è arrivato il momento di riavviare Squid con la configurazione appena aggiornata, per farlo:
sudo service squid restart
Oppure da root:
service squid restart
Non ci resta che impostare il nostro browser per utilizzare il server proxy. Su Mozilla Firefox andate nel menù e cliccate su Opzioni. Una volta qua, scegliete la scheda Avanzate:
Adesso cliccate su Impostazioni… come indicato in figura. Si aprirà una finestrella. Digitate qua l’IP del Raspberry PI, la porta 3128 (se non la avete modificata nel config) e mettete la spunta su “Utilizza lo stesso proxy per tutti i protocolli” e inserite le eventuali esclusioni per il quale non utilizzare il proxy.
Avete concluso! Da adesso navigherete sfruttando il vostro server proxy. La procedura per impostare il proxy è più o meno simile per gli altri browser (Google Chrome rimanderà alle impostazioni di connessione di Internet Explorer). Su Windows 10 ho notato che la rete Wi-Fi tende ad essere scollegata automaticamente, se si imposta il proxy nelle impostazioni di connessione di Internet Explorer (e quindi di sistema). Però è anche vero che ho una configurazione di rete particolare (ho il Raspberry PI collegato direttamente tramite LAN alla scheda di rete del mio PC Desktop e sono anche connessi entrambi via Wi-Fi tramite appositi adattatori).
4 Commenti
massimo
Scusami ma come funziona,il collegamento in rete? il PC va collegato tramite USB e il modem via Ethernet?
Dragone2
Non c’entrano niente l’USB e il modem. Questa guida è rivolta a chi vuole creare un server proxy con un Raspberry PI. Quest’ultimo per funzionare deve essere collegato in rete, configurando l’opportuna interfaccia (wireless oppure ethernet). Il modem non ha nulla a che vedere con questo tutorial, non serve a collegarsi a Internet questa guida. Serve ad esempio a chi vuole limitare l’accesso a determinati siti web, magari per bloccare la pubblicità oppure (cosa più utile) fare la cache dei vari contenuti scaricati, in maniera tale da poter “navigare più velocemente”, perché già sono stati scaricati e non c’è la necessità di scaricarli nuovamente dal web, recuperandoli dalla memoria del Raspberry PI. Lo stesso tutorial può essere utilizzato anche per PC, con le dovute accortezze, ma non ha niente a che vedere con modem / router.
DAVIDE MICHELON
Ciao, volevo chiederti se sqiud ha il solo compito di caching o si può in qualche modo salvare i log dei PC?
Grazie in anticipo
Dragone2
Ciao, sì, di default salva i logs relativi all’accesso. Puoi sapere quale PC ha visitato un determinato indirizzo e a che ora (il formato dell’orario va convertito). Trovi i logs in /var/log/squid/access.log ma devi leggerli come root o ti darà un errore.