Et tilslutningshook er sessionspolitik, ikke et pakkefilter
Client-connect-hooket kører én gang pr. session og ser aldrig payload. Læg adgangskontrol der, hvor sessionerne findes, og indholdsændringer der, hvor forespørgslerne findes.
Nogen vil undersøge, hvad klienter sender gennem tunnelen, finder tilslutningshooket i dokumentationen og begynder at skrive et script, der aldrig får en enkelt pakke. Hooket er rigtigt og nyttigt, men dets arbejdsenhed er en session, ikke en byte. At vælge den rigtige komponent er en sammenligning mellem tre steder, hvor arbejde kan foregå, og det afgørende spørgsmål er, hvilken enhed hvert af dem faktisk kan se.
Hvad hooket modtager, og hvad det aldrig modtager
Et client-connect-hook kører én gang, når en autentificeret klient opretter en session, i serverens proceskontekst, med dokumenterede argumenter og miljøværdier som det fælles navn og den tildelte adresse. Det kan skrive konfiguration pr. klient, træffe en adgangsbeslutning, allokere en ekstern ressource eller registrere, at forbindelsen fandt sted. Det, det ikke kan, er at observere trafik, for når den første pakke krydser tunnelen, er hooket allerede vendt tilbage.
Det er ikke en begrænsning, man skal arbejde uden om. Et sessionscallback, der forsøgte at behandle en strøm, ville skulle køre i forbindelsens levetid, og daemonens scripting-kontrakt er ikke bygget til den form. Spørg, hvad hooket er til, før du beslutter, at det står i vejen.
Genforbindelser betyder også noget. En klient, der falder og genopretter forbindelsen, er en ny session, så alt, hvad hooket allokerer, skal være idempotent eller koblet til en afbrydelseshændelse, der rydder op. Tilstand, der lækker ved hver genforbindelse, er den sædvanlige første fejl i et hookbaseret design.
Sessionspolitik hører i hooket
Adgang er hookets naturlige opgave. Du ved, hvem der har tilsluttet sig, hvorfra og med hvilket certifikat, og du kan beslutte, om denne session skal fortsætte eller afvises. Den beslutning er billig, den sker én gang, og den kræver ikke at se på en enkelt payload-byte.
Konfigurationstildeling passer i samme form. Et hook kan vælge klientens adresse, skubbe muligheder, der passer til den identitet, eller skrive et fragment, som serveren læser for denne klient. Fordi beslutningen er pr. session, forbliver den forståelig, når noget går galt, og nogen skal forklare, hvorfor en bestemt klient fik en bestemt adresse.
Registrering er den tredje pasform. En revisionspost, der siger, at en session blev tilladt, med dens identitet og tid, hører præcis her. Det er ikke en trafiklog og bør ikke foregive at være det. Hvis nogen senere spørger, hvad en klient gjorde inde i tunnelen, skal svaret komme fra et andet sted.
Pakkearbejde hører på en pakkevej
Hvis kravet er at se eller ændre bytes undervejs, skal komponenten være på videresendelsesvejen: en firewallregel med en kø, et trafikstyringshook eller en videresender i brugerrummet. De mekanismer ser pakker, og de har deres egen tilstand, deres egne fejltilstande og deres egen ydeevneprofil.
At redigere payload på det lag er sværere end at læse den. En ændret byte kan ugyldiggøre et længdefelt, en kontrolsum eller en protokottilstandsmaskine, og en tunnel på tredje lag beskytter dig ikke mod noget af det. Det betyder kun, at de ydre headere ikke er dem, du redigerer. Afsæt budget til det reparationsarbejde, før du lover nogen en omskrivning af indhold.
En interfaceoptagelse er det billigste værktøj i denne kategori, og den er en observation, ikke en editor. Folk forveksler de to, fordi begge beskrives som at se trafik, men en optagelse frembringer en fil, og en pakkevej frembringer en beslutning.
Applikationsændringer hører i applikationen
Når målet er at ændre, hvad en forespørgsel indeholder, eller hvordan et svar dannes, er det rigtige sted tjenesten selv eller en proxy, der bevidst afslutter protokollen. De komponenter forstår allerede forespørgsler, svar og den autentificering, applikationen forventer, og det er netop den kontekst, et pakkefilter mangler.
Adresseoversættelse ligger i bunden af denne liste af en grund. Den omskriver adresser og porte og lader payload være, så den er ikke et indholdsværktøj, uanset hvor ofte den optræder i en opskrift, der også nævner indhold.
At holde disse grænser adskilt er det, der gør et design forklarligt. Sessionspolitik i hooket, pakkehåndtering på en pakkevej og applikationsændring, hvor protokollen bevidst afsluttes: tre sætninger, der også tjener som en tjekliste til gennemgang.
Hvor TLS stadig afslutter samtalen
Én ting overlever alt ovenstående: trafik inde i tunnelen, der bærer HTTPS, beholder sin egen transportkryptering. At have VPN-nøglerne giver dig den indre IP-pakke, og det giver dig ikke sessionsnøglerne til webstedet i den anden ende.
Det er derfor, et hook ikke kan inspicere indhold selv i princippet, og derfor ser en pakkevej ciphertext, medmindre udrulningen bevidst afslutter den indre TLS. scripting-kontrakten beskriver, hvad hooket får; den siger intet om payload, fordi der ikke er nogen payload at give.