3. INSTALAMOS EL SERVIDOR OPENVPN JUNTO CON EASY-RSA PARA CREAR CERTIFICADOS
4. CONFIGURACIÓN DE LA AUTORIDAD DE CERTIFICACIÓN
5. CREAR TIPO DE CRYPTOGRAFIA PARA LAS CONEXIONES
6. CREAR CERTIFICADO Y CLAVE DEL SERVIDOR
7. CREAR CERTIFICADO Y CLAVE DEL CLIENTE
11. AUTENTIFICACIÓN DEL CLIENTE
INTRODUCIÓN
OpenVPN es una solución de conectividad basada en software libre con licencia GPL. OpenVPN incluye:
- SSL (Secure Sockets Layer).
- VPN (Virtual Private Network, red virtual privada).
OpenVPN ofrece conectividad punto-a-punto con validación jerárquica de usuarios y host conectados remotamente, resulta una muy buena opción en tecnologías Wi-Fi (redes inalámbricas IEEE 802.11) y soporta una amplia configuración, entre ellas balanceo de cargas.
Lo que hace esta tecnología, básicamente, es conectar un ordenador (cliente) con una red (la del servidor). Esto tiene diferentes utilidades, en las empresas lo usan mucho para extender las redes privadas de sus diferentes sedes y conectarlas de manera segura. Pero lo que más nos interesa a nosotros, es que puede proporcionarnos privacidad y seguridad.
Aun así, montar un servidor VPN no sirve para tener más seguridad en la red en la que se instala. Está pensado para proporcionarla cuando estamos fuera de esta, con un portátil o el móvil, por ejemplo.
OpenVpn tiene dos modos de configuración:
TUN: Modo Routing, crea un túnel entre el cliente y el servidor, el túnel generado se establece en un rango de IP’s diferente a la del servidor. En modo routing con OpenVPN el cliente y el servidor no pueden tener la misma IP, en caso contrario no conectaría
TAP: Modo Bridge, el ordenador cliente tendrá una IP en la misma red que el servidor cuando creemos la conexión.
Instalación y Configuración
Pasos a seguir.
ACTUALIZAR EL SISTEMA
apt-get update && apt-get upgrade
INSTALAMOS EL SERVIDOR OPENVPN JUNTO CON EASY-RSA PARA CREAR CERTIFICADOS
Crearemos un certificado CA (Cerificate Authority), que permitirá para que sólo se conecten clientes, a nuestro servidor VPN, que tengan certificados firmados por este CA. Después, crearemos el certificado del servidor y su llave, y por último el certificado y llave del cliente.
easy-rsa es una utilidad para facilitar la creación de los certificados. Podemos usarla para cualquier otro software que requiera de ellos (Apache, Nginx, Dovecot, …)
apt-get install openvpn easy-rsa
Se crea la carpeta openvpn en el directorio /etc
CONFIGURACIÓN DE LA AUTORIDAD DE CERTIFICACIÓN.
Lo primero que vamos a hacer es crear nuestra autoridad de certificación para poder emitir todos los certificados y claves necesarios.
A continuación, edite /usr/share/easy-rsa/vars ajustando el siguiente a su entorno:
Ahora vamos a editar el fichero “vars” y modificamos lo que se lista a continuación ajustándolo a nuestro entorno:
nano vars
export KEY_COUNTRY=”codigo del pais”
export KEY_PROVINCE=”codigo de provincia”
export KEY_CITY=”ciudad”
export KEY_ORG=”organizacion”
export KEY_EMAIL=”direccion de email”
export KEY_OU=”departamento”
export KEY_CN=”nombre del servidor”
export KEY_ALTNAMES=”algo, lo que queramos”
En la siguiente captura vemos como ha quedado en mi caso particular:
Ahora vamos a crear el certificado y clave de nuestra autoridad de certificación. Para ello, tomamos como origen el fichero vars que acabamos de editar:
source var ó . vars //Para ejecutar el uso de la plantilla vars que acabamos de modificar
Con el siguiente comando se borrarían las claves existentes en la carpeta keys, en el caso que no existia nada, se creara solo el directorio donde vaya almacenando los certificados que vamos a crear. Cuando ejecutamos el comando lo avisa.
./clean-all
Ahora generamos el certificado y clave de nuestra autoridad de certificación:
./build-ca
Todos estos comandos que estamos tipeando los podemos encontrar en,
Se crean dos archivos el ca.crt y el ca.key en el directorio keys.
CREAR TIPO DE CRYPTOGRAFIA PARA LAS CONEXIONES
Parámetros Diffie Hellman se generar para el servidor OpenVPN:
./build-dh
Se crea en el directorio keys
CREAR CERTIFICADO Y CLAVE DEL SERVIDOR
A continuación, vamos a generar un certificado y la clave privada para el servidor:
./build-key-server OondeoServerVPN
Asegurarnos que aceptamos la confirmación para que se firma estos certificados, si no, no serán válidos cuando necesita va verificación con la autoridad
Todos los certificados y claves han sido generado en el directorio /keys
Ahora copiaremos los siguientes archivos al directorio /etc/openvpn
cp OondeoServerVPN.crt OondeoServerVPN.key ca.crt dh2048.pem /etc/openvpn/
CREAR CERTIFICADO Y CLAVE DEL CLIENTE
El cliente VPN también necesitará un certificado para autenticarse en el servidor. Por lo general, se crea un certificado diferente para cada cliente.
En este ejemplo vamos a usar el nombre ClienteVPN.
source vars
./build-key nombre_cliente_o_usuario
Confirma que se firme como el anterior, creado para el servidor.
CONFIGURAR EL SERVIDOR
Para configurar el servidor VPN, copie el ejemplo de archivo server.conf.gz de configuración, desde /usr/share/doc/openvpn/examples/sample-config-files, al directorio /etc/openvpn
Descomprime el archivo con el comando gunzip.
gunzip server.conf.gz
Abre el archivo server.conf con un editor de texto y
Modifica/Añade las siguientes 4 líneas del fichero de configuración server.conf.
ca /etc/openvpn/ca.crt <– Línea 78
cert /etc/openvpn/certificate.crt <– Línea 79
key /etc/openvpn/certificate.key <– Línea 80
dh dh1024.pem <– Linea 87
Explicación del archivo, no copiar en vuestro server.conf
#Puerto de escucha port 1194 #tipo protocolo udp proto udp #Dispositivo virtual en el que se creará el tunel dev tun #Ubicación de los certificados y claves del servidor ca /etc/openvpn/ca.crt cert /etc/openvpn/certificate.crt key /etc/openvpn/certificate.key # Ubicación de los parametros Diffie hellman dh /etc/openvpn/dh2048.pem #El servidor tomará la ip 10.8.0.1 #A los clientes se les asignará una ip dentro de esa red server 10.8.0.0 255.255.255.0 #registramos las ip de los clientes conectados ifconfig-pool-persist ipp.txt # Permitimos alcanzar la red local # a través del tunel push "route 192.168.1.0 255.255.255.0" #Redirigimos todo el tráfico a través de la VPN push "redirect-gateway def1 bypass-dhcp" # Servidores DNS que usaremos (opendns.com). push "dhcp-option DNS 208.67.222.222" push "dhcp-option DNS 208.67.220.220" # ping cada 10 seg # tras 120 seg sin respuesta #se considera el par caido keepalive 10 120 # Tipo de cifrado. cipher AES-128-CBC # AES # habilitamos compresión comp-lzo # numero máximo de conexiones max-clients 10 # limitamos permisos user nobody group nogroup # persist-key persist-tun #Habilitamos logs status openvpn-status.log log openvpn.log # nivel detalle de logs verb 3
Como podéis observar en el fichero de configuración, elegimos el protocolo UDP dado que es más rápido que el TCP (Orientado a Conexión)
INICIAR EL SERVIDOR VPN
service openvpn start
Si todo está bien, la interfaz túnel virtual debe ser activada ahora, puede comprobar con el comando abajo.
ifconfig
Si no crea el túnel, reinicar servidor.
Comprobar si el puerto por defecto está abierto y se está escuchando las peticiones desde fuera.
netstat -putan | grep 1194
CONFIGURAR EL CLIENTE
Ahora, copie los siguientes archivos en el cliente utilizando un método seguro: voy a usar winscp (tenga en cuenta los permisos, propietarios de los archivos y directorio donde se encuentran los archivos).
/usr/share/easy-rsa/keys/ca.crt
/usr/share/easy-rsa/keys/ClienteVPN.crt
/usr/share/easy-rsa/keys/ClienteVPN.key
Hay que copiar estos tres archivos a la ruta que esté definida en la configuración del OpenVPN
Si os da error de permisos al transferir algún archivo por SFPT, a mi me ha dado con el ClienteVPN.key, hay que cambiar los permisos.
chown jesus:jesus ClienteVPN.key
Ahora hay que cogeremos el archivo client.conf que se encuentra en la ruta /usr/share/doc/openvpn/examples/sample-config-files/client.conf y lo pasaremos por WinSCP al ordenador desde donde queremos realizar la conexión, en mi caso mi Windows 7.
El archivo client.conf debe renombrarse a ClienteVPN.ovpn
Y modificar las siguientes líneas del archivo ClienteVPN.ovpn, el archivo ClienteVPN.ovpn lo editaremos con Notepadd ++, SublimeText, Visual Studio Code, …
Y poner tanto en el fichero de configuración del cliente como del servidor el tipo de crifrado que se va a usar, como es lógico en ambos el mismo.
Elijo el Triple-DES porque es el cifrado más seguro de los 3 disponibles.
En resumen estos son los parámetros que debe haber en el cliente,
client dev tun proto udp remote 192.168.1.15 1194 ca ca.crt cert ClienteVPN.crt key ClienteVPN.key cipher DES-EDE3-CBC
AUTENTIFICACIÓN DEL CLIENTE.
Doble click en el icono,
Observad como ahora nos está dando la IP del túnel, me ha dado la IP 10.8.0.6
Y desde nuestro equipo Windows le podemos pinear.
Y en la interfaces de red de Windows no ha creado otra nueva como es lógico.
CONFIGURACIÓN DE FIREWALL
Cerciorarnos que el firewall acepte las políticas de entrada, dado que si no es así no podremos acceder desde el exterior a ningún servicio del servidor.
Ahora por ejemplo podremos visualizar un servicio como puede ser el web, por la IP del túnel.
FICHERO DE LOG
En la carpeta del cliente log, tenemos los logs que nos avisan de los problemas de conexión.
EJERCICIOS
- Una vez que hayas creado la VPN entre el cliente Windows y el Server Debian/Ubuntu, instala el servicio Samba en Linux y observa como el cliente puedes ver las carpetas compartidas.
- Realiza una VPN con OpenVPN entre un cliente Windows y un Server Windows. Comparte una carpeta en el server y observa cómo puedes ver la carpeta creada. Levanta el servidor web del Windows server y observa cómo puedes visualizar la web con la IP del servidor a través del túnel.