GNU/Linux >> Tutoriales Linux >  >> Panels >> OpenVPN

Configuración de un servidor OpenVPN con Okta Single Sign-on Web Authentication and Viscosity

Después de configurar su propio servidor OpenVPN, es posible que desee mejorar su seguridad. Una forma de hacerlo y agilizar su proceso de autenticación es usar el inicio de sesión único o el inicio de sesión único (SSO), también conocido como SAML (este es un protocolo SSO). Esto agrega otra medida de seguridad para evitar que usuarios no deseados se conecten a su servidor y, al mismo tiempo, se integra con su sistema de administración de usuarios, identidades o clientes o proceso de autenticación existente.

Esta guía proporciona un ejemplo de cómo podría funcionar esto con Okta, una popular plataforma de identidad basada en la nube. Los conceptos básicos de este ejemplo se traducen en la mayoría de los sistemas de administración de identidades (IDMS) con solo cambios en la forma en que se comunica con el IDMS de su elección.

Tenga en cuenta que este ejemplo está diseñado para mostrar los conceptos básicos de cómo un sistema IDM o SSO puede integrarse con OpenVPN en el lado del servidor, no está diseñado para usarse tal cual.

Preparación

Para esta guía, asumimos:

  • Tiene una cuenta de Okta (esta guía funcionará con la versión de prueba gratuita de Okta)
  • Ya has instalado la última versión de Ubuntu (20.04 en el momento de escribir este artículo)
  • Tienes raíz acceso a esta instalación
  • Tiene acceso público a este sistema en los puertos 80 y 443 para acceso HTTP y HTTPS, y un DNS A-NAME que lo apunta (por ejemplo, openvpnsso.server.com)
  • Ya tiene una copia de Viscosity instalada en su dispositivo cliente y ya está configurada para este servidor

La documentación de Okta se puede encontrar en https://help.okta.com/en/prod/Content/index.htm

Puede encontrar más ejemplos de Okta en su página de GitHub en https://github.com/okta

Esta guía solo debe usarse como ejemplo para configurar SSO en su servidor. El sitio web proporcionado de Python Flask está diseñado solo como ejemplo y no está diseñado para uso de producción.

Si está comenzando desde cero con una instalación nueva de Ubuntu 20.04, este proceso desde aquí hasta el final solo debería tomar unos 20 minutos.

Configuración de Okta

Primero, debemos configurar Okta para el nuevo sitio web que manejará la comunicación entre OpenVPN y Okta.

  • Inicie sesión en Okta en su cuenta de administrador
  • A la izquierda, expanda el menú y vaya a Aplicaciones> Aplicaciones
  • Haga clic en Crear integración de aplicaciones
  • Seleccione ODIC - OpenID Connect , luego Aplicación web y haga clic en Siguiente
  • Proporcione su nombre de integración de la aplicación un nombre que reconocerá como 'Mi servidor OpenVPN'
  • Asegúrese de Código de autorización es la única opción marcada en "Cliente que actúa en nombre de un usuario" en "Tipo de concesión"
  • Reemplazando '' en lo siguiente, configure sus URI de redirección de inicio de sesión a http://<yourserver.com>/authorization-code/callback
  • Opcionalmente, reemplazando nuevamente '' en lo siguiente, configure sus URI de redirección de cierre de sesión a http://<yourserver.com>/logout
  • Establecer acceso controlado a su elección, con fines de prueba si se trata de una cuenta de prueba, simplemente seleccione Permitir que todos en su organización accedan
  • Haga clic en Guardar

Después de guardar, la página se recargará. Mantenga esta página abierta o tome nota ahora del ID de cliente , Secreto del cliente y dominio Okta , los necesitaremos más tarde.




Configuración del servidor

A continuación, necesitamos configurar el servidor. En resumen, necesitamos un servidor OpenVPN listo para funcionar, para instalar nginx como proxy para la aplicación Python Flask, realizar algunos pequeños cambios en el firewall, instalar un certificado SSL, configurar la aplicación Flask y realizar algunos pequeños cambios en OpenVPN.

Preparación del servidor

Primero, inicie sesión en su servidor a través de SSH o abra una Terminal y ejecute lo siguiente para asegurarse de que todo esté actualizado

sudo apt-get update
sudo apt-get -y upgrade


Configuración del servidor OpenVPN

Primero necesitaremos un servidor OpenVPN listo para funcionar. Si aún no tiene uno en este servidor, siga la Configuración de un servidor OpenVPN con Ubuntu y Viscosity.

Una vez configurado, asegúrese de poder conectarse.

