Jun
09
2020

Seguridad en AWS: ¿Cómo crear un Servidor VPN?


Cuando una empresa migra sus servicios internos a la nube, surgen diversas variables que debe tomar en cuenta: Una de ellas es la seguridad.

Por lo general, para acceder a los recursos en la nube se puede empezar abrir puertos, pero esto no es seguro porque quedan expuestos: a mayor cantidad de recursos requeridos se necesitará acceder a más puertos. Las Redes Privadas Virtuales (VPN) son una solución eficiente para brindar seguridad a nuestra arquitectura paliando los riesgos cuando se tenga que abrir varios puertos.

AWS tiene servicios de VPN que ellos mismos administran. Para este ilustrar un ejemplo asumiremos que solo un área de la empresa necesita acceso a servicios clave que requieren estar aislados.

 

Primer Paso: Crear un grupo de seguridad

Antes de iniciar o lanzar un EC2, primero debemos crear un grupo de seguridad para después adjuntarlo a la instancia.


Solo necesitamos 2 puertos: Puerto 22 para SSH y Puerto 1194 para el servicio de VPN. Para incrementar la seguridad en Source pueden ingresar la IP estática que maneja la empresa, de lo contrario pueden ingresar 0.0.0.0/0. 

 

Segundo Paso: Iniciar EC2 con Amazon Linux 2 AMI

Para este caso elegimos el Amazon Linux 2, ya que está optimizado para un mejor rendimiento con EC2 y los parches de seguridad son suministrados por AWS.

Para la carga que necesita correr el servicio de VPN solo será necesario un t2.micro, el cual es gratis por 12 meses si todavía siguen en el Free Tier.

Elije la red de VPC donde están ubicados los servicios o instancias que necesitas acceder.

Elije el espacio adecuado de acuerdo con lo que necesites, para este caso seleccionamos el default de 8GiB.

Por ultimo, adjunta el grupo de seguridad que creamos en el paso anterior y revisa las opciones antes de lanzarlo.

Clic en Launch y elije la llave para ingresar vía SSH, o crear una nueva.

 

Tercer Paso: Actualiza y configura el servidor

Al servidor (por default) se le asigna una IP pública (que utilizamos para conectarnos vía SSH y VPN). El problema es que, si la instancia se detiene y después reinicia, se asignará una nueva IP pública. Para prevenir el cambio de la IP en la configuración de los clientes es mejor asignar una IP pública estática por medio de un Elastic IP.

Una vez que estés en Elastic IP, elije Allow Elastic IP address. Con la opción Amazon's pool of IPv4 addresses seleccionada hacemos clic en Allocate. Esto asignará una IP lista para asociarla a nuestra instancia.

Con la nueva IP asignada, clic en Actions y elije Associate Elastic IP address. A continuación, elije la instancia que acabamos de crear y has clic en Associate.

Luego configuremos el servidor. Vía SSH nos conectamos al servidor con la llave que elegimos en el primer paso.

$ ssh -i jvaldez_key.pem ec2-user@xx.xx.xx.xx

 

Ejecuta los siguientes comandos para actualizar e instalar los servicios necesarios:

sudo su –
yum update -y
yum-config-manager –enable epel
amazon-linux-extras install epel -y
yum install openvpn easy-rsa -y

 

Por la parte de red, configura el ip_forward y las reglas de firewall:

echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

 

Para que las reglas de firewall sean persistentes después de un reinicio, instala iptables-services. Configúralo para que el servicio inicie junto con el servidor y guarda las reglas actuales:

yum install iptables-services -y
systemctl enable iptables
service iptables save

 

Cuarto Paso: Configura el servicio de OpenVPN

Aquí configuramos el servicio, creamos los certificados y llaves necesarias para las conexiones encriptadas.

Iniciamos el PKI y creamos un CA. Cuando te pregunte el Common Name al momento de build-ca, pon el nombre del servidor o algo que lo describa:

cd /etc/openvpn/
mkdir easy-rsa
cp -R /usr/share/easy-rsa/3.0.6/ easy-rsa/
cd easy-rsa
./easyrsa init-pki
./easyrsa build-ca nopass

 

Genera un requerimiento de certificado para el servidor y después fírmalo con el nuevo CA. Te preguntarán nuevamente por Common Name, escribe algo que describa el servidor. Después para la firma, solo escribe yes. Al final ejecutamos el comando para generar el Diffie-Hellman key:

./easyrsa gen-req server nopass
./easyrsa sign-req server server
./easyrsa gen-dh

 

Genera los certificados para los clientes. En este caso solo hemos generado un usuario. Puedes repetir este paso para generar más certificados para los usuarios que necesiten conectarse.

./easyrsa gen-req usuario1 nopass
./easyrsa sign-req client usuario1

 

Genera la firma de HMAC para verificar la integridad del TLS:

cd ..
openvpn –genkey –secret pfs.key

 

Crea el archivo server.conf. Copia y pega la configuración de abajo:

# vi server.conf
port 1194
proto udp
dev tun
ca /etc/openvpn/easy-rsa/pki/ca.crt
cert /etc/openvpn/easy-rsa/pki/issued/server.crt
key /etc/openvpn/easy-rsa/pki/private/server.key
dh /etc/openvpn/easy-rsa/pki/dh.pem
cipher AES-256-CBC
auth SHA512
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 1.1.1.1"
push "dhcp-option DNS 1.0.0.1"
ifconfig-pool-persist ipp.txt
keepalive 10 120
compress lz4-v2
push "compress lz4-v2"
;comp-lzo
persist-key
persist-tun
status openvpn-status.log
log-append openvpn.log
verb 3
tls-server
tls-auth /etc/openvpn/pfs.key

 

Inicia y habilita el servicio de OpenVPN:

systemctl start openvpn@server.service
systemctl -f enable openvpn@server.service

 

Crea un directorio llamado keys para la creación de archivos .ovpn los cuales serán utilizados por los usuarios para configurar su cliente de vpn. Copia los archivos necesarios:

mkdir /etc/openvpn/keys
cd keys
cp /etc/openvpn/easy-rsa/pki/ca.crt .
cp /etc/openvpn/pfs.key .
cp /etc/openvpn/easy-rsa/pki/private/usuario1.key .

 

Ahora crea la configuración base para los clientes:

# vi base.conf
client
dev tun
proto udp
tls-version-min 1.2
tls-cipher TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256:TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256:TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256
cipher AES-256-CBC
auth SHA512
resolv-retry infinite
auth-retry none
nobind
persist-key
persist-tun
verb 3
tls-client

 

Aquí creamos un script que va adjuntar los certificados, llaves y configuración. Todo lo anterior en un archivo .ovpn que será guardado bajo el directorio home de ec2-user para después extraer fácilmente el archivo vía el comando scp:

Ejecuta el script de la siguiente forma:

bash make_ovpn.sh usuario1
exit
[ec2-user@ip-10-xx-xx-xx ~]$ ls
usuario1.ovpn

 

¡Terminamos! Los siguientes pasos serian extraer el archivo usuario1.ovpn vía scp e instalar el cliente OpenVPN en tu laptop o PC. Importa el archivo en el cliente y conecta.

scp -i jvaldez_key.pem ec2-user@xx.xx.xx.xx:/home/ec2-user/usuario1.ovpn .


Únete a la Conversación

DEJA UN COMENTARIO

Tu dirección de correo electrónico no será publicado. Campos requeridos están marcados *