Sunteți pe pagina 1din 31

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/easy­rsa /etc/openvpn

Y luego accedemos al directorio:

# cd /etc/openvpn/easy­rsa/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 clean­all
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 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) [OpenVPN­TEST]: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/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, 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/easy­rsa/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 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


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­dh
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/easy­rsa/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/easy­rsa/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
ifconfig­pool­persist ipp.txt
push "route 192.168.1.0 255.255.255.0"
keepalive 10 120
comp­lzo
user nobody
group nobody
persist­key
OpenVPN una conexión segura

persist­tun
status openvpn­status.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 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.
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
resolv­retry infinite
nobind
user nobody
group nobody
persist­key
persist­tun
ca ca.crt
cert cliente.crt
key cliente.key
comp­lzo
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
resolv­retry infinite
nobind
persist­key
persist­tun
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"
comp­lzo
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 ?

S-ar putea să vă placă și