Il file hosts è un frammento di configurazione di importanza critica sia nei sistemi operativi per PC (Windows, Linux, macOS) sia in quelli per smartphone e tablet (Android, iOS, Windows 10). In questa guida vedremo qual è la sua funzione e come modificarlo per bloccare l'accesso a determinate risorse oppure programmare siti web e app sul PC. Benvenuti ne La Grande Guida al file hosts di TurboLab.it
File hosts: cos'è e a cosa serve
Iniziamo dicendo che hosts non ha estensione, ma è un file di testo semplice alla stregua di qualsiasi altro .txt che possiamo generare con il Blocco note.
A cosa serve il file hosts, versione breve - serve a risolvere i nomi a dominio degli host nei corrispondenti indirizzi IP, senza bisogno di contattare il server DNS.
A cosa serve il file hosts, versione completa - Per capire a cosa serva il file hosts facciamo un passo indietro e ricordiamo che, ogni volta che un PC/server/tablet/smartphone (che chiamiamo genericamente host, senza "s" finale) voglia scambiare informazioni con un altro host tramite la rete deve contattarlo tramite l'indirizzo IP associato al secondo.
Ecco dunque che quando lo smartphone deve richiedere al server di Facebook un feed (all'interno dell'app o nel browser web poco importa: il funzionamento è il medesimo) ha bisogno di sapere che Facebook risponde all'indirizzo IP 31.13.92.36. Per Google, l'IP è 172.217.23.78. Per collegarsi a Wikipedia, l'indirizzo da conoscere è 91.198.174.192
Come evidente, digitare direttamente l'indirizzo IP dell'host da contattare sarebbe estremamente scomodo per gli utenti ed impossibile da gestire per gli operatori. Per affrontare questa problematica esistono i server DNS: un'enorme lista distribuita che risolve (ovvero: traduce) i nomi a dominio (come facebook.com, google.com o wikipedia.org) nei rispettivi indirizzi IP.
Ecco dunque che, come utente, posso usare lo smartphone per visitare facebook.com, invece di dover immettere il suo IP. Dietro le quinte, il sistema operativo richiede l'indirizzo IP di facebook.com al server DNS configurato, ed usa l'informazione ritornata per contattarlo.
» Leggi anche: I migliori server DNS alternativi per navigare velocemente e "sbloccare" i siti censurati
Il file hosts svolge esattamente la stessa funzione (associare i nomi degli altri host ai rispettivi indirizzi IP), ma direttamente sul sistema operativo locale, prima di contattare il server DNS di riferimento, e solo per gli altri host espressamente definiti.
file hosts: dove si trova
Il file hosts è sempre salvato sulla memoria persistente locale (SSD, disco fisso o NAND), ma il suo percorso esatto varia a seconda del sistema operativo:
- Windows:
C:\Windows\System32\drivers\etc\hosts
- Linux:
/etc/hosts
- macOS:
/private/etc/hosts
(accessibile anche tramite il link simbolico/etc/hosts
) - Android:
/system/etc/hosts
- iOS:
/etc/hosts
aprire il file hosts come Amministratore/Root
Per aprire il file hosts possiamo usare un qualsiasi editor di testi: il Blocco note di Windows (o l'equivalente per il sistema operativo in uso) è certamente appropriato.
L'unica complicazione che dobbiamo fronteggiare riguarda i permessi. In tutte le piattaforme, la modifica di hosts è consentita solamente agli Amministratori / utenti root. Di conseguenza, dobbiamo preventivamente lanciare il nostro editor di testi con i privilegi massimi. In caso contrario, si riceverà un errore simile a Non si dispone delle autorizzazioni necessarie per salvare i dati in questo percorso
Per quanto riguarda Windows, fare click con il pulsante destro del mouse sull'icona dell'editor scelto, poi cliccare Esegui come amministratore
. Una volta avviato, seguire il menu File -> Apri
e sfogliare il disco sino a raggiungere la cartella C:\Windows\System32\drivers\etc\
. Da Tipo di file
, scegliere Tutti i file (*.*)
per visualizzare anche il nostro hosts
, che potremo poi aprire come di consueto
Su Linux e macOS svolgeremo l'operazione equivalente tramite i rispettivi editor grafici. In alternativa, possiamo sempre aprire il file da linea di comando tramite
sudo nano /etc/hosts
» Leggi anche: Guida: modificare i file di configurazione di Linux Ubuntu/CentOS da terminale è facile con "nano" (alternativa a "vi")
Sotto Android e iOS, la situazione si complica. Il file hosts è infatti modificabile solo con il rooting/jailbreaking del device:
» Leggi: Guida: come modificare il file hosts su Android
File hosts: che formato ha
Come ormai chiarito, il file hosts mette in corrispondenza il nome di un host con il suo indirizzo IP. Per motivi che mi risultano sconosciuti, il formato prevede che si scriva prima l'indirizzo IP, seguito da uno o più spazi (o caratteri di tabulazione (tab)), poi il nome da risolvere.
Ad esempio: per gestire tramite file hosts i siti citati in precedenza, senza bisogno di contattare il server DNS, scriveremo:
31.13.92.36 facebook.com
172.217.23.78 google.com
91.198.174.192 wikipedia.org
[questo è un esempio a fini espositivi. Svolgere concretamente questa operazione è altamente sconsigliato, poiché i siti diverrebbero inaccessibili in caso gli operatori cambiassero gli indirizzi IP dei server che rispondono!]
In caso molteplici nomi rispondano tutti al medesimo indirizzo IP possiamo esprimerli sulla stessa riga. Ad esempio:
31.13.92.36 facebook.com facebook.it facebook.eu
In ambito Windows, è possibile accodare un massimo di 9 nomi sulla stessa linea. Dal decimo in poi verranno ignorati. In caso vi fosse questa necessità, basta spezzare su più righe, ripetendo l'indirizzo IP all'inizio di ognuna.
Il file hosts funziona sia con gli indirizzi IPv4 (come quelli appena visiti), sia con quelli IPv6:
2a03:2880:2130:cf05:face:b00c::1 facebook.com
Da segnalare infine che le righe che iniziano con #
sono commenti, ovvero vengono ignorate. Sfruttiamo questa libertà per:
- annotare cose da ricordare riguardanti le righe sottostanti
- disattivare al volo determinate righe senza bisogno di eliminarle del tutto
Attenzione: con e senza www
Un aspetto al quale prestare particolare attenzione riguarda la scrittura dei domini. Per il file hosts, i nomi miosito.com
e www.miosito.com
(con www iniziale) sono completamente differenti. Inserendo solo un'associazione per il primo, il secondo continuerà a "sfuggire", e viceversa. Lo stesso dicasi, ovviamente, anche per eventuali mobile.miosito.com
e qualsiasi altro nome.
Per gestire questa situazione dobbiamo dunque esplicitare tutti i nomi. Scriveremo quindi:
31.13.92.36 facebook.com www.facebook.com mobile.facebook.com m.facebook.com
Sempre prestando attenzione alla limitazione dei 9 nomi per riga discussa in precedenza.
Purtroppo, l'uso del carattere jolly (*.miosito.com
) non è supportato dal file hosts.
Attenzione: niente protocollo!
Un altro aspetto da ricordare è che, lavorando al file hosts, non bisogna specificare il protocollo (http://, ad esempio) nel nome. Come argomentato in precedenza, la regola si applica all'intero host, indipendentemente da come venga richiesto.
Scrivere quindi 31.13.92.36 http://facebook.com
non ha alcun senso, ed è un evidente segnale che l'utente non ha capito il funzionamento del file hosts.
127.0.0.1 e 0.0.0.0: Come usare il file hosts per bloccare altri host
Uno degli scopi per i quali è possibile sfruttare il file hosts è il blocco della comunicazione verso determinati host: associando un nome ad un IP fasullo, il sistema operativo non avrà modo di scoprire il suo reale indirizzo e sarà così impossibile stabilire la comunicazione.
In particolare, si è soliti bloccare i server che erogano siti web, ed in particolare quelli che distribuiscono malware oppure mostrano la pubblicità all'interno di altre pagine.
Allo scopo, si scrivono le associazioni fra i nomi da bloccare ed uno fra due indirizzi IP "speciali":
0.0.0.0
: sta a significare "nessun indirizzo in particolare", ovvero, in questo contesto, "nulla", "nessuna risoluzione"127.0.0.1
: è chiamato indirizzo di loopback e sta ad identificare il sistema locale medesimo. In altre parole, permette al sistema di parlare con se stesso
Nello specifico: per bloccare Facebook aggiungeremo al nostro hosts qualcosa di simile a
127.0.0.1 www.facebook.com m.facebook.com
oppure
0.0.0.0 www.facebook.com m.facebook.com
Le due opzioni sono entrambe valide, ma l'uso di 0.0.0.0
è più corretto sia dal punto di vista formale, sia perché, in caso venga configurato un server web sul PC locale, l'associazione a 127.0.0.1
fa sì che venga mostrato il sito configurato sullo stesso. In assenza di un webserver locale, l'uso di 0.0.0.0
evita invece il crearsi di qualche rallentamento nel programma che ha richiesto la risoluzione dovuto all'attesa di una risposta che, in realtà, non arriverà mai.
Bloccare pubblicità e malware
A meno di alcuni blocchi personali e specifici, non è una buona idea mantenere manualmente aggiornato il file hosts con tutti i domini spara-pubblicità e/o malware che si desidera bloccare. Allo scopo, è meglio affidarsi ad programma esterno che scarica periodicamente liste, supportate da utenti che dedicano il proprio tempo specificamente a questa attività.
Per Windows, una soluzione molto interessante è HostsMan:
Su Linux e macOS vorremo invece usare lo script StevenBlack/hosts.
Per Android, l'app AdAway usa proprio il file hosts:
Per iOS, non sono a conoscenza di alcuna app per l'aggiornamento automatico del file hosts.
Come usarlo per lavorare
L'altro compito che è possibile assolvere tramite il file hosts è la risoluzione di nomi a dominio arbitrari o completamente inventati. Questo risulta estremamente comodo a programmatori e sistemisti.
Nel nostro caso, ad esempio, il dominio turbolab.it viene risolto nell'indirizzo IP del server che eroga il sito che state leggendo in questo momento. D'altra parte, i programmatori che aggiornano il codice sorgente alla base del portale devono provare il sito sul proprio PC locale per verificare che sia tutto funzionante prima di rendere disponibile al pubblico le novità. Ebbene: una soluzione può essere quella di modificare il file hosts inserendo:
127.0.0.1 turbolab.it
In questo modo, ogni tentativo di aprire http://turbolab.it tramite il browser web viene risolto nel già discusso indirizzo di loopback, contattando così il webserver in esecuzione sulla macchina locale.
Per evitare di fare confusione e rimanere liberi di decidere rapidamente se visitare il sito locale oppure quello pubblico possiamo anche pensare di inventarci un nome di fantasia, associando ad esempio:
127.0.0.1 dev.turbolab.it
Così facendo, l'apertura di http://turbolab.it continuerà a mostrarci il sito reale, mentre http://dev.turbolab.it visualizzerà l'istanza locale.
Effetti collaterali: memoria, CPU e servizio client DNS
Vale la pena di citare un paio di osservazioni che vengono spesso ripetute in rete.
La prima riguarda l'aumento della RAM consumata. Se è vero che il caricamento di tante voci occupa memoria, un file hosts da 50.000 righe si attesa attorno ai 2 MB: un "peso" semplicemente irrilevante per qualsiasi sistema ancora in circolazione.
Più problematica è la seconda. Numerosi utenti hanno segnalato il rallentamento del PC Windows (uso CPU al 100%) in seguito al caricamento di file hosts particolarmente lunghi. Per maggiori informazioni in merito:
Conclusioni
In questo articolo abbiamo visto che cos'è e come modificare il file hosts, chiarito alcuni aspetti che vengono regolarmente sbagliati dai non-esperti (www e non-www oppure indicazione del protocollo) e approfondito l'uso del file hosts per bloccare pubblicità e malware.
A questo punto è naturale chiedersi se sia meglio l'uso di un file hosts oppure delle estensioni ad block. Per la nostra analisi:
Altre idee? domande? i commenti qui sotto sono a disposizione.