Импортирайте профил в настолен клиент и първата грешка често е ред, който клиентът отказва да изпълни: скриптов hook, който няма да стартира, или стойност на script-security, която смята за твърде разрешителна. Вдигането на числото маха диалога. То обаче разширява и това, което този профил има право да изпълнява на вашата машина, а това е странно нещо за даване, само за да се затвори предупреждение. Проследете импорта до директивата и решението става конкретно.

От диалога за импорт до директивата

Профилът е текстов файл с директиви и клиентът ги чете, преди да съществува какъвто и да е тунел. Директива като up, down или tls-verify посочва външна програма, която OpenVPN трябва да стартира в определен момент. Дали OpenVPN е готов да я стартира, е отделна настройка, наречена script-security, и профилът обикновено задава и нея.

Значи предупреждението не е за криптография или сертификати. То е за конфигурационен файл, който иска от клиента да изпълни нещо на хоста, и за клиента, който проверява дали текущото му ниво на права позволява тази заявка.

На този етап два различни отказа изглеждат еднакво. Профил, който иска ниво, което клиентът няма да даде, води до отказ. Профил, който иска ниво, което клиентът дава, но скриптът липсва, води до грешка по време на изпълнение, и двете се смесват в темите за поддръжка. Едното е въпрос на права, другото е въпрос на пакетиране.

Какво всъщност открива всяко ниво

Ниво 0 забранява изцяло извикването на външни програми, което е последователно за клиент, който сам настройва интерфейса си без помощ, и непоследователно за такъв, който вика операционната система. Ниво 1, по подразбиране, позволява вградените изпълними файлове, нужни за настройка на интерфейса и маршрутите. Никое от двете нива не стартира нищо, предоставено от потребителя.

LevelWhat OpenVPN may executeWhat it exposes
0No external programs at allInterface and route setup must not depend on helpers
1 (default)Built-in helpers such as ip, ifconfig, route or netshPrivileged commands the platform already ships
2Built-in helpers plus user-defined scriptsWhatever the named script does with the client's privileges
3Everything above, plus passwords in environment variablesCredentials visible to child processes and their logs

Ниво 2 е интересната граница, защото допуска скриптове, дефинирани от потребителя. От този момент правата на клиента важат за код, който може никога да не сте чели, извикан в моменти, които не сте избрали, в среда, която съдържа данни за връзката. Ниво 3 отива по-далеч и позволява пароли да се предават чрез променливи на средата, поради което ръководството го описва като потенциално опасни.

Никое от тези числа не е настройка за сила. Профил на ниво 3 няма по-добро криптиране от такъв на ниво 1; той просто има по-голяма повърхност за изпълнение, а тунелът е идентичен.

Решете какво заслужава профилът

Питайте за какво е скриптът, преди да питате какво ниво му трябва. Hook, който избутва настройки на DNS или поправя маршрут след свързване, е законна причина да стартирате нещо. Hook, който вика непознат двоичен файл във временна папка, е причина да спрете.

Пътят до скрипта е толкова важен, колкото и скриптът. Относителният път се разрешава спрямо папката, която клиентът използва, а папка с права за запис превръща еднократния импорт в постоянен слот за изпълнение. Абсолютни пътища в папка, която потребителят не може да променя, са формата, която е за предпочитане.

Скриптовете наследяват и средата на клиента, където живеят идентификационните данни и метаданните за връзката. Именно това наследяване прави ниво 3 опасно в комбинация със скрипт, който записва средата си, и затова диагностичен дъмп от клиент с включени скриптове заслужава втори поглед, преди да бъде поставен в тикет. Изчистете средата, преди да я споделите.

grep -nE 'script-security|^up |^down |tls-verify' client.ovpn

Променете едно нещо, а после наблюдавайте и спирането

Ако профилът наистина се нуждае от скрипт, променете само нивото и само за този профил. Стартирайте клиента на преден план с подробен изход, за да се виждат собствените грешки на скрипта, вместо да бъдат погълнати от мениджър на услуги.

openvpn --config client.ovpn --script-security 2 --verb 3
ip route show default

Тествайте целия жизнен цикъл, не само свързването. Провалил се hook при спиране оставя маршрути към мъртъв тунел, което дава машина, която изглежда свързана и не достига до нищо. Свържете се отново веднъж и се изключете веднъж, преди да обявите промяната за завършена, и проверявайте таблицата за маршрутизация след всяко от двете.

Пазете копие от оригиналния профил. Ако клиент на дадена платформа не прилага същия модел на скриптове, изтриването на директиви, докато импортът успее, може да премахне интеграцията с DNS или маршрути, от която тунелът се нуждае, и получената връзка ще се удостовери безупречно, без да резолвва нищо.

Решението за запис е тясно: кой скрипт, по кой път, на кое ниво е разрешен, за кой профил. Всичко останало в профила остава непроменено и това е изречение, което рецензентът може да провери.

Подобни статии