31
OpenVPN una conexión segura Emiliano Piscitelli

OpenVPN-Emiliano_Piscitelli

  • Upload
    ogslash

  • View
    643

  • Download
    1

Embed Size (px)

Citation preview

Page 1: OpenVPN-Emiliano_Piscitelli

OpenVPN una conexión segura

Emiliano Piscitelli

Page 2: OpenVPN-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

Page 3: OpenVPN-Emiliano_Piscitelli

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).

Page 4: OpenVPN-Emiliano_Piscitelli

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.

Page 5: OpenVPN-Emiliano_Piscitelli

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.

Page 6: OpenVPN-Emiliano_Piscitelli

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.

Page 7: OpenVPN-Emiliano_Piscitelli

OpenVPN una conexión seguraOpciones y comparativasEn 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.

Page 8: OpenVPN-Emiliano_Piscitelli

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.

Page 9: OpenVPN-Emiliano_Piscitelli

OpenVPN una conexión seguraSSL/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.

Page 10: OpenVPN-Emiliano_Piscitelli

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.

Page 11: OpenVPN-Emiliano_Piscitelli

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.

Page 12: OpenVPN-Emiliano_Piscitelli

OpenVPN una conexión seguraInstalando 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.

Page 13: OpenVPN-Emiliano_Piscitelli

OpenVPN una conexión seguraPreparando 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/easy­rsa /etc/openvpn

Y luego accedemos al directorio:

# cd /etc/openvpn/easy­rsa/2.0/

Page 14: OpenVPN-Emiliano_Piscitelli

OpenVPN una conexión seguraCreando 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:

#. varsAl ejecutar . vars, lo que estaremos haciendo será inicializar las variables de Ambiente, paso seguido vamos a inicializar el directorio de claves:

#sh clean­all

Page 15: OpenVPN-Emiliano_Piscitelli

OpenVPN una conexión segura

y por ultimo ejecutamos el siguiente script: #sh build­ca

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 nosva a requerir algún dato del mismo.

Page 16: OpenVPN-Emiliano_Piscitelli

OpenVPN una conexión seguraEjemplo 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 blankFor some fields there will be a default value,If you enter '.', the field will be left blank.­­­­­Country Name (2 letter code) [KG]:ARState or Province Name (full name) [NA]:Buenos AiresLocality Name (eg, city) [BISHKEK]:La PlataOrganization Name (eg, company) [OpenVPN­TEST]:Central TechOrganizational Unit Name (eg, section) []:ITCommon Name (eg, your name or your server's hostname) []:emilianox (Nota: no dejar en blanco common name!)

Page 17: OpenVPN-Emiliano_Piscitelli

OpenVPN una conexión seguraUna vez realizado el paso anterior nos creara dos archivos (servidor.crt y servidor.key) dentro de /etc/openvpn/easy­rsa/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 servidory su clave de encriptación, para ello vamos a realizar lo siguiente: #sh build­key­server servidor

Nos va a pedir distintos datos nuevamente, de los cuales Country Name, Stator Province Name, Locality Name y Organization Name, se nos va a pedir queSean 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 yoen mi caso lo nombre servidor:

Todo esto nos va a crear dos archivos (servidor.crt y servidor.key) dentro de /etc/openvpn/easy­rsa/2.0/keys, los cuales luego tendremos que copiarlos en /etc/openvpn.

Page 18: OpenVPN-Emiliano_Piscitelli

OpenVPN una conexión seguraAl 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 build­key 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 build­key cliente2 #sh build­key cliente3

Page 19: OpenVPN-Emiliano_Piscitelli

OpenVPN una conexión segura

Generando el parametro Diffie-Hellman

Con la ejecución del siguiente script, generaremos el parámetro Diffie­Hellman, el mismo nos proporcionara el intercambio de claves de forma segura. Para ello realizamos lo siguiente:

#sh build­dhEsto nos creara el archivo dh1024.pem dentro del directorio /etc/openvpn/easy­rsa/2.0/keys.

Page 20: OpenVPN-Emiliano_Piscitelli

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/easy­rsa/2.0/keys, algunos tendremos que copiarlos en el cliente y otros en el servidor.

ServidorLos 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/easy­rsa/2.0/keys

Page 21: OpenVPN-Emiliano_Piscitelli

OpenVPN una conexión segura

ClienteComo 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

Page 22: OpenVPN-Emiliano_Piscitelli

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 1194proto udpdev tunca ca.crtcert servidor.crtkey servidor.keydh dh1024.pemserver 10.7.0.0 255.255.255.0ifconfig­pool­persist ipp.txtpush "route 192.168.1.0 255.255.255.0"keepalive 10 120comp­lzouser nobodygroup nobodypersist­key

Page 23: OpenVPN-Emiliano_Piscitelli

OpenVPN una conexión segura

persist­tun status openvpn­status.loglog openvpn.logverb 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 Diffie­Hellman.*­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.

Page 24: OpenVPN-Emiliano_Piscitelli

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:

clientdev tunproto udpremote emiliano.ath.cxresolv­retry infinitenobinduser nobodygroup nobodypersist­keypersist­tunca ca.crtcert cliente.crtkey cliente.keycomp­lzoverb 4

Page 25: OpenVPN-Emiliano_Piscitelli

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 WindowsLo 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:

Page 26: OpenVPN-Emiliano_Piscitelli

OpenVPN una conexión seguraclientport 1194dev tunproto udpremote emiliano.ath.cx resolv­retry infinitenobindpersist­keypersist­tunca "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"comp­lzoverb 4

Page 27: OpenVPN-Emiliano_Piscitelli

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.

Page 28: OpenVPN-Emiliano_Piscitelli

OpenVPN una conexión segura

Tarea para el Hogar ! (o si nos invitan para las V Jornadas :) )

● Metodos de autenticación.

● Revocación de certificados

● Configuración Red a Red

Ahora si, la prueba...

Como dijo Tu sam: Puede Fallar.

Page 29: OpenVPN-Emiliano_Piscitelli

OpenVPN una conexión seguraAlgunos 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

Page 30: OpenVPN-Emiliano_Piscitelli

OpenVPN una conexión seguraTarea 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

Page 31: OpenVPN-Emiliano_Piscitelli

OpenVPN una conexión segura

Agenda

● Conceptos de VPN's● Tipos de VPN's● Que es OpenVPN● Generando la IKE● Configuración RoadWarrior● Diferencias con clientes Windows● Prueba en Vivo● Tips● Preguntas

Preguntas ?