Ваш файл .ovpn може виконувати код, а не лише маршрутизувати трафік
Профіль, який називає помічник up або down, виконує код із вашими правами. Перевірте шлях, власника, очищення та параметр script-security.
Більшість людей читають файл .ovpn так само, як сторінку налаштувань маршрутизатора: адреси, маршрути, список шифрів. Частина, яка виконує код, розташована ближче до кінця, поруч із директивами, що виглядають як сантехнічні роботи, і працює з тими правами, які клієнт уже має. Це та шпарина, яку використовує недбалий або зловмисний профіль, і це також та шпарина, яка через три тижні перетворює корисний DNS-помічник на проблему підтримки. Директива події, рівень безпеки та власник файлу вирішують, що може статися; вміст скрипта вирішує, що відбувається насправді. Прочитайте всі чотири, перш ніж підключатися.
Профіль, який запускає помічник, — це програма, а не файл налаштувань
Директиви на кшталт route і dhcp-option описують стан, який клієнт має встановити, і клієнт ставиться до них як до даних. Скрипт up інший: клієнт запускає його як процес і передає середовище, повне подробиць з'єднання, тому все, що написав автор, виконується з правами вашого облікового запису. На ноутбуці, де користувач є адміністратором, це широкі двері для файлу, що надійшов вкладенням або вставленим із теми форуму. Різниця не стилістична, це різниця між конфігурацією та кодом.
Міф, який варто відкинути, полягає в тому, що профіль може лише перенаправляти трафік. Помічник, який виконує ip route add, і той, що виконує curl до віддаленого хоста, — це один механізм, і профіль зовні виглядає однаково. Ніщо у вигляді файлу не каже, який із них у вас, тому перевірка має дійти до самого скрипта.
Що насправді визначає виконання і як виглядають дозвільні рядки
Помічником керують три речі: директива події, що його називає, рівень script-security, що його дозволяє, і власна реалізація клієнтської платформи. Профіль може запитати гачок і все одно нічого не побачити, бо мобільний клієнт або урізана збірка для стільниці може взагалі не реалізовувати цю подію. Так само профіль, який просить більше прав, ніж потрібно його функції, говорить вам дещо про своє походження. Рівень прав — це можливість, а не дозвіл. Дозвільні рядки виглядають так, а шлях стоїть замість вашого.
script-security 2
up /etc/openvpn/update-resolv-conf.sh
down /etc/openvpn/update-resolv-conf.shРівень 0 відмовляє зовнішнім програмам, а рівень 1, типовий, дозволяє лише вбудовані виконувані файли клієнта, тож гачку потрібен 2 або вище; рівень 3 існує переважно для передачі старих паролів і його краще уникати. Профілю з гачком потрібні і директива, і цей рівень, тому один рядок ближче до кінця файлу заслуговує такої самої перевірки, як блок сертифіката. Посібник OpenVPN перелічує рівні прав, і його формулювання варто читати поруч із тим, що профіль справді вимагає.
Власність, шлях і чим годується помічник
Профіль, якому ви довіряєте, але який указує на скрипт, доступний для перезапису іншим обліковим записом, — не надійна домовленість, бо вчорашня перевірка більше не описує те, що працює сьогодні. Перевірте власника й режим помічника та переконайтеся, що налаштований шлях веде до файлу, який ви оглянули, а не до імені, яке може заслонити щось інше. Аргументи й середовище заслуговують такого самого погляду: клієнт передає подробиці з'єднання гачку, а помічник, який записує все своє середовище, може вписувати облікові дані в заявку до підтримки. Віддавайте перевагу задокументованій інтеграції від оператора або платформи, а не скрипту DNS, скопійованому з не пов'язаної публікації, бо два менеджери резолверів, які сваряться за один файл, дають збій, схожий на зламаний VPN.
Коли ви повідомляєте про невдалий гачок, відредагуйте середовище, перш ніж кудись його вставляти. Дамп, що допомагає в налагодженні, може також нести токен, який вас автентифікує.
Збої очищення з'являються після зникнення тунелю
Помічник up додає маршрути й налаштування резолвера, а помічник down має їх знову прибрати. Коли гачок down відсутній, тихо збоїть або ніколи не запускається, бо клієнт було вбито, залишки переживають сеанс. Тоді трафік іде шляхом, якого ніхто не планував, а імена розв'язуються через резолвер, який мав бути видалений, тоді як сам тунель виглядає здоровим. Ці симптоми приходять після відключення, тому звинувачують мережу, а не профіль.
Перевірте розбирання як окремий крок: підніміть тунель, запишіть маршрути й резолвер, опустіть його, а потім переконайтеся, що обидва зникли. Профіль, який підключається чисто, усе одно може залишити стан, а нульовий код виходу помічника не доводить, що резолвер опинився там, де ви думаєте.
Перевірка помічника й збереження виходу
Прочитайте скрипт від початку до кінця, шукаючи три речі: команди, яким потрібні права, жорстко закодовані шляхи, яких може не бути у вашій системі, і будь-який мережевий виклик, який він робить. Потім подивіться, як він збоїть, бо помічник, який ковтає помилки, перетворює помилку конфігурації на загадку. Якщо ви не можете одним реченням сказати, що робить скрипт і хто може його змінити, ви не готові його вмикати. Профіль, який просить більше прав, ніж вимагає це речення, — сигнал зупинитися.
Зберігайте останній робочий профіль і помічник, на який він посилався, у захищеному сховищі, з позначеними обома версіями, щоб відкат був копією, а не перезбиранням у найгірший можливий момент. Якщо помічник існує лише для дистрибутива або версії клієнта, яким він більше не потрібен, виведіть його з ужитку в конфігурації, що володіє налаштуванням, замість підвищення прав, доки помилки не припиняться. Ось і вихід: менше рухомих частин, а не більше прав.