Tunel pade, varnostno stikalo sporoči, da se je sprožilo, in prenos se nadaljuje. V pravilih IPv4 ni nič pokvarjeno. Aplikacija se je preprosto premaknila na pot, za katero ta pravila nikoli niso bila napisana.

Naprave z dvojnim skladom imajo dva neodvisna izhoda. Blokada enega od njiju je pol blokade.

Dva nabora pravil, dve privzeti vrednosti

V Linuxu sta iptables in ip6tables ločeni tabeli z ločenimi politikami. Nastavitev verig INPUT in OUTPUT tabele IPv4 na DROP ne spremeni ničesar v tabeli IPv6, kjer je privzeta vrednost običajno ACCEPT. Enaka delitev obstaja v nftables, kjer lahko pregledate eno družino in ugotovite, da vaša pravila nosi le ena od njiju. Ta asimetrija je normalna in ves problem je prav v njej.

Zato lahko varnostno stikalo izgleda temeljito in deluje delno. Skript, ki je zapisal pravila IPv4, se je izvedel, števci rastejo, vrstica dnevnika se pojavi in paket IPv6 zapusti fizični vmesnik popolnoma nedotaknjen.

Preberite, kaj vaš odjemalec dejansko namesti, ne pa, kaj obljublja trženjska stran. Nekateri odjemalci usmerjajo IPv6 v tunel, drugi ga namerno blokirajo, tretji pa ga pustijo pri miru, medtem ko zaklep na ravni platforme uveljavlja drugo pravilo. Dokumentacija ponudnika je tu edini vir, ki se mu splača zaupati.

Kaj vam pove konfiguracija vmesnika

Stran priročnika wg-quick vključuje pravila IPv6 v svoji primeru konfiguracije, in razlog je natanko ta vrzel. Primer ni okras. Obstaja zato, ker bi sama pravila IPv4 pustila drugo družino odprto.

Kopiranje polovice primera ustvari polovico politike. To je najpogostejši izvor tega uhajanja. Objava na blogu je primer skrajšala zaradi dolžine. Skrajšana različica je nato postala predloga, ki so jo vsi znova uporabili.

# what is actually installed, per family?
sudo iptables -S OUTPUT | head -20
sudo ip6tables -S OUTPUT | head -20

# nftables: inspect each family separately
sudo nft list ruleset inet | head -40

# does this host even have a usable IPv6 path?
ip -6 route show default

Če druga ukaz izpiše dovoljujočo politiko, prva pa DROP, ste našli odgovor, ne da bi se dotaknili odjemalca. Ta asimetrija je napaka.

Zakaj ena poizvedba ni celotna zgodba

Eno ime lahko vrne tako zapis A kot zapis AAAA, in aplikacije ne izbirajo vse enako. Brskalnik lahko raje izbere IPv6, ko ga omrežje ponuja, in ob neuspehu pade nazaj, medtem ko sinhronizacija v ozadju ali posodabljalnik uporablja svoj lastni razreševalnik in svojo lastno prednost. Zato en uspešen preizkus prek IPv4 dokazuje eno pot, ne politike.

Prehodi med omrežji prav tako spremenijo odgovor. Pridružitev drugemu omrežju Wi-Fi, prebujenje iz spanja ali preklop na mobilno omrežje lahko napravi dodeli nov predpono IPv6, in politika, ki se je zdela zadostna v pisarniškem LAN, morda tega ne pokriva.

Preizkusite stanje, ko je tunel izklopljen

Preizkušanje med povezavo vam pove, da tunel deluje. Zanimiv preizkus je stanje nerazpoložljivosti, saj takrat naj bi varnostno stikalo zdržalo. Namenoma ustavite tunel in nato poskusite pomembne cilje iz aplikacije, ki jo ščitite.

# with the tunnel stopped, does anything still leave?
ip -6 route get 2606:4700:4700::1111
curl -6 -sS -o /dev/null -w '%{http_code}\n' --max-time 5 https://ipv6.example.net/
curl -4 -sS -o /dev/null -w '%{http_code}\n' --max-time 5 https://ipv4.example.net/

Obe družini bi morali odpovedati zaprto. Če zahteva IPv4 poteče in zahteva IPv6 vrne statusno kodo, je politika nepopolna, in nobeno ponovno preizkušanje tunela tega ne bo spremenilo.

V tem preizkusu ohranite tudi dokumentirane izjeme. Odkrivanje lokalnega omrežja, obnovitev DHCP ali zagonska pot do končne točke VPN morajo morda ostati dosegljive, in te izjeme bi morale biti imenovane v politiki, namesto da bi bile odkrite med izpadom. Preizkus uhajanja, ki ne uspe, ker se tunel ne more vrniti, ni varnostna ugotovitev, je ugotovitev o povezljivosti.

Sorodni članki