Anda di halaman 1dari 8

OpenVPN/Ejemplo de configuracin con claves asimtricas

OpenVPN/Ejemplo de configuracin con claves asimtricas


En el presente trabajo se mostrar con un ejemplo prctico la implementacin de una red privada virtual tanto del lado del cliente como del servidor, incluyendo la generacin de certificados de seguridad. Se tomar como caso de estudio una situacin bastante comn como es la de un usuario remoto que necesita conectarse a la red de la oficina mediante Internet pasando a tomar parte de dicha red como si fuese un puesto ms de la misma.

Instalacin del software


Se necesita instalar lo siguiente:
Paquete OpenSSL en Debian o Ubuntu aptitude install openssl en otro Linux Descargar de http:/ / www. openssl. org y seguir las instrucciones [1] [2]

LZO (opcional si se quiere compresin ) aptitude install liblzo1 OpenVPN Controlador tun/tap aptitude install openvpn Ya incluido en kernel superior a 2.4.7

Preparando la prueba
Para poder hacer las pruebas sin tener que contar con varias mquinas reales, vamos a valernos de mquinas virtuales, que en este caso generaremos con vmware-server, aprovechando que recientemente lo liberaron como free. Instalamos linux en una mquina virtual y luego la clonamos 3 veces de modo de contar con dos servidores y dos clientes. Es decir, para hacerlo ms interesante, estaremos suponiendo entonces que el usuario remoto no se conectar directamente a Internet sino que en su hogar tambin tiene una red domstica que sale al mundo a travs de un router/firewall, como suele verse cada vez con ms frecuencia, sobre todo cuando tenemos hijos que quieren jugar con la computadora de la familia mientras nosotros queremos trabajar con el notebook y todos necesitamos salir a Internet. Eso permitir mostrar alguna configuracin adicional que se necesita implementar a los efectos de que todos los pc's de la casa puedan conectarse transparentemente a la oficina, aunque tal vez no sea lo ms adecuado si los dems pc's son los de los nios.

OpenVPN/Ejemplo de configuracin con claves asimtricas

Arquitectura
Router de Casa: ifconfig eth0 192.168.6.1 netmask 255.255.255.252 ifconfig eth1 192.168.1.1 netmask 255.255.255.0 Router de la Oficina ifconfig eth0 192.168.6.2 netmask 255.255.255.252 ifconfig eth1 10.66.0.1 netmask 255.255.255.0 En este caso no tenemos Internet en medio, por lo que las interfaces eth0 de cada router las pusimos en realidad en la misma red para que se puedan ver. NOTA: Para que los paquetes puedan pasar de una interfaz a otra en los routers/firewalls se debe habilitar el ruteo entre ellas. En el caso de Linux bastar con decirle al kernel que queremos que dicho ruteo se lleve a cabo, lo cual lograremos con el siguiente comando: echo 1 > /proc/sys/net/ipv4/ip_forward Eso solo tendr efecto hasta que apaguemos la computadora, con lo cual si se desea rutear permanentemente debemos indicarlo en algn script de inicio del sistema. En el caso de Ubuntu podemos indicarlo simplemente cambiando un 0 por un 1 en la lnea correspondiente de /etc/sysctl.conf Ej. net/ipv4/ip_forward=1 Tambin es posible habilitar el forwarding desde el script de OpenVPN.

Certificados y claves RSA


Como explicamos en la aproximacin terica previa, existen dos formas de lograr seguridad, uno basado en SSL/TLS mediante certificados y claves RSA y otro en mediante claves estticas pre-compartidas. En este caso usaremos SSL/TLS ya que es ms seguro. Para construir certificados y claves RSA usamos el comando openssl. Para poder generar certificados vamos a necesitar un certificado raz. En nuestro caso generaremos uno propio y por lo tanto seremos nuestra propia CA (Autoridad Certificadora).

Hoja de ruta
1.Crear un certificado-CA con el cual firmaremos y revocaremos certificados de clientes 2.Crear un certificado y una clave pblica para los clientes 3.Firmar ese certificado usan el certificado-CA 4.Distribuir la clave y certificados a los clientes 5.Configurar los scripts del servidor y de los clientes

Para los primeros 3 pasos vamos a utilizar una serie de scripts que nos facilitarn la vida dado que invocan los comandos adecuados con unos cuantos parmetros por default. Generales 1. usr@ubusrv:~$ mkdir /etc/openvpn 2. usr@ubusrv:~$ cp /usr/share/doc/openvpn/examples/easy-rsa /etc/openvpn 3. usr@ubusrv:~$ cd /etc/openvpn/easy-rsa 4. editar el archivo vars y cambiar las ultimas 5 variables a nuestro gusto sin dejar ninguna vaca:

