Importeer een profiel in een desktopclient en de eerste fout is vaak een regel die de client weigert te respecteren: een scripthaak die hij niet uitvoert, of een script-security-waarde die hij te toegeeflijk vindt. Het getal verhogen laat de dialoog verdwijnen. Het verruimt ook wat dat profiel op jouw machine mag uitvoeren, wat een vreemde zaak is om te geven alleen om een waarschuwing weg te klikken. Volg de import tot aan de richtlijn en de beslissing wordt concreet.

Van het importdialoogvenster tot de richtlijn

Het profiel is een tekstbestand met richtlijnen, en de client leest ze voordat er een tunnel bestaat. Een richtlijn als up, down of tls-verify noemt een extern programma dat OpenVPN op een bepaald moment moet uitvoeren. Of OpenVPN bereid is het uit te voeren, is een aparte instelling met de naam script-security, en het profiel stelt die meestal ook in.

De waarschuwing gaat dus niet over cryptografie of certificaten. Ze gaat over een configuratiebestand dat de client vraagt iets op de host uit te voeren, en over de client die controleert of zijn huidige machtigingsniveau dat verzoek toestaat.

Twee verschillende fouten lijken in dit stadium op elkaar. Een profiel dat een niveau vraagt dat de client niet geeft, levert een weigering op. Een profiel dat een niveau vraagt dat de client geeft maar waar het script ontbreekt, levert juist een fout tijdens het uitvoeren op, en de twee worden in supportthreads door elkaar gehaald. Het ene is een machtigingsvraag, het andere een verpakkingsvraag.

Wat elk niveau werkelijk opent

Niveau 0 verbiedt aanroepen van externe programma's volledig, wat samenhangend is voor een client die zijn eigen interface zonder hulp configureert en onsamenhangend voor een die het besturingssysteem aanroept. Niveau 1, de standaard, staat de ingebouwde uitvoerbare bestanden toe die interface- en routeconfiguratie nodig hebben. Geen van beide niveaus voert iets uit dat de gebruiker heeft aangeleverd.

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

Niveau 2 is de interessante grens, omdat het door de gebruiker gedefinieerde scripts toelaat. Vanaf dat punt gelden de rechten van de client voor code die je misschien nooit hebt gelezen, aangeroepen op momenten die je niet hebt gekozen, in een omgeving met verbindingsdetails. Niveau 3 gaat verder en staat toe dat wachtwoorden via omgevingsvariabelen worden doorgegeven, daarom noemt de handleiding het potentieel onveilig.

Geen van deze getallen is een sterkte-instelling. Een profiel op niveau 3 heeft geen betere versleuteling dan een op niveau 1; het heeft simpelweg een groter uitvoeringsoppervlak, en de tunnel is identiek.

Bepaal wat het profiel verdient

Vraag waarvoor het script dient voordat je vraagt welk niveau het nodig heeft. Een haak die DNS-instellingen doorduwt of na het verbinden een route repareert is een legitieme reden om iets uit te voeren. Een haak die een onbekend binair bestand in een tijdelijke map aanroept, is een reden om te stoppen.

Het pad van het script is even belangrijk als het script. Een relatief pad wordt opgelost tegen de map die de client gebruikt, en een beschrijfbare map maakt van een eenmalige import een permanente uitvoeringsplek. Absolute paden in een map die de gebruiker niet kan wijzigen, zijn de vorm die de voorkeur verdient.

Scripts erven ook de omgeving van de client, waar inloggegevens en verbindingsmetadata leven. Juist die erfenis maakt niveau 3 gevaarlijk in combinatie met een script dat zijn omgeving logt, en dat is de reden waarom een diagnostische dump van een client met scripts een tweede blik verdient voordat hij in een ticket wordt geplakt. Verwijder de omgeving voordat je hem deelt.

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

Verander één ding, en let dan ook op het afbreken

Als het profiel echt een script nodig heeft, wijzig dan alleen het niveau en alleen voor dat profiel. Voer de client op de voorgrond uit met uitgebreide uitvoer, zodat de eigen fouten van het script zichtbaar zijn in plaats van te worden ingeslikt door een servicemanager.

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

Test de hele levenscyclus, niet alleen het verbinden. Een haak bij het afsluiten die faalt, laat routes naar een dode tunnel wijzen, wat een machine oplevert die verbonden lijkt en niets bereikt. Maak één keer opnieuw verbinding en verbreek één keer voordat je de wijziging als afgerond beschouwt, en controleer daarna telkens de routetabel.

Bewaar een kopie van het originele profiel. Als een platformclient hetzelfde scriptmodel niet implementeert, kan het verwijderen van richtlijnen tot de import lukt de DNS- of route-integratie wegnemen die de tunnel nodig had, en de resulterende verbinding authenticeert perfect terwijl ze niets oplost.

De beslissing die moet worden vastgelegd is smal: welk script, op welk pad, op welk niveau toegekend, voor welk profiel. Al het andere in het profiel blijft ongewijzigd, en dat is een zin die een beoordelaar kan controleren.

Gerelateerde artikelen