È pericoloso usare il file / etc / hosts come un blocco del sito web nel modo seguente?

22

Io sono un noob di Linux, e mentre cercavo una semplice tecnica di blocco dei siti Web a livello di sistema operativo, mi sono imbattuto nella soluzione di usare il file host di Linux in questo modo:

127.0.0.1 websiteiwanttoblock.com
127.0.0.1 anotherone.com
...

Questo è bello e semplice - perfetto per i miei scopi, ma ecco la mia domanda: se uso spesso 127.0.0.1 per scopi di sviluppo web, è pericoloso?

Sembra che, per lo meno, potrebbe rovinare il progetto di sviluppo web al quale sto lavorando attualmente? Ad esempio, se Chrome / Firefox inoltra una richiesta a websiteiwanttoblock.com/api/blah , allora farebbe una richiesta 127.0.0.1/api/blah e potenzialmente potrebbe danneggiare l'API del mio progetto?

Se ciò è pericoloso a tale riguardo, esiste un indirizzo IP "null" più sicuro che potrei reindirizzare a siti bloccati? So che probabilmente non è una buona pratica usare il file hosts in questo modo, ma adoro la semplicità di modificare un file di testo piuttosto che scaricare un pacchetto o qualsiasi altra cosa.

Modifica: Oh, e spesso uso la porta 3000 per le cose di sviluppo, ma supponiamo che a volte uso 80 o qualsiasi altro numero di porta disponibile.

    
posta Joe 26.11.2017 - 13:15
fonte

4 risposte

21

Risposta breve

È sicuro utilizzare il file /etc/hosts come sito Web che blocca l'indirizzo "null"?

Direi che la risposta dovrebbe essere: No.

Se per nessun altro motivo le richieste non sono effettivamente "annullate". Sono ancora richieste attive. E come indica l'OP, poiché le richieste sono per host Internet legittimi, questo tipo di metodo di ridirezione delle richieste a localhost può interferire con il test del codice di rete in un ambiente di sviluppo.

Forse un metodo migliore per bloccare il traffico da e verso alcuni host Internet, è utilizzare iptables che è l'interfaccia del firewall del kernel Linux. iptables è la tabella delle regole di rete predefinita per la maggior parte dei sistemi GNU / Linux. Alcune distribuzioni utilizzano ufw come front-end su iptables .

Se vuoi usare iptables , ecco uno script semplice 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 chiamato ~/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 gli indirizzi IP localhost in questo file.

Risposta più lunga

Sebbene la riassegnazione di host Internet a localhost nel file /etc/hosts sia una tecnica comune di scorciatoia per bloccare host Internet indesiderati, questo metodo presenta alcuni seri problemi di sicurezza.

Richieste in entrata

Richieste in entrata che non sono state avviate intenzionalmente tramite una richiesta utente specifica. L'esempio più comune sono gli annunci sulle pagine web. Seguiamo i pacchetti in arrivo ...

Per prima cosa, avvio wireshark . Quindi inserisco la più grande azienda pubblicitaria su Internet nel mio file /etc/hosts con questa riga:

127.0.0.1   google.com

E poi disabilita tutti i blocchi degli annunci nel mio browser, vai a youtube e riproduci qualsiasi video casuale.

Se filtro i miei pacchetti, includendo in generale lo spazio degli indirizzi IP di Google:

ip.addr==172.217.0.0/16

Ricevo ancora pacchetti da Google.

Che cosa significa?

Significa che esiste la possibilità che un server malevolo inserisca malware che potrebbe essere in grado di attaccare la mia piattaforma di elaborazione tramite pacchetti che arrivano ancora e inviati a localhost. L'uso di /etc/hosts invece di eliminare o rifiutare i pacchetti tramite le regole del firewall, è una misura di sicurezza scarsa. Non blocca i pacchetti in arrivo da possibili host dannosi, né fornisce un feedback efficace ai fini della risoluzione dei problemi.

Richieste in uscita