export KEY_COUNTRY=URUGUAY export KEY_PROVINCE=MO

OpenVPN/Ejemplo de configuracin con claves asimtricas export KEY_CITY=Montevideo export KEY_ORG="OpenVPN-TEST" export KEY_EMAIL="yo@mihost.midominio" 5. usr@ubusrv:~$ . vars 6. usr@ubusrv:~$ ./clean-all Clave Diffie-Hellman y CA Ahora creamos la clave Diffie-Hellman con el script build-dh lo cual tardar varios minutos usr@ubusrv:~$ ./build-dh Generating DH parameters, 1024 bit long safe prime, generator 2 This is going to take a long time ....+........+.+......+.......................+..................(...) Creamos el certificado para la CA usr@ubusrv:~$ ./build-ca Generating a 1024 bit RSA private key ......................................++++++ writing new private key to 'ca.key' ----A esta altura deben haber quedado creados los siguientes archivos en el subdirectorio keys: dh1024.pem ca.crt ca.key Par Certificado/Clave del servidor De los diferentes datos que se irn preguntando el que realmente importa es el Common Name dado que el mismo ser utilizado textualmente en la configuracin de los clientes. Usaremos Common Name = openvpn-server Tambin aparecern dos preguntas a las que responderemos afirmativamente. usr@ubusrv:~$ ./build-key-server openvpn-server Eso crear los archivos: openvpn-server.crt openvpn-server.key openvpn-server.csr Hasta ahora hemos logrado tener el certificado de la CA y el certificado y clave para el primer PC de la red virtual. Par Certificado/Clave de los clientes Es muy similar a lo realizado para el servidor pero con otro script. Nuevamente poner atencin al Comman Name = openvpn-client1 usr@ubusrv:~$ ./build-key openvpn-client1 Eso crear los archivos: openvpn-client1.crt openvpn-client1.key openvpn-client1.csr

OpenVPN/Ejemplo de configuracin con claves asimtricas Distribucin de claves y certificados El paso siguiente ser determinar cuales archivos de los generados debern quedar en el servidor y cuales deben ser enviados a los clientes. ATENCIN: Necesitar enviar algunos de los archivos por algn canal seguro a sus clientes, para lo cual debe asegurarse que el mecanismo de seguridad de dicho envo sea adecuado, dado que de otro modo de nada servir todo el trabajo que nos estamos tomando. A continuacin se presenta una tabla en la que se muestra en donde va cada archivo y si debe ser celosamente guardado en secreto o no.
Archivo dh1024.pem ca.crt ca.key openvpn-server.crt Descripcin Parmetros Diffie Hellman servidor Certificado raz CA Clave raz CA Certificado del servidor servidor y todos los clientes Ubicacin Secreto No

nicamente la mquina encargada de firmar Si servidor servidor cliente cliente No Si No Si

openvpn-server.key Clave del servidor openvpn-client1.crt Certificado del cliente

openvpn-client1.key Clave del cliente

Configuracin de script del Servidor 1. usr@ubusrv:~$ cd /etc/openvpn 2. usr@ubusrv:~$ mkdir ccd 3. usr@ubusrv:~$ gzip -d /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz Con eso tendremos un archivo llamado server.conf al que le haremos varias modificaciones para adaptarlo a nuestras necesidades:
Variable port proto dev ca cert key dh server push 1194 tcp tun ca.crt openvpn-server.crt openvpn-server.key dh1024.pem 10.8.0.0 255.255.255.0 route 10.66.0.0 255.255.255.252 Valor Comentario puede cambiarse por cualquier otro que queramos, pero los clientes deben saber dicho valor para saber a donde conectarse tambin pude ser udp pero el cliente debe configurarse de la misma forma tun se usa para conexiones de clave asimtrica. tap puede ser usado para configuraciones ms sencillas de clave simtrica pre-compartida El certificado CA que generamos El certificado del servidor que generamos La clave privada que generamos Parmetros Diffie Hellman Red virtual a utilizar. Cada cliente debe poder alcanzar dicha red Provocar que el cliente cuando se conecte agregue una ruta adecuada para alcanzar la red de la oficina Directorio en donde se agregarn archivos con informacin de ruteo para cada cliente que se conecte

client-config-dir ccd route

192.168.1.0 255.255.255.0 Agregar una ruta del lado del servidor para alcanzar la red de la casa

Adems ser necesario para cada cliente potencial que se conecte, crear un archivo en /etc/openvpn/ccd con el mismo nombre del Common Name de los mismos.

