Як задокументувати виняток із блокування VPN, щоб його можна було видалити
Виняток, який ніхто не може описати, залишається назавжди. Запишіть трафік, який він дозволяє, вимогу, поведінку в разі збою та компонент, який його видаляє.
Обходи, мета яких пішла разом з їхнім автором, — це ті, що переживають свою корисність, і політики блокування збирають їх швидше, ніж будь-який інший вид конфігурації. Виняток, записаний як «дозволити локальну мережу», — це правило, яке ніхто не може захистити і ніхто не може вивести з експлуатації, бо вимога за ним пішла разом з людиною, яка його додала. Такі політики зазнають краху, бо несуть винятки, причина яких випарувалася, а ризик залишився. Момент записати обсяг, поведінку в разі збою та крок видалення — це момент, коли ви додаєте виняток, поки хтось ще пам’ятає чому.
Це рішення про те, що має містити нотатка, а не шаблон для заповнення. Чотири поля нижче — ті, що вирішують, чи зможе рецензент видалити правило через рік без наради. Кожне з них існує тому, що його відсутність має передбачувану ціну.
Чому недокументований обхід ніколи не виводять з експлуатації
Обхід без опису неможливо протестувати, а отже, не можна безпечно видалити. Він переживає кожну перевірку, бо видалення виглядає ризикованим, а збереження — безпечним, і кожна перевірка, яка його пропускає, робить наступну також простішою для пропуску. Ціна невидима, доки аудит не спитає, чому приватний діапазон звільнено, і тоді відповіддю буде знизування плечима.
Запис має бути достатньо коротким, щоб люди справді писали його у вікні змін. Один рядок для трафіку, один — для вимоги, якій він служить.
Записувати обсяг як трафік
Перелічіть застосунок або діапазон призначення, задіяні родини адрес, службу та порт, а також мережевий контекст, у якому діє правило, потім назвіть того, хто затверджує, і точне налаштування клієнта або платформи, яке його несе. «Принтер» — це намір; «TCP 631 до 192.168.1.50, лише домашня мережа» — це обсяг, який хтось може перевірити. Якщо відповідь на «де це живе» — «десь у профілі MDM», запис не завершено. Шлях до файлу, ім’я профілю або ключ реєстру кращі за опис того, де налаштування могло б бути.
Там, де платформа підтримує правила для окремих застосунків, віддавайте перевагу їм над діапазонами адрес, бо дозволити одному застосунку обходити тунель вужче, ніж звільнити цілу приватну підмережу, і це переживає переїзд пристрою на нову адресу. Посібник Android з VpnService описує цю модель для окремих застосунків; настільні клієнти виражають ту саму ідею через власні налаштування профілю. Винятки на основі адрес — запасний варіант, коли платформа не пропонує нічого вужчого, тому їм потрібен чіткіший рядок обсягу.
Чотири види винятків, чотири ризики видалення
Винятки — не одна категорія, і їх видалення має різні наслідки. Спільний рядок для двох видів — це те, як виведення принтера з експлуатації виводить і здатність підключатися.
| Kind | Typical example | Removal risk |
|---|---|---|
| Endpoint bootstrap | reaching the gateway before the tunnel exists | high: nothing comes up without it |
| Captive portal | hotel or airport sign-in page | medium: only matters on untrusted networks |
| Local device | printer, casting target, test instrument | low: one service at one address |
| Excluded application | an app that must not use the tunnel | medium: depends on the app's own behaviour |
Тримайте винятки для bootstrap, порталу, пристрою та застосунку в окремих рядках, навіть коли на практиці вони перетинаються. Виняток приватного діапазону мовчки дає доступ кожному сусідові в цій підмережі, а не єдиному пристрою, до якого ви хотіли дістатися, і це різниця між обсягом, який можна захистити, і тим, на який ви лише сподіваєтеся.
Що робить обхід, коли тунель падає
Поставте три питання і запишіть відповіді, бо вони вирішують, чи справжнє блокування. Чи залишається виняток придатним, коли тунель падає: для captive portal — мусить, інакше ніхто ніколи не зможе увійти, а для приватного ресурсу — зазвичай не повинен, інакше політика декоративна. Чи діє він у кожній мережі чи лише в передбаченому середовищі, бо правило, обмежене домашньою підмережею, поводиться зовсім інакше в публічній мережі, яка випадково використовує той самий діапазон. Кожна відповідь змінює і правило, і нотатку, тому питання, залишене без відповіді, — це рішення, яке хтось інший пізніше ухвалить неправильно.
Третє питання — що відбувається, коли призначення змінює свою адресу, де винятки на основі домену й на основі адреси розходяться. Правила на основі домену залежать від того, коли відбувається розв’язання, і від того, як клієнт застосовує результат, тому вони можуть мовчки перестати збігатися після зміни, що виглядає не пов’язаною, і збій виглядає як зламаний VPN, а не як застарілий виняток.
Тестуйте, перетестовуйте і напишіть крок видалення
Напишіть один нешкідливий тест для дозволеного шляху і один близький відхилений випадок: сторінка принтера завантажується, а спільний доступ до файлів у тій самій підмережі — ні. Ця пара доводить, що виняток вузький, і це та пара, яку рецензент може повторити, не розуміючи початкового запиту. Потім задайте тригери повторного тестування, бо виняток, який ніколи не перетестовують, відходить від вимоги, для якої його написали, і це відходження залишається невидимим, доки щось не зламається.
Нарешті, запишіть, як видалити правило через компонент, який ним володіє, і тримайте секрети поза нотаткою. Опис служби й маршруту ніколи не вимагає приватного ключа, пароля чи чиєїсь історії перегляду, а короткий підтримуваний список кращий за тимчасове правило, яке пережило людину, що його написала.