Cómo configurar un servidor OpenVPN en Ubuntu 20.04

Cómo configurar un servidor OpenVPN en Ubuntu 20.04

Ubuntu 20.04 Focal Fossa es el último soporte a largo plazo de una de las distribuciones de Linux más utilizadas. En este tutorial veremos cómo usar este sistema operativo para crear un servidor OpenVPN y cómo crear un .ovpn Archivo que usaremos para conectarnos desde nuestra máquina cliente.

En este tutorial aprenderás:

  • Cómo generar una autoridad de certificado
  • Cómo generar certificado y clave del cliente y del cliente
  • Cómo firmar un certificado con la autoridad de certificado
  • Cómo crear parámetros de Diffie-Hellman
  • Cómo generar una tecla TLS-Auth
  • Cómo configurar el servidor OpenVPN
  • Cómo generar un .Archivo OVPN para conectarse a la VPN
Cómo configurar un servidor OpenVPN en Ubuntu 20.04

Requisitos y convenciones de software utilizados

Requisitos de software y convenciones de línea de comandos de Linux
Categoría Requisitos, convenciones o versión de software utilizada
Sistema Ubuntu 20.04 fosa focal
Software OpenVPN, UFW, Easy-RSA
Otro Permisos de raíz para realizar tareas administrativas
Convenciones # - requiere que los comandos de Linux dados se ejecuten con privilegios raíz directamente como un usuario raíz o mediante el uso de sudo dominio
ps - Requiere que los comandos de Linux dados se ejecuten como un usuario regular no privilegiado

Configuración de escenario

Antes de continuar con la configuración de VPN real, hablemos sobre las convenciones y la configuración que adoptaremos en este tutorial.

Usaremos dos máquinas, ambas alimentadas por Ubuntu 20.04 fosa focal. El primero, camete se utilizará para organizar nuestro Autoridad certificada; el segundo, OpenVpnmachine será el que configuremos como el real VPN servidor. Es posible usar la misma máquina para ambos fines, pero sería menos seguro, ya que una persona que viole el servidor podría "hacerse pasar por la autoridad de certificado y usarla para firmar certificados no deseados (el problema es particularmente relevante solo si usted Planee tener más de un servidor o si planea usar la misma CA para otros fines). Para mover archivos entre una máquina y la otra, usaremos el SCP (Copia segura) Comando. Los 10 pasos principales que realizaremos son los siguientes:

  1. Generación de la autoridad de certificado;
  2. Generación de la clave del servidor y la solicitud de certificado;
  3. Firma de la solicitud de certificado del servidor con la CA;
  4. Generación de los parámetros Diffie-Hellman en el servidor;
  5. Generación de la tecla TLS-AUTH en el servidor;
  6. Configuración de OpenVPN;
  7. Configuración de redes y firewall (UFW) en el servidor;
  8. Generación de una clave de cliente y solicitud de certificado;
  9. Firma del certificado del cliente con la CA;
  10. Creación del cliente .Archivo OVPN utilizado para conectarse a la VPN.

Paso 1 - Generación de la Autoridad de Certificado (CA)

El primer paso en nuestro viaje consiste en la creación de la Autoridad certificada en la máquina dedicada. Trabajaremos como un usuario no privilegiado para generar los archivos necesarios. Antes de comenzar, necesitamos instalar el fácil paquete:

$ sudo apt-get actualización && sudo apt-get -y install easy-rsa 

Con el paquete instalado, podemos usar el maquinar Comando para generar un directorio que contenga las herramientas y archivos de configuración necesarios, en este caso lo llamaremos Autoridad certificada. Una vez creado, nos moveremos dentro de él:

$ make-cadir certate_authority && cd certate_authority 


Dentro del directorio encontraremos un archivo llamado vars. En el archivo podemos definir algunas variables que se utilizarán para la generación de certificados. Se puede encontrar un conjunto comentado de estas variables en la línea 91 a 96. Simplemente elimine el comentario y asigne los valores apropiados:

set_var easyrsa_req_country "us" set_var easyrsa_req_province "California" set_var easyrsa_req_city "San Francisco" set_var easyrsa_req_org "Copyleft certificado co" set_var easyrsa_req_email "[email protected] "set_var easyrsa_req_ou" mi unidad organizacional " 

