Saltar al contenido

Cómo configurar un servidor VPN IKEv2 con strongSwan en Ubuntu 18.04

marzo 4, 2020

 

Introducción

Una red privada virtual o VPN, que permite cifrar el tráfico de forma segura a medida que viaja a través de redes no seguras, como los que en la cafetería, una conferencia o un aeropuerto.

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

En este tutorial, configurar un servidor VPN utilizando IKEv2 strongSwan en un servidor de Ubuntu 18.04 y conectarse a ella desde Windows, MacOS, Ubuntu, iOS y Android clientes.

Requisitos previos

Para completar este tutorial, necesitará:

  • Una Ubuntu 18.04 servidor configurado siguiendo la guía de configuración inicial del servidor de Ubuntu 18.04, incluyendo un usuario no root sudo y un firewall.

Paso 1 – Instalación de strongSwan

En primer lugar, vamos a instalar strongSwan, un código abierto IPSec demonio que lo configuraremos como nuestro servidor VPN. También vamos a instalar el componente de infraestructura de clave pública para que podamos crear una autoridad de certificación para proporcionar credenciales para nuestra infraestructura.

actualización de la memoria caché local de paquetes e instalar el software escribiendo:

sudo apt update
sudo apt install strongswan strongswan-pki

  • sudo apt update sudo apt
  • instalar strongSwan strongSwan-PKI

Ahora que todo está instalado, vamos a pasar a la creación de nuestros certificados.

Paso 2 – Creación de un servidor de autoridad de certificación

Un IKEv2 requiere un certificado para identificarse ante los clientes. Para ayudarnos a crear el certificado necesario, el paquete strongSwan-PKI viene con una utilidad para generar una autoridad de certificación y los certificados de servidor. Para empezar, vamos a crear algunos directorios para almacenar todos los activos que estaremos trabajando. La estructura de directorios coincide con algunos de los directorios en /etc/ipsec.d, donde el tiempo se trasladaría a todos los artículos que creamos. Vamos a trabarse abajo de los permisos para que nuestros archivos privados no pueden ser vistos por otros usuarios:

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

  • mkdir -p ~ / pki / {cacerts, CERT, privado}
  • chmod 700 ~ / PKI

Ahora que tenemos una estructura de directorios para almacenar todo, podemos generar una clave raíz. Esta será una clave RSA de 4096 bits que se utiliza para firmar nuestra autoridad de certificación raíz.

ejecutar estos comandos para generar la clave:

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

  • IPSec PKI –gen –type RSA –size 4096 –outform pem > ~ / pki / / privada de la CA-key.pem

Ahora que tenemos una clave, podemos pasar a la creación de nuestra entidad emisora ​​de certificados raíz, utilizando la clave para firmar el certificado raíz:

ipsec 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

  • IPSec PKI –self –ca –lifetime 3650 –en ~ / pki / / CA-privada key.pem \
  • –type RSA –dn «CN = VPN CA raíz» –outform pem > ~ / pki / cacerts / ca-cert.pem

Se puede cambiar el nombre distinguido (DN) valores a algo más que si le gustaría. El nombre común aquí es sólo el indicador, por lo que no tiene que coincidir con cualquier cosa en su infraestructura.

Ahora que tenemos nuestra entidad emisora ​​de certificados raíz en funcionamiento, podemos crear un certificado que el servidor VPN utilizará.

Paso 3 – Generar un certificado para el servidor VPN

Ahora crearemos un certificado y una clave para el servidor VPN. Este certificado permitirá al cliente para verificar la autenticidad del servidor utilizando el certificado de CA que acabamos de generar.

En primer lugar, crear una clave privada para el servidor VPN con el siguiente comando:

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

  • IPSec PKI –gen –type RSA –size 4096 –outform pem > ~ / pki / / privada del servidor-key.pem

Ahora, crear y firmar el certificado del servidor VPN con la clave de la autoridad de certificación que creó en el paso anterior. Ejecute el siguiente comando, pero cambiar el campo Nombre común (CN) y el Nombre alternativo de sujeto (SAN) a nombre DNS del servidor VPN o la dirección IP:

ipsec pki --pub --in ~/pki/private/server-key.pem --type rsa \
| ipsec 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

  • IPSec PKI –pub –en ~ / pki / / privada servidor-key.pem –type RSA \
  • | IPSec PKI –issue –lifetime 1825 \
  • –cacert ~ / pki / cacerts / ca-cert.pem \
  • –cakey ~ / pki / / privada de la CA-key.pem \
  • –dn » CN = server_domain_or_IP» –san «server_domain_or_IP» \
  • –flag serverauth –flag ikeIntermediate –outform PEM \
  • > ~ / pki / certs / servidor-cert.pem

