OpenVPN una conexión segura
Emiliano Piscitelli
OpenVPN una conexión segura Agenda ● ● ● ● ● ● ● ● ●
Conceptos de VPN's Tipos de VPN's Que es OpenVPN Generando la PKI Configuración RoadWarrior Diferencias con clientes Windows Prueba en Vivo Tips Preguntas
OpenVPN una conexión segura Que es una VPN? Una VPN(Virtual Private Network o Red Privada Virtual), es básicamente una red segura que puede estar conformada por dos o más puntos remotos, usando como medio para lograr esto una red no segura como puede ser Internet. Los puntos remotos que participan de una VPN pueden ser hosts individuales o LAN ´S(Local Area Network o Red de Área Local). Una vez que se conforma la misma todos estos puntos además de pertenecer a su LAN , pertenecerán también a una misma red virtual, aprovechando de esta manera las distintas ventajas que nos otorga el usar VPN´s,como puede ser: compartir información, hacer usos de los distintos recursos de cada una de las redes participantes y lo que es muy importante el poder realizar todo esto de forma segura. Podemos decir entonces que las VPN´s entre otras cosas nos brindan, Autorización, Integridad y Confidencialidad, y para poder llevar acabo estas tareas se usa diferentes algoritmos como por ejemplo: algoritmos comunes de comparación como Message Digest(MD) y Secure Hash Algorithm (SHA), algoritmos de cifrado como Data Encryption Standard (DES),Triple DES(3DES) y Advanced Encryption Standard (AES)
.
OpenVPN una conexión segura Tipos de VPN: Existen básicamente dos tipos de VPN, pasemos entonces a detallar cada una de ellas: Red a Red: El tipo de conexión red a red esta conformado por 2 o mas redes, las mismas se conectan entre si a través de servidores VPN y una vez realizado el proceso y autenticadas las mismas todos los hosts autorizados detrás de estas redes podrán ver las otras en forma totalmente transparente. Es por ello que este tipo de conexiones es muy utilizado para enlazar sucursales entre si y de esta manera poder realizar las distintas tareas como si se encontraran en el mismo lugar fisico.
OpenVPN una conexión segura Roadwarrior: Este es uno de los esquemas mas utilizados, se trata de clientes remotos que por medio de una aplicación instalada en sus equipos se conectan a servidores VPN y a los mismos se le asigna una dirección IP, incorporándolos dentro de la red local a la cual haya accedido. Este tipo de conexión es muy utilizada, por las empresas para darle acceso a los empleados, proveedores, etc, ya que permite mucha flexibilidad y comodidad al poder conectar sus equipos con el servidor de la empresa, estén donde estén.
OpenVPN una conexión segura Modos de Implementación: Existen básicamente 2 tipos de implementaciones para VPN: Por Hardware: Se realiza utilizando equipos dedicados con servidores VPN embebidos, como puede ser Routers, Firewalls, etc. Su principal ventaja radica, que al ser dispositivos dedicados y especialmente diseñados para cumplir esta tarea, son muy robustos y estables, pero a contracara de lo anterior podemos destacar que estos dispositivos son algo costosos y en muchos casos no se estarían utilizando al 100% de sus recursos, es por ello que es conveniente estudiar cada caso en particular y de esta manera evaluar si es viable esta opción o si se estaría desperdiciando los recursos en el caso que se implemente. Por Software: Esta será la forma que emplearemos nosotros para poder crear nuestras propias conexiones VPN y básicamente podemos decir que se trata de aplicaciones VPN que se encuentran instaladas en algún sistema operativo como puede ser GNU/Linux, Windows, Mac OS X, etc. Y en nuestro caso obviamente será bajo GNU/Linux.
OpenVPN una conexión segura Opciones y comparativas En GNU/Linux contamos con una amplia variedad de protocolos para la implementación de VPN´s, es por ello que vamos a analizar las principales opciones con las que contamos y de esta manera poder evaluar cada una de ellas: IPSEC (Internet Protocol Security): Inicialmente fue creado para usarse con el nuevo estándar IPV6, pero después por esas cosas de la vida se implemento en IPV4, llamado el protocolo estándar para crear VPN`s, el mismo es un protocolo de seguridad que proporciona confidencialidad e integridad en las comunicaciones, pudiendo usar para esto dos métodos de seguridad: ESP (Encapsulating Security Payload) o AH (Authentication Header), la diferencia entre estos es que ESP cifra los paquetes y los autentica, mientras que AH solo los autentica. En GNU/Linux existen varios proyectos para usar IPSEC, pero los mas destacados son: FreeS/WAN que ya no esta en desarrollo pero se derivo en otros dos muy interesantes: Openswan y strongSwan.
OpenVPN una conexión segura PPTP (Point to Point Tunneling Protocol): Este protocolo fue desarrollado por el PPTP Forum, el cual esta conformado por las siguientes organizaciones: Microsoft, U.S. Robotics, Ascend Communications, 3Com/Primary Access y ECI Telematics. Si bien es muy usado por su facilidad de instalación, configuración y soporte en diferentes versiones de Windows, es uno de los protocolos mas inseguros, por lo que no se recomienda su implementación en lugares donde la seguridad sea un tema importante. Si bien se esta tratando de corregir algunas de estas vulnerabilidades con la implementación de L2TP e IPSEC, esta costando demasiado, ya que ningunos de estos dos tienen la facilidad de instalación y configuración de PPTP. En GNU/Linux podemos encontrar el proyecto Poptop para la implementación de este protocolo.
OpenVPN una conexión segura SSL/TLS (Secure Sockets Layer /Transport Layer Security): Este protocolo esta empezando a ser adoptado por distintos dispositivos, ya que posee una muy buena combinación entre flexibilidad y seguridad. Fases entre el servidor y el cliente: 1-Negocian que algoritmos se van a usar para la comunicación. 2-Se intercambian de claves públicas y autenticación basada en certificados digitales 3-Se cifra el tráfico basándose para esto en el cifrado simétrico El cliente y el servidor en la primera fase negocian que algoritmos van a usar. Los mas usados comunmente son los siguientes: Criptografía de clave pública: RSA, Diffie-Hellman, DSA (Digital Signature Algorithm) o Fortezza; Cifrado simétrico: RC2, RC4, IDEA (International Data Encryption Algorithm), DES (Data Encryption Standard), Triple DES o AES (Advanced Encryption Standard); Hash: MD5 o de la familia SHA. Para implementar este protocolo podemos utilizar Openvpn un proyecto en constante crecimiento y aceptación debido a su potencial y facilidad de uso.
OpenVPN una conexión segura OpenVPN Openvpn es un proyecto que se viene desarrollando desde el año 2001, y ha tenido un constante crecimiento y adaptación, poco a poco va ganando terreno y es sin duda uno de los proyectos de Software Libre más importantes para VPN`s. Para realizar su tarea usa los protocolos SSL/TLS.
Ventajas Soporta IP`s dinámicas, esto es muy importante para la mayoría de nosotros, ya que seguramente contamos con conexiones de banda ancha tradicionales, como Adsl o Cablemodem, con IP`s dinámicas y con Openvpnpodemos sacar una cuenta en Dyndns(www.dyndns.com) y usarla sin problemas. ●
OpenVPN una conexión segura Adopción para trabajar en redes nateadas, tanto los clientes como los servidores pueden estar trabajando con IP´s privadas y no tendrán problema alguno para funcionar. ●
Multiplataforma, como ya hemos nombrado anteriormente Openvpnpuede trabajar en diferentes sistemas operativos como pueden ser: Linux, Solaris, OpenBSD, FreeBSD, ●
●
NetBSD, Mac OS X, y Windows 2000/XP
●
Puede salir a través de proxys sin ningún problema.
●
Soporta múltiples conexiones solo con un puerto.
OpenVPN una conexión segura Instalando OpenVPN En nuestro caso la distribución que usaremos sera Debian, por lo tanto usaremos la herramienta apt para realizar esta tarea: #aptitude install openvpn Luego de este paso veremos que nos instala varias librerias y herramientas, entre ellas podemos encontrar: liblzo2 (libreria de compresión) y Openssl (herramienta que nos va a ayudar a implementar los protocolos SSL/TLS y a generar los certificados). Algo a destacar es que ya esta corregido el problema de vulnerabilidad que se presento hace un tiempo con OpenSSL, e incluso cuenta con herramientas para que podamos chequear si los certificados son vulnerables o no.
OpenVPN una conexión segura Preparando el Servidor Para comenzar con la configuración del servidor lo primero que tendremos que hacer será crear una serie de certificados y claves, para esto vamos a aprovechar una de las ventajas que nos otorga Openvpn, al tener unos cuantos scripts ya armados para realizar esta tarea. Es por eso que lo primero que voy a recomendar para seguir un orden, es copiar el directorio donde se encuentran almacenados estos scripts a /etc/openvpn, que es el directorio donde tendremos los archivos de configuración. Para realizar lo antes mencionado podemos ejecutar este comando: Copiamos: # cp a /usr/share/doc/openvpn/examples/easyrsa /etc/openvpn Y luego accedemos al directorio: # cd /etc/openvpn/easyrsa/2.0/
OpenVPN una conexión segura Creando el certificado de autoridad.. Una vez que ya realizamos los pasos anteriores de copiar el directorio donde están contenidos los scripts, lo que vamos a hacer es generar el certificado de autoridad (CA), este se generara por única vez en el servidor y luego será uno de los archivos que tendremos que copiar hacia los clientes, para que al intentar conectarse al mismo, este pueda verificar que el certificado fue emitido por el y darles el correspondiente permiso. Veamos como realizaremos esto: #. vars Al ejecutar . vars, lo que estaremos haciendo será inicializar las variables de Ambiente, paso seguido vamos a inicializar el directorio de claves: #sh cleanall
OpenVPN una conexión segura y por ultimo ejecutamos el siguiente script: #sh buildca Con este ultimo se generara el certificado CA, y nos pedirá varios datos, los cuales recomiendo que sean lo mas reales posibles, ya que en futuras configuraciones nos va a requerir algún dato del mismo.
OpenVPN una conexión segura Ejemplo en la generación del certificado: Generating a 1024 bit RSA private key ..................++++++ .......++++++ writing new private key to 'ca.key' You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. Country Name (2 letter code) [KG]:AR State or Province Name (full name) [NA]:Buenos Aires Locality Name (eg, city) [BISHKEK]:La Plata Organization Name (eg, company) [OpenVPNTEST]:Central Tech Organizational Unit Name (eg, section) []:IT Common Name (eg, your name or your server's hostname) []:emilianox (Nota: no dejar en blanco common name!)
OpenVPN una conexión segura Una vez realizado el paso anterior nos creara dos archivos (servidor.crt y servidor.key) dentro de /etc/openvpn/easyrsa/2.0/keys, los cuales luego tendremos que copiarlos en /etc/openvpn.
Certificado y clave de encriptación (Servidor y Clientes) Ahora lo que vamos a realizar es generar el correspondiente certificado del servidor y su clave de encriptación, para ello vamos a realizar lo siguiente: #sh buildkeyserver servidor Nos va a pedir distintos datos nuevamente, de los cuales Country Name, Stat or Province Name, Locality Name y Organization Name, se nos va a pedir que Sean iguales a los que hayamos puesto en el certificado CA, luego el resto podrán ser distintos y recomiendo que así sea para Common Name, que yo en mi caso lo nombre servidor: Todo esto nos va a crear dos archivos (servidor.crt y servidor.key) dentro de /etc/openvpn/easyrsa/2.0/keys, los cuales luego tendremos que copiarlos en /etc/openvpn.
OpenVPN una conexión segura Al igual que como con el servidor, con cada uno de los clientes debemos crear certificados y claves de encriptación, siendo individuales para cada uno de ellos, entonces procederemos a ejecutar el siguiente script: #sh buildkey cliente Al ejecutar este script le pasamos el parámetro “cliente”, que será a su vez el nombre que se le asignara a los certificados y claves de encriptación de cada cliente, si necesitamos generar más certificados y claves de encriptación para otros clientes, debemos repetir el paso anterior, cambiando únicamente el parámetro que le pasamos, ejemplo: #sh buildkey cliente2 #sh buildkey cliente3
OpenVPN una conexión segura Generando el parametro Diffie-Hellman Con la ejecución del siguiente script, generaremos el parámetro DiffieHellman, el mismo nos proporcionara el intercambio de claves de forma segura. Para ello realizamos lo siguiente: #sh builddh Esto nos creara el archivo dh1024.pem dentro del directorio /etc/openvpn/easy rsa/2.0/keys.
OpenVPN una conexión segura Cada cosa a su lugar!
Una vez realizado todos los pasos anteriores, veremos que tenemos varios archivos dentro de /etc/openvpn/easyrsa/2.0/keys, algunos tendremos que copiarlos en el cliente y otros en el servidor.
Servidor Los archivos que tendremos que copiar en el servidor, más precisamente dentro del directorio /etc/openvpn, son: *ca.crt *servidor.key *servidor.crt *dh1024.pem Nota: en el caso que creemos mas adelante claves de encriptación y certificados para mas clientes, lo que se nos pedirá será que los archivos ca.crt y ca.key, estén dentro del directorio /etc/openvpn/easyrsa/2.0/keys
OpenVPN una conexión segura Cliente Como lo hicimos con el servidor, necesitamos tener el certificado y las clave de encriptación dentro del directorio /etc/openvpn de cada cliente, los archivos que necesitaremos copiar son los siguientes: *ca.crt *cliente.crt *cliente.key En un lugar muy seguro !!! ca.key
OpenVPN una conexión segura Archivo de configuración del servidor Por ultimo para que el servidor sepa los parametros a tomar debemos crear un archivo de configuración, como por ejemplo server.conf, este podra contener los siguientes parametros: port 1194 proto udp dev tun ca ca.crt cert servidor.crt key servidor.key dh dh1024.pem server 10.7.0.0 255.255.255.0 ifconfigpoolpersist ipp.txt push "route 192.168.1.0 255.255.255.0" keepalive 10 120 complzo user nobody group nobody persistkey
OpenVPN una conexión segura persisttun status openvpnstatus.log log openvpn.log verb 4 Los parámetros que podemos destacar son: *ca: esta indicando como se llama el certificado de autoridad. *cert: indica como se llama el certificado del servidor *key: nombre de la clave de encriptación. *dh: como se llama el parámetro DiffieHellman. *Server: indica las direcciones IP que se le asignaran a las interfaces TUN/TAP de los clientes, el servidor tendrá la .1, o sea que para nuestro caso será la 10.7.0.1. *push: Le indica a el servidor que red podrá ser alcanzada por los clientes que se conecten a el.
OpenVPN una conexión segura Archivo de configuración del cliente Al igual que lo hicimos con el servidor, en el cliente tambien necesitamos tener un archivo de configuración, para indicarle los distintos parametros a tomar. El mismo puede contener los siguientes parametros: client dev tun proto udp remote emiliano.ath.cx resolvretry infinite nobind user nobody group nobody persistkey persisttun ca ca.crt cert cliente.crt key cliente.key complzo verb 4
OpenVPN una conexión segura Algunos parámetros a destacar son: *client: actuara como cliente y algunas configuraciones las tomará del servidor. *nobind: que no actúe como servidor, que solamente vaya como cliente. *ca: esta indicando como se llama el certificado de autoridad. *cert: indica como se llama el certificado del cliente *key: nombre de la clave de encriptación.
Cliente Windows
Lo primero a realizar sera descargar el ejecutable desde el sitio: http://openvpn.se/download.html, luego una vez instalado tenemos que crear un archivo con la extencion .ovpn dentro de c:\Archivos de programa\OpenVPN\config\ en el cual incluiremos el las siguientes lineas y tambien dentro de este directorio debemos copiar las claves y certificados provistos por el servidor. El archivo de configuración podra ser como el siguiente:
OpenVPN una conexión segura client port 1194 dev tun proto udp remote emiliano.ath.cx resolvretry infinite nobind persistkey persisttun ca "c:\\archivos de programa\\openvpn\\config\\ca.crt" cert "c:\\archivos de programa\\openvpn\\config\\cliente.crt" key "c:\\archivos de programa\\openvpn\\config\\cliente.key" complzo verb 4
OpenVPN una conexión segura Iniciando el servicio A esta altura ya estamos listos para iniciar el servicio, en nuestro caso lo haremos de la siguiente manera (tanto para el servidor como para el cliente): #/etc/init.d/openvpn start Y en el caso que tengamos clientes en Windows, primero debemos levantar el servicio en el servidor como indicamos anteriormente y luego con solo hacer doble click sobre el icono que aparece abajo a la derecha (al lado del reloj, un icono con dos monitores en rojo), se empezara a iniciar el servicio y veremos en pantalla paso a paso la conexión con el servidor, hasta que el icono pase a color verde indicandonos que ya esta establecida la conexión.
OpenVPN una conexión segura Ahora si, la prueba...
Como dijo Tu sam: Puede Fallar.
OpenVPN una conexión segura Algunos Tips: Siempre usar ambientes IKE, y evitar ya sea por apuro o poca paciencia, el armado de tuneles con llaves precompartidas (poco seguro y no se puede aplicar en no repudio). ●
Controlar el horario del servidor y los clientes, ya que al crear y validar los certificados puede llegar a fallar. ●
●
Tratar de generar los certificados y llaves en un equipo separado de la Lan.
●
Guardar con sumo la llave privada de la entidad certificante (ca.key).
●
No enviar los certificados y llaves a travez de medios inseguros.
Lectura recomendada: OpenVPN: Building and Integrating Virtual Private Networks Pagina Oficial del proyecto: http://www.openvpn.net
OpenVPN una conexión segura Tarea para el Hogar ! (o si nos invitan para las V Jornadas :) )
●
Metodos de autenticación.
●
Hardening
Revocación de certificados
●
●
Configuración Red a Red
OpenVPN una conexión segura Preguntas ?