Una vez que se guardan los cambios, podemos continuar y generar el PKI (Infraestructura de clave pública), con el siguiente comando que creará un directorio llamado PKI:

ps ./Easyrsa Init-Pki 

Con la infraestructura en su lugar, podemos generar nuestra clave y certificado de CA. Después de iniciar el comando a continuación, se nos pedirá que ingresemos un frase Para el CA CLAVE. Tendremos que proporcionar la misma contraseña cada vez que interactuamos con la autoridad. A Nombre común para el certificado también se debe proporcionar. Esto puede ser un valor arbitrario; Si solo presionamos ENTER en el mensaje, el predeterminado se usará, en este caso CA fácil-RSA:

ps ./Easyrsa Build-Ca 

Aquí está el resultado del comando:

Nota: Uso de la configuración fácil de RSA de: ./Vars usando SSL: OpenSSL OpenSSL 1.1.1d 10 SEP 2019 Ingrese la nueva frase de pases de la clave CA: Reingrese la nueva frase de pases de la tecla CA: Generación de la tecla privada RSA, 2048 bits Long Modulus (2 primos) ... ++++++ ... +++++ E IS 65537 (0x010001) puede 'T Load/Home/EgDoc/Certate_Authority/PKI/.RND en RNG 140296362980608: Error: 2406F079: Generador de números aleatorios: rand_load_file: no se puede abrir el archivo:…/crypto/rand/randfile.C: 98: FileName =/Home/EgDoc/Certate_Authority/PKI/.RND está a punto de que se le pida que ingrese información que se incorporará a su solicitud de certificado. Lo que está a punto de ingresar es lo que se llama un nombre distinguido o un DN. Hay bastantes campos, pero puede dejar algo de blanco para algunos campos, habrá un valor predeterminado, si ingresa '.', el campo se dejará en blanco. ----- Nombre común (por ejemplo: nombre de usuario, host o servidor) [Easy-RSA CA]: CA Creation Complete y ahora puede importar y firmar solicitudes CERT. Su nuevo archivo de certificado de CA para la publicación es en:/home/egdoc/certate_authority/pki/ca.CRT 

El construye El comando generó dos archivos; Su camino, en relación con nuestro directorio de trabajo son:

  • PKI/CA.CRT
  • PKI/Privado/CA.llave

El primero es el certificado público, el segundo es la clave que se utilizará para firmar los certificados del servidor y los clientes, por lo que debe mantenerse lo más seguro posible.

Una pequeña nota, antes de avanzar: en la salida del comando, es posible que haya notado un mensaje de error. Aunque el error no es armado, una solución para evitarlo es comentar la tercera línea del OpenSsl-Easyrsa.CNF Archivo que está dentro del directorio de trabajo generado. El tema se discute en el repositorio de OpenSSL GitHub. Después de la modificación, el archivo debe verse así:

# Para usar con Easy-RSA 3.1 y OpenSsl o libressl randfile = $ env :: EasyRsa_pki/.rnd 

Dicho esto, avancemos en la máquina que utilizaremos como servidor OpenVPN y generaremos la clave y el certificado del servidor.

Paso 2 - Generación de la clave del servidor y la solicitud de certificado

En este paso generaremos la clave del servidor y la solicitud de certificado que firmará la autoridad de certificado. En la máquina utilizaremos como servidor OpenVPN, debemos instalar el OpenVPN, fácil y UFW Paquetes:

$ sudo apt-get actualización && sudo apt-get -y install OpenVPN Easy-RSA UFW 

Para generar la clave del servidor y la solicitud de certificado, realizamos el mismo procedimiento que utilizamos en la máquina que aloja la autoridad de certificado:

  1. Generamos un directorio de trabajo con el maquinar comandar y moverse dentro de él.
  2. Configurar las variables contenidas en el vars archivo que se utilizará para el certificado.
  3. Generar la infraestructura de clave pública con el ./Easyrsa Init-Pki dominio.

Después de estos pasos preliminares, podemos emitir el comando para generar el certificado del servidor y el archivo de clave:

