Linux se uitgang só sluit dat niks lek wanneer die VPN val
Roetering en filtering is aparte besluite. Sper die uitvoerhaak, en begrens dan die eindpunt-, DNS- en bestuursuitsonderings wat die tonnel nodig het om weer te verbind.
Stel jou 'n mediaboks op 'n tuislyn voor wat die internet net deur 'n tonnel moet bereik. Wanneer die tonnel val, behoort die toepassing te stol eerder as om stilweg oor die fisiese koppelvlak aan te hou. Om daardie gedrag te kry is 'n brandmuurprobleem eerder as 'n roeteringsprobleem, en die onderskeid maak saak omdat 'n roete deur 'n daemon-herbegin vervang kan word terwyl 'n filter bly waar jy dit neergesit het. Wat volg is hoe die pakketpad werklik besluit, en dan hoe om die uitsonderings te begrens wat die tonnel aan die herverbind hou.
Plaaslike uitvoer is 'n ander haak as aanstuur
'n Pakket wat 'n toepassing op die boks verlaat gaan deur die uitvoerhaak; 'n pakket wat die boks vir 'n ander gasheer roeteer, gaan deur aanstuur. 'n Beleid wat net forward noem, beperk die tweede en laat die eerste heeltemal oop, en daarom lyk so baie uitgangslotte korrek en doen niks. Koppelvlakpassing hoort in dieselfde reël: oifname "tun0" accept laat verkeer deur wat al deur die tonnel geroteer is. Roetering en filtering bly ook aparte besluite, so 'n oplynroete kan bestaan terwyl die filter die pakket weier. Daardie skeiding is die meganisme waarop jy staatmaak.
'n Poort wat vir ander toestelle aanstuur, het albei hake nodig. Om net uitvoer te sluit beskerm die boks self en laat elke stroomaf-kliënt vry om te lek.
Skryf die uitsonderingslys van die eindpunt uitwaarts
Begin by die tonnel-eindpunt: een bestemmingsadres of 'n klein goedgekeurde stel, die transportprotokol en die bestemmingspoort, byvoorbeeld udp dport 1194 ip daddr 203.0.113.7 accept. As die kliënt 'n gasheernaam oplos, het die bootstrap-DNS-uitruiling sy eie reël nodig, beperk tot die oplosser en tot poort 53, nie 'n blanko permit vir daardie oplosser se adres nie. Elke uitsondering moet die rede noem waarom dit bestaan. 'n Toelating vir alle UDP-verkeer na die VPN-poort dek veel meer as die enkele geauthentiseerde diens wat jy in gedagte gehad het.
Bootstrap-oplossing is waar slotte gewoonlik verrot. 'n Adresstel wat op 'n tydhouer vernuwe word, het gedefinieerde gedrag nodig wanneer die vernuwing misluk, en daardie gedrag kan nie wees om die oplyn oop te maak totdat dit slaag nie. Vernuwe oor die tonnel terwyl die tonnel op is, en val andersins terug op die laatste bekende goeie eindpunt.
Plaaslike administrasie het dieselfde behandeling nodig. 'n Bestuursubnet is nie betroubaar omdat sy adresse privaat is nie, en 'n reël wat dit vertrou, nooi 'n tweede pad om die slot in.
Koppelvlakpassing is nie bewys van 'n gesonde tonnel nie
Reëls wat alles aanvaar wat tun0 verlaat, aanvaar dat 'n pakket op daardie koppelvlak uit die tonnel gekom het. Koppelvlakname word herskep, en 'n naam is nie 'n kriptografiese identiteit nie. Die eweknie kan ook weg wees terwyl die koppelvlak op bly, wat die reël 'n baie oortuigende no-op maak.
Verbindingnasporing voeg 'n verwante lokval by. 'n Breë reël vir gevestigde verbindings herhaal die toestemming wat 'n vloei vroeër gekry het, so 'n sessie wat voor die tonnel geval het begin het, hou daarna aan werk. Beperk staatvolle aanvaarding tot die koppelvlakke en adresse wat jy werklik bedoel, anders het jy 'n slot gebou wat homself oopmaak. Invoer- en uitvoerreëls antwoord ook verskillende vrae, en om een te hard te maak terwyl jy die ander ignoreer, laat die boks bereikbaar in die rigting wat jy nie oorweeg het nie.
Wat 'n daemon-ineenstorting oorleef
'n Filter wat deur 'n script geïnstalleer word wat nadat die tonnel opkom hardloop, verdwyn saam met die tonnel, op die presiese oomblik dat dit nodig was. Laai die slot by boot en laat die daemon net sy uitsonderings bestuur.
Om die verstekroete te skrap is ook nie 'n plaasvervanger nie. Die roete is toestand wat die daemon besit en herskryf, en om dit te verwyder kan die pad wegneem wat nodig is om te herverbind. IPv6 het sy eie plan nodig, want buurnontdekking en routeraankondigings is skakeldienste wat moet bly werk terwyl gewone verkeer geblokkeer is. DHCP hoort in dieselfde kategorie. Skryf hierdie dinge neer as uitsonderings met 'n doel, eerder as om hulle later as onderbrekings te ontdek.
Herstelpad voor ontplooiing
Toets die slot soos dit sal faal: boot sonder tonnel, dood die daemon, verander die eindpunt en herverbind. Elke geval behoort die toepassings te laat stol en die herstelkanaal te laat werk. Doen dit van 'n konsole, want 'n afgeleë dop is die sessie wat die meeste geneig is om deur jou eie reël uitgesluit te word.
Kyk dan wat 'n gewone toepassing nog kan bereik, met 'n onskadelike bestemming en 'n versoek wat jy kan verifieer. Die resultaat wat jy wil hê is 'n weiering op die oplyn en sukses deur die tonnel, nie 'n dubbelsinnige tydsverloop wat enige van die twee kan beteken nie. Hou die reëlstel onder dieselfde eienaar as die res van die brandmuur eerder as om die hele tabel uit 'n skelscript te vervang. 'n Beleid waar elke toelating homself kan regverdig, is meer werd as 'n lang reëlstel wat niemand kan verduidelik nie.