Ahora que hemos generado todos de la TLS / SSL presenta necesidades strongSwan, podemos mover los archivos en su sitio en el directorio /etc/ipsec.d escribiendo:

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

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

En este paso, hemos creado un par de certificado que se utiliza para proteger las comunicaciones entre el cliente y el servidor. También hemos firmado los certificados con la clave CA, por lo que el cliente va a ser capaz de verificar la autenticidad del servidor VPN utilizando el certificado de la AC. Ahora que tienen todos los certificados listos, vamos a pasar a configurar el software.

Paso 4 – Configuración strongSwan

strongSwan tiene un archivo de configuración por defecto con algunos ejemplos, pero tendrá que hacer la mayor parte de la configuración de nosotros mismos. Vamos a volver hasta el archivo de referencia antes de comenzar desde cero:

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

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

Crear y abrir un nuevo archivo de configuración en blanco escribiendo:

sudo nano /etc/ipsec.conf

  • sudo nano / etc / ipsec.conf

en primer lugar, se lo diremos a strongSwan demonio de Registro de estados para la depuración y permitir conexiones duplicadas. Añadir estas líneas al archivo:

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

A continuación, vamos a crear una sección de configuración para nuestra VPN. También diremos strongSwan para crear IKEv2 VPN y túneles para cargar automáticamente esta sección de configuración cuando se inicia. Añade las siguientes líneas al archivo:

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

Vamos a configurar también muertos de igual detección para borrar cualquier conexiones “colgando” en caso de que el cliente se desconecta de forma inesperada. Añadir estas líneas:

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

A continuación, vamos a configurar el servidor de parámetros de IPSec (izquierda) laterales. Esto, unido al archivo:

. . .
conn ikev2-vpn
. . .
left=%any
[email protected]_domain_or_IP
leftcert=server-cert.pem
leftsendcert=always
leftsubnet=0.0.0.0/0

Nota : Al configurar el ID del servidor (leftid), sólo incluyen el carácter @ si el servidor VPN se identifica por un nombre de dominio:

[email protected]

Si el servidor se identifica por su dirección IP, sólo hay que poner la dirección IP en:

leftid=203.0.113.7

a continuación, podemos configurar el cliente (derecha) laterales parámetros IPSec, al igual que los rangos de direcciones IP privadas y los servidores DNS para utilizar:

. . .
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

por último, se lo diremos strongSwan preguntar al cliente las credenciales de usuario cuando se conectan:

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

el archivo de configuración debe tener este aspecto:

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
[email protected]_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

Guardar y cerrar el archivo una vez que haya comprobado que ha configurado las cosas como se muestra.

Ahora que ya hemos configurado los parámetros de VPN, mover Vamos a crear una cuenta para que nuestros usuarios pueden conectarse al servidor.

Paso 5 – Configuración del servidor VPN Autenticación

Nuestra VPN está ahora configurado para aceptar conexiones de clientes, pero no tenemos ninguna credencial todavía configurados. Vamos a tener que configurar un par de cosas en un archivo de configuración especiales llamados ipsec.secrets:

  • necesitamos decirle strongSwan dónde encontrar la clave privada para nuestro certificado de servidor, por lo que el servidor será capaz de autenticar a los clientes.
  • También debe configurar una lista de usuarios que podrán conectarse a la VPN. abrir el archivo de los secretos de

Let para la edición:

sudo nano /etc/ipsec.secrets

  • sudo nano /etc/ipsec.secrets

En primer lugar, nos dirá strongSwan dónde encontrar nuestra clave privada:

: RSA "server-key.pem"

A continuación, vamos a definir la credenciales de usuario. Puede compensar cualquier nombre de usuario o contraseña de combinación que más te guste:

your_username : EAP "your_password"

Guardar y cerrar el archivo. Ahora que hemos terminado de trabajo con los parámetros de VPN, vamos a reiniciar el servicio VPN de manera que se aplica nuestra configuración:

sudo systemctl restart strongswan

  • sudo systemctl reinicio strongSwan

Ahora que el servidor VPN ha sido totalmente configurado con las dos opciones del servidor y las credenciales del usuario, que es hora de pasar a la configuración de la parte más importante: el servidor de seguridad.

Paso 6 – Configuración del firewall y del núcleo reenvío IP

Con la configuración completa strongSwan, tenemos que configurar el cortafuegos para reenviar y permitir el tráfico a través de VPN.

Si ha seguido el requisito tutorial, debe tener activado un firewall muy básico UFW. Si todavía no tiene UFW configurado, puede crear una configuración de línea de base y permitir que escribiendo:

sudo ufw allow OpenSSH
sudo ufw enable

  • sudo UFW permiten OpenSSH
  • sudo UFW permiten

Ahora, añadir una regla para permitir el tráfico UDP a la norma IPSec, puertos 500 y 4500:

sudo ufw allow 500,4500/udp

  • sudo UFW permiten 500,4500 / UDP

a continuación, vamos a abrir uno de los archivos de configuración de la UFW añadir unas políticas de bajo nivel para el enrutamiento y reenvío de paquetes IPSec. Antes de hacerlo, tenemos que encontrar qué interfaz de red en nuestro servidor se utiliza para acceder a Internet. Podemos encontrar que mediante la consulta de la interfaz asociada a la ruta por defecto: ruta

ip route | grep default

  • IP | grep predeterminado

Su interfaz pública debe seguir la palabra “dev”. Por ejemplo, este resultado muestra la interfaz llamada eth0, que se destacan a continuación:

Outputdefault via 203.0.113.7 dev eth0 proto static

Cuando usted tiene su interfaz de red pública, abra el archivo /etc/ufw/before.rules en su editor de texto:

sudo nano /etc/ufw/before.rules

  • sudo nano / etc / UFW / before.rules

Cerca de la parte superior del archivo (antes de la línea de filtros *), añada el siguiente bloque de configuración:

*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]
. . .

cambio cada instancia de eth0 en la configuración anterior para que coincida con el nombre de interfaz que encontraste con ip route. Las líneas nat * crear reglas para que el firewall puede enrutar correctamente y manipular el tráfico entre los clientes VPN y el Internet. La línea de mangle * ajusta el tamaño máximo de segmento de paquete para evitar posibles problemas con ciertos clientes VPN.

A continuación, después del filtro y definición cadena de líneas *, añadir una cuadra más de configuración:

. . .
*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 indican el servidor de seguridad para reenviar el tráfico ESP (Carga de Seguridad Encapsulada) para que los clientes VPN podrán conectarse. ESP proporciona seguridad adicional para nuestros paquetes VPN, ya que está atravesando redes no confiables.

Cuando haya terminado, guarde y cierre el archivo.

Antes reiniciamos el servidor de seguridad, vamos a cambiar algunos parámetros del núcleo de red para permitir el encaminamiento de una interfaz a otra. kernel archivo de configuración de parámetros de UFW abierta:

sudo nano /etc/ufw/sysctl.conf

  • sudo nano /etc/ufw/sysctl.conf

tendremos que configurar algunas cosas aquí:

  • En primer lugar, vamos a habilitar el reenvío de paquetes IPv4.
  • Vamos a desactivar el descubrimiento de MTU Path para evitar problemas de fragmentación de paquetes.
  • Tampoco aceptará redirecciones ICMP ni enviar las redirecciones ICMP para prevenir ataques man-in-the-middle.

los cambios que necesita para hacer que el archivo se destacan en el siguiente código:


. . .

# Enable forwarding
# Uncomment the following line
net/ipv4/ip_forward=1

. . .

# Do not accept ICMP redirects (prevent MITM attacks)
# Ensure the following line is set
net/ipv4/conf/all/accept_redirects=0

# Do not send ICMP redirects (we are not a router)
# Add the following lines
net/ipv4/conf/all/send_redirects=0
net/ipv4/ip_no_pmtu_disc=1

Guarde el archivo cuando haya terminado. UFW aplicar estos cambios la próxima vez que se inicie.

Ahora, podemos permitir que todos nuestros cambios mediante la desactivación y volver a habilitar el servidor de seguridad:

sudo ufw disable
sudo ufw enable

  • sudo UFW desactivar
  • sudo UFW permitir

Se le pedirá que confirme el proceso. Escriba Y para que UFW de nuevo con la nueva configuración.

paso 7 – Prueba de la conexión VPN en Windows, iOS y MacOS

Ahora que tienes todo configurado, que es hora de probarlo. En primer lugar, tendrá que copiar el certificado de CA que ha creado e instalarlo en el dispositivo cliente (s) que se conectarán a la red VPN. La forma más sencilla de hacer esto es para iniciar sesión en el servidor y la salida de los contenidos del archivo de certificado:

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

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

Usted verá una salida similar a esto:

Output-----BEGIN CERTIFICATE-----
MIIFQjCCAyqgAwIBAgIIFkQGvkH4ej0wDQYJKoZIhvcNAQEMBQAwPzELMAkGA1UE

. . .

