VPN de Acceso Remoto a una VPC en Amazon AWS

news and informations automotive,business,crime,health,life,politics,science,technology,travelautomotive,business,crime,health,life,politics,science,technology,travel

En un post anterior ya explicamos de qué forma podemos conectar una VPC en Amazon AWS con una red on-premises mediante una VPN de Sitio a Sitio:
https://www.franciscosepulveda.eu/2019/01/12/conexion-entre-vpc-de-amazon-y-red-on-premises/
En esta ocasión vamos a hablar de un escenario de conexión VPN a una VPC en Amazon AWS, pero de Acceso Remoto para usuarios móviles. Podría parecer que este escenario es muy común y que ya debemos disponer de soluciones en Amazon AWS, pero a diferencia de una VPN de Sitio a Sitio, Amazon no ofrece una solución propia, sino que tenemos que recurrir a servidores VPN de terceros para habilitar este acceso.

Al implementar este tipo de soluciones de acceso debemos tener en cuenta algunas consideraciones:

  • NAT: Si el cliente de acceso remoto o el servidor de VPN que vamos a implementar en Amazon AWS están detrás de un NAT es posible que nos encontremos con problemas en algunas soluciones de VPN. Por ejemplo, algunas implementaciones de L2TP/IPSec podrían no funcionar si alguno de los extremos está detrás de un NAT. Una de las que hemos probado y falla es implementar una VPN L2TP/IPSec con una imagen de VyOS (Vyatta) en una instancia de máquina virtual en Amazon AWS.
  • Seguridad: No todas las implementaciones de VPN son igualmente seguras. PPTP (Point to Point Tunnelling Protocol) ya no se considera un protocolo seguro para VPNs corporativas y en su lugar se recomienda IPSec o incluso SSTP.
  • Compatibilidad de clientes: Algunos clientes podrían no ser compatibles con protocolos VPN como PPTP. Por ejemplo, las últimas versiones de Mac OS como Sierra o Mojave ya no tienen soporte para PPTP.
  • Coste de la implementación.

En este caso concreto nos hemos decidido por implementar una VPN de Acceso Remoto usando OpenVPN, ya que se trata de una solución de software libre basada en SSL (Secure Socket Layer). Los motivos de esta elección son:

  • No tiene ningún tipo de problema con NAT
  • Puede trabajar en el puerto 443, lo que garantiza que prácticamente cualquier cliente podrá conectarse a la VPC aunque se encuentre detrás de un Firewall. La mayoría de Firewalls permiten el acceso de salida hacia el puerto 443.
  • Está basada en software libre. Esto no sólo implica el no tener que pagar por una solución propietaria, sino que también es un software que puede ser auditado por la comunidad en busca de bugs.
  • Dispone de clientes compatibles para Windows, Mac, Linux, Android, iOS…

Implementación de OpenVPN Server

El esquema de la implementación que vamos a llevar a cabo es el siguiente:

El cliente ya dispone de una VPC en Amazon AWS y vamos a facilitar el acceso remoto de clientes a través de una VPN SSL usando el software OpenVPN:

https://github.com/OpenVPN/openvpn

https://github.com/redgeoff/openvpn-server-vagrant

Vamos a instalar OpenVPN sobre una máquina virtual Ubuntu:

Concretamente usaremos una instancia de tamaño t2.medium que nos da los recursos suficientes para el número de usuarios concurrentes estimados.

Como todas las instancias, nuestro servidor OpenVPN estará protegido con un Grupo de Seguridad. En este grupo sólo vamos a permitir el acceso al puerto 1194 de UDP, aunque se puede configurar fácilmente para que utilice el 443 de TCP. También hemos configurado el acceso SSH, pero sólo desde nuestra IP pública mientras estamos haciendo la configuración:

Algo que también debemos tener en cuenta es que tenemos que deshabilitar en la instancia e OpenVPN la comprobación de Origen/Destino:

Si no hacemos esto, la máquina OpenVPN sólo permitiría el tráfico que tiene como origen o destino su IP, pero no permitiría tráfico que fuese a otra máquina de la VPC, es decir, no enrutaría el tráfico hacia la VPC.

Una vez que hayamos creado la máquina Ubuntu y tengamos acceso a ella vía SSH, vamos a instalar OpenVPN:

  • Clonamos el proyecto desde GitHub:
  • Nos movemos al directorio clonado:
  • Y hacemos una copia del archivo de configuración:
  • Ya podemos editar el archivo de configuración:
  • Donde incluimos los datos de la organización y la dirección IP que nos haya asignado Amazon como Elastic IP de la instancia:
  • Guardamos los cambios, salimos del editor y pasamos a ser root:
  • Actualizamos el sistema operativo:
  • E instalamos el servidor OpenVPN:
  • Tendremos que añadir una ruta al servidor para que los equipos cliente sepan qué tráfico enrutar hacia OpenVPN:
  • Si la subred de nuestra VPC es 172.17.0.0/16, añadimos la siguiente línea al final del archivo:
  • Y ya podemos reiniciar el servidor OpenVPN para que se apliquen los cambios:
  • A partir de aquí sólo tenemos que generar archivos de conexión para los clientes. Por ejemplo, si tenemos un cliente llamado usuario1:
  • El archivo se genera en la ruta /root/client-configs/files/usuario1.ovpn. Este archivo contiene toda la configuración necesaria para que cliente pueda conectarse. Debemos hacer llegar este archivo al cliente de forma segura.

La conexión por parte del cliente a este servidor VPN es muy sencilla. Tenemos a nuestra disposición clientes OpenVPN para varios sistemas operativos como Windows, Mac, Linux, Android, …:

https://swupdate.openvpn.org/community/releases/openvpn-install-2.4.6-I602.exe

https://swupdate.openvpn.net/as/clients/openvpn-connect-2.6.0.103_signed.dmg

Sólo tenemos que instalar el que corresponda al sistema operativo cliente, importar el archivo .ovpn que hemos creado y conectar con la VPN.

Gracias a la ruta que hemos añadido en un paso anterior al archivo, el cliente mantendrá su acceso a Internet al mismo tiempo que está conectado a la VPC a través de la VPN.

, , ,