ps ./Easyrsa Gen-Req Server NOPass 

Esta vez, ya que usamos el no pase opción, no se nos pedirá a insertar una contraseña durante la generación de la clave del servidor. Todavía se nos pedirá que ingresemos a un Nombre común Para el certificado de servidor. En este caso, el valor predeterminado utilizado es servidor. Eso es lo que usaremos en este tutorial:

Nota: Uso de la configuración fácil de RSA de: ./Vars usando SSL: OpenSSL OpenSSL 1.1.1d 10 sep 2019 Generación de una tecla privada RSA ... ++++++ ... +++++ Mediendo una nueva clave privada para '/home/egdoc/openvpnserver/pki/private/servidor.llave.9RU3WFZMBW '------ Está a punto de que se le pida que ingrese la información que se incorporará a su solicitud de certificado. Lo que está a punto de ingresar es lo que se llama un nombre distinguido o un DN. Hay bastantes campos, pero puede dejar algo de blanco para algunos campos, habrá un valor predeterminado, si ingresa '.', el campo se dejará en blanco. ----- Nombre común (por ejemplo: nombre de usuario, host o servidor) [Servidor]: Solicitud de KeyPair y Certificado completado. Sus archivos son: req:/home/egdoc/openvpnserver/pki/reqs/servidor.clave REQ:/home/egdoc/openvpnserver/pki/private/servidor.llave 

A Solicitud de señal de certificado y un llave privada se generará:

  • /home/egdoc/openvpnserver/pki/reqs/servidor.req
  • /home/egdoc/openvpnserver/pki/private/servidor.llave.

El archivo de clave debe moverse dentro del /etc/openvpn directorio:

$ sudo MV PKI/privado/servidor.clave /etc /openvpn 

La solicitud de certificado, en cambio, debe enviarse a la máquina de autoridad de certificado, para firmar. Nosotros podemos usar SCP Comando para transferir el archivo:

$ scp pki/reqs/servidor.req egdoc@camachine:/home/egdoc/ 

Volvamos a camete y autorizar el certificado.

Paso 3: firmar el certificado del servidor con la CA

En la máquina de autoridad de certificado deberíamos encontrar el archivo que copiamos en el paso anterior en el $ Inicio Directorio de nuestro usuario:

$ LS ~ Certificate_Authority Server.req 

Lo primero que hacemos es importar la solicitud de certificado. Para lograr la tarea, usamos el importación acción de la Easyrsa guion. Su sintaxis es la siguiente:

importación   

En nuestro caso, esto se traduce en:

ps ./Easyrsa import-req ~/servidor.servidor REQ 


El comando generará la siguiente salida:

Nota: Uso de la configuración fácil de RSA de: ./Vars usando SSL: OpenSSL OpenSSL 1.1.1d 10 de septiembre de 2019 La solicitud se ha importado correctamente con un nombre corto de: servidor Ahora puede usar este nombre para realizar operaciones de firma en esta solicitud. 

Para firmar la solicitud, usamos el requerir acción, que toma el tipo de solicitud como primer argumento (servidor, en este caso) y el short_basename Usamos en el comando anterior (servidor). Corremos:

ps ./Easyrsa Sign-Req Server Server 

Se nos pedirá que confirmemos que queremos firmar el certificado y proporcionar la contraseña que utilizamos para la clave de autoridad de certificado. Si todo va como se esperaba, se creará el certificado:

Nota: Uso de la configuración fácil de RSA de: ./Vars usando SSL: OpenSSL OpenSSL 1.1.1d 10 sep 2019 está a punto de firmar el siguiente certificado. Consulte los detalles que se muestran a continuación para obtener precisión. Tenga en cuenta que esta solicitud no ha sido verificada criptográficamente. Asegúrese de que provenga de una fuente confiable o que haya verificado la suma de verificación de la solicitud con el remitente. Solicitud del asunto, que se firmará como un certificado de servidor durante 1080 días: seno = CommonName = servidor Escriba la palabra 'sí' para continuar, o cualquier otra entrada para abortar. Confirme los detalles de la solicitud: Sí usando la configuración de/home/egdoc/certate_authority/pki/safessl-easyrsa.CNF Ingrese la frase de aprobación para/home/egdoc/certate_authority/pki/private/ca.Clave: verifique que la solicitud coincida con la firma de la firma OK el nombre distinguido del sujeto es el siguiente nombre CommonName: ASN.1 12: El certificado de 'servidor' debe ser certificado hasta el 20 de marzo 02:12:08 2023 GMT (1080 días) Escriba la base de datos con 1 nueva base de entradas Certificado actualizado de la base de datos creado en:/home/egdoc/certificate_authority/PKI/emitido/emitido servidor.CRT 