EwbVLOXcNduWK2TPbk/+82GRMtjftran6hKbpKGghBVDPVFGFT6Z0OfubpkQ9RsQ
BayqOb/Q
-----END CERTIFICATE-----

Copiar esta salida a su computadora, incluyendo el —– BEGIN CERTIFICATE —– —– y —– END CERTIFICATE líneas, y guardarlo en un archivo con un reconocible nombre, como ca-cert.pem. Asegúrese de que el archivo se crea tiene la extensión .pem.

Como alternativa, utilice SFTP para transferir el archivo a su computadora.

Una vez que tenga el archivo ca-cert.pem descargado en su ordenador, puede configurar la conexión a la VPN.

Conexión desde Windows

En primer lugar, importe el certificado raíz siguiendo estos pasos:

bajo el nodo raíz de la consola , expanda el Certificados (equipo local) de entrada , ampliar de confianza de certificados raíz de Autoridades , y a continuación, seleccione la entrada Certificados :

en el menú Acción , seleccione Todas las tareas y haga clic en Importar para mostrar el Asistente de importación Certificado. Haga clic en Siguiente de dejar atrás la introducción.

En la página Archivo a la pantalla de importación , pulse el botón Navegar y seleccionar el archivo de certificado que ha ahorrado. A continuación, haga clic en Siguiente .

Asegúrese de que el almacén de certificados se establece en emisoras raíz de confianza de la autoridad , y haga clic en Siguiente .

Haga clic en Finalizar para importar el certificado.

continuación, configurar el VPN con estos pasos:

Su nueva conexión VPN será visible en la lista de redes. Seleccione la VPN y haga clic en Conectar . Se le pedirá su nombre de usuario y contraseña. Escribirlos, haga clic en OK , y se le conectado.

Conexión desde macOS

Siga estos pasos para importar el certificado:

Ahora que el certificado es importante y de confianza, configurar la conexión VPN con estos pasos:

Por último, haga clic en Conectar para conectarse a la VPN. Ahora debería estar conectado a la VPN.

Conexión desde Ubuntu

Para conectar desde una máquina de Ubuntu, se puede configurar y administrar strongSwan como un servicio o utilizar un comando de una sola vez cada vez que se desea conectar. Se proporcionan instrucciones para ambos.

General strongSwan como servicio

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, tipo:

sudo systemctl start strongswan

  • sudo inicio systemctl strongSwan

Para desconectar de nuevo, tipo:

sudo systemctl stop strongswan

  • sudo parada systemctl strongSwan

El uso de un cliente sencillo por una sola vez Conexiones

ahora debería estar conectado a la VPN. Para desconectar, presione CTRL + C y espera para la conexión con el cierre.

Conexión desde iOS

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

Conexión desde Android

Siga estos pasos para importar el certificado:

Ahora que el certificado se importan a la aplicación strongSwan, se puede configurar la conexión VPN con estos pasos:

Cuando se desea conectar a la VPN, haga clic en el perfil que acaba de crear en la aplicación strongSwan.

Resolución de problemas Conexiones

Si no son capaces de importar el certificado, asegúrese de que el archivo tiene la extensión .pem, y no .pem.txt.

Si no es capaz de conectarse a la VPN, compruebe el nombre del servidor o la dirección IP que utilizó. nombre de dominio del servidor o la dirección IP deben que coincida con lo que ha configurado como el nombre común (CN) al crear el certificado. Si no coinciden, la conexión VPN no funcionará. Si configura un certificado con el CN ​​del vpn.example.com, que debe utilizar vpn.example.com cuando introduce los detalles del servidor VPN. Vuelva a revisar el comando que utilizó para generar certificado, y los valores que utilizó al crear la conexión VPN.

Por último, vuelva a verificar la configuración de la VPN para asegurar el valor leftid se configura con el símbolo @ si estás usando un nombre de dominio:

[email protected]

Y si usted está usando una dirección IP, asegúrese de que se omite el símbolo @ .

Conclusión

En este tutorial, hemos construido un servidor VPN que utiliza el protocolo IKEv2. Ahora usted puede estar seguro de que sus actividades en línea queden bien cerrados donde quiera que vaya! añadir o eliminar usuarios

A, sólo echar un vistazo en el Trámite 5 de nuevo. Cada línea es para un usuario, por lo que añadir o eliminar usuarios es tan simple como editar el archivo.

A partir de aquí, puede que desee ver en la creación de un analizador de archivo de registro, porque strongSwan vuelca sus registros en syslog. El tutorial de cómo instalar y utilizar Logwatch Log Analyzer y Ponente en un VPS tiene más información sobre la configuración de eso.

Usted también puede estar interesado en esta guía del FEP sobre la privacidad en línea.