OpenVPN/Ejemplo de configuracin con claves asimtricas Esto solo es necesario para los casos en que el cliente no es un puesto conectado directo a Internet sino que se tratad de una red domstica, tal cual es el ejemplo que venimos siguiendo. Ejemplo: usr@ubusrv:~$ echo iroute 192.168.1.0 255.255.255.0 > /etc/openvpn/ccd/openvpn-client1 Configuracin del script del cliente 1. usr@ubusrv:~$ cd /etc/openvpn 2. usr@ubusrv:~$ cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf . Con eso tendremos un archivo llamado client.conf al que le haremos varias modificaciones para adaptarlo a nuestras necesidades:
Variable client proto dev ca remote cert key tcp tun ca.crt 192.168.6.2 443 openvpn-client.crt Valor Indica que es una configuracin cliente tambin pude ser udp pero debe coincidir con la configuracin del servidor tun se usa para conexiones de clave asimtrica. tap puede ser usado para configuraciones ms sencillas de clave simtrica pre-compartida El certificado CA que generamos IP de la interfaz pblica del servidor de la oficina y puerto en el que est escuchando el OpenVPN instalado all El certificado que generamos en el servidor y copiamos en el cliente por algn mtodo seguro Comentario

openvpn-client.key La clave privada que nos generaron en el servidor

Retoques en los firewalls


Hay que tener en cuenta que en este ejemplo trabajamos con mquinas virtuales, dos de ellas haciendo las veces de router pero sin firewall. Cuando tenemos firewall en los servidores hay que tener en cuenta que se necesita agregar reglas que permitan el flujo por el nuevo tnel. Eso es muy fcil de hacer, ya que cuando se establece el tnel, se crean interfaces virtuales tunX, que podremos usar en reglas de iptables para filtrar por ellas. Tambin es seguro, ya que el tnel solo permite trfico desde puntos autorizados, con lo cual tranquilamente podemos permitir todo el trfico en dichas interfaces. Ej. iptables -A INPUT -i tun+ -j ACCEPT iptables -A FORWARD -i tun+ -j ACCEPT iptables -A OUTPUT -o tun+ -j ACCEPT iptables -A FORWARD -o tun+ -j ACCEPT

OpenVPN/Ejemplo de configuracin con claves asimtricas

Arranque automtico
El servidor puede arrancarse de forma manual como se explicar en el siguiente prrafo o tambin puede ejecutar como demonio. P ara ello existen dos caminos tradicionales. 1.Configurar el servicio xinetd para que escuche en el puerto configurado e invoque al openvpn cuando ingresa alguna conexin. 2.Crear un script de inicio en /etc/init.d y configurarlo en los runlevels adecuados. Personalmente me gusta ms la segunda opcin y en sitio de OpenVPN hay varios ejemplos para diversas distribuciones. En dicho script sera conveniente tener una lnea similar a la siguiente: En SuSE: startproc $OPENVPN_BIN --cd $OPENVPN_DIRCONFIG --config $OPENVPN_FILECONFIG log-append $log En Debian / Ubuntu: openvpn --daemon --writepid $piddir/$bn.pid --config $c --cd $work --log-append $log

A probar Por fin !!!


Para probar, levantaremos la VPN en forma manual. En el lado del servidor: 1. usr@ubusrv:~$ cd /etc/openvpn 2. usr@ubusrv:~$ openvpn --config server.conf En el lado del cliente: 1. usr@ubusrv:~$ cd /etc/openvpn 2. usr@ubusrv:~$ openvpn --config client.conf Abrir una terminal en cualquier pc de la casa y hacer algunas pruebas: ping 10.66.0.1 ping 10.66.0.202 ssh 10.66.0.202

Bibliografa
OpenVPN: Building and Integrating Virtual Private Networks Markus Feilner ISBN 1-904811-85 Sito web de OpenVPN. http://openvpn.net/howto.htm Sitio web de Ubuntu. http://www.ubuntu-es.org/node/5290 http://laurel.datsi.fi.upm.es/~rpons/openvpn_como/ En Linux: usr@ubusrv:~$ /usr/share/doc/openvpn usr@ubusrv:~$ man openvpn

OpenVPN/Ejemplo de configuracin con claves asimtricas

Eso es todo amigos!!!

Referencias
[1] http:/ / www. oberhumer. com/ opensource/ lzo/ [2] http:/ / prdownloads. sourceforge. net/ openvpn/ openvpn-1. 6. 0. tar. gz

Fuentes y contribuyentes del artculo

Fuentes y contribuyentes del artculo


OpenVPN/Ejemplo de configuracin con claves asimtricas Fuente: http://es.wikibooks.org/w/index.php?oldid=144773 Contribuyentes: Johnygbc, Lbutrico, MarcoAurelio, 5 ediciones annimas

Licencia
Creative Commons Attribution-Share Alike 3.0 Unported //creativecommons.org/licenses/by-sa/3.0/

Anda mungkin juga menyukai