Tens un common name i una adreça a les notes, i tres ordres que semblen totes eliminar un client. Només una fa el que vols, i l'elecció depèn de si has d'acabar la sessió que s'executa ara, rebutjar el proper inici de sessió o treure el dret de connectar-se del tot. Llegeix la identitat que realment tens abans de tocar res, perquè un pool d'OpenVPN lliura la mateixa adreça de túnel a una altra sessió més endavant.

Quina identitat tens realment

Un fitxer d'estat de versió 3 és el punt de partida habitual. La secció CLIENT_LIST porta el common name, l'adreça real, els comptadors de bytes i el temps de connexió; la secció ROUTING TABLE assigna una adreça virtual a un common name amb una marca de temps de darrera referència. El common name és la identitat estable. L'adreça virtual és una assignació, i l'adreça real darrere d'un NAT pot canviar entre sessions sense que canviï res al servidor.

La interfície de gestió exposa una vista similar mitjançant la seva ordre status i afegeix un ID de client per sessió. Aquest ID és el que espera client-kill, i no és l'adreça del túnel. Si necessites saber quin common name va rebre quina adreça en el moment de la connexió, l'entorn d'un script client-connect té tots dos, juntament amb l'adreça exterior de confiança, però aquest script s'executa com a usuari d'OpenVPN i necessita un camí de registre en què es pugui escriure.

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

Mata ara, denega a l'inici de sessió, revoca per sempre

Totes dues ordres d'eliminació de la interfície de gestió són accions de sessió. kill pren un common name o una adreça real i un port; client-kill pren l'ID de client i acaba aquella instància immediatament. Cap de les dues no és un bloqueig: un client expulsat amb un certificat i una contrasenya vàlids es torna a connectar en segons, cosa que va bé quan recicles un parell de prova i és inútil quan s'ha robat un portàtil.

client-deny és un altre tipus de decisió. Normalment s'emet des d'un hook d'autenticació o de client-connect i rebutja la sessió amb un motiu, de manera que encaixa en una política que refusa un inici de sessió més que no una que interromp una connexió. La documentació també adverteix que una denegació emesa durant una renegociació TLS invalida la clau renegociada mentre la sessió existent pot continuar fins que es tanqui la finestra de transició. Si el requisit és que el client ja no hi sigui, la resposta documentada és client-kill.

L'eliminació duradora viu per sota de tot això. Revoca el certificat i assegura't que crl-verify apunta a una llista que el servidor recarrega de veritat, desactiva el fitxer de configuració específic del client al directori ccd, o desactiva el compte a qualsevol backend que consulti el hook d'autenticació. Una revocació tampoc no és instantània: amb la configuració predeterminada de reneg-sec, una sessió establerta pot continuar fins que renegociï, així que l'acció de sessió i l'acció de credencial són complements, no alternatives.

El sòcol de gestió és lliure?

La interfície de gestió atén un client alhora. Si una GUI o un dimoni de monitoratge ja té la connexió, el teu script no s'hi pot adjuntar al costat, i segons el client pots expulsar l'existent en lloc de fallar net. La seva contrasenya viatja en text clar per aquell sòcol, així que pertany a una adreça local o a un sòcol unix, mai a una interfície pública.

Quan no pots prendre el sòcol, encara tens opcions, i totes són més lentes. Deixa anar primer la sessió de la GUI si la controles, o accepta la via de la capa de credencials i espera la propera renegociació. El que no has de fer és reiniciar el servei per desfer-te d'un client, perquè això acaba també amb totes les altres sessions i destrueix les proves del fitxer d'estat d'aquesta.

La seqüència que executo en un servidor en producció

Adjunta't, llegeix l'estat actual, actua sobre l'ID que acabes de llegir i torna'l a llegir. Els valors copiats d'un document són la manera més habitual de matar la persona equivocada.

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

El nom i el número de dalt són marcadors de posició, i els ID es reutilitzen després que altres clients es desconnectin. Confirma que la fila és absent abans d'escriure res com a fet, i comprova que el recompte de clients connectats s'ha mogut d'un, no de diversos.

Confirma que s'ha quedat fora

Anota el common name, l'adreça del túnel, l'adreça exterior i el minut de l'eliminació. Si el mateix common name torna a aparèixer un minut després, l'acció de sessió va funcionar i la capa de credencials no, cosa que és una reparació completament diferent de la d'una ordre que no va arribar a tenir efecte.

Després prova des del costat del client. Un certificat revocat hauria de fallar el proper handshake; si encara es connecta, la CRL no es llegeix gens, i aquesta és la troballa que val la pena reportar. Tria l'acció segons què necessites acabar, confirma amb un segon status i arregla la capa de credencials quan la resposta hagi de durar més que la sessió.

Articles relacionats