Ahora podemos eliminar el archivo de solicitud que transferimos previamente desde el OpenVpnmachine. Y copie el certificado generado a nuestro OpenVPN servidor, junto con el certificado público de CA:

$ rm ~/servidor.req $ scp pki/ca.CRT, emitido/servidor.CRT egdoc@openvpnmachine:/home/egdoc 

De vuelta en el OpenVpnmachine Deberíamos encontrar los archivos en nuestro directorio de inicio. Ahora podemos moverlos a /etc/openvpn:

$ sudo MV ~/CA.CRT, servidor.CRT /etc /OpenVPN 

Paso 4 - Generación de parámetros Diffie -Hellman

El siguiente paso consiste en la generación de un Diffie-Hellman parámetros. El Diffie-Hellman El intercambio de claves es el método utilizado para transferir claves de cifrado a través de un canal público e inseguro. El comando para generar la clave es la siguiente (podría llevar un tiempo terminar):

ps ./Easyrsa Gen-DH 

La clave se generará dentro del PKI directorio como dh.pem. Movámoslo a /etc/openvpn como DH2048.pem:

$ sudo MV PKI/DH.PEM/etc/OpenVPN/DH2048.pem 

Paso 5 - Generación de la tecla TLS -Auth (TA.llave)

Para mejorar la seguridad, OpenVPN implementos TLS-AUTH. Citando la documentación oficial:

La Directiva TLS-Auth agrega una firma HMAC adicional a todos los paquetes de apretón de manos SSL/TLS para verificación de integridad. Cualquier paquete UDP que no tenga la firma HMAC correcta se puede eliminar sin procesamiento adicional. La firma HMAC TLS-Auth proporciona un nivel adicional de seguridad más allá del proporcionado por SSL/TLS. Puede proteger contra:
- Ataques de DOS o inundaciones en el puerto OpenVPN UDP.
- Escaneo de puertos para determinar qué puertos UDP del servidor se encuentran en un estado de escucha.
- Vulnerabilidades de desbordamiento del búfer en la implementación SSL/TLS.
- Iniciaciones de apretón de manos SSL/TLS de máquinas no autorizadas (mientras que tales apretones de manos no se autenticarían, TLS-Auth puede cortarlas en un punto mucho anterior).

Para generar la tecla TLS_Auth podemos ejecutar el siguiente comando:

$ OpenVPN - -Genkey --secret TA.llave 

Una vez generado, movemos el ejército de reserva.llave archivo /etc/openvpn:

$ sudo MV TA.clave /etc /openvpn 

La configuración de las claves de nuestro servidor ahora está completa. Podemos continuar con la configuración del servidor real.

Paso 6 - Configuración de OpenVPN

El archivo de configuración de OpenVPN no existe de forma predeterminada dentro /etc/openvpn. Para generarlo, usamos una plantilla que se envía con el OpenVPN paquete. Ejecutemos este comando:

$ zcat \/usr/share/doc/openvpn/ejemplos/muestra-config-files/servidor.confusión.GZ \ | sudo tee/etc/openvpn/servidor.conf> /dev /null 

Ahora podemos editar el /etc/openvpn/servidor.confusión archivo. Las partes relevantes se muestran a continuación. Lo primero que queremos hacer es verificar que el nombre de las claves y los certificados referenciados corresponda a los que generamos. Si siguió este tutorial, definitivamente debería ser el caso (líneas 78-80 y 85)

CA CA.servidor CRT CERT.servidor de teclas CRT.Clave # Este archivo debe mantenerse en secreto DH DH2048.pem 

