Zaimportuj profil do klienta desktopowego, a pierwszym błędem jest często wiersz, którego klient odmawia respektować: hak skryptu, którego nie uruchomi, albo wartość script-security, którą uznaje za zbyt pobłażliwą. Podniesienie liczby usuwa okno dialogowe. Poszerza jednak także to, co ten profil może wykonywać na twojej maszynie, co jest dziwną rzeczą do przyznania tylko po to, by pozbyć się ostrzeżenia. Prześledź import aż do dyrektywy, a decyzja stanie się konkretna.

Od okna importu do dyrektywy

Profil to plik tekstowy z dyrektywami, a klient czyta je, zanim istnieje jakikolwiek tunel. Dyrektywa taka jak up, down czy tls-verify wskazuje program zewnętrzny, który OpenVPN ma uruchomić w określonym momencie. To, czy OpenVPN jest gotów go uruchomić, jest osobnym ustawieniem o nazwie script-security, a profil zwykle ustawia je również.

Ostrzeżenie nie dotyczy więc kryptografii ani certyfikatów. Dotyczy pliku konfiguracyjnego, który prosi klienta o wykonanie czegoś na hoście, oraz klienta, który sprawdza, czy jego obecny poziom uprawnień na to pozwala.

Na tym etapie dwa różne błędy wyglądają tak samo. Profil proszący o poziom, którego klient nie da, daje odmowę. Profil proszący o poziom, który klient daje, ale bez skryptu, daje zamiast tego błąd w czasie wykonania, i oba są mylone w wątkach pomocy. Jedno jest kwestią uprawnień, drugie kwestią pakowania.

Co każdy poziom naprawdę otwiera

Poziom 0 całkowicie zakazuje wywołań programów zewnętrznych, co jest spójne dla klienta, który sam bez pomocy konfiguruje swój interfejs, a niespójne dla takiego, który odwołuje się do systemu operacyjnego. Poziom 1, domyślny, pozwala na wbudowane pliki wykonywalne potrzebne do konfiguracji interfejsu i tras. Żaden z poziomów nie uruchamia niczego dostarczonego przez użytkownika.

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

Poziom 2 to ciekawa granica, bo dopuszcza skrypty definiowane przez użytkownika. Od tego momentu uprawnienia klienta dotyczą kodu, którego być może nigdy nie czytałeś, wywoływanego w momentach, których nie wybrałeś, w środowisku zawierającym szczegóły połączenia. Poziom 3 idzie dalej i pozwala przekazywać hasła przez zmienne środowiskowe, dlatego podręcznik opisuje go jako potencjalnie niebezpieczny.

Żadna z tych liczb nie jest ustawieniem siły. Profil na poziomie 3 nie ma lepszego szyfrowania niż ten na poziomie 1; ma po prostu większą powierzchnię wykonania, a tunel jest identyczny.

Zdecyduj, na co profil zasługuje

Zapytaj, do czego służy skrypt, zanim zapytasz, jakiego poziomu potrzebuje. Hak, który wypycha ustawienia DNS lub naprawia trasę po połączeniu, jest uzasadnionym powodem, by coś uruchomić. Hak, który wywołuje nieznany plik binarny w katalogu tymczasowym, jest powodem, by się zatrzymać.

Ścieżka skryptu liczy się tak samo jak skrypt. Ścieżka względna jest rozwiązywana względem katalogu, którego używa klient, a katalog z prawem zapisu zamienia jednorazowy import w trwałe miejsce wykonania. Ścieżki bezwzględne w katalogu, którego użytkownik nie może zmienić, to forma, którą warto preferować.

Skrypty dziedziczą też środowisko klienta, w którym żyją dane logowania i metadane połączenia. Właśnie to dziedziczenie czyni poziom 3 niebezpiecznym w połączeniu ze skryptem, który loguje swoje środowisko, i dlatego zrzut diagnostyczny z klienta z włączonymi skryptami zasługuje na drugie spojrzenie, zanim trafi do zgłoszenia. Usuń środowisko, zanim go udostępnisz.

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

Zmień jedną rzecz, a potem obserwuj też rozbiórkę

Jeśli profil naprawdę potrzebuje skryptu, zmień tylko poziom i tylko dla tego profilu. Uruchom klienta na pierwszym planie ze szczegółowym wyjściem, aby własne błędy skryptu były widoczne, zamiast zostać połknięte przez menedżera usług.

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

Przetestuj cały cykl życia, nie tylko połączenie. Hak przy rozłączaniu, który zawiedzie, zostawia trasy wskazujące na martwy tunel, co daje maszynę, która wygląda na połączoną i nigdzie nie dociera. Przed uznaniem zmiany za zakończoną połącz się raz ponownie i raz rozłącz, i po każdym sprawdź tablicę routingu.

Zachowaj kopię oryginalnego profilu. Jeśli klient platformy nie implementuje tego samego modelu skryptów, usuwanie dyrektyw do udanego importu może usunąć integrację DNS lub tras, której tunel potrzebował, a powstałe połączenie uwierzytelni się bezbłędnie, nie rozwiązując niczego.

Decyzja do zapisania jest wąska: który skrypt, na której ścieżce, na którym poziomie przyznany, dla którego profilu. Wszystko inne w profilu pozostaje bez zmian, i to jest zdanie, które recenzent może sprawdzić.

Powiązane artykuły