AWS tiene un increíble firewall integrado en sus servicios principales que se puede usar fácilmente para asegurarse de que solo ciertos puertos estén abiertos al mundo exterior. Un paso adicional que podemos tomar es ejecutar un servidor VPN que sirva como puerta de enlace a nuestras instancias EC2 protegidas. Luego podemos cerrar el acceso SSH directo a nuestras instancias EC2 y también tener la libertad de bloquear el acceso a toda nuestra red simplemente revocando el acceso a través de nuestro servidor VPN. Este último es muy útil si necesita revocar el acceso de un ex empleado.
El siguiente tutorial lo guiará a través de los pasos para configurar una instancia EC2 que ejecutará el servidor OpenVPN. Luego cubrirá cómo otorgar y revocar el acceso a través del servidor VPN.
Descripción general: los grupos de seguridad permiten que sus servidores se comuniquen entre sí en una nube privada mientras exponen puertos específicos al mundo. Vamos a crear un grupo de seguridad para permitir el acceso VPN a nuestro servidor VPN. Asumiremos que todas sus otras instancias EC2 son miembros del grupo de seguridad predeterminado y que el grupo de seguridad predeterminado no permite el acceso desde el mundo exterior.
Inicie sesión en https://aws.amazon.com , escriba EC2 en el cuadro de búsqueda y haga clic en el objetivo para ir al panel de EC2.
Desde el tablero de EC2, haga clic en Grupos de seguridad
Haga clic en Crear grupo de seguridad
Ingrese un nombre y una descripción de vpn y especifique las reglas de entrada en los puertos 22, 443, 943 y 1194. Nota: el protocolo para el puerto 1194 es UDP.
Nota: si las direcciones IP que usa su equipo son estáticas, puede agregar otra capa de seguridad especificando ese rango de direcciones IP en la Fuente de sus reglas. Sin embargo, querrá dejar la Fuente en blanco si desea que su equipo pueda conectarse desde diferentes IP, ya que pueden estar trabajando desde un hotel, casa, cafetería, etc.
Regrese al panel de EC2 y luego haga clic en Iniciar instancia
Seleccione Ubuntu (por supuesto, puede seleccionar casi cualquier otro sistema operativo que ejecute OpenVPN, pero este tutorial está diseñado para Ubuntu)
Seleccione t2.nano y haga clic en Revisar y lanzar
En la siguiente pantalla, haga clic en Editar grupos de seguridad
Seleccione los grupos de seguridad vpn y predeterminados y haga clic en Revisar e iniciar
Haga clic en Iniciar, elija su par de claves y luego haga clic en Iniciar instancias
De la lista de instancias, seleccione la instancia de VPN y luego Networking->Change Source/Dest. Verifique en el menú desplegable. Luego haga clic en Sí, deshabilitar . Esto es necesario ya que, de lo contrario, su servidor VPN no podrá conectarse a sus otras instancias EC2.
Descripción general: cuando una instancia EC2 se detiene y se reinicia, la dirección IP pública cambia. Queremos que la dirección IP de nuestro servidor VPN permanezca estática, por lo que usaremos una dirección IP elástica.
En el Panel de control de E2c, seleccione IP elásticas
Haga clic en Asignar nueva dirección
Haga clic en Asignar y luego en Cerrar.
Tome nota de su dirección IP elástica, ya que será la dirección IP pública de su servidor VPN.
Luego, seleccione la IP elástica y haga clic en Asociar dirección en el menú desplegable.
Seleccione la instancia EC2 que acaba de crear y haga clic en Asociar .
SSH en su servidor VPN:
$ ssh ubuntu@IP-PÚBLICA-DE-SERVIDOR-VPN
Descargue nuestros scripts de ayuda y establezca una configuración predeterminada:
$ git clone https://github.com/redgeoff/openvpn-server-vagrant $ cd openvpn-server- vagrant $ cp config-default.sh config.sh
Edite config.sh e ingrese su configuración. Nota: PUBLIC_IP debe ser igual a la dirección IP elástica que creó anteriormente.
$ nanoconfig.sh
Cambiar a raíz
$ sudo su -
Actualice Ubuntu e instale OpenVPN. Nota: se le pedirá dos veces y cuando lo haga, seleccione Mantener la versión local actualmente instalada
$ /home/ubuntu/openvpn-server-vagrant/ubuntu.sh$ /home/ubuntu/openvpn-server-vagrant/openvpn.sh
En este punto, el servidor OpenVPN se está ejecutando.
Las rutas deben agregarse al servidor para que los clientes de su equipo sepan qué tráfico enrutar al servidor VPN.
Puede determinar la subred adecuada regresando a su lista de instancias EC2, haciendo clic en una instancia de destino e identificando la IP privada.
Su red serán las primeras 2 partes de la IP privada anexadas con ceros, por ejemplo, 172.31.0.0
En el servidor VPN, edite /etc/openvpn/server.conf y agregue algo como lo siguiente:
empuje "ruta 172.31.0.0 255.255.0.0"
Luego reinicie el servidor VPN con:
$ systemctl reiniciar openvpn@servidor
Nota: Asumimos que todavía está conectado a SSH en la VPN y que ha iniciado sesión como root.
Ejecute el siguiente comando y asegúrese de reemplazar el cliente a continuación con un nombre único para su usuario/cliente.
$ /home/ubuntu/openvpn-server-vagrant/add-client.sh cliente
A continuación, encontrará un archivo de configuración en
~/client-configs/files/nombre-cliente.ovpn
Deberá proporcionar este archivo a la persona de su equipo que se conectará a su VPN. SCP es útil para descargar este archivo .ovpn desde su servidor VPN.
Su equipo puede usar uno de varios clientes VPN como Tunnelblick (OS X) y OpenVPN (Linux, iOS, Android y Windows). Después de instalar uno de estos clientes, deberían poder configurar la configuración de VPN simplemente haciendo doble clic en el archivo .ovpn.
Nota: una vez conectados a la VPN, sus usuarios querrán usar las IP privadas de sus instancias EC2. Probablemente querrá usar Route 53 para crear registros de subdominio que enruten a las IP privadas.
Nota: Asumimos que todavía está conectado a SSH en la VPN y que ha iniciado sesión como root.
Ejecute el siguiente comando y asegúrese de reemplazar el cliente a continuación con un nombre único para su usuario/cliente.
$ /home/ubuntu/openvpn-server-vagrant/revoke-full.sh cliente
Geoff Cox es el creador de MSON , un nuevo lenguaje de programación declarativo que te permite crear aplicaciones en JSON. Ha trabajado por cuenta propia durante la mayor parte de los últimos 15 años y le encanta emprender proyectos ambiciosos, aunque exasperantes, como la creación de una base de datos y un sistema de sincronización de datos distribuidos . Puede comunicarse con él @redgeoff7 o en github .