Queremos hacer que el Daemon OpenVPN se ejecute con bajos privilegios, el nadie usuario y nogroup grupo. La parte relevante del archivo de configuración está en líneas 274 y 275. Solo necesitamos eliminar el líder ;:

Usuario nadie grupe nogroup 

Otra línea de la que queremos eliminar el comentario es 192. Esto hará que todos los clientes redirigan su puerta de enlace predeterminada a través de la VPN:

Push "Redirect-Gateway Def1 bypass-DHCP" 

Líneas 200 y 201 También se puede utilizar para habilitar el servidor para enviar servidores DNS específicos a los clientes. Los que están en el archivo de configuración son los proporcionados por opendns.comunicarse:

Push "DHCP-option DNS 208.67.222.222 "Push" DHCP-option DNS 208.67.220.220 " 

En este punto el /etc/openvpn El directorio debe contener estos archivos que generamos:

/etc/openvpn ├── CA.CRT ├── DH2048.PEM ├── Servidor.Conf ├── servidor.CRT ├── servidor.Clave └── TA.llave 

Asegurémonos de que todos sean propiedad de Root:

$ sudo chown -r raíz: raíz /etc /openvpn 

Podemos proceder al siguiente paso: Configuración de las opciones de red.

Paso 7 - Configuración de redes y UFW

Para que nuestra VPN funcione, necesitamos habilitar Reenvío de IP en nuestro servidor. Para hacerlo, solo somos una línea de incommentación 28 desde el /etc/sysctl.confusión archivo:

# Descomment La siguiente línea para habilitar el reenvío de paquetes para la red IPv4.IPv4.ip_forward = 1 

Para recargar la configuración:

$ sudo sysctl -p 


También necesitamos permitir el reenvío de paquetes en el firewall de UFW modificando el /etc/default/UFW archivo y cambiar el Default_forward_policy de GOTA a ACEPTAR (línea 19)

# Establezca la política de reenvío predeterminada para aceptar, soltar o rechazar. Tenga en cuenta que # si cambia esto, lo más probable es que desee ajustar sus reglas predeterminadas_forward_policy = "aceptar" 

Ahora necesitamos agregar las siguientes reglas al comienzo del /etc/UFW/antes.normas archivo. Aquí estamos asumiendo que la interfaz utilizada para la conexión es eth0:

*nat: posterior a aceptar [0: 0] -A POSTROUTING -S 10.8.0.0/8 -O ETH0 -J MASQUERADE COMISM 

Finalmente, debemos permitir el tráfico entrante para el OpenVPN Servicio en el gerente de firewall de UFW:

$ sudo UFW Permitir OpenVpn 

En este punto podemos reiniciar UFW para que se apliquen los cambios. Si su firewall no estaba habilitado en este momento, asegúrese de que el ssh El servicio siempre está permitido, de lo contrario, puede estar cortado si está trabajando de forma remota.

$ sudo Ufw Disable && sudo Ufw Enable 

Ahora podemos comenzar y habilitar el OpenVPN.Servicio en el arranque:

$ sudo SystemCTL reiniciar OpenVpn && sudo SystemCTL Habilitar OpenVPN 

Paso 8 - Generación de una clave de cliente y solicitud de certificado

La configuración de nuestro servidor ahora está terminada. El siguiente paso consiste en la generación de la clave del cliente y la solicitud de certificado. El procedimiento es el mismo que utilizamos para el servidor: solo usamos "cliente" como nombre en lugar de "sever", generar la clave y la solicitud de certificado, luego pasar este último a la máquina CA para firmar.

ps ./Easyrsa Gen-Req Client NOPass 

Al igual que antes, se nos pedirá que ingresemos un nombre común. Se generarán los siguientes archivos:

  • /home/egdoc/openvpnserver/pki/reqs/client.req
  • /home/egdoc/openvpnserver/pki/private/client.llave

Copiemos el cliente.req a la máquina CA:

$ SCP PKI/REQS/CLIENTE.req egdoc@camachine:/home/egdoc 

Una vez que se copia el archivo, en camete, importamos la solicitud:

ps ./Easyrsa import-req ~/cliente.cliente REQ 

Luego, firmamos el certificado:

