Målet er rimelig: bare tunnelbrukere skal nå tjenestene på denne maskinen. Løsningen folk griper til, er en IPv6-inngangskjede som dropper alt unntatt WireGuard, og som dermed også dropper trafikken som holder verten knyttet til sin egen lenke. Naboellesing og meldinger om vedlikehold av stien er ikke tjenestetilgang, og å fjerne dem gir en maskin som er unåelig av grunner som ikke har noe med policyen din å gjøre. Tunnelen kommer opp, tjenestene er riktig avgrenset, og ingenting annet på lenken virker.

Tre ansvarsområder, ett regelverk

Det første ansvaret er drift av det ytre nettet: verten må bli på lenken sin, slå opp naboer og lære stiens grenser for den lenken. Det andre er den krypterte lytteren, som tar imot UDP på adressen og porten du valgte. Det tredje er settet med dekrypterte tjenester du vil at tunnelbrukere skal nå.

Det er tre forskjellige policyer, og bare den andre og tredje handler om VPN. Et regelverk som behandler dem som én, arver en feilmodus der en stramming av applikasjonsgrensen stille bryter vertens tilkobling.

Hold dem i separate kjeder eller i det minste separate kommentarer, slik at neste person ser hvilken linje som finnes og hvorfor.

Hva ICMPv6 gjør for verten

IPv6 er avhengig av ICMPv6 for langt mer enn ekko. Naboeforespørsel og -annonsering erstatter ARP og er nødvendige for lokal levering. Packet Too Big bærer informasjon om stiens MTU, og å ignorere den gir overføringer som stopper på store pakker. Ruterkunngjøringer bærer standardruten og prefiksinformasjon når lenken bruker automatisk konfigurasjon.

RFC 4890 skiller meldingene et vertsfilter må tillate fra dem som er et administrativt valg, og gjør det i en vertsdel som er forskjellig fra reglene for en ruter som videresender mellom nett. Leser man bare videresendingsdelen, får man en inngangspolicy som er for streng for verten den beskytter.

Den praktiske regelen er å tillate de vesentlige feil- og konfigurasjonsmeldingene på grensesnittet som trenger dem, avgrenset etter type og kilde der plattformen tillater det, og å ta en uttrykkelig beslutning om resten.

Å erstatte alt dette med en generell ICMPv6-tillatelse løser tilgjengelighetsproblemet og gir opp filtreringen. Å erstatte det med en generell dropp løser filterproblemet og gir opp verten.

Slipp tunnelen inn, deretter tjenesten

Godta WireGuard-transporten på den tiltenkte ytre adressen og UDP-porten, og godta returtrafikken gjennom tilkoblingssporing. Tillat deretter applikasjonstjenestene gjennom tunnelgrensesnittet, fra kildene du faktisk autoriserer.

En tillatelse for den ytre UDP-porten autoriserer ikke de dekrypterte forespørslene inni den. Den forskjellen er hele grunnen til at tunnelgrensesnittet dukker opp i tjenestereglene.

Les regelverket slik det er, ikke slik filen beskriver det:

sudo nft list ruleset
ip -6 addr show
ip -6 route show default

En lytter på en fysisk adresse er en separat eksponering fra samme tjeneste på tunneladressen. Hvis maskinen også videresender trafikk til en annen maskin, er det en beslutning i videresendingskjeden og ikke denne inngangspolicyen, og den trenger sin egen begrunnelse.

Test lenken, ikke bare tunnelen

En tunnel som virker etter endringen, beviser mindre enn det ser ut som, fordi en eksisterende nabo-oppføring og en etablert tilkobling kan skjule en kontrollmelding som policyen nå dropper.

Kontroller tilkoblingen direkte, og kontroller deretter at den utelukkede stien fortsatt feiler:

ip -6 neigh show
ping -6 -c 3 2001:db8:1::1
sudo nft -c -f /etc/nftables.conf

En naboetabell som forblir komplett etter omstart, er signalet om at lesingen fortsatt virker. En tabell som tømmes og aldri fylles igjen, er signalet om at du har filtrert den bort. Den tredje kommandoen validerer syntaksen i regelverket uten å anvende det, noe som er verdt å gjøre mens du fortsatt har en sesjon.

Gjenopprett en vert du låste deg ute fra

Før du endrer brannmurregler som bærer din egen administrasjonssesjon, hold en annen kanal: en konsoll, en seriell tilkobling eller en planlagt tilbakerulling som fjerner de nye reglene hvis du ikke avbryter den.

Hvis en endring faktisk låser deg ute, skjer gjenopprettingen gjennom den kanalen og ikke gjennom nettet du nettopp fjernet. Gjenopprett forrige regelverk fra en lagret kopi, bekreft at verten er nåbar igjen, og anvend først da den tiltenkte policyen i mindre biter.

Den endelige policyen er ikke universell. Adressering, ruting og brannmurimplementasjon er input til utrullingen, men grensen er den samme overalt: avvis utilsiktet applikasjonstilgang mens du beholder kontrolltrafikken som bærer den autoriserte tunnelen.

Relaterte artikler