Risposta breve
È sicuro per usare il /etc/hosts
file come sito Web che blocca l'indirizzo "nullo"?
Direi che la risposta dovrebbe essere:No.
Se non altro le richieste non vengono effettivamente "annullate". Sono ancora richieste attive. E come indica l'OP, poiché le richieste sono per host Internet legittimi, questa sorta di metodo scorciatoia per reindirizzare le richieste a localhost
potrebbe interferire con il test del codice di rete in un ambiente di sviluppo.
Forse un metodo migliore per bloccare il traffico da e verso determinati host Internet è utilizzare iptables
che è l'interfaccia per il firewall del kernel Linux. iptables
è la tabella delle regole di rete predefinita per la maggior parte dei sistemi GNU/Linux. Alcune distro usano ufw
come front-end per iptables
.
Se vuoi usare iptables
, ecco un semplice script che DROP
tutti i pacchetti in entrata e in uscita per un elenco di indirizzi IP o nomi host con un indirizzo o nome host per riga contenuti in un file di testo semplice denominato ~/blocking.txt
## Block every IP address in ~/blocking.txt
## DROP incoming packets to avoid information leak about your hosts firewall
## (HT to Conor Mancone) REJECT outgoing packets to avoid browser wait
for i in $(cat ~/blocking.txt); do
echo "Blocking all traffic to and from $i"
/sbin/iptables -I INPUT -s $i -j DROP
/sbin/iptables -I OUTPUT -d $i -j REJECT
done
Esempio ~/blocking.txt
websiteiwanttoblock.com
anotherone.com
ip.add.of.net/mask
Non inserire il tuo localhost
Indirizzi IP in questo file.
Risposta più lunga
Durante la riassegnazione degli host Internet a localhost
nel /etc/hosts
file è una tecnica di scorciatoia comune per bloccare host Internet indesiderati, questo metodo presenta alcuni seri inconvenienti di sicurezza.
Richieste in arrivo
Richieste in arrivo che non sono state avviate intenzionalmente tramite una specifica richiesta dell'utente. L'esempio più comune sono gli annunci sulle pagine web. Seguiamo i pacchetti in arrivo...
Innanzitutto, avvio wireshark
. Quindi inserisco la più grande azienda pubblicitaria su Internet nel mio /etc/hosts
file con questa riga:
127.0.0.1 google.com
E poi disabilita tutti gli ad blocker nel mio browser, vai a youtube
e riproduci qualsiasi video a caso.
Se filtro i miei pacchetti, includendo ampiamente lo spazio degli indirizzi IP di Google:
ip.addr==172.217.0.0/16
Sto ancora ricevendo pacchetti da Google.
Che cosa significa?
Significa che esiste la possibilità che un server dannoso inserisca malware che potrebbe essere in grado di attaccare la mia piattaforma informatica tramite pacchetti che stanno ancora arrivando e inviati a localhost. L'uso di /etc/hosts
piuttosto che far cadere o rifiutare i pacchetti tramite le regole del firewall, è una misura di sicurezza scadente. Non blocca pacchetti in arrivo da possibili host dannosi, né fornisce un feedback efficace per la risoluzione dei problemi.
Richieste in uscita
Richieste in uscita che vengono inviate a localhost
invece di essere rifiutati o eliminati dalle regole del firewall vengono ancora elaborati dal kernel. Ci sono alcune azioni indesiderate che si verificano quando /etc/hosts
viene utilizzato al posto del firewall:
-
L'elaborazione extra si verifica quando il pacchetto in uscita raggiunge l'host locale. Ad esempio, se un server web è in esecuzione sull'host, il pacchetto inviato a localhost potrebbe essere elaborato dal server web.
-
Il feedback delle richieste in uscita può creare confusione se
/etc/hosts
è popolato con determinati domini.
iptables può gestire molte regole
Secondo alcuni:
ServerFault:quante regole può supportare iptables
Un possibile limite teorico su una macchina a 32 bit è di 38 milioni di regole. Tuttavia, come notato nel post di riferimento, come iptables
l'elenco delle regole si espande così come la memoria del kernel necessaria.
[...] mentre cercavo una semplice tecnica di blocco dei siti web a livello di sistema operativo, mi sono imbattuto nella soluzione di utilizzare il file host linux [...]
Per chiarire, /etc/hosts
mappa solo i nomi host agli indirizzi IP. Una voce con 127.0.0.1
non blocca il tuo accesso al server, fa solo in modo che il tuo computer risolva localmente quel particolare nome in 127.0.0.1
. Tu e il server potreste ancora scambiarvi pacchetti senza restrizioni.
Se uso spesso
127.0.0.1
per scopi di sviluppo web, è pericoloso? Sembra che, come minimo, potrebbe rovinare il progetto di sviluppo web su cui sto attualmente lavorando?
No, si risolve in 127.0.0.1
non ti mette in ulteriore pericolo. Questo perché il nome di un sito web può comunque essere risolto in qualsiasi IP, incluso 127.0.0.1
(a meno che il server DNS non lo blocchi). Quindi se evilpage.example
voleva risolversi in 127.0.0.1
, potrebbero semplicemente specificare un rispettivo DNS A
record e non dovresti fare affidamento sul tuo /etc/hosts
. (Vedi anche:È sicuro avere un record DNS che punta a 127.0.0.1?)
Nota che eseguire qualcosa su 127.0.0.1
potrebbe renderti vulnerabile agli attacchi di rebinding DNS.
A meno che il tuo server web non sia in esecuzione sulla porta 80 o 443 sulla tua macchina locale (127.0.0.1
), questo non dovrebbe influire sul tuo progetto web. Se lo è, allora potrebbe essere un fastidio. Se hai inviato una richiesta a http://example.com/api/
, finirebbe per inviare una richiesta a http://127.0.0.1/api/
. Se hai una risorsa chiamata /api/
, finirebbe per ricevere la richiesta e quindi interferire con la tua app. Ma il punto più importante che vorrei sottolineare che @Arminus ha menzionato è che il /etc/hosts/
serve per mappare gli indirizzi IP ai nomi host. Se vuoi bloccare un particolare host, ti suggerisco di installare un firewall come UFW o di utilizzare il firewall Linux predefinito, iptables. Ecco alcuni link per aiutarti a iniziare:
UFW:https://www.linux.com/learn/introduction-uncomplicated-firewall-ufw
iptables:https://www.howtogeek.com/177621/the-beginners-guide-to-iptables-the-linux-firewall/