ps ./Cliente de cliente Easyrsa Sign-Req 

Después de ingresar la contraseña de CA, el certificado se creará como PKI/emitido/cliente.CRT. Eliminemos el archivo de solicitud y copiemos el certificado firmado al servidor VPN:

$ rm ~/cliente.req $ scp pki/emitió/cliente.CRT egdoc@openvpnmachine:/home/egdoc 

Para mayor comodidad, creemos un directorio para mantener todas las cosas relacionadas con el cliente y mover la clave del cliente y el certificado dentro de él:

$ mkdir ~/cliente $ mv ~/cliente.CRT PKI/Privado/Cliente.clave ~/cliente 

Bien, casi estamos allí. Ahora tenemos que copiar la plantilla de configuración del cliente, /usr/share/doc/openvpn/ejemplos/muestra-config-files/client.confusión dentro de ~/cliente directorio y modifíquelo para satisfacer nuestras necesidades:

$ cp/usr/share/doc/openvpn/ejemplos/muestra-config-files/cliente.conf ~/cliente 

Aquí están las líneas que necesitamos cambiar en el archivo. En línea 42 poner la IP o el nombre de host del servidor real en lugar de my-server-1:

remoto my-server-1 1194 

En líneas 61 y 62 Eliminar el líder ; Los privilegios del personaje para degradar después de la inicialización:

Usuario nadie grupe nogroup 

En líneas 88 a 90 y 108 Podemos ver que se hace referencia al certificado de CA, el certificado del cliente, la clave del cliente y la clave TLS-AUTH. Queremos comentar esas líneas, ya que pondremos el contenido real de los archivos entre un par de "etiquetas" dedicar:

  • para el certificado de CA
  • Para el certificado del cliente
  • Para la clave del cliente
  • para la tecla TLS-Auth

Una vez que se comentan las líneas, agregamos el siguiente contenido en la parte inferior del archivo:

 # Aquí va el contenido de la CA.El archivo CRT # aquí va el contenido del cliente.El archivo CRT # aquí va el contenido del cliente.Archivo clave Dirección de clave 1 # Aquí va el contenido del TA.archivo de clave  


Una vez terminado de editar el archivo, lo cambiamos el nombre con el .ovpn sufijo:

$ mv ~/cliente/cliente.conf ~/cliente/cliente.ovpn 

Todo lo que queda por hacer es importar el archivo en nuestra aplicación cliente para que se conecte a nuestra VPN. Si estamos utilizando el entorno de escritorio GNOME, por ejemplo, podemos importar el archivo desde Red Sección del panel de control. En la sección VPN simplemente haga clic en el + botón, luego en "Importar desde el archivo" para seleccionar e importar el ".El archivo OVPN "que transfirió anteriormente a su máquina de cliente.



Interfaz gnome para importar .archivo ovpn

Conclusiones

En este tutorial vimos cómo crear una configuración de OpenVPN en funcionamiento. Generamos una autoridad de certificado y usamos para firmar certificados de servidor y cliente que generamos junto con las claves correspondientes. Vimos cómo configurar el servidor y cómo configurar las redes, permitiendo el reenvío de paquetes y realizar las modificaciones necesarias en la configuración de firewall de UFW. Finalmente, vimos cómo generar un cliente .ovpn Archivo que se puede importar de una aplicación cliente para conectarse fácilmente a nuestra VPN. Disfrutar!

Tutoriales de Linux relacionados:

  • Cosas para instalar en Ubuntu 20.04
  • Cosas que hacer después de instalar Ubuntu 20.04 fossa focal Linux
  • Ubuntu 20.04 trucos y cosas que quizás no sepas
  • Ubuntu básico 22.04 Configuración de conexión de cliente/servidor OpenVPN
  • Ubuntu 20.04 Guía
  • Cosas que saber sobre Ubuntu 20.04 fosa focal
  • Ubuntu 20.04 Hadoop
  • Lista e instalación de clientes FTP en Ubuntu 20.04 Linux ..
  • Los 8 mejores entornos de escritorio de Ubuntu (20.04 fosa focal ..
  • Prueba de clientes HTTPS utilizando OpenSSL para simular un servidor