One place for hosting & domains

      IKEv2

      Cómo configurar un servidor VPN IKEv2 con StrongSwan en Ubuntu 20.04


      Justin Ellingwood y Namo escribieron una versión anterior de este tutorial.

      Introducción

      Un red virtual privad,(VPN, por sus siglas en inglés) le permite cifrar de forma segura el tráfico mientras tiene lugar a través de redes no confiables, como las de una cafetería, una sala de conferencias o un aeropuerto.

      Internet Key Exchange v2, o IKEv2, es un protocolo que permite la implementación directa de túneles de IPSec entre un servidor y un cliente. En las implementaciones de VPN IKEv2, IPSec proporciona cifrado para el tráfico de red. IKEv2 es compatible de forma nativa con algunas plataformas (OS X 10.11+, iOS 9.1+ y Windows 10) sin necesidad de aplicaciones adicionales y maneja los picos de los clientes sin problemas.

      En este tutorial, configurará un servidor VPN IKEv2 con StrongSwan en un servidor con Ubuntu 20.04. Luego, aprenderá a conectarse con él con clientes de Windows, macOS, Ubuntu, iOS y Android.

      Requisitos previos

      Para completar este tutorial, necesitará lo siguiente:

      Paso 1: Instalar StrongSwan

      Primero, instalaremos StrongSwan, un demonio IPSec de código abierto que configuraremos para que funcione como nuestro servidor VPN. También instalaremos el componente de infraestructura de clave pública (PKI) para poder crear una Entidad de certificación (CA) para proporcionar las credenciales para nuestra infraestructura.

      Comience por actualizar la caché del paquete local:

      A continuación, instale el software escribiendo lo siguiente:

      • sudo apt install strongswan strongswan-pki libcharon-extra-plugins libcharon-extauth-plugins

      Se utiliza el paquete adicional libcharon-extauth-plugins para garantizar que varios clientes pueden autenticarse en su servidor utilizando un nombre de usuario y una frase de contraseña compartidos.

      Ahora que se instaló todo, crearemos nuestros certificados.

      Paso 2: Crear una autoridad de certificación

      Un servidor IKEv2 requiere un certificado para identificarse ante los clientes. Para que podamos crear el certificado requerido, el paquete strongswan-pki incluye una utilidad para generar una entidad de certificación y certificados del servidor denominada pki.

      Para comenzar, crearemos algunos directorios para almacenar todos los activos en los que trabajaremos. La estructura de directorios coincide con algunos de los directorios de /etc/ipsec.d, adonde, eventualmente, moveremos todos los elementos que creemos.

      • mkdir -p ~/pki/{cacerts,certs,private}

      A continuación, bloquearemos los permisos para que otros usuarios no puedan ver nuestros archivos privados:

      Ahora que disponemos de una estructura de directorios para almacenar todo, podemos generar una clave de root. Será una clave RSA de 4096 bits que se usará para firmar nuestra autoridad de certificación de root.

      Ejecute estos comandos para generar la clave:

      • pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/ca-key.pem

      Luego, podemos seguir creando nuestra entidad de certificación de root, utilizando la clave que acabamos de generar para firmar el certificado root:

      • pki --self --ca --lifetime 3650 --in ~/pki/private/ca-key.pem
      • --type rsa --dn "CN=VPN root CA" --outform pem > ~/pki/cacerts/ca-cert.pem

      El indicador ---life 3650 se utiliza para garantizar que el certificado root de la entidad de certificación sea válido por 10 años. El certificado root de una entidad no suele cambiar, dado que debería redistribuirse a todos los servidores y clientes que confían en él, por lo tanto, 10 años es un valor de vencimiento predeterminado seguro.

      Puede cambiar el valor del nombre distintivo (DN) por otro si lo desea. El nombre común (campo CN) aquí es simplemente el indicador, por lo que no tiene que coincidir con ninguna otra cosa de su infraestructura.

      Ahora que nuestra autoridad de certificación de root está lista, podemos crear un certificado que usará el servidor de VPN.

      Paso 3: Generar un certificado para el servidor de VPN

      Ahora, crearemos un certificado y la contraseña para el servidor de VPN. Esta certificación permitirá a los clientes verificar la autenticidad del servidor usando la certificación de CA que acabamos de generar.

      Primero, cree una clave privada para el servidor de VPN con el siguiente comando:

      • pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/server-key.pem

      Ahora, cree y firme el certificado del servidor de VPN con la clave de la autoridad de certificación que creó en el paso anterior. Ejecute el siguiente comando, pero cambie los campos de nombre común (CN) y nombre alternativo de sujeto (SAN) por el nombre de DNS o la dirección IP de su servidor de VPN:

      • pki --pub --in ~/pki/private/server-key.pem --type rsa
      • | pki --issue --lifetime 1825
      • --cacert ~/pki/cacerts/ca-cert.pem
      • --cakey ~/pki/private/ca-key.pem
      • --dn "CN=server_domain_or_IP" --san server_domain_or_IP
      • --flag serverAuth --flag ikeIntermediate --outform pem
      • > ~/pki/certs/server-cert.pem

      Nota: Si utiliza una dirección IP en lugar de un nombre DNS, deberá especificar varias entradas --san. Deberá modificar la línea del bloque de comandos anterior en la que se especifica el nombre distintivo (--dn ...) con la entrada adicional como se indica en la siguiente línea extraída:

      --dn "CN=IP address --san @IP_address --san IP_address 
      

      Esta entrada adicional --san @IP_address se añade porque algunos clientes comprobarán si el certificado TLS tiene tanto una entrada de DNS como una de dirección IP para un servidor al verificar su identidad.

      La opción --flag serverAuth se utiliza para indicar que el certificado se utilizará de forma explícita para la autenticación de servidores antes de que se establezca el túnel cifrado. La opción --flag ikeIntermediate se utiliza para admitir clientes de macOS más antiguos.

      Ahora que generamos todos los archivos TLS/SSL que necesita StrongSwan, podemos moverlos a su lugar en el directorio /etc/ipsec.d escribiendo lo siguiente:

      • sudo cp -r ~/pki/* /etc/ipsec.d/

      En este paso, creamos un par de certificados que se utilizarán para proteger las comunicaciones entre el cliente y el servidor. También, firmamos los certificados con la clave de CA, para que el cliente pueda verificar la autenticidad del servidor de VPN usando el certificado de CA. Con todos estos certificados listos, procederemos a configurar el software.

      Paso 4: Configurar StrongSwan

      StrongSwan tiene un archivo de configuración predeterminado con algunos ejemplos, pero tendremos que hacer la mayor parte de la configuración por nuestra cuenta. Haremos una copia de seguridad del archivo a modo de referencia antes de empezar de cero:

      • sudo mv /etc/ipsec.conf{,.original}

      Cree y abra un nuevo archivo de configuración en blanco con el editor de texto que prefiera. En este caso, utilizaremos nano:

      • sudo nano /etc/ipsec.conf

      Nota: Mientras trabaje en esta sección para configurar la porción del servidor de su VPN, encontrará ajustes que se refieren a los lados izquierdo y derecho de una conexión. Al trabajar con una VPN IPSec, por convención, el lado *izquierdo *se refiere al sistema local que está configurando, que, en este caso, es el servidor. Las directivas del lado derecho de estas configuraciones se refieren a clientes remotos, como teléfonos y otras computadoras.

      Cuando procedamos a configurar clientes más adelante en este tutorial, los archivos de configuración de los clientes harán referencia a sí mismos utilizando varias directivas de la izquierda y se hará referencia al servidor con terminología del lado derecho.

      Primero, le diremos a StrongSwan que registre los estados de los demonios para depurar y permitir conexiones duplicadas. Añada estas líneas al archivo:

      /etc/ipsec.conf

      config setup
          charondebug="ike 1, knl 1, cfg 0"
          uniqueids=no
      

      Luego, crearemos una sección de configuración para nuestra VPN. También le indicaremos a StrongSwan que cree túneles de VPN IKEv2 y cargue de forma automática esta sección de configuración cuando se inicie. Agregue las siguientes líneas al archivo:

      /etc/ipsec.conf

      . . .
      conn ikev2-vpn
          auto=add
          compress=no
          type=tunnel
          keyexchange=ikev2
          fragmentation=yes
          forceencaps=yes
      

      También configuraremos la detección de pares inactivos para eliminar cualquier conexión “pendiente” en caso de que el cliente se desconecte de forma inesperada. Agregue estas líneas:

      /etc/ipsec.conf

      . . .
      conn ikev2-vpn
          . . .
          dpdaction=clear
          dpddelay=300s
          rekey=no
      

      A continuación, configuraremos los parámetros de IPSec del lado “izquierdo” del servidor. Cada uno de los siguientes parámetros garantiza que el servidor esté configurado para aceptar conexiones de clientes e identificarse correctamente. Añada cada una de estas configuraciones al archivo /etc/ipsec.conf una vez que esté familiarizado con ellas y el motivo por el cual se utilizan:

      • left=%any El valor %any garantiza que el servidor utilice la interfaz de red en la que recibe conexiones entrantes para la posterior comunicación con los clientes. Por ejemplo, si conecta un cliente a través de una red privada, el servidor utilizará la dirección IP privada en la que recibe tráfico para el resto de la conexión.
      • leftid=@server_domain_or_IP Esta opción controla el nombre que el servidor presenta a los clientes. Cuando se combina con la siguiente opción, leftcert, la opción leftid garantiza que el nombre configurado del servidor y el nombre distintivo (DN) indicado en el certificado público concuerden.
      • leftcert=server-cert.pem Esta opción es la ruta al certificado público del servidor que configuró en el paso 3. Sin ella, el servidor no podrá autenticarse con clientes ni terminar de negociar la configuración de IKEv2.
      • leftsendcert=always El valor always garantiza que cualquier cliente que se conecte al servidor reciba siempre una copia del certificado público del servidor como parte de la configuración de la conexión inicial.
      • leftsubnet=0.0.0.0/0 Es la última opción “izquierda” que agregará, que les indica a los clientes las subredes accesibles detrás del servidor. En este caso, 0.0.0.0/0 se utiliza para representar todo el conjunto de direcciones IPv4, lo que significa que el servidor les indicará a los clientes que envíen todo su tráfico a través de la VPN por defecto.

      Ahora que está familiarizado con cada una de las opciones del lado “izquierdo” pertinentes, añádalas al archivo de este modo:

      /etc/ipsec.conf

      . . .
      conn ikev2-vpn
          . . .
          left=%any
          leftid=@server_domain_or_IP
          leftcert=server-cert.pem
          leftsendcert=always
          leftsubnet=0.0.0.0/0
      

      Nota: Cuando configure el ID del servidor (leftid), incluya únicamente el carácter @ si su servidor de VPN se identificará por un nombre de dominio:

      /etc/ipsec.conf

          . . .    leftid=@vpn.example.com
          . . .
      

      Si el servidor se identifica por su dirección IP, simplemente introdúzcala:

      /etc/ipsec.conf

          . . .
          leftid=your_server_ip
          . . .
      

      A continuación, podemos configurar los parámetros de IPSec del lado “derecho” del cliente. Cada uno de los siguientes parámetros le indica al servidor cómo aceptar conexiones de los clientes, cómo deben autenticarse los clientes al servidor y los intervalos de direcciones IP privadas y servidores DNS que utilizarán los clientes. Añada cada una de estas configuraciones al archivo /etc/ipsec.conf una vez que esté familiarizado con ellas y el motivo por el cual se utilizan:

      • right=%any La opción %any del lado derecho de la conexión le indica al servidor que acepte las conexiones entrantes de cualquier cliente remoto.
      • rightid=%any Esta opción garantiza que el servidor no rechace conexiones de clientes que proporcionan una identidad antes de que se establezca el túnel cifrado.
      • rightauth=eap-mschapv2 Esta opción configura el método de autenticación que utilizarán los clientes para autenticarse en el servidor. eap-mschapv2 se utiliza aquí para tener una amplia compatibilidad y poder admitir clientes como dispositivos de Windows, macOS y Android.
      • rightsourceip=10.10.10.0/24 Esta opción le indica al servidor que asigne direcciones IP privadas a los clientes del grupo de IP especificado 10.10.10.0/24.
      • rightdns=8.8.4.4 Estas direcciones IP son las resoluciones DNS públicas de Google. Se pueden cambiar para usar otras resoluciones públicas, las del servidor VPN o cualquier otra resolución disponible para los clientes.
      • rightsendcert=never Esta opción le indica al servidor que los clientes no necesitan enviar un certificado para autenticarse.

      Ahora que está familiarizado con las opciones del lado “derecho” necesarias para la VPN, añada las siguientes líneas a /etc/ipsec.conf:

      /etc/ipsec.conf

      . . .
      conn ikev2-vpn
          . . .
          right=%any
          rightid=%any
          rightauth=eap-mschapv2
          rightsourceip=10.10.10.0/24
          rightdns=8.8.8.8,8.8.4.4
          rightsendcert=never
      

      Ahora, le indicaremos a StrongSwan que solicite a los clientes las credenciales de los usuarios cuando se conecten:

      /etc/ipsec.conf

      . . .
      conn ikev2-vpn
          . . .
          eap_identity=%identity
      

      Por último, añada las siguientes líneas para admitir clientes de Linux, Windows, macOS, iOS y Android. Estas líneas especifican los diversos algoritmos de intercambio de clave, hash, autenticación y cifrado (denominados comúnmente Conjuntos de cifrado) que StrongSwan permitirá que utilicen los diferentes clientes:

      /etc/ipsec.conf

      . . .
      conn ikev2-vpn
          . . .
          ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
          esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!
      

      Cada conjunto de cifrado compatible se separa de los demás con una coma. Por ejemplo, chacha20poly1305-sha512-curve25519-prfsha512 es un conjunto y aes256gcm16-sha384-prfsha384-ecp384 es otro. Los conjuntos de cifrado que se enumeran aquí se seleccionaron para garantizar el mayor grado de compatibilidad con los clientes de Windows, macOS, iOS, Android y Linux.

      El archivo de configuración completo debe tener el siguiente aspecto:

      /etc/ipsec.conf

      config setup
          charondebug="ike 1, knl 1, cfg 0"
          uniqueids=no
      
      conn ikev2-vpn
          auto=add
          compress=no
          type=tunnel
          keyexchange=ikev2
          fragmentation=yes
          forceencaps=yes
          dpdaction=clear
          dpddelay=300s
          rekey=no
          left=%any
          leftid=@server_domain_or_IP
          leftcert=server-cert.pem
          leftsendcert=always
          leftsubnet=0.0.0.0/0
          right=%any
          rightid=%any
          rightauth=eap-mschapv2
          rightsourceip=10.10.10.0/24
          rightdns=8.8.8.8,8.8.4.4
          rightsendcert=never
          eap_identity=%identity
          ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
          esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!
      

      Guarde y cierre el archivo una vez que haya verificado que añadió correctamente cada línea. Si utiliza nano, podrá hacerlo presionando CTRL+X, Y y luego ENTER.

      Ahora que configuramos los parámetros de VPN, crearemos una cuenta para que nuestros usuarios puedan conectarse al servidor.

      Paso 5: Configurar la autenticación de VPN

      Nuestro servidor de VPN ahora está configurado para aceptar conexiones de clientes, pero aún no establecimos credenciales. Tendremos que realizar algunas configuraciones en un archivo de configuración especial llamado ipsec.secrets:

      • Debemos indicar a StrongSwan dónde encontrar la clave privada para el certificado de nuestro servidor, de modo que este último pueda autenticar a los clientes.
      • También, tendremos que configurar una lista de usuarios a quienes se les permitirá conectarse al VPN.

      Abramos el archivos de secretos para editarlo:

      • sudo nano /etc/ipsec.secrets

      Primero, le indicaremos a StrongSwan dónde encontrar nuestra clave privada:

      /etc/ipsec.secrets

      : RSA "server-key.pem"
      

      Luego, definiremos las credenciales de los usuarios. Puede crear cualquier combinación de nombre de usuario o contraseña que desee:

      /etc/ipsec.secrets

      your_username : EAP "your_password"
      

      Guarde y cierre el archivo. Ahora que terminamos de trabajar con los parámetros de VPN, reiniciaremos el servicio de VPN para que se aplique nuestra configuración:

      • sudo systemctl restart strongswan-starter

      Ahora que el servidor de VPN quedó totalmente configurado, tanto con opciones de servidor como con las credenciales de usuarios, es el momento de proseguir con la configuración de la parte más importante: el firewall.

      Paso 6: Configurar el firewall y el reenvío de IP de kernel

      Ahora que completamos la configuración de StrongSwan, debemos configurar el firewall para que permita tráfico VPN y lo reenvíe.

      Si siguió el tutorial de configuración inicial para servidores indicado en los requisitos previos, debería tener un firewall UFW. Si todavía no tiene un firewall UFW configurado, comience por añadir una regla para permitir conexiones SSH a través del firewall de modo que su sesión actual no se cierre cuando habilite UFW:

      A continuación, habilite el firewall escribiendo lo siguiente:

      A continuación, agregue una regla para permitir tráfico UDP a los puertos de IPSec estándar 500 y 4500:

      • sudo ufw allow 500,4500/udp

      A continuación, abriremos uno de los archivos de configuración de UFW para agregar algunas políticas de bajo nivel a fin de dirigir y reenviar paquetes IPSec. Sin embargo, para poder hacerlo, debemos encontrar la interfaz de red de nuestro servidor que se utiliza para acceder a Internet. Busque esta interfaz al consultar el dispositivo asociado con la ruta predeterminada:

      Su interfaz pública debe ir después de la palabra “dev”. Por ejemplo, este resultado muestra la interfaz llamada eth0, que se resalta a continuación:

      Output

      default via your_server_ip dev eth0 proto static

      Cuando tenga una interfaz de red pública, abra el archivo /etc/ufw/before.rules en su editor de texto. Las reglas de este archivo se añaden al firewall antes del resto de las reglas de entrada y salida habituales. Se utilizan para configurar la traducción de direcciones de red (NAT) para que el servidor pueda dirigir correctamente las conexiones desde y hacia los clientes e Internet.

      • sudo nano /etc/ufw/before.rules

      Cerca de la parte superior del archivo (antes de la línea *filter), agregue el siguiente bloque de configuración: Cambie cada instancia de eth0 en la configuración superior para que coincida con el nombre de interfaz que encontró con ip route. Las líneas *nat crean reglas para que el firewall pueda dirigir y manipular de forma correcta el tráfico entre los clientes de VPN e Internet. La línea *mangle ajusta el tamaño máximo del segmento de paquete para evitar posibles problemas con determinados clientes de VPN.

      /etc/ufw/before.rules

      *nat
      -A POSTROUTING -s 10.10.10.0/24 -o eth0 -m policy --pol ipsec --dir out -j ACCEPT
      -A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE
      COMMIT
      
      *mangle
      -A FORWARD --match policy --pol ipsec --dir in -s 10.10.10.0/24 -o eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
      COMMIT
      
      *filter
      :ufw-before-input - [0:0]
      :ufw-before-output - [0:0]
      :ufw-before-forward - [0:0]
      :ufw-not-local - [0:0]
      . . .
      

      A continuación, después de las líneas *filter y de definición de cadenas, agregue un bloque más de configuración:

      /etc/ufw/before.rules

      . . .
      *filter
      :ufw-before-input - [0:0]
      :ufw-before-output - [0:0]
      :ufw-before-forward - [0:0]
      :ufw-not-local - [0:0]
      
      -A ufw-before-forward --match policy --pol ipsec --dir in --proto esp -s 10.10.10.0/24 -j ACCEPT
      -A ufw-before-forward --match policy --pol ipsec --dir out --proto esp -d 10.10.10.0/24 -j ACCEPT
      

      Estas líneas solicitan al firewall que reenvíe el tráfico de carga de seguridad encapsuladora (ESP), para que los clientes de VPN puedan conectarse. ESP proporciona seguridad adicional para nuestros paquetes de VPN a medida que circulan por redes no confiables.

      Cuando haya terminado, guarde y cierre el archivo una vez que haya verificado que añadió correctamente cada línea. Si utiliza nano, podrá hacerlo presionando CTRL+X, Y y luego ENTER.

      Antes de reiniciar el firewall, cambiaremos algunos parámetros de kernel de red para permitir el enrutamiento de una interfaz a otra. El archivo que controla estas configuraciones se llama /etc/ufw/sysctl.conf. Vamos a tener que configurar algunas cosas en el archivo.

      El primer reenvío de paquetes IPv4 se debe activar para que el tráfico pueda moverse entre la VPN y las interfaces de red de acceso público en el servidor. A continuación, inhabilitaremos la detección de MTU de ruta para evitar problemas de fragmentación de paquetes. Tampoco aceptaremos redireccionamientos de ICMP ni los enviaremos para prevenir ataques de intermediarios (man-in-the-middle).

      Abra el archivo de configuración de parámetros del kernel de UFW con nano o su editor de texto preferido:

      • sudo nano /etc/ufw/sysctl.conf

      Ahora, añada la siguiente configuración net/ipv4/ip_forward=1 al final del archivo para habilitar el reenvío de paquetes entre interfaces:

      /etc/ufw/sysctl.conf

      . . .
      net/ipv4/ip_forward=1
      

      A continuación, bloquee el envío y la recepción de paquetes de redireccionamiento de ICMP añadiendo las siguientes líneas al final del archivo:

      /etc/ufw/sysctl.conf

      . . .
      net/ipv4/conf/all/accept_redirects=0
      net/ipv4/conf/all/send_redirects=0
      

      Por último, desactive la detección de MTU de ruta al agregar esta línea al final del archivo:

      /etc/ufw/sysctl.conf

      . . .
      net/ipv4/ip_no_pmtu_disc=1
      

      Guarde el archivo cuando termine. Ahora, podemos habilitar todos nuestros cambios al deshabilitar y volver a habilitar el firewall, dado que UFW aplica estos ajustes siempre que se reinicia:

      • sudo ufw disable
      • sudo ufw enable

      Se le solicitará confirmar el proceso. Escriba Y para activar UFW nuevamente con las configuraciones nuevas.

      Paso 7: Probar la conexión VPN en Windows, macOS, Ubuntu, iOS y Android

      Ahora que todo está configurado, es hora de probarlo. Primero, deberá copiar el certificado de CA que creó e instalarlo en sus dispositivos clientes que se conectarán a la VPN. La forma más sencilla de hacerlo es iniciar sesión en su servidor y mostrar el contenido del archivo de certificado:

      • cat /etc/ipsec.d/cacerts/ca-cert.pem

      Visualizará un resultado similar a esto:

      Output

      -----BEGIN CERTIFICATE----- MIIFNDCCAxygAwIBAgIIHCsidG5mXzgwDQYJKoZIhvcNAQEMBQAwODELMAkGA1UE . . . H2YUdz8XNHrJHvMQKWFpi0rlEcMs+MSXPFWE3Q7UbaZJ/h8wpSldSUbQRUlphExJ dJ4PX+MUJO/vjG1/ie6Kh25xbBAc3qNq8siiJZDwrg6vjEK7eiZ1rA== -----END CERTIFICATE-----

      Copie este resultado a su computadora, incluidas las líneas -----BEGIN CERTIFICATE----- y -----END CERTIFICATE-----, y guárdelo en un archivo con un nombre que pueda reconocer, como ca-cert.pem. Asegúrese de que el archivo que cree tenga la extensión .pem.

      De forma alternativa, use SFTP para transferir el archivo a su computadora.

      Una vez que descargue el archivo ca-cert.pem a su computadora, podrá configurar la conexión a la VPN.

      Establecer conexión desde Windows

      Hay varias formas de importar el certificado root y configurar Windows para conectarse a una VPN. En el primer método, se utilizan herramientas gráficas para cada paso. En el segundo, se utilizan los comandos de PowerShell, que se pueden cifrar y modificar para adaptarlos a la configuración de su VPN.

      ** Nota**: Estas instrucciones se han probado en instalaciones de Windows 10 con versiones 1903 y 1909.

      Configurar Windows con herramientas gráficas

      Primero, importe el certificado de root siguiendo estos pasos:

      1. Pulse WINDOWS+R para abrir el diálogo Ejecutar e ingrese mmc.exe para iniciar la Consola de administración de Windows.
      2. En el menú Archivo, diríjase a Agregar o quitar complemento, seleccione Certificados en la lista de complementos disponibles y haga clic en Agregar.
      3. Nuestro propósito es que la VPN funcione con cualquier usuario. Por ello, debe seleccionar** Cuenta de equipo** y hacer clic en Siguiente.
      4. Realizaremos algunas configuraciones en la computadora local. Seleccione Equipo local y luego haga clic en Finalizar.
      5. Debajo del nodo Raíz de consola, expanda la entrada Certificados (equipo local), expanda Entidades de certificación raíz de confianza, y seleccione la entrada Certificados: de certificados Vista

      6. En el menú Acción, seleccione Todas las tareas y haga clic en Importar… para visualizar el Asistente para importación de certificados. Haga clic en Siguiente para pasar la introducción.

      7. En la pantalla Archivo para importar, presione el botón Examinar, asegúrese de cambiar el tipo de archivo de “Certificado X.509 (  .cer; .crt)” a “Todos los archivos (  . )” y seleccione el archivo ca-cert.pem que guardó. Luego haga clic en Siguiente.

      8. Asegúrese de que el valor de Almacén de certificados sea Entidades de certificación raíz de confianza y haga clic en Siguiente************.

      9. Haga clic en Finalizar para importar el certificado.

      Luego, configure la VPN siguiendo estos pasos:

      1. Inicie el Panel de control y diríjase a Centro de redes y recursos compartidos.
      2. Haga clic en Configurar una nueva conexión o red y luego seleccione Conectarse** a un área de trabajo**.
      3. Seleccione Usar mi conexión a Internet (VPN).
      4. Ingrese la información del servidor VPN. Ingrese el nombre del dominio o la dirección IP del servidor en el campo Dirección de Internet y luego complete Nombre de destino con algo que describa su conexión de VPN. Luego haga clic en Conectar.

      Configurar Windows con PowerShell

      Para importar el certificado root de la CA utilizando PowerShell, primero, abra una línea de comandos de PowerShell con privilegios de administrador. Para hacerlo, haga clic con el botón derecho en el icono del menú Inicio y seleccione Windows PowerShell (Admin). También puede abrir un mensaje de comandos como administrador y escribir powershell.

      A continuación, importaremos el certificado con el cmdlet Import-Certificate de PowerShell. En el siguiente comando, el primer argumento -CertStoreLocation garantizará que el certificado se importe en la tienda de Entidades de certificación root de confianza de la computadora de modo que todos los programas y usuarios puedan verificar el certificado del servidor VPN. El argumento -FilePath debe apuntar a la ubicación en la que copió el certificado. En el siguiente ejemplo, la ruta es C:UserssammyDocumentsca-cert.pem. Asegúrese de editar el comando para que coincida con la ubicación que utilizó.

      • Import-Certificate `
      • -CertStoreLocation cert:LocalMachineRoot `
      • -FilePath C:userssammyDocumentsca-cert.pem

      El comando generará algo similar a esto:

      Output

      PSParentPath: Microsoft.PowerShell.SecurityCertificate::LocalMachineRoot Thumbprint Subject ---------- ------- DB00813B4087E9367861E8463A60CEA0ADC5F002 CN=VPN root CA

      Ahora, para configurar la VPN con PowerShell, ejecute el siguiente comando. Sustituya el nombre DNS o la dirección IP de su servidor en la línea -ServerAddress. Los diversos indicadores garantizarán que Windows esté configurado correctamente con los parámetros de seguridad adecuados que concuerdan con las opciones que estableció en /etc/ipsec.conf.

      • Add-VpnConnection -Name "VPN Connection" `
      • -ServerAddress "server_domain_or_IP" `
      • -TunnelType "IKEv2" `
      • -AuthenticationMethod "EAP" `
      • -EncryptionLevel "Maximum" `
      • -RememberCredential `

      Si el comando es exitoso, no habrá ningún resultado. Para confirmar que la VPN esté configurada correctamente, utilice el cmdlet Get-VPNConnection:

      • Get-VpnConnection -Name "VPN Connection"

      Verá un resultado como el siguiente:

      Output

      Name : VPN Connection ServerAddress : your_server_ip AllUserConnection : False Guid : {B055A1AB-175C-4028-B4A8-D34309A2B20E} TunnelType : Ikev2 AuthenticationMethod : {Eap} EncryptionLevel : Maximum L2tpIPsecAuth : UseWinlogonCredential : False EapConfigXmlStream : #document ConnectionStatus : Disconnected RememberCredential : True SplitTunneling : False DnsSuffix : IdleDisconnectSeconds : 0

      Por defecto, Windows selecciona algoritmos más antiguos y lentos. Ejecute el cmdlet Set-VpnConnectionIPsecConfiguration para actualizar los parámetros de cifrado que Windows utilizará para el intercambio de claves IKEv2 y para cifrar paquetes:

      • Set-VpnConnectionIPsecConfiguration -Name "VPN Connection" `
      • -AuthenticationTransformConstants GCMAES256 `
      • -CipherTransformConstants GCMAES256 `
      • -DHGroup ECP384 `
      • -IntegrityCheckMethod SHA384 `
      • -PfsGroup ECP384 `
      • -EncryptionMethod GCMAES256

      Nota: Si desea eliminar la conexión VPN y volver a configurarla con diferentes opciones, puede ejecutar el cmdlet Remove-VpnConnection.

      • Remove-VpnConnection -Name "VPN Connection" -Force

      El indicador -Force omite el mensaje de confirmación de la eliminación. Para eliminar la VPN con este comando, debe estar desconectado de ella.

      Conectarse a la VPN

      Una vez que tenga el certificado importado y la VPN configurada con cualquier método, su nueva conexión VPN será visible en la lista de redes. Seleccione la VPN y haga clic en Conectar. Se le solicitará su nombre de usuario y contraseña. Escríbalos y haga clic en Aceptar. Con esto, establecerá la conexión.

      Establecer conexión desde macOS

      Siga estos pasos para importar el certificado:

      1. Haga doble clic en el archivo de certificado. Acceso a Llaveros aparecerá con el diálogo “Acceso a Llaveros está intentando modificar el sistema de administración de contraseñas. Ingrese su contraseña para autorizarlo”.
      2. Ingrese su contraseña y haga clic en Modificar llavero.
      3. Haga clic en el certificado de VPN recién importado. Con esto, se abrirá abre una pequeña ventana de propiedades en la que podrá especificar los niveles de confianza. Fije Seguridad de IP (IPSec) en Confiar siempre. Se solicitará que ingrese su contraseña nuevamente. Esta configuración guarda de forma automática la contraseña una vez que se ingresa.

      Ahora que el certificado se importó y es confiable, configure la conexión VPN con estos pasos:

      1. Diríjase a Preferencias del Sistema y seleccione Red.
      2. Haga clic en el botón pequeño de “adición” en la parte inferior izquierda de la lista de redes.
      3. En la ventana emergente que aparecerá, fije el valor de Interfaz en VPN y el de Tipo de VPN en IKEv2, y asigne un nombre a la conexión.
      4. En los campos Servidor e ID remoto, ingrese el nombre de dominio o la dirección IP del servidor. Deje ID local en blanco.
      5. Haga clic en Ajustes de autenticación, seleccione Nombre del usuario, e ingrese el nombre de usuario y la contraseña que configuró para su usuario de VPN. Luego haga clic en Aceptar.

      Por último, haga clic en Conectar para conectarse a la VPN. Con esto, debería establecer la conexión con la VPN.

      Establecer conexión desde Ubuntu

      Para conectarse desde un equipo con Ubuntu, puede configurar y administrar StrongSwan como un servicio o usar un comando único cada vez que desee conectarse. Se proporcionan instrucciones para ambas alternativas.

      Administrar StrongSwan como un servicio

      Para administrar StrongSwan como servicio, deberá realizar los siguientes pasos de configuración.

      Primero, actualice su caché de paquetes local con apt

      A continuación, instale StrongSwan y los complementos necesarios para la autenticación:

      • sudo apt install strongswan libcharon-extra-plugins

      Ahora, necesitará tener una copia del certificado de CA en el directorio /etc/ipsec.d/cacerts para que su cliente pueda verificar la identidad del servidor. Ejecute el siguiente comando para copiar el archivo ca-cert.pem a su lugar:

      • sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts

      Para garantizar que la VPN solo se ejecute bajo demanda, utilice systemctl para deshabilitar la ejecución automática de StrongSwan:

      • sudo systemctl disable --now strongswan-starter

      A continuación, configure el nombre de usuario y la contraseña que utilizará para la autenticación en el servidor VPN. Edite /etc/ipsec.secrets con nano o su editor preferido:

      • sudo nano /etc/ipsec.conf

      Añada la siguiente línea, asegurándose de editar los valores resaltados de nombre de usuario y contraseña para que coincidan con los que configuró en el servidor:

      /etc/ipsec.conf

      your_username : EAP "your_password"
      

      Por último, edite el archivo /etc/ipsec.conf para configurar su cliente para que coincida con la configuración del servidor:

      /etc/ipsec.conf

      config setup
      
      conn ikev2-rw
          right=server_domain_or_IP
          # This should match the `leftid` value on your server's configuration
          rightid=server_domain_or_IP
          rightsubnet=0.0.0.0/0
          rightauth=pubkey
          leftsourceip=%config
          leftid=username
          leftauth=eap-mschapv2
          eap_identity=%identity
          auto=start
      

      Para conectarse a la VPN, escriba lo siguiente:

      • sudo systemctl start strongswan-starter

      Para desconectarse nuevamente, escriba lo siguiente:

      • sudo systemctl stop strongswan-starter

      Usar el cliente charon-cmd para conexiones únicas

      Para administrar StrongSwan como servicio, deberá realizar los siguientes pasos de configuración.

      Primero, actualice su caché de paquetes local con apt

      A continuación, instale StrongSwan y los complementos necesarios para la autenticación:

      • sudo apt install strongswan libcharon-extra-plugins

      Ahora, necesitará tener una copia del certificado de CA en el directorio /etc/ipsec.d/cacerts para que su cliente pueda verificar la identidad del servidor. Ejecute el siguiente comando para copiar el archivo ca-cert.pem a su lugar:

      • sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts

      En este punto, puede conectarse al servidor VPN con charon-cmd utilizando el certificado de CA del servidor, la dirección IP del servidor VPN y el nombre de usuario que configuró.

      Ejecute el siguiente comando siempre que quiera conectarse a la VPN:

      • sudo charon-cmd --cert ca-cert.pem --host vpn_domain_or_IP --identity your_username

      Cuando se le solicite, proporcione la contraseña del usuario de la VPN para conectarse a ella. Para desconectarse, pulse CTRL+C en la terminal y espere que la conexión se cierre.

      Establecer conexión desde iOS

      Para configurar la conexión de VPN en un dispositivo iOS, siga estos pasos:

      1. Envíese un correo electrónico con el certificado de root adjunto.
      2. Abra el correo electrónico en su dispositivo iOS, toque el archivo del certificado adjunto y luego seleccione Instalar e ingrese su código de acceso. Una vez que se instale, pulse Listo.
      3. Diríjase a Configuración, General, VPN y toque Agregar configuración de VPN. Con esto, se mostrará la pantalla de configuración de la conexión de la VPN.
      4. Toque Tipo y seleccione IKEv2.
      5. En el campo Descripción, ingrese un nombre corto para la conexión de VPN. Puede ser el que desee.
      6. En los campos Servidor e ID remoto, ingrese el nombre de dominio o la dirección IP del servidor. Puede dejar el campo ID local vacío.
      7. Ingrese su nombre de usuario y contraseña en la sección Autenticación y toque Listo.
      8. Seleccione la conexión de VPN que acaba de crear y toque el conmutador en la parte superior de la página. Con esto, se conectará.

      Establecer conexión desde Android

      Siga estos pasos para importar el certificado:

      1. Envíese un correo electrónico con el certificado de CA adjunto. Guarde el certificado CA en su carpeta de descargas.
      2. Descargue StrongSwan VPN Client de Play Store.
      3. Abra la aplicación. Presione el icono “más” () en la esquina superior derecha y seleccione Certificados de CA.
      4. Toque nuevamente el ícono “más” ( ) en la esquina superior derecha. Seleccione Importar certificado.
      5. Busque el archivo del certificado de CA en su carpeta de descargas y selecciónelo para importarlo a la aplicación.

      Ahora que se importó el certificado a la aplicación StrongSwan, puede configurar la conexión de VPN con los siguientes pasos:

      1. En la aplicación, toque ADD VPN PROFILE en la parte superior.
      2. Complete el campo Server con el nombre de dominio o la dirección IP pública de su servidor de VPN.
      3. Asegúrese de seleccionar IKEv2 EAP (Username/Password) en la categoría “Type” para la VPN.
      4. Complete los campos Username y Password con las credenciales que definió en el servidor.
      5. Anule la selección de Select automatically en la sección CA certificate y haga clic en Select CA certificate .
      6. Toque la pestaña IMPORTED en la parte superior de la pantalla y elija la CA que importó (recibirá el nombre “CA rootVPN” si no cambió “DN” previamente).
      7. Si desea, complete el campo Profile name (optional) con un nombre más descriptivo.

      Cuando desee conectarse a la VPN, haga clic en el perfil que acaba de crear en la aplicación StrongSwan.

      Solución de problemas en conexiones

      Si no puede importar el certificado, asegúrese de que el archivo contenga la extensión .pem en lugar .pem.txt.

      Si no puede conectarse a la VPN, verifique el nombre o la dirección IP del servidor que usó. El nombre de dominio o la dirección IP del servidor debe coincidir con lo que configuró como nombre común (CN) al crear el certificado. Si no coinciden, la conexión de VPN no funcionará. Por ejemplo, si configura un certificado con el CN vpn.example.com, debe usar vpn.example.com cuando ingrese la información del servidor VPN. Verifique bien el comando que usó para generar el certificado y los valores que empleó al crear su conexión de VPN.

      Por último, verifique la configuración de VPN para garantizar que el valor leftid esté configurado con el símbolo @ si usa un nombre de dominio:

      /etc/ipsec.conf

          leftid=@vpn.example.com
      

      Y si usa una dirección IP, asegúrese de que se omita el símbolo @. También asegúrese de haber incluido tanto --san @IP_address como --san IP_address al generar el archivo server-cert.pem.

      Conclusión

      A través de este tutorial, creó un servidor de VPN que usa el protocolo IKEv2. Aprendió sobre las directivas que controlan los lados izquierdo y derecho de una conexión tanto en el servidor como en los clientes. También configuró un cliente de Windows, macOS, iOS, Android o Linux para conectarse a la VPN.

      Para agregar o eliminar usuarios, regrese al Paso 5. Cada línea de /etc/ipsec.secrets corresponde a un usuario, por lo tanto, para agregar o eliminar usuarios, o modificar contraseñas, solo se debe editar el archivo.

      Ahora, puede estar seguro de que sus actividades en línea se mantendrán seguras esté donde esté y en cualquier dispositivo que utilice para acceder a Internet.



      Source link

      Comment configurer un serveur VPN IKEv2 avec StrongSwan sur Ubuntu 20.04


      Une version précédente de ce tutoriel a été rédigée par Justin Ellingwood et Namo

      Introduction

      Un réseau privé virtuel, ou VPN, vous permet de crypter en toute sécurité le trafic qui transite par des réseaux non fiables, comme ceux d’un coffee shop, d’une conférence ou d’un aéroport.

      Internet Key Exchange v2, ou IKEv2, est un protocole qui permet de créer un tunnel IPSec direct entre le serveur et le client. Dans les implémentations VPN IKEv2, IPSec assure le cryptage du trafic réseau. IKEv2 est pris en charge en natif sur certaines plateformes (OS X 10.11+, iOS 9.1+ et Windows 10) sans aucune application supplémentaire, et il gère les problèmes clients de manière assez fluide.

      Dans ce tutoriel, vous allez configurer un serveur VPN IKEv2 en utilisant StrongSwan sur un serveur Ubuntu 20.04. Vous apprendrez ensuite comment vous y connecter avec les clients Windows, macOS, Ubuntu, iOS et Android.

      Conditions préalables

      Pour suivre ce tutoriel, vous aurez besoin de :

      Étape 1 — Installation de StrongSwan

      Tout d’abord, nous allons installer StrongSwan, un démon iPSec open source que nous allons configurer en tant que serveur VPN. Nous allons également installer le composant infrastructure de clé publique (ICP) afin que nous puissions créer une autorité de certification (AC) pour fournir des identifiants pour notre infrastructure.

      Commencez par mettre à jour le cache local du paquets :

      Ensuite, installez le logiciel en tapant :

      • sudo apt install strongswan strongswan-pki libcharon-extra-plugins libcharon-extauth-plugins

      Le paquet supplémentaire libcharon-extauth-plugins est utilisé pour vous assurer que divers clients puissent s’authentifier sur votre serveur à l’aide d’un nom d’utilisateur et d’une phrase de passe partagés.

      Maintenant que tout est installé, passons à la création de nos certificats.

      Étape 2 — Création d’une autorité de certification

      Un serveur IKEv2 requiert un certificat pour s’identifier auprès de ses clients. Pour vous aider à créer le certificat requis, le paquet strongswan-pki est livré avec un utilitaire appelé pki pour générer une autorité de certification et des certificats serveurs.

      Pour commencer, créons quelques répertoires pour stocker tous les actifs sur lesquels nous allons travailler. La structure du répertoire correspond à certains des répertoires dans /etc/ipsec.d, où nous allons déplacer tous les éléments que nous créons :

      • mkdir -p ~/pki/{cacerts,certs,private}

      Ensuite, nous verrouillerons les autorisations afin que nos fichiers privés ne puissent pas être vus par d’autres utilisateurs :

      Maintenant que nous avons une structure de répertoire pour tout stocker, nous pouvons générer une clé racine. Il s’agira d’une clé RSA 4096-bit qui sera utilisée pour signer notre autorité de certification racine.

      Exécutez ces commandes pour générer la clé :

      • pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/ca-key.pem

      Ensuite, nous pouvons passer à la création de notre autorité de certification racine, en utilisant la clé que nous venons de générer pour signer le certificat racine :

      • pki --self --ca --lifetime 3650 --in ~/pki/private/ca-key.pem
      • --type rsa --dn "CN=VPN root CA" --outform pem > ~/pki/cacerts/ca-cert.pem

      Le drapeau --lifetime 3650 est utilisé pour garantir que le certificat racine de l’autorité de certification sera valable pour 10 ans. Le certificat root pour une autorité ne change généralement pas, puisqu’il doit être redistribué à chaque serveur et chaque client qui en dépend, de sorte que 10 ans est une valeur de d’expiration par défaut sûre.

      Vous pouvez changer la valeur du nom distinctif (DN) par autre chose si vous le souhaitez. Le nom commun (champ CN) n’est que l’indicateur, il n’a donc pas à correspondre à quoi que ce soit dans votre infrastructure.

      Maintenant que nous disposons d’une autorité de certification racine opérationnelle, nous pouvons créer un certificat que le serveur VPN utilisera.

      Étape 3 — Génération d’un certificat pour le serveur VPN

      Nous allons maintenant créer un certificat et une clé pour le serveur VPN. Ce certificat permettra au client de vérifier l’authenticité du serveur à l’aide du certificat AC que nous venons de produire.

      Tout d’abord, créez une clé privée pour le serveur VPN avec la commande suivante :

      • pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/server-key.pem

      Maintenant, créez et signez le certificat serveur VPN avec la clé de l’autorité de certification que vous avez créée à l’étape précédente. Exécutez la commande suivante, mais changez le nom commun (CN) et le champ Subject Alternate Name (SAN) par le nom DNS ou à l’adresse IP de votre serveur VPN :

      • pki --pub --in ~/pki/private/server-key.pem --type rsa
      • | pki --issue --lifetime 1825
      • --cacert ~/pki/cacerts/ca-cert.pem
      • --cakey ~/pki/private/ca-key.pem
      • --dn "CN=server_domain_or_IP" --san server_domain_or_IP
      • --flag serverAuth --flag ikeIntermediate --outform pem
      • > ~/pki/certs/server-cert.pem

      Remarque : si vous utilisez une adresse IP au lieu d’un nom DNS, vous devrez spécifier plusieurs entrées --san. La ligne dans le bloc de commande précédent où vous spécifiez le nom distinct (--dn ...) devra être modifiée avec l’entrée supplémentaire comme la ligne extraite suivante :

      --dn "CN=IP address --san @IP_address --san IP_address 
      

      La raison de cette entrée supplémentaire --san @IP_address est que certains clients vérifieront si le certificat TLS comporte à la fois une entrée DNS et une entrée d’adresse IP pour un serveur lorsqu’ils vérifieront son identité.

      L’option server -flag Auth est utilisée pour indiquer que le certificat sera utilisé explicitement pour l’authentification du serveur, avant que le tunnel crypté ne soit établi. L’option --flag ikeIntermediate est utilisée pour soutenir les clients plus anciens de macOS.

      Maintenant que nous avons généré tous les fichiers TLS/SSL dont StrongSwan a besoin, nous pouvons déplacer les fichiers a leur place dans le répertoire /etc/ipsec.d en tapant :

      • sudo cp -r ~/pki/* /etc/ipsec.d/

      Au cours de cette étape, nous avons créé une paire de certificats qui sera utilisée pour sécuriser les communications entre le client et le serveur. Nous avons également signé les certificats avec la clé AC, afin que le client puisse vérifier l’authenticité du serveur VPN à l’aide du certificat AC. Une fois tous ces certificats prêts, nous allons passer à la configuration du logiciel.

      Étape 4 — Configuration de StrongSwan

      StrongSwan dipose d’un fichier de configuration par défaut avec quelques exemples, mais nous allons devoir faire la plupart de la configuration nous-mêmes. Sauvegardons le fichier pour référence avant de repartir de zéro :

      • sudo mv /etc/ipsec.conf{,.original}

      Créez et ouvrez un nouveau fichier de configuration vide à l’aide de votre éditeur de texte préféré. Ici, nous utiliserons nano :

      • sudo nano /etc/ipsec.conf

      Remarque : en parcourant cette section pour configurer la partie server de votre VPN, vous rencontrerez des paramètres qui font référence aux côtés gauche (left) et droit (right) d’une connexion. Lorsque vous travaillez avec les VPN d’IPSec, le côté left par convention fait référence au système local que vous configurez, dans ce cas le serveur. Les directives du côté droit de ces paramètres renverra à des clients distants comme des téléphones et autres ordinateurs.

      Lorsque vous passerez à la configuration des clients plus loin dans ce tutoriel, les fichiers de configuration du client se référeront à eux-mêmes en utilisant diverses directives left, et le serveur sera mentionné en utilisant la terminologie right.

      Tout d’abord, nous allons demander à StrongSwan d’enregistrer les états des démons pour le débogage et d’autoriser les connexions en double. Ajoutez ces lignes au fichier :

      /etc/ipsec.conf

      config setup
          charondebug="ike 1, knl 1, cfg 0"
          uniqueids=no
      

      Ensuite, nous allons créer une section de configuration pour notre VPN. Nous allons également indiquer à StrongSwan de créer des tunnels VPN IKEv2 et de charger automatiquement cette section de configuration au démarrage. Ajoutez les lignes suivantes au fichier :

      /etc/ipsec.conf

      . . .
      conn ikev2-vpn
          auto=add
          compress=no
          type=tunnel
          keyexchange=ikev2
          fragmentation=yes
          forceencaps=yes
      

      Nous allons également configurer la détection de dead-peer pour effacer les connexions “en suspens” au cas où le client se déconnecte de manière inattendue. Ajoutez ces lignes :

      /etc/ipsec.conf

      . . .
      conn ikev2-vpn
          . . .
          dpdaction=clear
          dpddelay=300s
          rekey=no
      

      Ensuite, nous allons configurer les paramètres iPSec côté “left” du serveur. Chacun des paramètres suivants garantit que le serveur est configuré pour accepter les connexions des clients et pour s’identifier correctement. Vous ajouterez chacun de ces paramètres au fichier /etc/ipsec.conf une fois que vous serez familiarisé avec ce qu’ils sont et pourquoi ils sont utilisés :

      • left=%any La valeur %any garantit que le serveur utilisera l’interface réseau où il reçoit les connexions entrantes pour les communications ultérieures avec les clients. Par exemple, si vous connectez un client sur un réseau privé, le serveur utilisera l’adresse IP privée où il reçoit le trafic pour le reste de la connexion.
      • leftid=@server_domain_or_IP Cette option contrôle le nom que le serveur présente aux clients. Combiné à l’option suivante leftcert, l’option leftid garantit que le nom configuré du serveur et le nom distinctif (DN) contenus dans le certificat public correspondent.
      • leftcert=server-cert.pem Cette option est le chemin d’accès au certificat public pour le serveur que vous avez configuré à l’Étape 3. Sans celui-ci, le serveur ne pourra pas s’authentifier lui-même aupr1es des clients, ou terminer de négocier la configuration d’IKEv2.
      • leftsendcert=always La valeur always garantit que tout client qui se connecte au serveur recevra toujours une copie du certificat public du serveur dans le cadre de la configuration initiale de la connexion.
      • leftsubnet=0.0.0.0/0 La dernière option de côté “left” que vous ajouterez indique aux clients les sous réseaux qui sont accessibles derrière le serveur. Dans ce cas, 0.0.0.0/0 est utilisé pour représenter l’ensemble des adresses IPv4, ce qui signifie que le serveur indiquera aux clients d’envoyer tout leur trafic sur le VPN par défaut.

      Maintenant que vous êtes familiarisé avec chacune des options du côté “left”, ajoutez-les toutes dans le fichier, comme ceci :

      /etc/ipsec.conf

      . . .
      conn ikev2-vpn
          . . .
          left=%any
          leftid=@server_domain_or_IP
          leftcert=server-cert.pem
          leftsendcert=always
          leftsubnet=0.0.0.0/0
      

      Remarque : Lorsque vous configurez l’ID du serveur (leftid), n’incluez le caractère @ que si votre serveur VPN sera identifié par un nom de domaine :

      /etc/ipsec.conf

          . . .    leftid=@vpn.example.com
          . . .
      

      Si le serveur doit être identifié par son adresse IP, ajoutez simplement l’adresse IP :

      /etc/ipsec.conf

          . . .
          leftid=your_server_ip
          . . .
      

      Ensuite, nous pouvons configurer les paramètres iPSec du côté “right” du client. Chacun des paramètres suivants indique au serveur comment accepter les connexions des clients, comment les clients devraient s’authentifier auprès du serveur, et les plages d’adresse IP privées et les serveurs DNS que les clients utiliseront. Ajoutez chacun de ces paramètres au fichier /etc/ipsec.conf une fois que vous êtes familiarisé avec ce qu’ils sont et pourquoi ils sont utilisés :

      • right=%any L’option %any pour le côté right de la connexion permet au serveur d’accepter les connexions entrantes d’un client distant.
      • rightid=%any Cette option garantit que le serveur ne rejettera pas les connexions des clients qui fournissent une identité avant que le tunnel crypté ne soit établi.
      • rightauth=eap-mschapv2 Cette option configure la méthode d’authentification que les clients utiliseront pour s’authentifier sur le serveur. eap-mschapv2 est utilisé ici pour une large compatibilité pour prendre en charge des clients comme Windows, macOS et Android.
      • rightsourceip=10.10.10.0/24 Cette option permet au serveur d’attribuer des adresses IP privées aux clients du pool d’IP 10.10.10.0/24 spécifié.
      • rightdns=8.8.8.8,8.8.4.4 Ces adresses IP sont les résolveurs DNS publics de Google. Ils peuvent être modifiés pour utiliser d’autres paramètres publics, les résolveurs du serveur VPN ou tout autre résolveur que les clients peuvent atteindre.
      • rightsendcert=never Cette option indique au serveur que les clients n’ont pas à envoyer de certificat pour s’authentifier.

      Maintenant que vous êtes familiarisé avec les options du côté “right” nécessaires pour le VPN, ajoutez les lignes suivantes dans /etc/ipsec.conf :

      /etc/ipsec.conf

      . . .
      conn ikev2-vpn
          . . .
          right=%any
          rightid=%any
          rightauth=eap-mschapv2
          rightsourceip=10.10.10.0/24
          rightdns=8.8.8.8,8.8.4.4
          rightsendcert=never
      

      Nous allons maintenant indiquer à StrongSwan de demander au client ses identifiants d’utilisateur lorsqu’ils se connectent :

      /etc/ipsec.conf

      . . .
      conn ikev2-vpn
          . . .
          eap_identity=%identity
      

      Enfin, ajoutez les lignes suivantes pour prendre en charge les clients Linux, Windows, macOS, iOS et Android. Ces lignes spécifient les différents algorithmes d’échange de clés, de hachage,d’authentification et de cryptage (communément appelés Suites de chiffrement) que StrongSwan permettra à différents clients d’utiliser :

      /etc/ipsec.conf

      . . .
      conn ikev2-vpn
          . . .
          ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
          esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!
      

      Chaque suite de chiffrement prise en charge est délimitée des autres par une virgule. Par exemple, chacha20poly1305-sha512-curve25519-prfsha512 est une suite, et aes256gcm16-sha384-prfsha384-ecp384 est une autre. Les suites de chiffrement qui sont énumérées ici sont sélectionnées pour garantir la plus large compatibilité entre les clients Windows, macOS, iOS, Android et Linux.

      La configuration complète devrait ressembler à ceci :

      /etc/ipsec.conf

      config setup
          charondebug="ike 1, knl 1, cfg 0"
          uniqueids=no
      
      conn ikev2-vpn
          auto=add
          compress=no
          type=tunnel
          keyexchange=ikev2
          fragmentation=yes
          forceencaps=yes
          dpdaction=clear
          dpddelay=300s
          rekey=no
          left=%any
          leftid=@server_domain_or_IP
          leftcert=server-cert.pem
          leftsendcert=always
          leftsubnet=0.0.0.0/0
          right=%any
          rightid=%any
          rightauth=eap-mschapv2
          rightsourceip=10.10.10.0/24
          rightdns=8.8.8.8,8.8.4.4
          rightsendcert=never
          eap_identity=%identity
          ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
          esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!
      

      Sauvegardez et fermez le fichier une fois que vous avez vérifié que vous avez correctement ajouté chaque ligne. Si vous avez utilisé nano, faites-le en appuyant sur CTRL+X, Y, puis ENTER.

      Maintenant que nous avons configuré les paramètres VPN, passons à la création d’un compte afin que nos utilisateurs puissent se connecter au serveur.

      Étape 5 — Configuration de l’authentification VPN

      Notre serveur VPN est maintenant configuré pour accepter les connexions client, mais nous n’avons pas encore configuré d’identifiants. Nous allons devoir configurer quelques éléments dans un fichier de configuration spécial appelé ipsec.secrets :

      • Nous devons indiquer à StrongSwan où trouver la clé privée pour notre certificat de serveur, afin que le serveur puisse s’authentifier auprès de ses clients.
      • Nous devons également mettre en place une liste d’utilisateurs qui seront autorisés à se connecter au VPN.

      Ouvrons le fichier secrets pour le modifier :

      • sudo nano /etc/ipsec.secrets

      Tout d’abord, nous allons indiquer à StrongSwan où trouver notre clé privée :

      /etc/ipsec.secrets

      : RSA "server-key.pem"
      

      Ensuite, nous définirons les identifiants de l’utilisateur. Vous pouvez choisir toute combinaison de nom d’utilisateur ou de mot de passe que vous souhaitez :

      /etc/ipsec.secrets

      your_username : EAP "your_password"
      

      Enregistrez et fermez le fichier. Maintenant que nous avons fini de travailler avec les paramètres du VPN, nous allons redémarrer le service VPN afin que notre configuration soit appliquée :

      • sudo systemctl restart strongswan-starter

      Maintenant que le serveur VPN a été entièrement configuré avec les options du serveur et les identifiants de l’utilisateur, il est temps de passer à la configuration de la partie la plus importante : le pare-feu.

      Étape 6 — Configuration du pare-feu et de la redirection du noyau IP

      Une fois la configuration de StrongSwan terminée, nous devons configurer le pare-feu pour autoriser le passage et la redirection du trafic VPN au travers de celui-ci.

      Si vous avez suivi le guide de configuration initiale du serveur, vous devriez disposer d’un pare-feu UFW activé. Si vous n’avez pas encore configuré UFW, vous devriez commencer par ajouter une règle pour autoriser les connexions SSH au travers du pare-feu afin que votre session actuelle ne se ferme pas lorsque vous activez UFW :

      Ensuite, activez le pare-feu en tapant :

      Ensuite, ajoutez une règle pour autoriser le trafic UDP aux ports IPSec standard, 500 et 4500 :

      • sudo ufw allow 500,4500/udp

      Ensuite, nous allons ouvrir l’un des fichiers de configuration d’UFW pour ajouter quelques politiques de bas niveau pour le routage et la transmission de paquets IPSec. Mais avant cela, nous devons trouver quelle interface réseau sur notre serveur est utilisée pour l’accès à Internet. Trouvez cette interface en recherchant le périphérique associé à la route par défaut :

      Votre interface publique doit suivre le mot “dev”. Par exemple, ce résultat montre l’interface nommée eth0, qui est mise en évidence dans l’exemple qui suit  :

      Output

      default via your_server_ip dev eth0 proto static

      Lorsque vous disposez de votre interface de réseau public, ouvrez le fichier /etc/ufw/before.rules dans votre éditeur de texte. Les règles dans ce fichier sont ajoutées au pare-feu avant le reste des règles habituelles d’entrée et de sortie. Elles sont utilisées pour configurer la traduction d’adresse du réseau (NAT) afin que le serveur puisse correctement acheminer les connexions vers et depuis les clients et l’Internet.

      • sudo nano /etc/ufw/before.rules

      En haut du fichier (avant la ligne *filtre), ajoutez le bloc de configuration suivant. Modifiez chaque instance de eth0 dans la configuration ci-dessus pour qu’elle corresponde au nom de l’interface que vous avez trouvé avec ip route. Les lignes *nat créent des règles afin que le pare-feu puisse correctement acheminer et manipuler le trafic entre les clients VPN et Internet. La ligne *mangle ajuste la taille maximale du segment de paquets pour prévenir les problèmes potentiels avec certains clients VPN :

      /etc/ufw/before.rules

      *nat
      -A POSTROUTING -s 10.10.10.0/24 -o eth0 -m policy --pol ipsec --dir out -j ACCEPT
      -A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE
      COMMIT
      
      *mangle
      -A FORWARD --match policy --pol ipsec --dir in -s 10.10.10.0/24 -o eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
      COMMIT
      
      *filter
      :ufw-before-input - [0:0]
      :ufw-before-output - [0:0]
      :ufw-before-forward - [0:0]
      :ufw-not-local - [0:0]
      . . .
      

      Ensuite, après les lignes *filter et de définition de chaîne, ajoutez un autre bloc de configuration :

      /etc/ufw/before.rules

      . . .
      *filter
      :ufw-before-input - [0:0]
      :ufw-before-output - [0:0]
      :ufw-before-forward - [0:0]
      :ufw-not-local - [0:0]
      
      -A ufw-before-forward --match policy --pol ipsec --dir in --proto esp -s 10.10.10.0/24 -j ACCEPT
      -A ufw-before-forward --match policy --pol ipsec --dir out --proto esp -d 10.10.10.0/24 -j ACCEPT
      

      Ces lignes indiquent au pare-feu qu’il doit acheminer le trafic ESP (Encapsulating Security Payload) afin que les clients VPN puissent se connecter. ESP fournit une sécurité supplémentaire pour nos paquets VPN lorsqu’ils traversent les réseaux non fiables.

      Lorsque vous avez terminé, sauvegardez et fermez le fichier après avoir vérifié que vous avez correctement ajouté chaque ligne. Si vous avez utilisé nano, faites-le en appuyant sur CTRL+X, Y, puis ENTER.

      Avant de redémarrer, nous allons modifier certains paramètres du noyau réseau pour permettre le routage d’une interface à une autre. Le fichier qui contrôle ces paramètres est appelé /etc/ufw/sysctl.conf. Nous allons devoir configurer quelques éléments dans le fichier, et notamment :

      Le premier transfert de paquets IPv4 doit être activé afin que le trafic puisse circuler entre le VPN et les interfaces réseau publiques sur le serveur. Ensuite, nous allons désactiver la découverte de Path MTU pour prévenir les problèmes de fragmentation des paquets. Enfin, nous n’accepterons pas les redirections ICMP ni n’enverrons de redirections ICMP pour prévenir les attaques man-in-the-middle.

      Ouvrez le fichier de configuration des paramètres du noyau d’UFW en utilisant nano ou votre éditeur de texte préféré :

      • sudo nano /etc/ufw/sysctl.conf

      Ajoutez maintenant le paramètre net/ipv4/ip_forward=1 suivant à la fin du fichier pour activer la transmission de paquets entre les interfaces :

      /etc/ufw/sysctl.conf

      . . .
      net/ipv4/ip_forward=1
      

      Ensuite, bloquez l’envoi et la réception de paquets de redirection ICMP en ajoutant les lignes suivantes à la fin du fichier :

      /etc/ufw/sysctl.conf

      . . .
      net/ipv4/conf/all/accept_redirects=0
      net/ipv4/conf/all/send_redirects=0
      

      Enfin, désactivez la découverte de Path MTU en ajoutant cette ligne à la fin du fichier :

      /etc/ufw/sysctl.conf

      . . .
      net/ipv4/ip_no_pmtu_disc=1
      

      Enregistrez le fichier lorsque vous avez terminé. Nous pouvons maintenant activer toutes nos modifications en désactivant et en réactivant le pare-feu, car UFW applique ces paramètres à chaque fois qu’il redémarre :

      • sudo ufw disable
      • sudo ufw enable

      Vous serez invité à confirmer le processus. Tapez Y pour réactiver UFW avec les nouveaux paramètres.

      Étape 7 — Test de la connexion VPN sur Windows, macOS, Ubuntu, iOS et Android

      Maintenant que vous avez tout configuré, il est temps essayerd’. Tout d’abord, vous devrez copier le certificat AC que vous avez créé et l’installer sur votre ou vos dispositif(s) client(s) qui se connecteront au VPN. La manière la plus simple de le faire consiste à vous connecter à votre serveur et à générer le contenu du fichier de certificat :

      • cat /etc/ipsec.d/cacerts/ca-cert.pem

      Vous verrez une sortie semblable à celle-ci :

      Output

      -----BEGIN CERTIFICATE----- MIIFNDCCAxygAwIBAgIIHCsidG5mXzgwDQYJKoZIhvcNAQEMBQAwODELMAkGA1UE . . . H2YUdz8XNHrJHvMQKWFpi0rlEcMs+MSXPFWE3Q7UbaZJ/h8wpSldSUbQRUlphExJ dJ4PX+MUJO/vjG1/ie6Kh25xbBAc3qNq8siiJZDwrg6vjEK7eiZ1rA== -----END CERTIFICATE-----

      Copiez cette sortie sur votre ordinateur, y compris les lignes -----BEGIN CERTIFICATE----- et -----END CERTIFICATE-----,et enregistrez-la dans un fichier avec un nom reconnaissable, tel que ca-cert.pem Assurez-vous que le fichier que vous créez porte bien l’extension .pem.

      Vous pouvez également utiliser le protocole SFTP pour transférer le fichier à votre ordinateur.

      Une fois le fichier ca-cert.pem téléchargé sur votre ordinateur, vous pouvez configurer la connexion au VPN.

      Connexion à partir de Windows

      Il existe de multiples façons d’importer le certificat racine et configurer Windows pour qu’il se connecte à un VPN. La première méthode utilise des outils graphiques pour chaque étape. La deuxième méthode utilise les commandes PowerShell, qui peuvent être scriptées et modifiées en fonction de votre configuration VPN.

      Remarque : ces instructions ont été testées sur les installations Windows 10 exécutant les versions 1903 et 1909.

      Configuration de Windows avec des outils graphiques

      Tout d’abord, importez le certificat racine en suivant ces étapes :

      1. Appuyez sur WINDOWS+R pour faire apparaître la boîte de dialogue Run, et entrez mmc.exe pour lancer la console de gestion de Windows.
      2. Dans le menu File, naviguez jusqu’à Add or Remove Snap-in, sélectionnez Certificates dans la liste des instantanés disponibles, et cliquez sur Add.
      3. Nous voulons que le VPN fonctionne avec n’importe quel utilisateur, donc sélectionnez Computer Account et cliquez sur Next.
      4. Nous configurons les choses sur l’ordinateur local, donc sélectionnez Local Computer, puis cliquez sur Finish.
      5. Sous le nœud Console Root, développez l’entrée Certificates (Local Computer), développez Trusted Root Certification Authorities, puis sélectionnez l’entrée CertificatesCertificates view

      6. Dans le menu Action, sélectionnez All tasks et cliquez sur Import pour afficher l’Assistant d’importation de certificat. Cliquez sur Next pour passer l’introduction.

      7. Dans l’écran de File to Import, cliquez sur le bouton Browse, veillez à changer le type de fichier de “X.509 Certificate (.cer;.crt)” à “All Files (. )”, et sélectionnez le fichier ca-cert.pem que vous avez enregistré. Ensuite, cliquez sur Next.

      8. Assurez-vous que le Certificate Store est configuré à Trusted Root Certification Authorities, et cliquez sur Next.

      9. Cliquez sur Finish pour importer le certificat.

      Ensuite, configurez le VPN avec ces étapes :

      1. Lancez Control Panel, puis naviguez jusqu’au Network and Sharing Center.
      2. Cliquez sur Set up a new connection or network, puis sélectionnez Connect to a workplace.
      3. Sélectionnez Use my Internet connection (VPN).
      4. Entrez les détails du serveur VPN. Entrez le nom de domaine ou l’adresse IP du serveur dans le champ Internet address, puis remplissez Destination name avec quelque chose qui décrit votre connexion VPN. Ensuite, cliquez sur Done.

      Configuration de Windows en utilisant PowerShell

      Pour importer le certificat racine AC à l’aide de PowerShell, ouvrez d’abord une invite PowerShell avec des privilèges d’administrateur. Pour ce faire, cliquez avec le bouton droit sur l’icône du menu Démarrer et sélectionnez Windows PowerShell (Admin). Vous pouvez également ouvrir une invite de commande en tant qu’administrateur et taper powershell.

      Ensuite, nous allons importer le certificat en utilisant le cmdlet PowerShellImport-Certificate. Dans la commande suivante, le premier argument -CertStoreLocation garantira que le certificat est importé dans le magasin Trusted Root Certification Authorities de l’ordinateur afin que tous les programmes et utilisateurs puissent vérifier le certificat du serveur VPN. L’argument -FilePath doit indiquer l’emplacement où vous avez copié le certificat. Dans l’exemple suivant, le chemin est C:UserssammyDocumentsca-cert.pem. Assurez-vous de modifier la commande pour qu’elle corresponde à l’emplacement que vous avez utilisé.

      • Import-Certificate `
      • -CertStoreLocation cert:LocalMachineRoot `
      • -FilePath C:userssammyDocumentsca-cert.pem

      La commande produira quelque chose comme ce qui suit :

      Output

      PSParentPath: Microsoft.PowerShell.SecurityCertificate::LocalMachineRoot Thumbprint Subject ---------- ------- DB00813B4087E9367861E8463A60CEA0ADC5F002 CN=VPN root CA

      Maintenant pour configurer le VPN en utilisant PowerShell, exécutez la commande suivante. Remplacez le nom DNS ou l’adresse IP de votre serveur sur la ligne -ServerAddress Les différents drapeaux veilleront à ce que Windows soit correctement configuré avec les paramètres de sécurité appropriés qui correspondent aux options que vous avez définies dans /etc/ipsec.conf.

      • Add-VpnConnection -Name "VPN Connection" `
      • -ServerAddress "server_domain_or_IP" `
      • -TunnelType "IKEv2" `
      • -AuthenticationMethod "EAP" `
      • -EncryptionLevel "Maximum" `
      • -RememberCredential `

      Si la commande est réussie, il n’y aura pas de sortie. Pour confirmer que le VPN est correctement configuré, utilisez l’applet de commande Get-VPNConnection :

      • Get-VpnConnection -Name "VPN Connection"

      Vous allez recevoir une sortie comme suit :

      Output

      Name : VPN Connection ServerAddress : your_server_ip AllUserConnection : False Guid : {B055A1AB-175C-4028-B4A8-D34309A2B20E} TunnelType : Ikev2 AuthenticationMethod : {Eap} EncryptionLevel : Maximum L2tpIPsecAuth : UseWinlogonCredential : False EapConfigXmlStream : #document ConnectionStatus : Disconnected RememberCredential : True SplitTunneling : False DnsSuffix : IdleDisconnectSeconds : 0

      Par défaut, Windows choisit les algorithmes plus anciens et plus lents. Exécutez l’applet de commande Set-VpnConnectionIPsecConfiguration pour mettre à niveau les paramètres de cryptage que Windows utilisera pour l’échange de clés IKEv2 et pour crypter les paquets :

      • Set-VpnConnectionIPsecConfiguration -Name "VPN Connection" `
      • -AuthenticationTransformConstants GCMAES256 `
      • -CipherTransformConstants GCMAES256 `
      • -DHGroup ECP384 `
      • -IntegrityCheckMethod SHA384 `
      • -PfsGroup ECP384 `
      • -EncryptionMethod GCMAES256

      Remarque : si vous souhaitez supprimer la connexion VPN et la reconfigurer avec différentes options, vous pouvez exécuter l’applet de commande Remove-VpnConnection.

      • Remove-VpnConnection -Name "VPN Connection" -Force

      Le drapeau -Force sautera l’invitation à confirmer la suppression. Vous devez être déconnecté du VPN si vous essayez de le supprimer à l’aide de cette commande.

      Connexion au VPN

      Une fois le certificat importé et le VPN configuré en utilisant l’une ou l’autre méthode, votre nouvelle connexion VPN sera visible sous la liste des réseaux. Sélectionnez le VPN et cliquez sur Connect. Vous serez invité à indiquer votre nom d’utilisateur et votre mot de passe. Entrez ces éléments, cliquez sur OK, et vous serez connecté.

      Connexion à partir de macOS

      Suivez ces étapes pour importer le certificat :

      1. Double-cliquez sur le fichier de certificat. Keychain Access apparaîtra avec une boîte de dialogue indiquant “Keychain Access essaie de modifier le keychain système. Entrez votre mot de passe pour l’autoriser.”
      2. Entrez votre mot de passe, puis cliquez sur Modify Keychain
      3. Double-cliquez sur le certificat VPN nouvellement importé. Cela génère une petite fenêtre de propriétés dans laquelle vous pouvez spécifier les niveaux de confiance. Définissez IP Security (IPSec) sur Always Trust et vous serez invité à nouveau à introduire votre mot de passe. Ce paramètre s’enregistre automatiquement après avoir entré le mot de passe.

      Maintenant que le certificat est importé et fiable, configurez la connexion VPN en suivant ces étapes :

      1. Allez dans les System Preferences et choisissez Network.
      2. Cliquez sur le petit bouton “plus” dans la partie inférieure à gauche de la liste des réseaux.
      3. Dans le popup qui apparaît, définissez Interface sur VPN, définissez VPN Type sur IKEv2 et donnez un nom à la connexion.
      4. Dans le champ Server et Remote ID , entrez le nom de domaine ou l’adresse IP du serveur. Laissez Local ID vierge.
      5. Cliquez sur Authentication Settings, sélectionnez Username, et entrez votre nom d’utilisateur et votre mot de passe que vous avez configuré pour votre utilisateur VPN. Ensuite, cliquez sur OK.

      Enfin, cliquez sur Connect pour vous connecter au VPN. Vous devriez maintenant être connecté au VPN.

      Connexion à partir d’Ubuntu

      Pour vous connecter à partir d’une machine Ubuntu, vous pouvez configurer et gérer StrongSwan comme service ou utiliser une commande unique chaque fois que vous souhaitez vous connecter. Des instructions sont fournies pour les deux.

      Gérer StrongSwan en tant que service

      Pour gérer StrongSwan en tant que service, vous devrez effectuer les étapes de configuration suivantes.

      Tout d’abord, mettez à jour votre cache local de paquets en utilisant apt

      Ensuite, installez StrongSwan et les plugins nécessaires à l’authentification :

      • sudo apt install strongswan libcharon-extra-plugins

      Vous aurez maintenant besoin d’une copie du certificat AC dans le répertoire /etc/ipsec.d/cacerts afin que votre client puisse vérifier l’identité du serveur. Exécutez la commande suivante pour copier le fichier ca-cert.pem en place :

      • sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts

      Pour vous assurer que le VPN fonctionne uniquement sur demande, utilisez systemctl pour désactiver l’exécution automatique de StrongSwan :

      • sudo systemctl disable --now strongswan-starter

      Ensuite, configurez le nom d’utilisateur et le mot de passe que vous utiliserez pour vous authentifier auprès du serveur VPN. Modifiez /etc/ipsec.secrets en utilisant nano ou votre éditeur préféré :

      • sudo nano /etc/ipsec.conf

      Ajoutez la ligne suivante, en modifiant les valeurs du nom d’utilisateur et du mot de passe mis en évidence pour qu’ils correspondent à celles que vous avez configurées sur le serveur :

      /etc/ipsec.conf

      your_username : EAP "your_password"
      

      Enfin, modifiez le fichier /etc/ipsec.conf pour configurer votre client afin qu’il corresponde à la configuration du serveur :

      /etc/ipsec.conf

      config setup
      
      conn ikev2-rw
          right=server_domain_or_IP
          # This should match the `leftid` value on your server's configuration
          rightid=server_domain_or_IP
          rightsubnet=0.0.0.0/0
          rightauth=pubkey
          leftsourceip=%config
          leftid=username
          leftauth=eap-mschapv2
          eap_identity=%identity
          auto=start
      

      Pour vous connecter au VPN, tapez :

      • sudo systemctl start strongswan-starter

      Pour vous déconnecter à nouveau, tapez :

      • sudo systemctl stop strongswan-starter

      Utilisation du client charon-cmd pour les connexions uniques.

      Pour gérer StrongSwan en tant que service, vous devrez effectuer les étapes de configuration suivantes.

      Tout d’abord, mettez à jour votre cache local de paquets en utilisant apt

      Ensuite, installez StrongSwan et les plugins nécessaires à l’authentification :

      • sudo apt install strongswan libcharon-extra-plugins

      Vous aurez maintenant besoin d’une copie du certificat AC dans le répertoire /etc/ipsec.d/cacerts afin que votre client puisse vérifier l’identité du serveur. Exécutez la commande suivante pour copier le fichier ca-cert.pem en place :

      • sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts

      À ce stade, vous pouvez vous connecter au serveur VPN avec charon-cmd en utilisant le certificat AC du serveur, l’adresse IP du serveur VPN et le nom d’utilisateur que vous avez configuré.

      Exécutez la commande suivante chaque fois que vous souhaitez vous connecter au VPN :

      • sudo charon-cmd --cert ca-cert.pem --host vpn_domain_or_IP --identity your_username

      Lorsque vous y êtes invité, fournissez le mot de passe de l’utilisateur VPN et vous serez connecté au VPN. Pour vous déconnecter, appuyez sur CTRL+C dans le terminal et attendez que la connexion se ferme.

      Connexion à partir d’iOS

      Pour configurer la connexion VPN sur un appareil iOS, procédez comme suit :

      1. Envoyez-vous un email avec le certificat racine en annexe.
      2. Ouvrez l’adresse électronique sur votre appareil iOS et appuyez sur le fichier de certificat joint, puis appuyez sur Install et entrez votre code secret. Une fois qu’il s’installe, appuyez sur Done.
      3. Allez dansSs,etting General, VPN et appuyez sur Add VPN Configuration. Cela fera apparaître l’écran de configuration de connexion VPN.
      4. Appuyez sur Type et sélectionnez IKEv2.
      5. Dans le champ Description , entrez un nom court pour la connexion VPN. Cela peut être tout ce que vous voulez.
      6. Dans le champ Server et Remote ID , entrez le nom de domaine ou l’adresse IP du serveur. Le champ Local ID peut être laissé vierge.
      7. Entrez votre nom d’utilisateur et votre mot de passe dans la section Authentication, puis appuyez sur Done.
      8. Sélectionnez la connexion VPN que vous venez de créer, appuyez sur l’interrupteur en haut de la page, et vous serez connecté.

      Connexion à partir d’Android

      Suivez ces étapes pour importer le certificat :

      1. Envoyez-vous un email avec le certificat AC en annexe. Sauvegardez le certificat AC dans votre dossier de téléchargements.
      2. Téléchargez le client VPN StrongSwan dans le Play Store.
      3. Ouvrez l’application. Appuyez sur l’icône “more” () dans le coin supérieur droit et sélectionnez CA certificates.
      4. Appuyez à nouveau sur l’icône “more” () dans le coin supérieur droit. Sélectionnez Import certificat.
      5. Naviguez vers le fichier certificat AC dans votre dossier de téléchargements et sélectionnez-le pour l’importer dans l’application.

      Maintenant que le certificat est importé dans l’application StrongSwan, vous pouvez configurer la connexion VPN en suivant ces étapes :

      1. Dans l’application, appuyez sur ADD VPN PROFILE en haut.
      2. Remplissez Server avec le nom de domaine ou l’adresse IP publique de votre serveur VPN.
      3. Assurez-vous que IKEv2 EAP (Username/Password) est sélectionné comme Type de VPN.
      4. Remplissez les champs Username et Password avec les identifiants que vous avez définis sur le serveur.
      5. Désélectionnez Select automatically dans la section CA certificate et cliquez sur Select CA certificate.
      6. Appuyez sur l’onglet IMPORTED en haut de l’écran et choisissez l’AC que vous avez importé (il sera nommé “VPN root CA” si vous n’avez pas changé le nom “DN” auparavant).
      7. Si vous le souhaitez, remplissez Profile name (optional) avec un nom plus descriptif.

      Lorsque vous souhaitez vous connecter au VPN, cliquez sur le profil que vous venez de créer dans l’application StrongSwan.

      Dépannage des Connexions

      Si vous n’êtes pas en mesure d’importer le certificat, vérifiez que le fichier a l’extension .pem, et non pas .pem.txt.

      Si vous n’êtes pas en mesure de vous connecter au VPN, vérifiez le nom du serveur ou l’adresse IP que vous avez utilisée. Le nom de domaine ou l’adresse IP du serveur doit correspondre à ce que vous avez configuré en tant que nom commun (CN) en créant le certificat. S’ils ne correspondent pas, la connexion VPN ne fonctionnera pas. Par exemple, si vous configurez un certificat avec le CN de vpn.example.com, vous devez utiliser vpn.example.com lorsque vous entrez les détails du serveur VPN. Vérifiez scrupuleusement la commande que vous avez utilisée pour générer le certificat, et les valeurs que vous avez utilisées lors de la création de votre connexion VPN.

      Enfin, vérifiez bien la configuration VPN pour vous assurer que la valeur leftid est configurée avec le symbole @ si vous utilisez un nom de domaine :

      /etc/ipsec.conf

          leftid=@vpn.example.com
      

      Si vous utilisez une adresse IP, veillez à ce que le symbole @ soit absent. Assurez-vous également que lorsque vous avez généré le fichier server-cert.pem, vous avez inclus à la fois les drapeaux --san @IP_address et --san IP_address.

      Conclusion

      Dans ce tutoriel, vous avez construit un serveur VPN qui utilise le protocole IKEv2. Vous avez appris les directives qui contrôlent les côtés left et right d’une connexion, tant sur le serveur et que sur les clients. Vous avez également configuré un client Windows, macOS, iOS, Android ou Linux pour vous connecter au VPN.

      Pour ajouter ou supprimer des utilisateurs, passez à nouveau à l’Étape 5. Chaque ligne dans /etc/ipsec.secrets est pour un utilisateur, donc ajouter ou supprimer les utilisateurs, ou modifier les mots de passe requiert simplement d’éditer le fichier.

      Vous pouvez désormais êtres vous assuré que vos activités en ligne resteront sécurisées où que vous alliez et avec tout appareil que vous utilisez pour accéder à Internet.



      Source link

      Como configurar um servidor VPN IKEv2 com o StrongSwan no Ubuntu 20.04


      Uma versão anterior deste tutorial foi escrita por Justin Ellingwood e Namo

      Introdução

      Uma rede virtual privada, ou VPN, permite que você criptografe com segurança o tráfego enquanto ele viaja através de redes não confiáveis, como aquelas em uma cafeteria, uma sala de conferências ou um aeroporto.

      O Internet Key Exchange v2, ou IKEv2, é um protocolo que permite o tunelamento IPSec direto entre o servidor e o cliente. Em implementações de VPNs com IKEv2, o IPSec fornece criptografia para o tráfego de rede. O IKEv2 é nativamente suportado em algumas plataformas (OS X 10.11+, iOS 9.1+ e Windows 10) sem a necessidade de aplicativos adicionais, e ele cuida de engasgos de clientes muito bem.

      Neste tutorial, você irá configurar um servidor VPN IKEv2 usando o StrongSwan em um servidor Ubuntu 20.04. Em seguida, você irá aprender como se conectar a ele com os clientes do Windows, macOS, Ubuntu, iOS e Android.

      Pré-requisitos

      Para completar este tutorial, você precisará de:

      Passo 1 — Instalando o StrongSwan

      Primeiramente, vamos instalar o StrongSwan, um daemon IPSec de código aberto que vamos configurar como nosso servidor VPN. Também vamos instalar o componente de infraestrutura de chave pública (PKI) para que possamos criar uma autoridade de certificação (CA) para fornecer credenciais para nossa infraestrutura.

      Comece atualizando o cache de pacotes local:

      Em seguida, instale o software digitando:

      • sudo apt install strongswan strongswan-pki libcharon-extra-plugins libcharon-extauth-plugins

      O pacote libcharon-extauth-plugins adicional é usado para garantir que vários clientes possam se autenticar em seu servidor usando um nome de usuário e uma frase secreta compartilhados.

      Agora que tudo está instalado, vamos seguir em frente para criar nossos certificados.

      Passo 2 — Criando uma Autoridade de Certificação

      Um servidor com IKEv2 exige que um certificado se identifique para os clientes. Para ajudar a criar o certificado exigido, o pacote strongswan-pki vem com um utilitário chamado pki para gerar uma autoridade de certificação e certificados de servidor.

      Para começar, vamos criar alguns diretórios para armazenar todos os ativos em que iremos trabalhar. A estrutura do diretório corresponde a alguns dos diretórios em /etc/ipsec.d, para onde vamos mover todos os itens que eventualmente criarmos:

      • mkdir -p ~/pki/{cacerts,certs,private}

      Em seguida, vamos bloquear as permissões para que nossos arquivos privados não possam ser vistos por outros usuários:

      Agora que temos uma estrutura de diretório para armazenar tudo, podemos gerar uma chave raiz. Esta é uma chave RSA 4096-bit que será usada para assinar nossa autoridade de certificação raiz.

      Execute estes comandos para gerar a chave:

      • pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/ca-key.pem

      Depois disso, podemos seguir em frente para criar nossa autoridade de certificação root usando a chave que acabamos de gerar para assinar o certificado root:

      • pki --self --ca --lifetime 3650 --in ~/pki/private/ca-key.pem
      • --type rsa --dn "CN=VPN root CA" --outform pem > ~/pki/cacerts/ca-cert.pem

      O sinalizador --lifetime 3650 é usado para garantir que o certificado root da autoridade de certificação seja válido por 10 anos. O certificado root para uma autoridade não muda de maneira típica, uma vez que ele teria que ser redistribuído para todos os servidores e clientes que dependem dele. Sendo assim, 10 anos é um valor de validade padrão seguro.

      É possível alterar o valor de nome diferenciado (DN) para outra coisa se você preferir. O nome comum (campo CN) aqui é apenas o indicador, então ele não precisa corresponder a nada em sua infraestrutura.

      Agora que temos nossa autoridade de certificação root em funcionamento, podemos criar um certificado que o servidor VPN usará.

      Passo 3 — Gerando um certificado para o Servidor VPN

      Agora vamos criar um certificado e chave para o servidor VPN. Este certificado permitirá que o cliente verifique a autenticidade do servidor utilizando o certificado CA que acabamos de gerar.

      Primeiramente, crie uma chave privada para o servidor VPN com o seguinte comando:

      • pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/server-key.pem

      Agora, crie e assine o certificado do servidor VPN com a chave de autoridade de certificação que você criou no passo anterior. Execute o comando a seguir, mas altere o campo Common Name (CN) e o campo Subject Alternate Name (SAN) para o nome DNS do seu servidor VPN ou endereço IP:

      • pki --pub --in ~/pki/private/server-key.pem --type rsa
      • | pki --issue --lifetime 1825
      • --cacert ~/pki/cacerts/ca-cert.pem
      • --cakey ~/pki/private/ca-key.pem
      • --dn "CN=server_domain_or_IP" --san server_domain_or_IP
      • --flag serverAuth --flag ikeIntermediate --outform pem
      • > ~/pki/certs/server-cert.pem

      Nota: se estiver usando um endereço IP em vez de um nome DNS, será necessário especificar várias entradas --san. A linha no bloco de comando anterior onde você especifica o nome diferenciado (--dn ...) precisará ser modificada com a entrada extra, assim como na seguinte linha extraída:

      --dn "CN=IP address --san @IP_address --san IP_address 
      

      A razão pela qual essa entrada extra --san @IP_address é necessária é que alguns clientes irão verificar se o certificado TLS possui tanto uma entrada DNS quanto uma entrada de endereço IP para um servidor ao verificar sua identidade.

      A opção --flag serverAuth é usada para indicar que o certificado será usado explicitamente para a autenticação de servidor, antes de o túnel criptografado ser estabelecido. A opção --flag ikeIntermediate é usada para dar suporte a clientes macOS mais antigos.

      Agora que geramos todos os arquivos TLS/SSL que o StrongSwan necessita, podemos mover os arquivos para seus lugares no diretório /etc/ipsec.d digitando:

      • sudo cp -r ~/pki/* /etc/ipsec.d/

      Neste passo, criamos um par de certificados que será usado para proteger as comunicações entre o cliente e o servidor. Também assinamos os certificados com a chave CA, para que o cliente possa verificar a autenticidade do servidor VPN utilizando o certificado CA. Com todos esses certificados prontos, vamos seguir para a configuração do software.

      Passo 4 — Configurando o StrongSwan

      O StrongSwan tem um arquivo de configuração padrão com alguns exemplos, mas a maior parte da configuração terá que ser feita por nossa conta. Vamos fazer um backup do arquivo para referência antes de começar do zero:

      • sudo mv /etc/ipsec.conf{,.original}

      Crie e abra um novo arquivo de configuração em branco usando seu editor de texto preferido. Aqui, usaremos o nano:

      • sudo nano /etc/ipsec.conf

      Nota: conforme for trabalhando nessa seção para configurar a porção do servidor da sua VPN, você encontrará configurações que se referem a lados left (esquerdo) e right (direito) de uma conexão. Quando se trabalha com VPNs IPSec, o lado esquerdo por convenção refere-se ao sistema local que você está configurando, neste caso o servidor. As diretivas laterais direita nessas configurações se referirão a clientes remotos, como telefones e outros computadores.

      Quando você for configurar clientes mais adiante neste tutorial, os arquivos de configuração do cliente se referirão a si mesmos usando várias diretivas left, e o servidor será referido usando a terminologia right.

      Primeiramente, vamos dizer ao StrongSwan para registrar os status do daemon para correção de erros e permitir conexões duplicadas. Adicione estas linhas ao arquivo:

      /etc/ipsec.conf

      config setup
          charondebug="ike 1, knl 1, cfg 0"
          uniqueids=no
      

      Depois, vamos criar uma seção de configuração para nossa VPN. Também vamos dizer ao StrongSwan para criar os Túneis da VPN com IKEv2 e para carregar automaticamente essa seção de configuração quando for iniciado. Adicione as linhas a seguir ao arquivo:

      /etc/ipsec.conf

      . . .
      conn ikev2-vpn
          auto=add
          compress=no
          type=tunnel
          keyexchange=ikev2
          fragmentation=yes
          forceencaps=yes
      

      Também vamos configurar a detecção de ponto morto para limpar conexões pendentes, caso o cliente se desconecte de maneira inesperada. Adicione estas linhas:

      /etc/ipsec.conf

      . . .
      conn ikev2-vpn
          . . .
          dpdaction=clear
          dpddelay=300s
          rekey=no
      

      Em seguida, vamos configurar os parâmetros IPSec do lado “esquerdo” do servidor. Cada um dos seguintes parâmetros garante que o servidor esteja configurado para aceitar conexões de clientes e se identificar corretamente. Você irá adicionar cada uma dessas configurações ao arquivo /etc/ipsec.conf assim que estiver familiarizado com o que eles são e por que são usados:

      • left=%any O valor %any garante que o servidor usará a interface de rede onde ele recebe conexões de entrada para posterior comunicação com clientes. Por exemplo, se você estiver conectando um cliente por uma rede privada, o servidor usará o endereço IP privado onde ele recebe tráfego para o resto da conexão.
      • leftid=@server_domain_or_IP Essa opção controla o nome que o servidor apresenta aos clientes. Quando combinada com a próxima opção leftcert, a opção leftid garante que o nome configurado do servidor e o nome diferenciado (DN) que está contido no certificado público correspondam.
      • leftcert=server-cert.pem Essa opção indica o caminho para o certificado público do servidor que você configurou no Passo 3. Sem ele, o servidor não será capaz de autenticar-se com clientes ou terminar de negociar a configuração do IKEv2.
      • leftsendcert=always O valor always (sempre) garante que qualquer cliente que se conecte ao servidor receba sempre uma cópia do certificado público do servidor como parte da configuração de conexão inicial.
      • leftsubnet=0.0.0.0/0 A última opção do lado “esquerdo” que você adicionará informa aos clientes sobre as sub-redes que são alcançáveis por trás do servidor. Neste caso, 0.0.0.0/0 é usado para representar todo o conjunto de endereços IPv4, o que significa que o servidor irá pedir aos clientes para enviar todo o seu tráfego pela VPN por padrão.

      Agora que você está familiarizado com cada uma das opções relevantes do lado “esquerdo”, adicione todas elas ao arquivo desta forma:

      /etc/ipsec.conf

      . . .
      conn ikev2-vpn
          . . .
          left=%any
          leftid=@server_domain_or_IP
          leftcert=server-cert.pem
          leftsendcert=always
          leftsubnet=0.0.0.0/0
      

      Nota: quando configurar o ID do servidor (leftid), inclua apenas o caractere @ se o seu servidor de VPN for identificado por um nome de domínio:

      /etc/ipsec.conf

          . . .    leftid=@vpn.example.com
          . . .
      

      Se o servidor for identificado pelo seu endereço IP, apenas coloque o endereço IP em:

      /etc/ipsec.conf

          . . .
          leftid=your_server_ip
          . . .
      

      Em seguida, podemos configurar os parâmetros IPSec do lado “direito” do cliente. Cada um dos parâmetros a seguir informa ao servidor como aceitar conexões de clientes, como os clientes devem se autenticar no servidor e os intervalos de endereços IP privados e servidores DNS que os clientes usarão. Adicione cada uma dessas configurações ao arquivo /etc/ipsec.conf assim que estiver familiarizado com o que elas são e por que são usadas:

      • right=%any A opção %any para o lado right da conexão instrui o servidor a aceitar conexões recebidas de qualquer cliente remoto.
      • rightid=%any Essa opção garante que o servidor não irá rejeitar conexões de clientes que fornecem uma identidade antes que o túnel criptografado seja estabelecido.
      • rightauth=eap-mschapv2 Essa opção configura o método de autenticação que os clientes usarão para se autenticar no servidor. O eap-mschapv2 é usado aqui para garantir ampla compatibilidade para suportar clientes como Windows, macOS e dispositivos Android.
      • rightsourceip=10.10.10.0/24 Essa opção instrui o servidor a atribuir endereços IP privados aos clientes a partir da pool de IPs 10.10.10.0/24 especificada.
      • rightdns=8.8.8.8,8.8.4.4 Esses endereços IP são resolvedores de DNS públicos do Google. Eles podem ser alterados para outros resolvedores públicos, resolvedores do servidor VPN ou qualquer outro resolvedor que os clientes consigam acessar.
      • rightsendcert=never Essa opção instrui o servidor que os clientes não precisam enviar por conta própria um certificado para se autenticar.

      Agora que você está familiarizado com as opções do lado “direito” necessárias para a VPN, adicione as seguintes linhas ao /etc/ipsec.conf:

      /etc/ipsec.conf

      . . .
      conn ikev2-vpn
          . . .
          right=%any
          rightid=%any
          rightauth=eap-mschapv2
          rightsourceip=10.10.10.0/24
          rightdns=8.8.8.8,8.8.4.4
          rightsendcert=never
      

      Agora, vamos dizer ao StrongSwan para pedir ao cliente as credenciais de usuário ao se conectarem:

      /etc/ipsec.conf

      . . .
      conn ikev2-vpn
          . . .
          eap_identity=%identity
      

      Por fim, adicione as seguintes linhas para dar suporte a clientes Linux, Windows, macOS, iOS e Android. Estas linhas especificam os vários algoritmos de intercâmbio de chave, hash, autenticação e criptografia (comumente conhecidos como Pacotes de codificação) que o StrongSwan permitirá que diferentes clientes usem:

      /etc/ipsec.conf

      . . .
      conn ikev2-vpn
          . . .
          ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
          esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!
      

      Cada pacote de codificação suportado é separado dos outros por uma vírgula. Por exemplo, chacha20poly1305-sha512-curve25519-prfsha512 é um pacote, e aes256gcm16-sha384-prfsha384-ecp384 é outro. Os pacotes de codificação listados aqui são selecionados para garantir a mais ampla compatibilidade entre os clientes Windows, macOS, iOS, Android e Linux.

      O arquivo de configuração completo deve se parecer com este:

      /etc/ipsec.conf

      config setup
          charondebug="ike 1, knl 1, cfg 0"
          uniqueids=no
      
      conn ikev2-vpn
          auto=add
          compress=no
          type=tunnel
          keyexchange=ikev2
          fragmentation=yes
          forceencaps=yes
          dpdaction=clear
          dpddelay=300s
          rekey=no
          left=%any
          leftid=@server_domain_or_IP
          leftcert=server-cert.pem
          leftsendcert=always
          leftsubnet=0.0.0.0/0
          right=%any
          rightid=%any
          rightauth=eap-mschapv2
          rightsourceip=10.10.10.0/24
          rightdns=8.8.8.8,8.8.4.4
          rightsendcert=never
          eap_identity=%identity
          ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
          esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!
      

      Salve e feche o arquivo assim que verificar se adicionou cada linha corretamente. Se usou o nano, faça isso pressionando as teclas CTRL+X, Y e depois ENTER.

      Agora que configuramos os parâmetros VPN, vamos seguir em frente para criar uma conta que permita que nossos usuários se conectem ao servidor.

      Passo 5 — Configurando a autenticação da VPN

      Nosso servidor VPN agora está configurado para aceitar conexões de clientes, mas ainda não temos nenhuma credencial configurada. Vamos ter que configurar algumas coisas em um arquivo de configuração especial chamado ipsec.secrets:

      • Precisamos dizer ao StrongSwan onde encontrar a chave privada do certificado do nosso servidor, de modo que o servidor consiga autenticar os clientes.
      • Também precisamos configurar uma lista de usuários que serão autorizados a se conectar à VPN.

      Vamos abrir o arquivo secrets para edição:

      • sudo nano /etc/ipsec.secrets

      Primeiramente, vamos dizer ao StrongSwan onde encontrar nossa chave privada:

      /etc/ipsec.secrets

      : RSA "server-key.pem"
      

      Então, vamos definir as credenciais do usuário. Você pode inventar qualquer nome de usuário ou senha que você queira:

      /etc/ipsec.secrets

      your_username : EAP "your_password"
      

      Salve e feche o arquivo. Agora que terminamos de trabalhar com os parâmetros VPN, vamos reiniciar o serviço VPN para que nossas configurações seja aplicada:

      • sudo systemctl restart strongswan-starter

      Agora que o servidor VPN foi configurado completamente com ambas as opções de servidor e credenciais de usuário, é hora de seguir em frente para configurar a parte mais importante: o firewall.

      Passo 6 — Configurando o encaminhamento de IP do Firewall e do Kernel

      Com a configuração do StrongSwan concluída, precisamos configurar o firewall para permitir o tráfego VPN e encaminhá-lo.

      Se você seguiu o tutorial pré-requisito de configuração inicial do servidor, deve ter um firewall UFW habilitado. Se ainda não tiver o UFW configurado, comece adicionando uma regra para permitir conexões SSH através do firewall. Isso é feito para que sua sessão atual não feche quando o UFW for habilitado:

      Em seguida, habilite o firewall digitando:

      Após isso, adicione uma regra para permitir o tráfego UDP nas portas IPSec padrão, 500 e 4500:

      • sudo ufw allow 500,4500/udp

      Em seguida, vamos abrir um dos arquivos de configuração do UFW para adicionar algumas políticas de baixo nível para roteamento e encaminhamento de pacotes IPSec. No entanto, antes que possamos fazer isso, precisamos encontrar qual interface de rede em nosso servidor é usada para o acesso à internet. Encontre essa interface consultando o dispositivo associado à rota padrão:

      Sua interface pública deve vir após a palavra “dev”. Por exemplo, este resultado mostra a interface chamada eth0, que está destacada no exemplo a seguir:

      Output

      default via your_server_ip dev eth0 proto static

      Quando tiver sua interface de rede pública, abra o arquivo /etc/ufw/before.rules no seu editor de texto. As regras nesse arquivo são adicionadas ao firewall antes do resto das regras habituais de entrada e saída. Elas são usadas para configurar a conversão de endereços de rede (NAT) para que o servidor possa encaminhar corretamente as conexões de entrada e saída para clientes e a internet.

      • sudo nano /etc/ufw/before.rules

      Perto do topo do arquivo (antes da linha *filter), adicione o seguinte bloco de configuração. Altere cada instância de eth0 na configuração acima para corresponder ao nome de interface que você encontrou com ip route. As linhas *nat criam regras para que o firewall possa rotear e manipular corretamente o tráfego entre os clientes VPN e a internet. A linha *mangle ajusta o tamanho máximo do segmento de pacotes para evitar possíveis problemas com certos clientes VPN:

      /etc/ufw/before.rules

      *nat
      -A POSTROUTING -s 10.10.10.0/24 -o eth0 -m policy --pol ipsec --dir out -j ACCEPT
      -A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE
      COMMIT
      
      *mangle
      -A FORWARD --match policy --pol ipsec --dir in -s 10.10.10.0/24 -o eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
      COMMIT
      
      *filter
      :ufw-before-input - [0:0]
      :ufw-before-output - [0:0]
      :ufw-before-forward - [0:0]
      :ufw-not-local - [0:0]
      . . .
      

      Em seguida, após as linhas de definição *filter e de cadeia, adicione mais um bloco de configuração:

      /etc/ufw/before.rules

      . . .
      *filter
      :ufw-before-input - [0:0]
      :ufw-before-output - [0:0]
      :ufw-before-forward - [0:0]
      :ufw-not-local - [0:0]
      
      -A ufw-before-forward --match policy --pol ipsec --dir in --proto esp -s 10.10.10.0/24 -j ACCEPT
      -A ufw-before-forward --match policy --pol ipsec --dir out --proto esp -d 10.10.10.0/24 -j ACCEPT
      

      Essas linhas dizem ao firewall para encaminhar o tráfego ESP (Encapsulating Security Payload) para que os clientes VPN possam se conectar. O ESP proporciona segurança adicional para nossos pacotes VPN, enquanto eles estiverem passando por redes não confiáveis.

      Quando tiver terminado, salve e feche o arquivo após ter verificado se adicionou cada linha corretamente. Se usou o nano, faça isso pressionando as teclas CTRL+X, Y e depois ENTER.

      Antes de reiniciarmos o firewall, vamos alterar alguns parâmetros do kernel de rede para permitir o roteamento de uma interface para outra. O arquivo que controla essas configurações é chamado /etc/ufw/sysctl.conf. Precisaremos configurar algumas coisas no arquivo.

      Primeiro, o encaminhamento de pacotes IPv4 precisa ser ligado para que o tráfego possa se mover entre a VPN e as interfaces de rede voltadas ao público no servidor. Em seguida, vamos desabilitar a Path MTU Discovery (PMTUD), ou Descoberta da unidade máxima de transmissão do caminho, para evitar problemas de fragmentação de pacotes. Por fim, não vamos aceitar redirecionamentos ICMP nem enviar redirecionamentos ICMP para evitar ataques man-in-the-middle.

      Abra o arquivo de configuração do kernel do UFW usando o nano ou seu editor de texto preferido:

      • sudo nano /etc/ufw/sysctl.conf

      Agora, adicione a definição net/ipv4/ip_forward=1 no final do arquivo para habilitar o encaminhamento de pacotes entre interfaces:

      /etc/ufw/sysctl.conf

      . . .
      net/ipv4/ip_forward=1
      

      Depois disso, bloqueie o envio e recebimento de pacotes de redirecionamento ICMP adicionando as seguintes linhas no final do arquivo:

      /etc/ufw/sysctl.conf

      . . .
      net/ipv4/conf/all/accept_redirects=0
      net/ipv4/conf/all/send_redirects=0
      

      Por fim, desative a descoberta MTU do caminho adicionando esta linha no fim do arquivo:

      /etc/ufw/sysctl.conf

      . . .
      net/ipv4/ip_no_pmtu_disc=1
      

      Salve o arquivo quando terminar. Agora, podemos habilitar todas as nossas alterações desativando e reativando o firewall, já que o UFW aplica essas configurações sempre que ele é reiniciado:

      • sudo ufw disable
      • sudo ufw enable

      Será solicitado que você confirme o processo. Digite Y para habilitar o UFW novamente com as novas configurações.

      Passo 7 — Testando a conexão VPN no Windows, macOS, Ubuntu, iOS e Android

      Agora que você tem tudo configurado, é hora do teste. Primeiro, você precisará copiar o certificado CA que você criou e instalá-lo no(s) seu(s) dispositivo(s) cliente que serão conectados à VPN. A maneira mais simples de fazer isso é fazendo login no seu servidor e gerando o conteúdo do arquivo de certificação:

      • cat /etc/ipsec.d/cacerts/ca-cert.pem

      Você verá um resultado similar a este:

      Output

      -----BEGIN CERTIFICATE----- MIIFNDCCAxygAwIBAgIIHCsidG5mXzgwDQYJKoZIhvcNAQEMBQAwODELMAkGA1UE . . . H2YUdz8XNHrJHvMQKWFpi0rlEcMs+MSXPFWE3Q7UbaZJ/h8wpSldSUbQRUlphExJ dJ4PX+MUJO/vjG1/ie6Kh25xbBAc3qNq8siiJZDwrg6vjEK7eiZ1rA== -----END CERTIFICATE-----

      Copie este resultado para o seu computador, incluindo as linhas -----BEGIN CERTIFICATE----- e -----ENDCERTIFICATE----- e salve-o em um arquivo com um nome reconhecível, como ca-cert.pem. Certifique-se de que o arquivo que você criar tenha a extensão .pem.

      De forma alternativa, utilize o SFTP para transferir o arquivo para seu computador.

      Assim que tiver o arquivo ca-cert.pem baixado no seu computador, você pode configurar a conexão com a VPN.

      Conectando-se com o Windows

      Existem várias maneiras de importar o certificado root e configurar o Windows para se conectar a uma VPN. O primeiro método usa ferramentas gráficas para cada passo. O segundo método usa comandos do PowerShell, que podem ser controlados e modificados para se adequar à configuração de sua VPN.

      Nota: essas instruções foram testadas em instalações do Windows 10 executando as versões 1903 e 1909.

      Configurando o Windows com ferramentas gráficas

      Primeiramente, importe o certificado raiz, seguindo estes passos:

      1. Pressione WINDOWS+R para trazer a janela Executar e digite mmc.exe“**** para iniciar o Console de Gerenciamento do Windows.
      2. Do menu Arquivo, navegue até Adicionar ou Remover Snap-in, selecione Certificados da lista de snap-ins disponíveis, e clique em Adicionar.
      3. Queremos que a VPN funcione com qualquer usuário, logo selecione Conta de Computador e clique em Avançar.
      4. Estamos configurando coisas no computador local, então selecione Computador Local e, depois, clique em Concluir.
      5. Sob o nó Raiz do Console, expanda a entrada Certificados (Computador Local), expanda Autoridades de Certificação de Raíz Confiáveis** e, em seguida, selecione a entrada Certificados: de Certificados Exibição
      6. A partir do menu Ação, selecione Todas as Tarefas e clique Importar para exibir o Assistente de Importação de Certificados. Clique em Avançar para passar da introdução.
      7. Na tela Arquivo a ser importado, pressione o botão Pesquisar. Certifique-se de alterar o tipo de arquivo de “X.509 Certificate (.cer;.crt)” para “Todos os arquivos (. )”, e selecione o arquivo ca-cert.pem que você salvou. Então, clique em Avançar.
      8. Certifique-se de que Armazenagem de Certificados foi configurada em Autoridades Confiáveis para Certificação Raiz, e clique em Avançar.
      9. Clique em Concluir para importar o certificado.

      Então, configure a VPN com estes passos:

      1. Abra o Painel de Controle, navegue até o Centro de Redes e Compartilhamento.
      2. Clique em Configurar uma nova conexão ou rede, depois selecione Conectar a um local de trabalho.
      3. Selecione Usar minha conexão com a Internet (VPN).
      4. Digite os detalhes do servidor VPN. Digite o nome de domínio ou endereço IP do servidor no campo Endereço de internet, depois, preencha o Nome do destino com algo que descreva sua conexão VPN. Então,clique em Feito.

      Configurando o Windows usando o PowerShell

      Para importar o certificado de CA root usando o PowerShell, abra primeiro um prompt PowerShell com privilégios de administrador. Para fazer isso, clique com o botão direito no ícone do menu Start e selecione o Windows PowerShell (Admin). Você também pode abrir um prompt de comando como administrador e digitar powershell.

      Em seguida, importaremos o certificado usando o cmdlet Import-Certificate do PowerShell. No comando a seguir, o primeiro argumento -CertStoreLocation irá garantir que o certificado seja importado no armazenamento Autoridades de Certificação Raiz Confiáveis de modo que todos os programas e usuários consigam verificar o certificado do servidor VPN. O argumento -FilePath deve apontar para a localização onde você copiou o certificado. No exemplo a seguir, o caminho é C:UserssammyDocumentsca-cert.pem. Certifique-se de editar o comando para que corresponda à localização que você usou.

      • Import-Certificate `
      • -CertStoreLocation cert:LocalMachineRoot `
      • -FilePath C:userssammyDocumentsca-cert.pem

      O comando gerará algo parecido com o seguinte:

      Output

      PSParentPath: Microsoft.PowerShell.SecurityCertificate::LocalMachineRoot Thumbprint Subject ---------- ------- DB00813B4087E9367861E8463A60CEA0ADC5F002 CN=VPN root CA

      Agora, para configurar a VPN usando o PowerShell, execute o comando a seguir. Coloque o nome DNS ou endereço IP do seu servidor na linha -ServerAddress. Os diversos sinalizadores garantirão que o Windows seja configurado corretamente com os parâmetros de segurança apropriados que correspondam às opções que você definiu em /etc/ipsec.conf.

      • Add-VpnConnection -Name "VPN Connection" `
      • -ServerAddress "server_domain_or_IP" `
      • -TunnelType "IKEv2" `
      • -AuthenticationMethod "EAP" `
      • -EncryptionLevel "Maximum" `
      • -RememberCredential `

      Se o comando for bem sucedido, não haverá nenhum resultado. Para confirmar que a VPN está configurada corretamente, use o cmdlet Get-VPNConnection:

      • Get-VpnConnection -Name "VPN Connection"

      Você receberá um resultado como o seguinte:

      Output

      Name : VPN Connection ServerAddress : your_server_ip AllUserConnection : False Guid : {B055A1AB-175C-4028-B4A8-D34309A2B20E} TunnelType : Ikev2 AuthenticationMethod : {Eap} EncryptionLevel : Maximum L2tpIPsecAuth : UseWinlogonCredential : False EapConfigXmlStream : #document ConnectionStatus : Disconnected RememberCredential : True SplitTunneling : False DnsSuffix : IdleDisconnectSeconds : 0

      Por padrão, o Windows escolhe algoritmos mais antigos e mais lentos. Execute o cmdlet Set-VpnConnectionIPsecConfiguration para atualizar os parâmetros de criptografia que o Windows usará para a troca de chaves do IKEv2 e para criptografar pacotes:

      • Set-VpnConnectionIPsecConfiguration -Name "VPN Connection" `
      • -AuthenticationTransformConstants GCMAES256 `
      • -CipherTransformConstants GCMAES256 `
      • -DHGroup ECP384 `
      • -IntegrityCheckMethod SHA384 `
      • -PfsGroup ECP384 `
      • -EncryptionMethod GCMAES256

      Nota: se você quiser excluir a conexão VPN e reconfigurá-la com opções diferentes, pode executar o cmdlet Remove-VpnConnection.

      • Remove-VpnConnection -Name "VPN Connection" -Force

      O sinalizador -Force irá ignorar o prompt que pediria que você confirmasse a remoção. Você deve estar desconectado da VPN se for tentar removê-la usando esse comando.

      Conectando-se à VPN

      Depois de ter importado o certificado e configurado a VPN usando qualquer um dos dois métodos, sua nova conexão VPN será visível na lista de redes. Selecione a VPN e clique em Conectar. Você será solicitado a colocar seu nome de usuário e senha. Digite-os, clique em OK e você estará conectado.

      Conectando-se com o macOS

      Siga estes passos para importar o certificado:

      1. Clique duas vezes no arquivo de certificados. Acesso ao Chaveiro irá aparecer com uma janela que diz “Acesso ao Chaveiro está tentando modificar o chaveiro do sistema. Digite sua senha para permitir.”
      2. Digite sua senha, então clique em Modificar o Chaveiro
      3. Clique duas vezes no certificado VPN recém-importado. Isso traz uma pequena janela de propriedades onde você pode especificar os níveis de confiança. Defina Segurança IP (IPSec) para Sempre Confiar e você será solicitado a inserir sua senha novamente. Esta configuração é salva automaticamente após colocar a senha.

      Agora que o certificado foi importado e é confiável, configure a conexão VPN com estes passos:

      1. Vá até as Preferências do Sistema e escolha Rede.
      2. Clique no pequeno botão “mais” no canto inferior esquerdo da lista de redes.
      3. Na notificação que aparece, Defina a Interface como VPN, defina o Tipo** de VPN** como IKEv2 e nomeie a conexão.
      4. No campo Servidor e ID Remoto, digite o nome do domínio ou endereço IP do servidor. Deixe o ID Local em branco.
      5. Clique em Configurações de Autenticação, selecione Nome de usuário, e digite seu nome de usuário e senha que você configurou para seu usuário VPN. Então clique em OK.

      Por fim, clique em Conectar para se conectar à VPN. Agora, você deve estar conectado à VPN.

      Conectando-se com o Ubuntu

      Para se conectar a partir de uma máquina com Ubuntu, você pode configurar e gerenciar o StrongSwan como um serviço ou usar um comando único cada vez que desejar se conectar. São fornecidas instruções para ambos.

      Gerenciando o StrongSwan como um Serviço

      Para gerenciar o StrongSwan como um serviço, você precisará executar os seguintes passos de configuração.

      Primeiro, atualize seu cache de pacotes local usando o apt

      Em seguida, instale o StrongSwan e os plug-ins necessários para a autenticação:

      • sudo apt install strongswan libcharon-extra-plugins

      Agora, você precisará de uma cópia do certificado CA no diretório /etc/ipsec.d/cacerts para que seu cliente possa verificar a identidade do servidor. Execute o comando a seguir para criar uma cópia do arquivo ca-cert.pem nesse local:

      • sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts

      Para garantir que a VPN seja executada apenas sob demanda, use o systemctl para impedir que o StrongSwan seja executado automaticamente:

      • sudo systemctl disable --now strongswan-starter

      Em seguida, configure o nome de usuário e a senha que você usará para se autenticar no servidor VPN. Edite /etc/ipsec.secrets usando o nano ou seu editor preferido:

      • sudo nano /etc/ipsec.conf

      Adicione a linha a seguir, editando os valores de nome de usuário e senha destacados para que correspondam àqueles que você configurou no servidor:

      /etc/ipsec.conf

      your_username : EAP "your_password"
      

      Por fim, edite o arquivo /etc/ipsec.conf para configurar seu cliente de forma que corresponda à configuração do servidor:

      /etc/ipsec.conf

      config setup
      
      conn ikev2-rw
          right=server_domain_or_IP
          # This should match the `leftid` value on your server's configuration
          rightid=server_domain_or_IP
          rightsubnet=0.0.0.0/0
          rightauth=pubkey
          leftsourceip=%config
          leftid=username
          leftauth=eap-mschapv2
          eap_identity=%identity
          auto=start
      

      Para se conectar ao VPN, digite:

      • sudo systemctl start strongswan-starter

      Para se desconectar novamente, digite:

      • sudo systemctl stop strongswan-starter

      Usando o cliente charon-cmd para conexões únicas

      Para gerenciar o StrongSwan como um serviço, você precisará executar os seguintes passos de configuração.

      Primeiro, atualize seu cache de pacotes local usando o apt

      Em seguida, instale o StrongSwan e os plug-ins necessários para a autenticação:

      • sudo apt install strongswan libcharon-extra-plugins

      Agora, você precisará de uma cópia do certificado CA no diretório /etc/ipsec.d/cacerts para que seu cliente possa verificar a identidade do servidor. Execute o comando a seguir para criar uma cópia do arquivo ca-cert.pem nesse local:

      • sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts

      Neste ponto, você pode se conectar ao servidor VPN com o charon-cmd usando o certificado CA do servidor, o endereço IP do servidor VPN e o nome de usuário que você configurou.

      Execute o comando a seguir sempre que quiser se conectar à VPN:

      • sudo charon-cmd --cert ca-cert.pem --host vpn_domain_or_IP --identity your_username

      Quando solicitado, forneça a senha do usuário VPN e você será conectado à VPN. Para desconectar-se, pressione CTRL+C no terminal e espere que a conexão feche.

      Conectando-se com o iOS

      Para configurar a conexão VPN em um dispositivo iOS, siga estes passos:

      1. Envie para si mesmo um e-mail com o certificado root anexado.
      2. Abra o e-mail no seu dispositivo iOS e toque no arquivo do certificado anexado; depois, toque em Instalar e digite a sua senha. Assim que instalar, toque em Feito.
      3. Vá até Configurações, Geral, VPN e toque em Adicionar** Configuração de VPN. Isso irá trazer a tela de configuração de conexão VPN.
      4. Toque em Tipo e selecione IKEv2.
      5. No campo Descrição, escreva um nome curto para a conexão VPN. Isso pode ser o que você quiser.
      6. No campo Servidor e ID Remoto,**** digite o nome do domínio ou endereço IP do servidor. O campo ID Local pode ser deixado em branco.
      7. Digite seu nome de usuário e senha na seção Autenticação e, em seguida toque em**** Feito.
      8. Selecione a conexão VPN que você acabou de criar, toque no botão no alto da página e você estará conectado.

      Conectando-se com o Android

      Siga estes passos para importar o certificado:

      1. Envie um e-mail para si mesmo com o certificado CA anexado. Salve o certificado CA na sua pasta de downloads.
      2. Faça download do StrongSwan VPN client da Play Store.
      3. Abra o aplicativo. Toque no ícone “more” () no canto superior direito e selecione CA certificates.
      4. Toque no ícone “more”(), no canto superior direito novamente. Selecione Importar certificado.
      5. Navegue até o arquivo do certificado CA, em sua pasta de downloads e selecione-o para importá-lo para o aplicativo.

      Agora que o certificado foi importado no aplicativo StrongSwan, você pode configurar a conexão VPN com esses passos:

      1. No aplicativo, clique em ADICIONAR PERFIL VPN, no topo.
      2. Preencha o Servidor com o nome de domínio ou endereço IP público do seu servidor VPN.
      3. Certifique-se de que IKEv2 EAP (Usuário/Senha) está selecionado como o Tipo VPN.
      4. Preencha o Nome de usuário e Senha com as credenciais que você definiu no servidor.
      5. Desmarque Selecionar automaticamente na seção certificado CA e clique em Selecionar o certificado CA.
      6. Toque na aba IMPORTADO, no alto da tela e escolha o CA que você importou (ele será chamado “VPN raiz CA” se você não tiver mudado o “DN” anteriormente).
      7. Se você quiser, preencha o Nome de perfil (opcional) com um nome mais descritivo.

      Quando quiser se conectar à VPN, clique no perfil que você acabou de criar no aplicativo StrongSwan.

      Solucionando problemas de conexão

      Se você não conseguir importar o certificado, certifique-se de que o arquivo tenha a extensão .pem, e não .pem.txt“.

      Se você não conseguir conectar-se à VPN, verifique o nome do servidor ou endereço IP que você usou. O nome de domínio ou endereço IP do servidor deve corresponder ao que você havia configurado como o nome comum (CN) ao criar o certificado. Se eles não corresponderem, a conexão VPN não funcionará. Por exemplo, se for configurar um certificado com o CN de vpn.example.com, você deve usar vpn.example.com ao digitar os detalhes do servidor VPN. Verifique novamente o comando que você usou para gerar o certificado e os valores que você usou ao criar sua conexão VPN.

      Por fim, verifique novamente a configuração da VPN para garantir que o valor leftid tenha sido configurado com o símbolo @ se você estiver usando um nome de domínio:

      /etc/ipsec.conf

          leftid=@vpn.example.com
      

      E, caso esteja usando um endereço IP, certifique-se de que o símbolo @ seja omitido. Além disso, certifique-se de que ao gerar o arquivo server-cert.pem você tenha incluído ambas os sinalizadores --san @IP_address e --san IP_address.

      Conclusão

      Neste tutorial, você construiu um servidor VPN que usa o protocolo IKEv2. Você aprendeu sobre as diretrizes que controlam os lados left e right de uma conexão tanto no servidor quanto nos clientes. Você também configurou um cliente Windows, macOS, iOS, Android ou Linux para se conectar à VPN.

      Para adicionar ou remover usuários, volte para o Passo 5 novamente. Cada linha em /etc/ipsec.secrets é para um usuário. Dessa forma, adicionar,remover usuários ou alterar senhas depende apenas da edição do arquivo.

      Agora, você pode ter certeza de que suas atividades online permanecerão seguras onde quer que você vá e com qualquer dispositivo que use para acessar a internet.



      Source link