Який інструмент macOS може змусити одну програму ходити лише через VPN?
Межа «лише через VPN» потребує і шляху, і відмови. Порівняйте профілі для програм, проксі, фільтри та PF, а потім перевірте ту саму програму, яка вам важлива.
Один рядок у документі вимог — «ця програма може використовувати VPN і нічого більше» — тихо вимагає двох механізмів, яких не дає жоден перемикач. Трафіку потрібен шлях через призначений тунель, а трафік, який інакше пішов би напряму, має бути відхилений. Інструменти, які одне з цього роблять добре, а друге зовсім ні, трапляються часто, тому порівняння, яке питає лише «чи вміє щось блокувати», впевнено відповідає на половину питання. Спершу запишіть межу, потім виберіть компоненти, що покривають обидві її половини.
Дві вимоги, сховані в одному реченні
Спрямування — це частина, яка поміщає з'єднання в тунель або проксі. Відмова — це частина, яка не дає тому самому з'єднанню вийти будь-яким іншим шляхом. Їх реалізують різні компоненти, вони відмовляють по-різному, і продукт може бути чудовим в одному, нічого не кажучи про інше:
| Approach | Steers traffic | Refuses direct egress | Knows the app identity |
|---|---|---|---|
| Per-app VPN profile | Yes, for the apps it names | Only if a filter or firewall also blocks | Yes, within its own rules |
| Application proxy setting | Partly, for requests that honour it | No | No |
| Content filter | No | Yes | Yes, if the filter is written that way |
| Local PF ruleset | No | Yes, by address and port | Not reliably |
Читайте таблицю як контрольний список, а не як рейтинг. Жоден рядок не заповнює обидва середні стовпці, а рядки, що їх покривають, — це два співпрацюючі компоненти: один володіє шляхом, другий відмовою. Стовпець ідентичності важливий з іншої причини: правило, яке не може назвати програму, не може застосувати правило про цю програму. Що б ви не впроваджували, воно має відповідати на всі три, інакше межа в документі вимог — не межа на машині.
Саме лише спрямування залишає вихід
Налаштування проксі для програми — найясніший приклад спрямування без відмови. Воно може спрямовувати запити програми, яка поважає системний проксі, і нічого іншого не покриває: допоміжний процес, оновлювач, фонова служба або інший протокол можуть піти своїм шляхом, жодного разу не прочитавши це налаштування. Тому вибір кінцевої точки SOCKS в одній панелі не створює політику заборони прямого виходу для програми. Якщо вимога стосується програми загалом, запитайте, які компоненти правило справді визначає.
Профіль VPN для окремої програми спрямовує краще за проксі, бо платформа вирішує, які програми потрапляють у тунель замість того, щоб кожна програма вирішувала сама. І все ж він нічого не відхиляє: профіль дає шлях, а трафік, що йому не відповідає, іде звичайним маршрутом. Саме ця прогалина — місце, де другий компонент заслуговує свого місця, і тому продукти, що виглядають як один перемикач, зазвичай складаються з двох.
Сама лише відмова ламає програму
Документація Apple про фільтри вмісту описує вердикт дозволити-або-заблокувати щодо трафіку, поки він проходить через мережевий стек. Цей вердикт не тунель і не проксі-з'єднання, бо вирішує, чи може щось продовжитися, а не куди воно йде. Один фільтр бездоганно забезпечує відмову й залишає програму непридатною, з чистими журналами й без пояснень. Вердикт фільтра може зупинити з'єднання, але ніколи не дає тунель, тому поєднання його зі спрямуванням — це проєктне рішення, а не необов'язковий додаток.
Локально керований набір правил PF стоїть на іншому кінці цього спектра. Це законне рішення підтримки на машині, якою володіє адміністратор, і воно не стає автоматично основою продукту, який можна розповсюджувати, бо власник набору правил володіє і його взаємодією з іншими користувачами міжмережевого екрана, шляхом оновлення та відновленням, коли правило помилкове. Додавання PF до продукту не знімає це питання власності; воно його визначає.
Розгортання вирішує, чи існуватиме правило й завтра
Те, як Network Extension розгортається на платформах Apple, залежить від типу постачальника, пакування та версії ОС перед вами. Розширення програми в macOS працює в контексті користувача й завершується, коли цей користувач виходить, тоді як системне розширення має глобальний контекст, що не залежить від сеансу. Якщо захист має пережити вихід, ця різниця і є весь дизайн, а не виноска. Підтвердьте шлях розгортання, перш ніж обіцяти поведінку, бо той самий код приземляється по-різному залежно від типу розширення, що постачається.
Доступність вихідного коду — окреме питання від застосування. Читання сховища говорить, як щось реалізовано, а не що встановлений бінарний файл має право робити на цій машині. Підписування, встановлення та авторизація досі діють, а інструкції, побудовані навколо застарілого розширення ядра або трюку з ін'єкцією бібліотеки, описують іншу платформу та інше ставлення до ризику, хоч би як добре вони колись працювали.
Приймальний випадок, який називає програму
Виберіть одну дію, яку програма виконує сама, занотуйте адресу, якої вона має досягти, і чи ця адреса IPv4 або IPv6, потім повторіть ту саму дію в затвердженому стані без тунелю. Другий запуск має дати заявлену відмову, а не тиху пряму повторну спробу. Це та половина, яку люди залишають неуточненою, і єдина половина, що доводить: відмова взагалі існує. Запустіть її спершу з доступним тунелем, щоб різниця між двома результатами могла походити лише з відсутнього тунелю.
Потім пройдіть переходи, які називає вимога: перезапуск програми, спрацювання допоміжного процесу, повторне підключення тунелю, зміна мереж машиною та вихід або перезавантаження там, де це застосовно. Сторінка публічної IP у браузері не є перевіркою сокетів іншої програми, тому не може її замінити. Там, де жодне підтримуване розгортання не покриває реальну поведінку програми, авторизоване ізольоване середовище з явним шлюзом і без альтернативного виходу — це рішення про стримування з власними витратами на керування, а не заміна прапорця.
Завершіть, записавши чотири пункти: з яких компонентів складається програма, хто володіє спрямуванням, хто володіє відмовою та стани, у яких правило має ще діяти. Публічне сховище може бути одним критерієм вибору, але воно не одне з чотирьох, і саме ці пункти вирішують, чи відповідає даний інструмент мережевій вимозі.