OpenVPN-administrasjonssocket: en kontrollkanal, ikke målinger
En innlatt administrasjonsklient holder kontrollkommandoer, ikke en skrivebeskyttet visning. Eie Unix-socketen, hopp over sesjonen for øyeblikksbilder og hold TCP utenfor.
Spør administrasjonsgrensesnittet om en status én gang, og det begynner å se ut som en statusport. Det er det ikke. Når en klient først er sluppet inn, kan den utstede protokollens kontrollkommandoer, og kontoen som kjører klienten arver alt disse kommandoene kan gjøre med daemonen. Å behandle det som en skrivebeskyttet strøm er feilen som gjør en overvåkingsintegrasjon om til en uautentisert konsoll.
Oppfatningen, og hva den koster
Oppfatningen er at administrasjonslytteren tilsvarer et måleendepunkt: koble til en innsamler, les tellerne, gå videre. Det som faktisk skjer, er at innsamleren åpner en sesjon med kontrollmuligheter, og enhver annen antakelse du gjorde om utrullingen avhenger nå av at den innsamleren oppfører seg pent.
Ingenting i grensesnittet reklamerer med en skrivebeskyttet modus. Det finnes ingen observatørrolle å velge, og et brukernavn i konfigurasjonen skaper ingen.
Hva en innlatt klient faktisk holder
Fellesskapsdaemonen godtar bare én aktiv administrasjonsklient om gangen. Den ene plassen betyr at en GUI, et skript og en overvåkingsagent ikke kan koble til alle; den andre venter eller feiler mens den første holder sesjonen. Hvis designet ditt forutsetter samtidige lesere, er det allerede feil.
Der et periodisk øyeblikksbilde er nok, gir statusfilutskriften de samme tallene uten en levende sesjon. Å skrive den filen med intervaller og lese den med vanlige filrettigheter holder innsamleren helt utenfor kontrollplanet, og det er ordningen de fleste overvåkingsløsninger faktisk trenger.
En egen socket, ikke en åpen
En Unix-domenesocket holder kontrollstien utenfor nettverket, noe som fjerner den skiftende tunneladressen fra problemet. Det fjerner ikke tillatelsesspørsmålet. Foreldrekatalogen må være skrivbar for tjenestekontoen og nåbar for kontrollerens konto, og det er to separate tillatelser:
management /run/openvpn/office-management.sock unix /etc/openvpn/management.password
management-client-user vpn-observer
management-client-group vpn-observerPassordfilen bærer administrasjonshemmeligheten på sin første linje. Beskytt den filen som enhver annen legitimasjon, og hold innholdet unna logger og støttebilletter. Bruker- og gruppebegrensningene er partssjekker på Unix-socketen, ikke filsystemtillatelser, så den tiltenkte prosessen trenger både filtilgangen og den samsvarende identiteten.
Å gjøre socketen verdensomspennende tilgjengelig for å fjerne en tillatelsesfeil er den ene rettelsen du bør unngå. Det gjør en lokal kontrollkanal til noe enhver prosess på verten kan styre.
Å publisere den over TCP er ikke samme design
Å flytte lytteren til en TCP-port gjør den ikke sikrere eller mer praktisk. Administrasjonspassordet sendes i klartekst, så en TCP-lytter eksponerer både legitimasjonen og sesjonen for alle som kan observere stien. Å nå den fra en annen vert krever en autorisert administrasjonskanal, eller en liten lokal agent som bare eksponerer observasjonene du trenger.
Et passord over en klarteksttransport er autentisering uten konfidensialitet, og den kombinasjonen er verre enn den ser ut, fordi den føles beskyttet.
Oppstartsavhengigheter du ikke ba om
Flere administrasjonsvalg endrer daemonens livssyklus. Å holde oppstarten tilbake til en kontroller kobler til, eller å avslutte når kontrolleren forsvinner, gjør en valgfri observatør til en hard avhengighet. En overvåkingsagent som krasjer vil da ta tunnelen med seg ned.
Gå gjennom disse valgene før du aktiverer noe utover socketen selv. Valgfri observasjon bør forbli valgfri, og en omstartspolicy bør ikke kobles til en innsamler som ble lagt til for grafer.
En socketfil som ligger igjen etter en mislykket prosess er ikke bevis på at en lytter finnes. Finn ut hvilken instans som eier stien før du fjerner den, og bruk tjenestens egen gjenopprettingsflyt i stedet for å slette filer under en kjørende daemon.
Hvordan aksept ser ut
Fire kontroller dekker designet: den tiltenkte kontrolleridentiteten kobler til, en prosess uten den identiteten avvises, daemonen overlever en kontroller som kobler fra uten varsel, og tunnelen frakter fortsatt trafikk gjennom en kontrollert omstart. En vellykket administrasjonsforbindelse beviser bare kontrollplanet. Den sier ingenting om hvorvidt trafikk fra private applikasjoner virker, så test det separat. Skriv ned de fire resultatene der neste operatør kan finne dem.
Dokumentasjonen for administrasjonsgrensesnittet beskriver enkeltklientmodellen og protokollens privilegerte natur, og det er den delen som er verdt å lese før du peker et dashbord mot den.