Как задокументировать исключение из блокировки 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, а не как устаревшее исключение.
Тестируйте, перепроверяйте и напишите шаг удаления
Напишите один безобидный тест для разрешённого пути и один близкий отклонённый случай: страница принтера загружается, а общий доступ к файлам в той же подсети — нет. Эта пара доказывает, что исключение узкое, и это та пара, которую рецензент может повторить, не понимая исходного запроса. Затем задайте триггеры повторного тестирования, потому что исключение, которое никогда не перепроверяют, отходит от требования, для которого оно написано, и это отхождение остаётся невидимым, пока что-то не сломается.
Наконец, запишите, как удалить правило через компонент, который им владеет, и держите секреты вне заметки. Описание службы и маршрута никогда не требует закрытого ключа, пароля или чьей-либо истории просмотров, а короткий поддерживаемый список лучше временного правила, которое пережило человека, написавшего его.