Kill switch для окремих програм проти блокування всього пристрою: що змінюється
Вирішуйте за захищеним набором, а не за ярликом: що зупиняється для виключених програм, фонових помічників і нових з'єднань, і як перевірити кожен випадок.
Kill switch для окремих програм звучить як обережний вибір: коли тунель падає, мережу втрачає лише робочий клієнт, а все інше продовжує працювати. Потім хтось помічає, що особистий браузер усе ж завантажив сторінку, помічник синхронізації з того самого пакета продовжував намагатися, а кешоване ім'я досі розв'язувалося в адресу, яка ніколи не торкалася тунелю. Ярлик на функції та набір з'єднань, які вона справді захищає, — дві різні речі. Спершу визначте захищений набір, бо саме він вирішує, чи чесним описом є застосування за програмами, чи блокування всього пристрою.
Почніть із набору, а не з ярлика
Політика за програмами захищає вибрані програми. Блокування пристрою націлене на ширшу мережеву межу, зазвичай із задокументованими винятками для локального друку, керувального трафіку або captive-порталів. Жоден ярлик не є повним, доки ви не відповісте на три питання: що відбувається з виключеними програмами, що відбувається з помічниками, які ці програми запускають, і що відбувається зі з'єднаннями, відкритими, поки захист недоступний.
Запишіть ці відповіді, перш ніж торкатися будь-якого налаштування клієнта. Якщо вимога звучить як "цей зарплатний клієнт ніколи не повинен говорити з інтернетом поза тунелем, а мій браузер може", набір малий і застосування за програмами підходить. Якщо вимога звучить як "ніщо на цьому пристрої не виходить в інтернет без захисту, крім служби оновлень", жодна політика за програмами цього не дасть, бо проблема — програми, які ви не назвали.
Застосування за програмами зіставляє ідентифікатори, а не назви програм
Android надає VPN за програмами через пакети, і його документація VpnService описує, як це взаємодіє з режимом постійного ввімкнення та блокуванням. iOS налаштовує VPN за програмами через профіль керування і зіставляє за програмою або за доменом. У Windows і Linux маршруту за процесом немає взагалі, тому ту саму ідею наближують правилом брандмауера, обмеженим програмою, або правилом, що зіставляється з користувачем-власником.
Межа — це ідентифікатор, а ідентифікатори легко обійти. Програма, яка передає URL системному браузеру або відкриває документ у переглядачі, переходить у процес, який ваша політика ніколи не називала. Опція завершення при обриві теж не є фільтром пакетів: вона вбиває налаштовану програму, тоді як дочірній процес, обробник черги або вкладка браузера можуть зберегти наявний сокет живим.
Блокування охоплює те, чого політика за програмами не бачить
Блокування всього пристрою прибирає вибір. Кожен вихідний пакет, що не належить тунелю, відкидається, включно з трафіком процесів, про які ваша політика програм ніколи не знала. В Android це постійно ввімкнений VPN разом із налаштуванням блокування з'єднань, і застосування відбувається в системі, а не у вікні клієнта. На настільному комп'ютері це постійне правило брандмауера або маршрут за замовчуванням, що вказує на недосяжний шлюз.
Ціна в тому, що все інше зупиняється, тому винятки стають частиною задуму, а не пізнішою думкою. Локальні принтери, виявлення служб, вхід на captive-портали, агенти керування й оновлення ОС — кожному потрібна задокументована діра, бо кожен із них є шляхом, що залишається відкритим, коли тунель не працює. Блокування є лише настільки сильним, наскільки короткий найкоротший запис у цьому списку.
DNS, IPv6 і фонові помічники приховують витоки
Те, що захищена програма не може розв'язати ім'я, не доводить, що кешовані відповіді або прямий IP-трафік блокуються. Якщо розв'язувач досі доступний поза тунелем, ім'я розв'язується, а з'єднання не вдається, що виглядає як робочий kill switch і ним не є. Гірше того, кешований запис може вказувати на адресу, яку тунель не несе, тож з'єднання виходить напряму, поки програма повідомляє про помилку VPN.
IPv6 потребує власного правила на кожній платформі, яка його виконує, бо правило відкидання для v4 не покриває маршрут v6. На мобільному налаштування приватного DNS може перенести розв'язання в зашифрований канал, який політика пристрою не перевіряє. А фонові помічники — звичний винуватець на настільному комп'ютері: процес оновлення або синхронізації в лотку стартує раніше за VPN-клієнт і тримає власне з'єднання, тож ніколи не бачить зміненого маршруту.
Перевірте три програми та два переходи
| Test | What it proves |
|---|---|
| Included app, by name and by direct IP | the policy is applied, not just the resolver |
| Excluded app, same checks | the exclusion is intentional and documented |
| Helper or updater process | nothing inherited an older route |
| Tunnel drop, then Wi-Fi to cellular | the block survives the transition |
Запустіть кожен рядок двічі: один раз з іменем хоста і один раз з буквальною адресою, і ще раз через IPv6, якщо мережа це пропонує. Проходження означає, що включена програма зупинилася, виключена поводилася так, як ви записали, а помічник не вислизнув. Запишіть пряму поведінку, яку ви визнали прийнятною, щоб наступний адміністратор відрізнив навмисний виняток від збою.
Потім опишіть результат одним реченням, що називає програми та умови, наприклад: у зарплатного клієнта немає маршруту поза тунелем, браузер навмисно прямий, а все інше зупиняється, коли тунель не працює. Якщо це речення важко написати, політика все ще дві політики, що воюють одна з одною.