Le richieste in uscita inviate a localhost anziché essere rifiutate o eliminate dalle regole di firwall sono ancora in fase di elaborazione da parte del kernel. Esistono alcune azioni indesiderate che si verificano quando viene utilizzato /etc/hosts anziché il firewall:

  • Si verifica un'ulteriore elaborazione quando il pacchetto in uscita raggiunge localhost. Ad esempio, se un server web è in esecuzione sull'host, il pacchetto inviato a localhost può essere elaborato dal server web.

  • Il feedback delle richieste in uscita può diventare confuso se la /etc/hosts è popolata con determinati domini.

iptables può gestire molte regole

Secondo alcuni:

ServerFault: quante regole possono supportare gli iptables

Un possibile limite teorico su una macchina a 32 bit è 38 milioni di regole. Tuttavia, come indicato nel post di riferimento, man mano che l'elenco di regole iptables si espande, aumenta anche la memoria del kernel necessaria.

    
risposta data 26.11.2017 - 15:22
fonte
11

[...] while looking for a simple OS-level website blocking technique, I came upon the solution of using the linux hosts file [...]

Per chiarire, /etc/hosts esegue semplicemente il mapping dei nomi degli host agli indirizzi IP. Una voce con 127.0.0.1 non blocca l'accesso al server, ma fa in modo che il tuo computer risolva localmente quel particolare nome in 127.0.0.1 . Tu e il server potreste ancora scambiare pacchetti senza restrizioni.

If I often use 127.0.0.1 for web development purposes, is this dangerous? It seems that, at the very least it could mess up the web dev project I'm currently working on?

No, la risoluzione a 127.0.0.1 non ti mette in ulteriore pericolo. Questo perché un sito Web può avere il proprio nome essere risolto su qualsiasi IP, incluso 127.0.0.1 (a meno che il server DNS non lo blocchi). Quindi, se evilpage.example voleva risolvere 127.0.0.1 , potevano semplicemente specificare un rispettivo record A DNS e non avrebbero dovuto fare affidamento sul /etc/hosts . (Vedi anche: È sicuro avere un record DNS che punta a 127.0.0.1? )

Tieni presente che l'esecuzione di qualcosa su 127.0.0.1 potrebbe renderti vulnerabile agli attacchi DNS rebinding .

    
risposta data 26.11.2017 - 16:53
fonte
4

A meno che il tuo server web non sia in esecuzione sulla porta 80 o 443 sulla tua macchina locale ( 127.0.0.1 ), allora questo non dovrebbe influenzare il tuo progetto web. Se è così, allora potrebbe essere un fastidio. Se hai inviato una richiesta a http://example.com/api/ , alla fine verrà inviata una richiesta a http://127.0.0.1/api/ . Se disponi di una risorsa chiamata /api/ , alla fine riceverà la richiesta e interferirà quindi con la tua app. Ma il punto più importante che vorrei sottolineare è che @Arminus ha menzionato che il file /etc/hosts/ serve per mappare gli indirizzi IP in nomi host. Se si desidera bloccare un particolare host, suggerirei di installare un firewall come UFW o utilizzare il firewall Linux predefinito, iptables. Ecco alcuni link per aiutarti a iniziare:

UFW: link

iptables: link

    
risposta data 26.11.2017 - 18:07
fonte
3

Se vuoi utilizzare un indirizzo IP che non dovrebbe andare ovunque , puoi utilizzare la documentazione ufficiale Indirizzi IP :

  • 192.0.2.0/24
  • 198.51.100.0/24
  • 203.0.113.0/24

È ancora possibile che vadano da qualche parte, ma DOVREBBERO essere aggiunti a spazi di indirizzi non instradabili. Come altri hanno notato, potenzialmente indirizzerà il tuo traffico solo verso quegli indirizzi IP - ci sono soluzioni migliori menzionate nelle altre risposte, ma queste almeno non andranno al tuo locale machine.

    
risposta data 27.11.2017 - 05:47
fonte

Leggi altre domande sui tag