Kill switch VPN-oldalkocsihoz: blokkold a forgalmat, amikor kilép
A VPN-konténer névterének megosztása nem állítja le az alkalmazást, amikor az alagút meghal. Adj hozzá explicit kimenő szabályzatot, és teszteld az újraindításokat, ne csak a bontásokat.
Egy olyan alkalmazáskonténernek, amely egy VPN-konténer hálózati névterét osztja, nincs saját interfésze, ezért könnyű azt feltételezni, hogy nem tud semmit küldeni, amikor az alagút meghibásodik. Ez a feltevés a lényeges hibaesetben téves. Ha a VPN-folyamat meghal, miközben a névtér tovább él, az alkalmazás megtartja a socketjeit, a névtér megtartja az útvonalait, és a forgalom tovább halad azon az úton, amely még telepítve van. Egy igazi kill switch egy explicit szűrési szabályzat plusz a futásidejű környezet életciklusának tesztjei, nem pedig egy indítási függőség.
Miért nem kill switch a névtér megosztása
A névtér megosztása azt jelenti, hogy az alkalmazás a VPN-konténer interfészeit, címeit és útvonaltábláját használja. Megszünteti az alkalmazás független hálózati útját, amíg a megosztott névtér sértetlen, és semmit sem mond arról, mit fog tenni ez a névtér, amikor az alagút eltűnik.
A Compose függőségi feltételei késleltethetik egy alkalmazás indítását, amíg egy függőség egészséges nem lesz. Ez egyetlen időpillanatot fed le, és semmilyen későbbi hibát, tehát ez egy indításisorrendező eszköz, nem pedig egy folyamatos kimenő tűzfal.
Mi történik valójában, amikor a konténer kilép
Különböztess meg három eseményt. A konténeren belüli VPN-folyamat meghalhat, miközben a konténer tovább fut. A konténer leállhat vagy eltávolítható, ami megsemmisíti a névteret. A konténer újra létrehozható, ami új névteret és új szabályokat épít.
Az első esetben a névtér megmarad, az alapértelmezett útvonal továbbra is a fizikai interfészre mutathat, és az alkalmazás továbbra is közvetlenül küld. A második esetben a függő alkalmazás általában teljesen elveszíti a kapcsolatot, mert a névtere eltűnt. A harmadik esetben az alkalmazás újra csatlakozhat egy friss névtérhez, mielőtt az alagút készen áll. Minden eset más tesztet igényel, és egy olyan terv, amely csak a rendezett bontást fedi le, a legkevésbé érdekeset fedi le.
Építs explicit kimenő szabályzatot
Írd meg a szabályzatot a megosztott névtéren belül, hogy az alkalmazás csomagjaira vonatkozzon. A forma alapértelmezett eldobás szűk kivételekkel: loopback, az alagút interfésze, valamint az a konkrét végpontcím és port, amelyre az alagút átvitele szorul.
A végpont kivételének már a helyén kell lennie, mielőtt az alagút feljön, különben a VPN-kliens nem érheti el a szerverét. Ezért engedélyezi a szabálykészlet a külső átvitelt kifejezetten, ahelyett hogy a fizikai interfészt általánosan engedélyezné. Adj hozzá IPv6-szabályokat is, ha a névtér rendelkezik IPv6-kapcsolattal, mert egy csak IPv4-re vonatkozó szabályzat nyitva hagyja a másik csoportot.
A DNS is a szabályzat része. Ha az alkalmazás csak az alagúton belül elérhető feloldón keresztül oldja fel a neveket, az eldobási szabály megszakítja a feloldást, amikor az alagút le van állva, és ez a helyes viselkedés egy kill switchnél. Döntsd el tudatosan, hogy ezt akarod-e.
Az életciklust teszteld, ne csak a bontást
Küldj egy friss, ártalmatlan kérést, amíg az alagút egészséges, majd öld meg a VPN-folyamatot, és küldj egy másikat. Ismételd meg konténerleállítás, újraindítás és újralétrehozás után. A friss kérés azért számít, mert egy meglévő kapcsolat túlélhet egy olyan szabálymódosítást, amely az újakat blokkolja.
Ne egy állapotellenőrzésre vagy egy kimenő IP-lekérdezésre támaszkodj blokkolási mechanizmusként. Egy ellenőrzés megfigyeli az állapotot és jelenti; egy szabályzat irányítja a forgalmat. Mindkettő ugyanahhoz a telepítéshez tartozik, és nem helyettesítik egymást.
Rögzítsd a szabályokat, hogy a teszt túléljen egy frissítést
Írd le minden hibaeset várható eredményét a telepítési dokumentációba, együtt az azt megvalósító szabályokkal. Ez a feljegyzés lehetővé teszi ugyanazon teszt futtatását egy image-frissítés vagy egy futásidejű frissítés után, amikor a névtér viselkedése vagy az alapértelmezett útvonalak megváltozhatnak anélkül, hogy bárki szerkesztené a compose-fájlt.
Tartsd a VPN-végpont szükséges külső útját elkülönítve a korlátlan alkalmazáskimenettől, és tartsd a DNS-t és az IPv6-ot a tervezett lefedettségen belül. Ha a szabályzat a kényelem miatt a teljes fizikai interfészt engedélyezi, a kill switch nincs meg. A Docker hálózati dokumentációja leírja a megosztott névtér elrendezését, amelyre a szabályzat épül, és ez az a hivatkozás, amelyet ellenőrizni kell, ha a futásidejű környezet viselkedése kérdéses.