Blocarea IPv6 pentru a securiza WireGuard strică gazda
O regulă de intrare care aruncă tot IPv6-ul elimină și descoperirea vecinilor și Packet Too Big. Ține trei responsabilități separate, apoi verifică dacă gazda încă funcționează.
Scopul este rezonabil: doar utilizatorii tunelului ar trebui să ajungă la serviciile de pe această mașină. Implementarea la care se recurge este un lanț de intrare IPv6 care aruncă tot, în afară de WireGuard, și astfel aruncă și traficul care ține gazda atașată de propriul ei link. Descoperirea vecinilor și mesajele de întreținere a căii nu sunt acces la servicii, iar eliminarea lor produce o mașină inaccesibilă din motive fără legătură cu politica ta. Tunelul urcă, serviciile sunt corect delimitate, și nimic altceva pe link nu funcționează.
Trei responsabilități, un singur set de reguli
Prima responsabilitate este operarea rețelei exterioare: gazda trebuie să rămână atașată de linkul ei, să rezolve vecinii și să cunoască limitele de cale ale acelui link. A doua este ascultătorul criptat, care acceptă UDP pe adresa și portul alese de tine. A treia este setul de servicii decriptate la care vrei să ajungă utilizatorii tunelului.
Sunt trei politici diferite, iar doar a doua și a treia privesc VPN-ul. Un set de reguli care le tratează ca una singură moștenește un mod de eșec în care strângerea graniței aplicației rupe în liniște atașarea gazdei.
Ține-le în lanțuri separate sau măcar în comentarii separate, ca următoarea persoană să vadă ce linie există și de ce.
Ce face ICMPv6 pentru gazdă
IPv6 se bazează pe ICMPv6 pentru mult mai mult decât ecou. Cererea și anunțul de vecin înlocuiesc ARP și sunt necesare pentru livrarea locală. Packet Too Big transportă informația de MTU a căii, iar ignorarea ei produce transferuri care se blochează la pachete mari. Anunțurile routerului transportă ruta implicită și informația de prefix când linkul folosește configurare automată.
RFC 4890 separă mesajele pe care un filtru de gazdă trebuie să le permită de cele care sunt o alegere administrativă, și o face într-o secțiune de gazdă diferită de regulile pentru un router care redirecționează între rețele. Citind doar secțiunea de redirecționare, obții o politică de intrare prea strictă pentru gazda pe care o protejează.
Regula practică este să permiți mesajele esențiale de eroare și configurare pe interfața care are nevoie de ele, limitate după tip și sursă unde platforma permite, și să iei o decizie explicită pentru restul.
Înlocuirea tuturor acestora cu o permisiune generală ICMPv6 rezolvă problema disponibilității și renunță la filtrare. Înlocuirea cu o aruncare generală rezolvă problema filtrării și renunță la gazdă.
Admite tunelul, apoi serviciul
Acceptă transportul WireGuard pe adresa exterioară prevăzută și portul UDP, iar traficul de retur acceptă-l prin urmărirea conexiunilor. Apoi permite serviciile aplicațiilor prin interfața tunelului, din sursele pe care chiar le autorizezi.
O permisiune pentru portul UDP exterior nu autorizează cererile decriptate din interiorul lui. Această distincție este întregul motiv pentru care interfața tunelului apare în regulile de serviciu.
Citește setul de reguli așa cum este, nu așa cum îl descrie fișierul:
sudo nft list ruleset
ip -6 addr show
ip -6 route show default
Un ascultător pe o adresă fizică este o expunere separată față de același serviciu pe adresa tunelului. Dacă mașina redirecționează și trafic către altă mașină, aceea este o decizie a lanțului de redirecționare, nu această politică de intrare, și are nevoie de propria justificare.
Testează linkul, nu doar tunelul
Un tunel care funcționează după modificare dovedește mai puțin decât pare, pentru că o intrare de vecin existentă și o conexiune stabilită pot ascunde un mesaj de control pe care politica îl aruncă acum.
Verifică atașarea direct, apoi verifică faptul că calea exclusă încă eșuează:
ip -6 neigh show
ping -6 -c 3 2001:db8:1::1
sudo nft -c -f /etc/nftables.conf
Un tabel de vecini care rămâne complet după o repornire este semnalul că descoperirea încă funcționează. Un tabel care se golește și nu se mai umple este semnalul că l-ai filtrat. A treia comandă validează sintaxa setului de reguli fără a-l aplica, ceea ce merită făcut cât timp ai încă sesiune.
Recuperează o gazdă de care te-ai blocat afară
Înainte de a schimba reguli de firewall care transportă propria ta sesiune de administrare, păstrează un al doilea canal: o consolă, o conexiune serială sau o revenire programată care elimină noile reguli dacă nu o anulezi.
Dacă o modificare te blochează afară, recuperarea trece prin acel canal și nu prin rețeaua pe care tocmai ai eliminat-o. Restaurează setul de reguli anterior dintr-o copie salvată, confirmă că gazda este din nou accesibilă și abia apoi aplică politica dorită în bucăți mai mici.
Politica finală nu este universală. Adresarea, rutarea și implementarea firewallului sunt intrări ale punerii în funcțiune, dar granița este aceeași peste tot: refuză accesul nedorit al aplicațiilor păstrând traficul de control care transportă tunelul autorizat.