Ai un common name și o adresă în note, și trei comenzi care par toate că elimină un client. Doar una face ce vrei, iar alegerea depinde de dacă trebuie să închei sesiunea care rulează acum, să refuzi următoarea autentificare sau să retragi dreptul de a te conecta cu totul. Citește identitatea pe care o ai de fapt înainte să atingi ceva, pentru că un pool OpenVPN oferă aceeași adresă de tunel unei alte sesiuni mai târziu.

Ce identitate ai de fapt

Un fișier de stare versiunea 3 este punctul de plecare obișnuit. Secțiunea CLIENT_LIST poartă common name-ul, adresa reală, contoarele de octeți și timpul conexiunii; secțiunea ROUTING TABLE asociază o adresă virtuală unui common name cu un marcaj de timp al ultimei referințe. Common name-ul este identitatea stabilă. Adresa virtuală este o atribuire, iar adresa reală din spatele unui NAT se poate schimba între sesiuni fără ca nimic să se schimbe pe server.

Interfața de administrare expune o vedere similară prin comanda sa status și adaugă un ID de client pe sesiune. Acel ID este ceea ce așteaptă client-kill, și nu este adresa tunelului. Dacă trebuie să știi ce common name a primit ce adresă la momentul conectării, mediul unui script client-connect le are pe amândouă, împreună cu adresa externă de încredere, dar acel script rulează ca utilizatorul OpenVPN și are nevoie de o cale de jurnal în care se poate scrie.

What you holdWhere it came fromWhat it can act on
Common nameCLIENT_LIST, or the auth hookkill, and credential revocation
Client IDstatus on the management socketclient-kill, that one session
Tunnel addressROUTING TABLE, client-connect environmentNothing durable, the address is recycled

Omoară acum, refuză la autentificare, revocă definitiv

Ambele comenzi de eliminare din interfața de administrare sunt acțiuni de sesiune. kill ia un common name sau o adresă reală și un port; client-kill ia ID-ul clientului și încheie acea instanță imediat. Niciuna nu este un blocaj: un client scos cu un certificat și o parolă valide se reconectează în câteva secunde, ceea ce e bine când reciclezi un peer de test și inutil când a fost furat un laptop.

client-deny este un alt tip de decizie. De obicei este emis dintr-un hook de autentificare sau client-connect și respinge sesiunea cu un motiv, așa că se potrivește unei politici care refuză o autentificare, nu uneia care întrerupe o conexiune. Documentația avertizează de asemenea că un refuz emis în timpul unei renegocieri TLS invalidează cheia renegociată, în timp ce sesiunea existentă poate rula până la închiderea ferestrei de tranziție. Dacă cerința este ca clientul să fie plecat acum, răspunsul documentat este client-kill.

Eliminarea durabilă se află sub toate acestea. Revocă certificatul și asigură-te că crl-verify indică o listă pe care serverul o reîncarcă într-adevăr, dezactivează fișierul de configurare specific clientului din directorul ccd sau dezactivează contul din orice backend interogat de hook-ul de autentificare. Nici revocarea nu este instantanee: cu setările implicite ale reneg-sec, o sesiune stabilită poate continua până când renegociază, deci acțiunea de sesiune și acțiunea asupra acreditărilor se completează, nu sunt alternative.

Este liber socketul de administrare?

Interfața de administrare deservește un singur client o dată. Dacă o GUI sau un daemon de monitorizare ține deja conexiunea, scriptul tău nu se poate atașa alături, iar în funcție de client poți evacua conexiunea existentă în loc să eșuezi curat. Parola ei călătorește în text clar pe acel socket, așa că îi este locul pe o adresă locală sau pe un socket unix, niciodată pe o interfață publică.

Când nu poți prelua socketul, ai totuși opțiuni, și toate sunt mai lente. Eliberează mai întâi sesiunea GUI-ului dacă o controlezi, sau acceptă calea prin stratul de acreditări și așteaptă următoarea renegociere. Ce nu ar trebui să faci este să repornești serviciul pentru a scăpa de un client, pentru că asta încheie și toate celelalte sesiuni și distruge dovezile din fișierul de stare pentru aceasta.

Secvența pe care o rulez pe un server activ

Atașează-te, citește starea curentă, acționează asupra ID-ului pe care tocmai l-ai citit, apoi citește-l din nou. Valorile copiate dintr-un document sunt cea mai obișnuită cale de a omorî persoana greșită.

status                     # note the client ID and common name
client-kill 3              # end that session now
kill Test-Client           # alternative: by common name
status                     # confirm the session is gone

Numele și numărul de mai sus sunt substituenți, iar ID-urile sunt reutilizate după ce alți clienți se deconectează. Confirmă că rândul lipsește înainte de a nota ceva ca făcut, și verifică dacă numărul de clienți conectați s-a deplasat cu unul, nu cu mai mulți.

Confirmă că a rămas plecat

Notează common name-ul, adresa tunelului, adresa externă și minutul eliminării. Dacă același common name reapare un minut mai târziu, acțiunea de sesiune a funcționat, iar stratul de acreditări nu, ceea ce este o reparație complet diferită de cea a unei comenzi care nu a intrat niciodată în vigoare.

Apoi testează din partea clientului. Un certificat revocat ar trebui să eșueze la următorul handshake; dacă se conectează în continuare, CRL-ul nu este citit deloc, și aceasta este descoperirea care merită raportată. Alege acțiunea după ce trebuie să închei, confirmă cu un al doilea status și repară stratul de acreditări când răspunsul trebuie să dureze mai mult decât sesiunea.

Articole similare