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/