A continuación, debemos agregar algunas líneas a la configuración del servidor OpenVPN:

  • Edite la configuración sudo nano /etc/openvpn/server.conf
  • Al final del archivo, agregue lo siguiente:
management 127.0.0.1 50123
auth-user-pass-optional
management-client-auth
  • Presione Ctrl+X para salir, Y para guardar, luego Enter para confirmar la ruta
  • Reinicie el servidor con sudo systemctl restart [email protected]

Si intenta conectarse ahora, la conexión debería fallar eventualmente con un mensaje de error de autenticación.

Notas:

Si tiene un servidor existente que tiene scripts de autenticación o complementos, estos deberán eliminarse ya que SSO los reemplazará. Okta se puede configurar con opciones 2FA, aunque no las cubriremos en esta guía, consulte la documentación de Okta.

Configuración del servidor web

Cortafuegos

Si siguió la guía Configuración de un servidor OpenVPN con Ubuntu y Viscosity, primero debemos abrir el firewall para permitir el tráfico HTTP y HTTPS, ejecute lo siguiente:

  • sudo ufw allow http
  • sudo ufw allow https
  • sudo ufw reload

Instalar ningx

A continuación, necesitamos instalar nginx. nginx es un servidor proxy inverso y HTTP que proporcionará componentes de nuestra aplicación web y permitirá el uso de funciones como TLS/SSL. Haga lo siguiente en su servidor Ubuntu:

  • Ejecute sudo apt-get -y install nginx
  • Edite sudo nano /etc/nginx/sites-enabled/default
  • Desplácese hacia abajo hasta la línea server_name _; y reemplace el guión bajo (_) con el nombre DNS de su servidor, por ejemplo myserver.com, para que se vea así:server_name myserver.com;
  • Presione Ctrl+X para salir, Y para guardar, luego Enter para confirmar la ruta
  • Vuelva a cargar nginx con sudo nginx -s reload


Configurar Let's Encrypt

Si ya tiene un certificado SSL para esta sección, puede pasar a la siguiente sección. De lo contrario, Let's Encrypt y Certbot simplifican la obtención de un certificado SSL.

  • Ejecute sudo apt-get install -y certbot python3-certbot-nginx
  • Ejecute lo siguiente, reemplace myserver.com con su FQDN y siga las indicaciones sudo certbot --nginx -d myserver.com . Puede especificar dominios adicionales si los necesita, por ejemplo sudo certbot --nginx -d myserver.com -d www.myserver.com -d sso.myserver.com .
  • Es posible que el certbot tarde unos minutos en responder después de responder a las indicaciones
  • Una vez terminado, certbot puede renovar automáticamente su certificado, simplemente agregue un cronjob para ejecutar /usr/bin/certbot renew --quiet una vez al día.

Configurar nginx

Ahora que tiene un certificado SSL, podemos finalizar la configuración de nginx.

  • Edite sudo nano /etc/nginx/sites-enabled/default
  • Eliminar la siguiente sección:
location / {
  # First attempt to serve request as file, then
  # as directory, then fall back to displaying a 404.
  try_files $uri $uri/ =404;
}
  • Desplácese hacia abajo hasta después de las líneas # managed by Certbot , pero antes del } y pega lo siguiente:
  real_ip_header X-Real-IP;
  real_ip_recursive on;
  proxy_connect_timeout       600;
  proxy_send_timeout          600;
  proxy_read_timeout          600;
  send_timeout                600;

  location / {
    try_files $uri @proxy;
  }

  location @proxy {
    proxy_pass http://127.0.0.1:8080;
    proxy_pass_header Server;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_pass_header Server;
    proxy_connect_timeout 3s;
    proxy_read_timeout 10s;
  }
  • Presione Ctrl+X para salir, Y para guardar, luego Enter para confirmar la ruta
  • Vuelva a cargar nginx con sudo nginx -s reload


Instalación de la aplicación web

Ahora podemos instalar la aplicación web e iniciarla. Crearemos un usuario para ejecutar la aplicación web, ya que crea un poco más de seguridad. Ejecute lo siguiente:

  • sudo apt-get install -y python3-pip Instale python pip para que podamos instalar las dependencias de Flask
  • sudo adduser --system --no-create-home --group ssoappuser Cree un usuario para ejecutar la aplicación web como
  • cd /home
  • sudo mkdir ssoapp
  • sudo chown ssoappuser:ssoappuser ssoapp
  • cd ssoapp
  • sudo git clone https://github.com/thesparklabs/openvpn-okta-sso-example.git Descarga la aplicación web desde GitHub
  • cd openvpn-okta-sso-example
  • sudo python3 -m pip install -r requirements.txt Instalar dependencias para la aplicación web
  • sudo cp ssoapp.service /lib/systemd/system/ssoapp.service Instale el archivo de servicio
  • sudo chown root:root /lib/systemd/system/ssoapp.service
  • sudo systemctl daemon-reload

