Klargjøring av en OpenVPN-klient med trinn som stopper ved feil
Fem trinn hindrer et klargjøringsskript i å etterlate en halv installasjon: kontroller inndata, klargjør settet, bytt atomisk, aktiver én eier, planlegg avvikling.
Klargjøringsskript som rapporterer en feil og fortsetter, er verre enn skript som aldri kjøres. Klientoppsett berører beskyttede nøkler, en identitet ved gatewayen og en tjeneste som kanskje allerede betjener trafikk. Hver av disse trenger en stoppbetingelse, og skriptet må vite hvilket trinn det nådde da det stoppet.
Behandle det hele som én transaksjon med fem kontrollpunkter, og få hvert kontrollpunkt til å nekte å fortsette på egen hånd.
Rett inndataene før du rører filsystemet
Start med en uttrykkelig kontrakt: én identitet, én profilkilde, én tiltenkt tjenesteeier. Kontroller at profilen finnes, at sertifikatet og nøkkelen den viser til er lesbare, og at målkatalogen tilhører den forventede pakken. En sti som løses opp er ikke bevis for at materialet bak den er komplett.
Avvis tomme variabler tidlig. En usatt $DEVICE som utvides til ingenting gjør install -m 400 $KEY /etc/openvpn/client/ til en kopi rettet mot en katalog, og feilen dukker senere opp som en tjeneste som ikke kan lese nøkkelen sin.
Sett sammen profilsettet i en klargjøringskatalog
Bygg først det komplette settet på et privat sted: profil, CA, klientcertifikat, nøkkel og enhver hjelper som profilen kaller. Kopier med install -m 400 -o root -g root slik at rettighetene settes ved opprettelsen og ikke etterpå. Kontroller deretter referansene inne i profilen, fordi en relativ ca- eller key-linje løses mot enhetens arbeidskatalog når tjenesten starter. Ingenting bør skrives til den levende katalogen før hele settet validerer.
Registrer et ikke-hemmelig fingeravtrykk av det denne kjøringen produserte, for eksempel sha256sum office.conf lagret ved siden av en versjonsmarkør. Nettopp den ene verdien gjør at en ny kjøring kan skille en oppdatering fra en kjøring uten endringer.
Bytt atomisk og behold det forrige settet
Flytt det klargjorte settet på plass som én operasjon der filsystemet tillater det, og behold det gjennomgåtte forrige settet under et tidsstemplet navn. En delvis kopi som etterlater en ny profil ved siden av en gammel nøkkel, gir en tjeneste som autentiserer med feil identitet og ikke logger noe nyttig om hvorfor. Hvis byttet ikke kan være atomisk, ordne flyttingene slik at profilen lander sist.
Når målet allerede finnes, må du uttrykkelig avgjøre om denne kjøringen er en oppdatering, en identisk ny kjøring eller en konflikt med en annen enhets profil. Stille overskriving av en profil som tilhører en annen identitet, er måten to maskiner ender med å dele ett sertifikat. Avvis kjøringen og navngi den motstridende eieren i stedet.
Aktiver én eier og bevis det
Velg én aktiveringsvei, enten systemd-instansen eller NetworkManager, og bruk den konsekvent. Start av en ustyrt openvpn-prosess ved siden av en aktivert enhet gir to tunneler, konkurrerende DNS-oppdateringer og ingen klar beskjed om hvilken en stoppkommando rammer. Kontroller etter aktivering systemctl is-active openvpn-client@office, deretter ruten til det fjerne prefikset, deretter resolvectl status for oppløseren tunnelen installerte. Avslutt med å nå én ressurs som tunnelen finnes for.
En kjørende prosess og et grønt skuffikon er prosessfakta, ikke bevis for at identiteten og trafikkpolitikken overlevde overleveringen.
Ny kjøring og avvikling er separate arbeidsflyter
En andre kjøring bør konvergere mot de samme gjennomgåtte filene og den samme eieren, ikke opprette en annen konto eller en annen daemon. Avvikling er sin egen prosedyre: stopp den nøyaktige eieren, arkiver eller slett den lokale profilen etter policy, og tilbakekall identiteten ved gatewayen. Sletting av en lokal nøkkelfil tilbakekaller ikke en kopi som allerede har forlatt maskinen.
Behold en gjenopprettingsvei som ikke avhenger av tunnelen, slik som konsolltilgang eller en annen administrasjonsrute. En klargjøringsendring som låser deg ute av maskinen, er en mislykket endring selv når hvert trinn rapporterte suksess.
Skriptet som er verdt å beholde, er en transaksjon rundt eierskap og bevis. En kort liste over privilegerte kopikommandoer er ikke det samme.