Núdzový vypínač pre VPN sidecar: zablokujte prevádzku, keď skončí
Zdieľanie menného priestoru kontajnera VPN nezastaví aplikáciu, keď tunel padne. Pridajte výslovnú politiku odchádzajúcej prevádzky a testujte reštarty, nielen odpojenia.
Aplikačný kontajner, ktorý zdieľa sieťový menný priestor kontajnera VPN, nemá vlastné rozhranie, takže je ľahké predpokladať, že pri zlyhaní tunela nemôže nič odoslať. Tento predpoklad je v režime zlyhania, na ktorom záleží, nesprávny. Ak proces VPN zomrie, kým menný priestor prežije, aplikácia si ponechá svoje sockety a menný priestor si ponechá svoje trasy a prevádzka pokračuje po akejkoľvek ceste, ktorá je ešte nainštalovaná. Skutočný kill switch je výslovná filtračná politika plus testy životného cyklu runtime, nie závislosť pri štarte.
Prečo zdieľanie menného priestoru nie je kill switch
Zdieľanie menného priestoru znamená, že aplikácia používa rozhrania, adresy a smerovaciu tabuľku kontajnera VPN. Odstraňuje nezávislú cestu aplikácie do siete, kým je zdieľaný menný priestor neporušený, a nehovorí nič o tom, čo tento menný priestor urobí, keď tunel zmizne.
Podmienky závislostí v Compose môžu oddialiť štart aplikácie, kým závislosť nie je zdravá. To pokrýva jediný okamih v čase a žiadne neskoršie zlyhanie, takže ide o nástroj na poradie štartu, nie nepretržitý odchádzajúci firewall.
Čo sa skutočne stane, keď kontajner skončí
Rozlišujte tri udalosti. Proces VPN vnútri kontajnera môže zomrieť, kým kontajner beží ďalej. Kontajner sa môže zastaviť alebo odstrániť, čo zničí menný priestor. Kontajner možno znova vytvoriť, čo vytvorí nový menný priestor a nové pravidlá.
V prvom prípade menný priestor pretrváva, predvolená trasa môže stále ukazovať na fyzické rozhranie a aplikácia posiela dáta priamo ďalej. V druhom prípade závislá aplikácia zvyčajne úplne stratí pripojenie, pretože jej menný priestor zmizol. V treťom prípade sa aplikácia môže znova pripojiť k novému mennému priestoru skôr, než je tunel pripravený. Každý prípad si vyžaduje iný test a návrh, ktorý pokrýva len usporiadané odpojenie, pokrýva ten najmenej zaujímavý.
Vytvorte výslovnú politiku odchádzajúcej prevádzky
Napíšte politiku vnútri zdieľaného menného priestoru, aby sa vzťahovala na pakety aplikácie. Formou je predvolené zahadzovanie s úzkymi výnimkami: loopback, rozhranie tunela a konkrétna adresa a port koncového bodu, ktoré transport tunela potrebuje.
Výnimka pre koncový bod musí existovať skôr, než tunel nabehne, inak sa klient VPN nedostane na svoj server. Preto sada pravidiel povoľuje vonkajší transport výslovne, namiesto toho aby povoľovala fyzické rozhranie všeobecne. Pridajte aj pravidlá IPv6, ak má menný priestor pripojenie IPv6, pretože politika iba pre IPv4 necháva druhú rodinu otvorenú.
DNS patrí do politiky tiež. Ak aplikácia prekladá názvy cez resolver dostupný len vnútri tunela, pravidlo zahadzovania preruší preklad, keď je tunel dole, čo je pre kill switch správne správanie. Rozhodnite sa vedome, či to je to, čo chcete.
Testujte životný cyklus, nielen odpojenie
Pošlite novú neškodnú požiadavku, kým je tunel zdravý, potom zabite proces VPN a pošlite ďalšiu. Opakujte po zastavení kontajnera, po reštarte a po novom vytvorení. Nová požiadavka je dôležitá, pretože existujúce spojenie môže prežiť zmenu pravidiel, ktorá blokuje nové.
Nespoliehajte sa na kontrolu stavu ani na vyhľadanie výstupnej IP ako na mechanizmus blokovania. Kontrola pozoruje stav a hlási ho; politika riadi prevádzku. Obe patria do rovnakého nasadenia a nie sú vzájomne zameniteľné.
Zaznamenajte pravidlá, aby test prežil aktualizáciu
Napíšte očakávaný výsledok pre každý prípad zlyhania do dokumentácie nasadenia spolu s pravidlami, ktoré ho implementujú. Takýto záznam umožňuje spustiť rovnaký test po aktualizácii image alebo upgradu runtime, keď sa správanie menného priestoru alebo predvolené trasy môžu zmeniť bez toho, aby niekto upravoval súbor compose.
Udržujte požadovanú vonkajšiu cestu koncového bodu VPN oddelene od neobmedzenej odchádzajúcej prevádzky aplikácie a udržujte DNS a IPv6 v zamýšľanom pokrytí. Ak politika povoľuje celé fyzické rozhranie pre pohodlie, kill switch je preč. Dokumentácia sietí Docker opisuje usporiadanie zdieľaného menného priestoru, na ktorom je politika postavená, a je referenciou, ktorú treba skontrolovať, keď je správanie runtime spochybnené.