Configuración de la aplicación web

Finalmente, solo necesitamos un trabajo de configuración rápido para que la aplicación web funcione y hable con Okta. Aquí es donde necesitará ID de cliente , Secreto del cliente y dominio Okta nos reunimos para configurar Okta antes.

  • Haga una copia de la plantilla de secretos con sudo cp client_secrets.json.dist client_secrets.json
  • Cree un secreto aleatorio con lo siguiente y cópielo openssl rand -hex 20
  • Edite la configuración con sudo nano client_secrets.json
  • Reemplazar {{ESTO_ES_UN_SECRETO}} con la cadena aleatoria que generamos hace dos pasos
  • Reemplazar {{OKTA_DOMAIN}} en auth_uri, emisor, token_uri y userinfo_uri con tu dominio Okta
  • Reemplazar {{CLIENT_ID}} con su ID de cliente
  • Reemplazar {{CLIENT_SECRET]] con su secreto de cliente
  • Reemplazar {{SU_DOMINIO}} con la dirección de su servidor, p. myserver.com
  • Presione Ctrl+X para salir, Y para guardar, luego Enter para confirmar la ruta
  • Vuelva a cargar nginx con sudo nginx -s reload

Ahora podemos habilitar e iniciar el servicio de la aplicación con

  • Habilite el servicio para que se inicie cuando el sistema sudo systemctl enable ssoapp
  • Inicie el servicio sudo systemctl start ssoapp

Configuración del cliente

Si ha seguido esta guía incluyendo el uso de nuestra guía Configuración de un servidor OpenVPN con Ubuntu y Viscosity, no tiene que hacer nada, simplemente conéctese con Viscosity.

Si ha modificado un servidor existente, el único cambio que deberá hacer es desactivar la autenticación de usuario/contraseña si está activada. Para hacer esto, edite la conexión, vaya a Autenticación y desmarque "Usuario Nombre de usuario/Contraseña de autenticación", Guarde la conexión y conéctese.

Tokens de autenticación

OpenVPN auth-gen-token

La aplicación de ejemplo incluye soporte para auth-gen-token. Como no usamos nombre de usuario/contraseña a través de OpenVPN, esto debe manejarse a través de la interfaz de administración. Para habilitarlo, simplemente agregue auth-gen-token 0 external-auth a la configuración de su servidor.

Actualización de token Okta

El ejemplo anterior se puede ampliar para usar tokens de Okta en lugar de los tokens de autenticación de OpenVPN para la reautenticación. No proporcionaremos un ejemplo de esto ya que el soporte integrado de OpenVPN cubrirá la gran mayoría de las configuraciones.

Sin embargo, si desea usar Okta en su lugar, estas son las principales cosas que debe tener en cuenta:

  • Deberá modificar la respuesta de la función clientAllow para enviar su token de autenticación.
  • Deberá modificar la función clientReauth para tomar la contraseña del entorno del cliente que se pasa a través de la interfaz de administración, seguir la documentación de Oktas para actualizar este token y luego enviar una respuesta de autenticación de cliente similar a clientAllow que incluya el token actualizado.
  • Deberá modificar la configuración del servidor y del cliente para asegurarse de que el reneg-sec sea menor que el vencimiento de los tokens de Okta

OpenVPN
  1. Cómo instalar y configurar un servidor OpenVPN en Ubuntu 22.04

  2. Cómo instalar y alojar un servidor OpenVPN con Docker

  3. Configuración de un servidor de ofuscación con Obfsproxy y Viscosity

  4. Configuración de un servidor OpenVPN con CentOS y Viscosity

  5. Instalar y configurar el servidor OpenVPN FreeBSD 12

Configuración de un servidor OpenVPN con Synology y Viscosity

Configuración de un servidor OpenVPN con enrutador Tomato y Viscosity

Configuración de un servidor OpenVPN con Ubiquiti EdgeRouter (EdgeOS) y Viscosity

Configuración de un servidor OpenVPN con Ubuntu y Viscosity

Configuración de un servidor OpenVPN con VyOS y Viscosity

Cómo instalar el servidor web OpenLiteSpeed ​​con MariaDB y PHP