Fișierul /etc/hosts
În această săptămână m-am confruntat cu o sarcină în care trebuia să testez local funcționarea unei resurse externe. Problema era că resursa funcționa doar pentru o anumită listă de domenii. În acel moment mi-am amintit de metoda de suprascriere a adresei resursei în fișierul /etc/hosts
. Și a funcționat!
Hai să vedem mai în detaliu ce este acest fișier și cum ne poate fi de ajutor.
Ce este fișierul hosts?
Este un fișier text care poate conține:
- Linii de forma: adresă IP + nume de host (domeniu) + alias (opțional), separate prin spații. Adresa IP poate fi IPv4 sau IPv6.
- Comentarii — text care începe cu „#”.
Un exemplu de cum poate arăta:
# Acesta este adresa loopback în IPv4
127.0.0.1 localhost
# Acesta este adresa loopback în IPv6
::1 localhost
# Adresă suprascrisă
127.0.0.1 skandar.dev
Locația sa diferă în funcție de sistemul de operare:
- În macOS, Unix și sistemele similare Unix — se află la
/etc/hosts
. - În Windows —
C:\Windows\System32\drivers\etc\hosts
.
Poți citi mai multe detalii aici.
Editarea acestui fișier se poate face doar cu drepturi de superutilizator (administrator).
De ce este util?
La rezolvarea numelui unui host, sistemul verifică mai întâi dacă există o înregistrare pentru acel host în fișierul hosts
. Dacă există, se va returna adresa IP specificată, iar sistemul nu va mai interoga serverul DNS.
Să analizăm câteva scenarii comune de utilizare:
- Accelerarea rezolvării adresei. Putem „sugera” sistemului ce adresă IP corespunde domeniului. Deoarece sistemul deja știe adresa IP, nu mai are nevoie să facă o interogare DNS, reducând astfel timpul de răspuns.
- Blocarea reclamelor, trackerelor și site-urilor malițioase. Folosind fișierul
hosts
, putem bloca solicitările către servicii de publicitate și trackere. Există chiar și liste publice cu astfel de domenii: exemplu și încă unul. - Blocarea serverului de licențe. Aplicațiile piratate pot astfel bloca solicitările către serverul de licențiere, împiedicându-l să dezactiveze aplicația piratată sau să reseteze activarea ilicită. Într-o variantă alternativă, adresa serverului de licențe este înlocuită cu una dorită de pirați, iar aplicația „crede” că serverul nu este disponibil și continuă să funcționeze offline.
- Blocarea actualizărilor de securitate. Infractorii pot astfel preveni actualizarea unui antivirus.
- Redirecționarea traficului prin serverele atacatorilor. În combinație cu alte tehnici, atacatorii pot folosi înregistrări DNS false în
hosts
pentru a redirecționa traficul prin serverul lor, permițând interceptarea datelor, modificarea lor „din mers” sau injectarea de conținut malițios. - Obținerea accesului. Un domeniu poate fi indisponibil din cauza unei defecțiuni tehnice sau a unei blocări din partea furnizorului. Dacă știm adresa IP a resursei, o putem specifica în
hosts
, astfel încât sistemul să nu mai interogheze serverul DNS al furnizorului.
Utilitatea în dezvoltare
Suprascrierea adreselor domeniilor poate fi utilă și în dezvoltare. Iată câteva exemple:
- Utilizarea serviciilor cu restricții de domeniu. Serviciul poate avea o listă de domenii permise. De exemplu, cheile API în Google funcționează astfel:
127.0.0.1 skandar.dev
- Testarea codului dependent de un anumit domeniu/subdomeniu. De exemplu, dacă aplicația este disponibilă în diferite țări, în funcție de subdomeniu va fi în limba acelei țări și cu modificările aferente. Putem „direcționa” domeniul spre localhost și apoi utiliza domeniul cu subdomenii la nivel local.
- Mutarea pe un nou hosting. La schimbarea hostingului, poate fi nevoie de ceva timp (până la 72 de ore) pentru ca actualizările să ajungă la serverul DNS autoritativ. Poți evita așteptarea adăugând în
hosts
o înregistrare cu noua adresă IP, pentru a verifica cum funcționează aplicația pe noul hosting. - Înlocuirea unei resurse externe. Uneori, aplicația noastră folosește un API extern și vrem să-l înlocuim cu unul local, de exemplu un server de dezvoltare local. Adăugând suprascrierea adresei în
hosts
, nu mai trebuie să modificăm codul pentru a face asta.
Fișierul hosts
este un instrument simplu, dar puternic, care îți permite să controlezi suprascrierea locală a adreselor IP pentru domenii. Când va trebui să rulezi cod care funcționează doar cu un anumit domeniu sau subdomeniu, amintește-ți de fișierul hosts
— te poate ajuta să rezolvi această problemă.