GNU/Linux >> Znalost Linux >  >> Linux

Je nebezpečné používat soubor /etc/hosts jako blokátor webových stránek následujícím způsobem?

Krátká odpověď

Je to bezpečné použijte /etc/hosts soubor jako webovou stránku blokující „nulovou“ adresu?

Řekl bych, že odpověď by měla znít:Ne.

Pokud z žádného jiného důvodu nejsou žádosti ve skutečnosti „nulovány“. Jsou to stále aktivní požadavky. A jak uvádí OP, protože požadavky jsou pro legitimní internetové hostitele, tento druh zkrácené metody přesměrování požadavků na localhost může kolidovat s testováním síťového kódu ve vývojovém prostředí.

Možná lepší metodou blokování provozu do az určitých internetových hostitelů je použití iptables což je rozhraní k firewallu linuxového jádra. iptables je výchozí tabulka síťových pravidel pro většinu systémů GNU/Linux. Některé distribuce používají ufw jako front-end pro iptables .

Pokud chcete použít iptables , zde je jednoduchý skript, který bude DROP všechny příchozí a odchozí pakety pro seznam IP adres nebo názvů hostitelů s jednou adresou nebo názvem hostitele na řádek obsažené v prostém textovém souboru s názvem ~/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

Ukázka ~/blocking.txt

websiteiwanttoblock.com
anotherone.com
ip.add.of.net/mask

Neumisťujte localhost IP adresy v tomto souboru.

Delší odpověď

Při změně přiřazení internetových hostitelů na číslo localhost v /etc/hosts soubor je běžná technika zkratek pro blokování nechtěných internetových hostitelů, má tato metoda některé vážné bezpečnostní nedostatky.

Příchozí požadavky

Příchozí požadavky, které nebyly záměrně iniciovány prostřednictvím konkrétního požadavku uživatele. Nejběžnějším příkladem jsou reklamy na webových stránkách. Pojďme sledovat příchozí pakety...

Nejprve spustím wireshark . Poté umístím největší internetovou reklamní společnost do svého /etc/hosts soubor s tímto řádkem:

127.0.0.1   google.com

A pak v prohlížeči deaktivujte všechny blokovače reklam, přejděte na youtube a přehrajte libovolné náhodné video.

Pokud filtruji své pakety, obecně včetně prostoru IP adres Google:

ip.addr==172.217.0.0/16

Stále přijímám pakety od společnosti Google.

Co to znamená?

To znamená, že existuje možnost, že škodlivý server vloží malware, který by mohl být schopen napadnout moji počítačovou platformu prostřednictvím paketů, které stále přicházejí a odesílají na localhost. Použití /etc/hosts spíše než zahození nebo odmítnutí paketů prostřednictvím pravidel brány firewall je špatným bezpečnostním opatřením. Neblokuje příchozí pakety od možných škodlivých hostitelů ani neposkytuje účinnou zpětnou vazbu pro účely odstraňování problémů.

Odchozí požadavky

Odchozí požadavky, které jsou odesílány na localhost místo toho, aby byly odmítnuty nebo zrušeny pravidly brány firewall, jsou pravidla stále zpracovávána jádrem. Při /etc/hosts dochází k několika nežádoucím akcím se používá spíše než firewall:

  • K dodatečnému zpracování dochází, když odchozí paket zasáhne localhost. Pokud například na hostiteli běží webový server, paket odeslaný na localhost může být zpracován webovým serverem.

  • Zpětná vazba od odchozích požadavků může být matoucí, pokud je /etc/hosts je obsazeno určitými doménami.

iptables zvládne spoustu pravidel

Podle některých:

ServerFault:Kolik pravidel může iptables podporovat

Možný teoretický limit na 32bitovém stroji je 38 milionů pravidel. Nicméně, jak je uvedeno v odkazovaném příspěvku, jako iptables seznam pravidel se rozšiřuje, stejně jako potřebná paměť jádra.


[...] při hledání jednoduché techniky blokování webových stránek na úrovni operačního systému jsem narazil na řešení pomocí souboru linux hosts [...]

Pro upřesnění /etc/hosts pouze mapuje názvy hostitelů na adresy IP. Záznam s 127.0.0.1 neblokuje váš přístup k serveru, pouze přiměje váš počítač místně přeložit tento konkrétní název na 127.0.0.1 . Vy a server si stále můžete vyměňovat pakety bez omezení.

Pokud často používám 127.0.0.1 pro účely vývoje webu, je to nebezpečné? Zdá se, že by to přinejmenším mohlo zkazit webový vývojářský projekt, na kterém právě pracuji?

Ne, řešení na 127.0.0.1 vás nevystaví dalšímu nebezpečí. Důvodem je to, že název webu může být přeložen na jakoukoli IP adresu, včetně 127.0.0.1 (pokud to DNS server neblokuje). Pokud tedy evilpage.example chtěl vyřešit na 127.0.0.1 , mohli pouze zadat příslušný DNS A záznam a nemuseli byste se spoléhat na vaše /etc/hosts . (Viz také:Je bezpečné mít záznam DNS směřující na 127.0.0.1?)

Všimněte si, že běží něco na 127.0.0.1 může vás učinit zranitelnými vůči útokům rebindingu DNS.


Pokud váš webový server neběží na portu 80 nebo 443 na vašem místním počítači (127.0.0.1 ), pak by to nemělo mít vliv na váš webový projekt. Pokud ano, pak by to mohlo být nepříjemné. Pokud jste odeslali požadavek na http://example.com/api/ , pak by to skončilo odesláním požadavku na http://127.0.0.1/api/ . Pokud máte zdroj s názvem /api/ , pak by to skončilo přijetím požadavku, a tedy zásahem do vaší aplikace. Ale největší bod, který bych rád zdůraznil, že @Arminus zmínil, bylo, že /etc/hosts/ soubor je pro mapování IP adres na názvy hostitelů. Pokud chcete zablokovat konkrétního hostitele, navrhoval bych nainstalovat firewall, jako je UFW, nebo použít výchozí firewall pro Linux, iptables. Zde je několik odkazů, které vám pomohou začít:

UFW:https://www.linux.com/learn/introduction-uncomplicated-firewall-ufw

iptables:https://www.howtogeek.com/177621/the-beginners-guide-to-iptables-the-linux-firewall/


Linux
  1. Úvod do souboru Linux /etc/fstab

  2. Vytvořit uživatelsky specifický soubor Hosts jako doplněk /etc/hosts?

  3. CentOS / RHEL :Jak obnovit ze smazaného souboru /etc/passwd

  1. Vysvětlení adresáře /etc/sysconfig

  2. Pochopení souboru /etc/hosts v Linuxu

  3. Pochopení souboru /etc/exports

  1. Kdy mám použít /dev/shm/ a kdy /tmp/?

  2. Jaký je limit velikosti /etc/hosts?

  3. Jak v mém souboru /etc/hosts/ v systému Linux/OSX vytvořím subdoménu se zástupnými znaky?