Прекинувач за итност за VPN страничен контејнер: блокирајте сообраќај кога излегува
Споделувањето на именскиот простор на VPN контејнер не ја запира апликацијата кога тунелот умира. Додајте експлицитна политика за излезен сообраќај и тестирајте рестартирања, не само прекини.
Апликациски контејнер што го споделува мрежниот именски простор на VPN контејнер нема свој интерфејс, па лесно е да се претпостави дека не може ништо да испрати кога тунелот ќе откаже. Таа претпоставка е погрешна во режимот на откажување што е важен. Ако VPN процесот умре додека именскиот простор преживува, апликацијата ги задржува своите сокети, а именскиот простор ги задржува своите рути, и сообраќајот продолжува по патеката што е сѐ уште инсталирана. Вистински кил-свич е експлицитна политика за филтрирање плус тестови на животниот циклус на runtime-от, а не зависност при стартување.
Зошто споделувањето именски простор не е кил-свич
Споделувањето именски простор значи дека апликацијата ги користи интерфејсите, адресите и табелата со рути на VPN контејнерот. То ја отстранува независната патека на апликацијата до мрежата додека споделениот именски простор е недопрен, и не кажува ништо за тоа што ќе направи тој именски простор кога тунелот ќе исчезне.
Условите за зависност во Compose можат да го одложат стартувањето на апликацијата додека зависноста не биде здрава. Тоа опфаќа еден момент во времето и ниту едно подоцнежно откажување, затоа е алатка за редослед на стартување, а не постојан излезен firewall.
Што навистина се случува кога контејнерот излегува
Разликувајте три настани. VPN процесот внатре во контејнерот може да умре додека контејнерот продолжува да работи. Контејнерот може да запре или да биде отстранет, што го уништува именскиот простор. Контејнерот може повторно да се создаде, што гради нов именски простор и нови правила.
Во првиот случај именскиот простор опстојува, стандардната рута може сѐ уште да покажува на физичкиот интерфејс, а апликацијата продолжува директно да испраќа. Во вториот случај зависната апликација обично целосно ја губи поврзаноста, бидејќи нејзиниот именски простор исчезна. Во третиот случај апликацијата може повторно да се поврзе со нов именски простор пред тунелот да биде подготвен. Секој случај бара различен тест, а дизајнот што покрива само уредно прекинување го покрива најмалку интересниот.
Изградете експлицитна политика за излезен сообраќај
Напишете ја политиката внатре во споделениот именски простор за да важи за пакетите на апликацијата. Формата е стандардно отфрлање со тесни исклучоци: loopback, интерфејсот на тунелот, и конкретната адреса и порта на крајната точка што му се потребни на транспортот на тунелот.
Исклучокот за крајната точка мора да биде на место пред тунелот да се подигне, инаку VPN клиентот не може да го достигне својот сервер. Затоа множеството правила експлицитно го дозволува надворешниот транспорт наместо да го дозволува физичкиот интерфејс воопшто. Додадете и IPv6 правила ако именскиот простор има IPv6 поврзаност, бидејќи политиката само за IPv4 ја остава другата фамилија отворена.
DNS исто така припаѓа на политиката. Ако апликацијата решава имиња преку resolver достапен само внатре во тунелот, правилото за отфрлање ќе го прекине решавањето кога тунелот е долу, што е правилно однесување за кил-свич. Одлучете свесно дали тоа е она што го сакате.
Тестирајте го животниот циклус, не само прекинот
Испратете свежо безопасно барање додека тунелот е здрав, потоа убијте го VPN процесот и испратете уште едно. Повторете по запирање на контејнерот, по рестартирање и по повторно создавање. Свежото барање е важно бидејќи постојната врска може да ја преживее промената на правилата што блокира нови.
Не потпирајте се на здравствена проверка или на пронаоѓање излезна IP адреса како механизам за блокирање. Проверката го набљудува состојбата и известува за неа; политиката го контролира сообраќајот. Двете припаѓаат на истото распоредување и не се заменуваат.
Запишете ги правилата за тестот да го преживее ажурирањето
Напишете го очекуваниот исход за секој случај на откажување во документацијата за распоредување, заедно со правилата што го спроведуваат. Тој запис овозможува истиот тест да се изврши по ажурирање на сликата или надградба на runtime-от, кога однесувањето на именскиот простор или стандардните рути можат да се променат без никој да ја уреди compose датотеката.
Држете ја потребната надворешна патека на VPN крајната точка одделно од неограничениот излез на апликацијата и држете ги DNS и IPv6 во предвидениот опфат. Ако политиката дозволува целиот физички интерфејс поради удобност, кил-свичот го нема. Docker документацијата за мрежи го опишува распоредот на споделениот именски простор на кој се темели политиката, и тоа е референцата што треба да се провери кога однесувањето на runtime-от е под прашање.