Limitar el certificado del cliente OpenVPN a una VPN específica con una cadena de CA compartida

0

He creado una estructura privada de pki x509 con openssl que consta de una CA raíz autofirmada, una CA intermedia y dos CA firmantes. Las CA de firma se utilizan para separar la firma de certificados para servidores y clientes OpenVPN como se sugiere en la parte inferior de sección Notas de seguridad del OpenVPN HOWTO .

  

Firmar certificados de servidor con una CA y certificados de cliente con una CA diferente. La directiva ca de configuración del cliente debe hacer referencia al archivo CA de firma de servidor, mientras que la directiva ca de configuración del cliente debe hacer referencia al archivo CA de firma de servidor.

Todo esto está configurado y funciona correctamente funcionando correctamente. Sin embargo, tengo dos servidores OpenVPN separados para los cuales me gustaría tener una separación de acceso. En el momento en que un certificado de cliente que he emitido para un servidor funcionará para acceder al otro servidor, ya que ambos están validados a través de la misma cadena de certificación de CA.

¿Cómo separo el uso de los certificados de cliente sin crear una CA firmante por separado para cada servidor VPN?

    
pregunta Arronical 07.09.2018 - 11:43
fuente

1 respuesta

1

Usando ganchos

En cada servidor, configure un gancho client-connect :

client-connect /etc/openvpn/hooks/client-connect

En el script client-connect , verifique si el nombre común del usuario está en una lista de nombres comunes dedicados para esta instancia de servidor:

 #!/usr/bin/python3

from sys import exit
from os improt environ

# Load the list of allowed common-names from file.
# One common name per line.
with open("/etc/openvpn/allowed", "rt") as f:
  allowed = f.read().split("\n")

# Allow if the common name is in the list:     
if environ["common_name"] in allowed:
  exit(0)
else:
  exit(1)

Puede diseñar cualquier otro esquema para decidir si un usuario está permitido en un servidor determinado (nombrar a convntion, buscarlo en una base de datos de postgres y buscarlo en un LDAP, etc.)

Usando CCD

Alternativamente, esta lista se puede definir sin conexión con client-config-dir:

ccd-exclusive
client-config-dir  /etc/openvpn/ccd

Solo debe tocar un archivo para cada nombre común permitido:

# Add a user to this service:
touch /etc/openvpn/ccd/john.doe
    
respondido por el ysdx 23.09.2018 - 00:54
fuente

Lea otras preguntas en las etiquetas