Tem um common name e um endereço nas notas, e três comandos que todos parecem remover um cliente. Só um faz o que você quer, e a escolha depende de precisar terminar a sessão que está a correr agora, recusar o próximo login ou retirar o direito de conectar de vez. Leia a identidade que você realmente tem antes de tocar em qualquer coisa, porque um pool do OpenVPN entrega o mesmo endereço de túnel a outra sessão mais tarde.

Que identidade você realmente tem

Um arquivo de estado de versão 3 é o ponto de partida habitual. A seção CLIENT_LIST traz o common name, o endereço real, os contadores de bytes e o tempo de conexão; a seção ROUTING TABLE mapeia um endereço virtual para um common name com um carimbo de tempo da última referência. O common name é a identidade estável. O endereço virtual é uma atribuição, e o endereço real atrás de um NAT pode mudar entre sessões sem que nada mude no servidor.

A interface de gerenciamento expõe uma visão semelhante pelo seu comando status e acrescenta um ID de cliente por sessão. É esse ID que client-kill espera, e não é o endereço do túnel. Se precisar saber qual common name recebeu qual endereço no momento da conexão, o ambiente de um script client-connect tem ambos, junto com o endereço externo confiável, mas esse script corre como o usuário do OpenVPN e precisa de um caminho de log gravável.

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

Matar agora, recusar no login, revogar para sempre

Os dois comandos de remoção na interface de gerenciamento são ações de sessão. kill aceita um common name ou um endereço real e porta; client-kill aceita o ID do cliente e termina essa instância imediatamente. Nenhum é um bloqueio: um cliente expulso com certificado e senha válidos reconecta em segundos, o que está bem quando recicla um peer de teste e é inútil quando um laptop foi roubado.

client-deny é outro tipo de decisão. Normalmente é emitido a partir de um hook de autenticação ou de client-connect e recusa a sessão com um motivo, por isso se encaixa numa política que recusa um login em vez de numa que interrompe uma conexão. A documentação também avisa que uma recusa emitida durante uma renegociação TLS invalida a chave renegociada enquanto a sessão existente pode continuar até a janela de transição fechar. Se o requisito é que o cliente já não esteja, a resposta documentada é client-kill.

A remoção duradoura fica abaixo de tudo isso. Revogue o certificado e garanta que crl-verify aponta para uma lista que o servidor realmente recarrega, desative o arquivo de configuração específico do cliente no diretório ccd, ou desative a conta no backend que o hook de autenticação consulta. Uma revogação também não é instantânea: com os ajustes padrão de reneg-sec, uma sessão estabelecida pode continuar até renegociar, então a ação de sessão e a ação de credenciais são complementares, não alternativas.

O socket de gerenciamento está livre?

A interface de gerenciamento atende um cliente de cada vez. Se uma GUI ou um daemon de monitoramento já tem a conexão, o seu script não consegue anexar-se ao lado, e dependendo do cliente pode expulsar o existente em vez de falhar de forma limpa. A senha dele viaja em texto claro nesse socket, por isso pertence a um endereço local ou a um socket unix, nunca a uma interface pública.

Quando não consegue tomar o socket, ainda tem opções, e todas são mais lentas. Solte primeiro a sessão da GUI se a controla, ou aceite o caminho pela camada de credenciais e espere pela próxima renegociação. O que não deve fazer é reiniciar o serviço para se livrar de um cliente, porque isso termina também todas as outras sessões e destrói as provas do arquivo de estado desta.

A sequência que executo num servidor ativo

Ligue-se, leia o estado atual, atue sobre o ID que acabou de ler e leia-o novamente. Valores copiados de um documento são a forma mais comum de matar a pessoa errada.

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

O nome e o número acima são marcadores de posição, e os IDs são reutilizados depois de outros clientes se desconectarem. Confirme que a linha está ausente antes de anotar algo como feito, e verifique que a contagem de clientes conectados mudou em um e não em vários.

Confirme que ficou fora

Registe o common name, o endereço do túnel, o endereço externo e o minuto da remoção. Se o mesmo common name aparecer outra vez um minuto depois, a ação de sessão funcionou e a camada de credenciais não, o que é um reparo completamente diferente do de um comando que nunca teve efeito.

Depois teste do lado do cliente. Um certificado revogado deve falhar no próximo handshake; se ainda se conectar, a CRL não está a ser lida de todo, e essa é a descoberta que vale a pena relatar. Escolha a ação pelo que precisa terminar, confirme com um segundo status e corrija a camada de credenciais quando a resposta tiver de durar mais do que a sessão.

Artigos relacionados