25
Creación de VPN's con OpenVPN 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).

Charla Openvpn

Embed Size (px)

DESCRIPTION

openvpn

Citation preview

Page 1: Charla Openvpn

Creación de VPN's con OpenVPN

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 2: Charla Openvpn

Creación de VPN's con OpenVPN

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 3: Charla Openvpn

Creación de VPN's con OpenVPN

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 4: Charla Openvpn

Creación de VPN's con OpenVPN

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 5: Charla Openvpn

Creación de VPN's con OpenVPN

Opciones 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 6: Charla Openvpn

Creación de VPN's con OpenVPN

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 7: Charla Openvpn

Creación de VPN's con OpenVPN

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.

Page 8: Charla Openvpn

Creación de VPN's con OpenVPN

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 9: Charla Openvpn

Creación de VPN's con OpenVPN

● 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 10: Charla Openvpn

Creación de VPN's con OpenVPN

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.

Page 11: Charla Openvpn

Creación de VPN's con OpenVPN

PREPARANDO EL SERVIDORPara 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 12: Charla Openvpn

Creación de VPN's con OpenVPN

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:

#. 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 13: Charla Openvpn

Creación de VPN's con OpenVPN

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

Page 14: Charla Openvpn

Creación de VPN's con OpenVPN

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 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 15: Charla Openvpn

Creación de VPN's con OpenVPN

Una 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 servidor y 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, State 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/easy-rsa/2.0/keys, los cuales luego tendremos que copiarlos en /etc/openvpn.

Page 16: Charla Openvpn

Creación de VPN's con OpenVPN

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 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 17: Charla Openvpn

Creación de VPN's con OpenVPN

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 18: Charla Openvpn

Creación de VPN's con OpenVPN

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 *-ca.key*-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 19: Charla Openvpn

Creación de VPN's con OpenVPN

ClienteComo lo hicimos con el servidor, necesitamos tener el certificado y las claves 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

Page 20: Charla Openvpn

Creación de VPN's con OpenVPN

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 21: Charla Openvpn

Creación de VPN's con OpenVPN

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 22: Charla Openvpn

Creación de VPN's con OpenVPN

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 23: Charla Openvpn

Creación de VPN's con OpenVPN

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 24: Charla Openvpn

Creación de VPN's con OpenVPN

clientport 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 25: Charla Openvpn

Creación de VPN's con OpenVPN

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.