18 oct 2008

OpenVPN (RoadWarrior)

SercH: "OpenVPN (RoadWarrior)

Que tal lectores, aqui les dejo un breve pero muy buen articulo para que puedan configurar y poner a trabajar OpenVPN en la forma RoadWarrior.

Preparando el Servidor"

Para poder hacer los siguiente ya debemos de tener instalado OpenVPN en nuestro servidor.

Lo primero que debemos de hacer es crear los certificados y claves, esto es facil en openvpn ya que cuenta con algunos scripts ya armados que nos ayudaran a hacer esto. Por eso lo primero que recomiendo que hagamos es copiar el directorio donde estan almacenados los scripts a /etc/openvpn que sera el directorio donde tendremos los archivos de configuracion.Para hacer lo que acabamos de mencionar ejecutamos el siguiente comando:


#cp -a /usr/share/doc/openvpn/examples/easy-rsa /etc/openvpn
#cd /etc/openvpn/easy-rsa


Creando el Certificado de Autoridad

Una vez copiado los scripts y estando en la carpeta a donde los copiamos ahora lo que vamos a hacer es generar el certificado de autoridad (CA); este se genera por unica vez en el servidor y sera uno de los arcivos que tendremos que copiar y enviar a los clientes, para que al intentar conectarse con el server se verifique este certificado y el servidor de los correspondientes permisos. Bueno empezemos con el siguiente comando:

#. vars

al ejecutar este comando estaremos inicializando las variales de ambiente y nos debera aparecer algo como esto:

#NOTE: when you run ./clean-all, I will be doing a rm -rf on
/etc/openvpn/easy-rsa/keys

Despues vamos a inicializar el directorio de las claves si ubiese algun archivo este script se encarga de limpiarlo:

#sh clean-all

Y por ultimo, ejecutamos el siguiente script:

#sh build-ca

con este ultimo script nos generara elcertificado de autoridad (CA) y nos pedira varios datos los cuales recomiendo que sean lo mas reales posibles ya que en futuras configuraciones se nos va a pedir alguno de estos datos lo que nos aparecera y los datos que nos pedira sera algo como esto:

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) [EUA]:MX
State or Province Name (full name) [San Francisco]:GDL
Locality Name (eg, city) [California]:JALISCO
Organization Name (eg, company) [OpenVPN-TEST]:OFICINA
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server's hostname) []:openvpnserver
Email Address [me@myhost.mydomain]:serch@hotmail.com

OJO: NO DEJAR EN BLANCO Common Name

Creando Certificado Certificado y Clave para Servidor

Ahora vamos a generar el correspondiente certifatiado del servidor como tambien su clave de encriptacion para lo cual vamos a hacer lo siguiente:

#sh build-key-server servidor

nos va a pedir ciertos datos nuevamente, estos tendran que ser iguales a los que ingresamos en el certificado de CA como son Country Name, State or Province Name, Locality Name y Organization Name y el resto podra ser distinto:


sh build-key-server servidor
Generating a 1024 bit RSA private key
......................++++++
.........................++++++
writing new private key to 'servidor.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) [EUA]:MX
State or Province Name (full name) [San Francisco]:GDL
Locality Name (eg, city) [California]:JALISCO
Organization Name (eg, company) [OpenVPN-TEST]:OFICINA
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server's hostname) []:servidor
Email Address [me@myhost.mydomain]:serch@hotmail.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /etc/openvpn/easy-rsa/openssl.cnf
Check that the request matches the signature
Signature ok


Esto creara dos archivos ( servidor.crt y servidor.key ) en la carpeta /etc/openvpn/easy-rsa/keys los cuales debemos de copiarlos a /etc/openvpn


Creando Certificados y Claves de Encriptacion para los Clientes


Lo mismo que hicimos en el paso anterior lo haremos pero ahora para los clientes, esto lo debemos de hacer el numero de veces que sea necesario para crear los certificados para los clientes que se vallan a conectar, ahora ejecutamos el siguiente script:

#sh build-key cliente

De la misma forma que con el servidor nos va a pedir datos de nuevo entre los cuales seran Country Name, State or Province Name, Locality Name y Organization Name estos tambien tendran que ser identicos a los antes ingresados el resto sera diferente:

sh build-key client1

Generating a 1024 bit RSA private key

...............................................................................................++++++

......++++++

writing new private key to 'cliente.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) [EUA]:MX
State or Province Name (full name) [San Francisco]:GDL
Locality Name (eg, city) [California]:JALISCO
Organization Name (eg, company) [OpenVPN-TEST]:OFICINA
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server's hostname) []:cliente
Email Address [me@myhost.mydomain]:serch@hotmail.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /etc/openvpn/easy-rsa/openssl.cnf
Check that the request matches the signature
Signature ok

Al ejecutar el script le pasamos el parametro "cliente", que sera el nombre que tendra el certificado y claves de encriptacion. Si necesitas generar nuevos certificados y llaves para mas clientes se ejecuta el script cambiando solo que le pasamos ejemplo:

#sh build-key cliente2

de esta forma generaremos certificado y llave de encriptacion con el nombre cliente2.

Generando Parametro De Diffie-Hellman

Ejecutando el siguiente script, generaremos el parametro Diffie-Hellman. Este lo que hara es generarnos el cambio de llaves de forma segura, para ello ejecutamos el siguiente comando:

#sh build-dh

Al hacer esto se creara un archivo dh1024.pem dentro del directorio /etc/openvpn/easy-rsa/keys y lo deberemos de copiar dentro de /etc/openvpn, como se explica a continuacion.


Copiando Cada Cosa En Su Lugar

Una vez hecho todo lo anterior tendremo varios archivos en el directorio /etc/openvpn/easy-rsa/key: algunos se copiaran en el cliente y otros en el servidor, vamos a ver cuales hay que copiar y a donde.

SERVIDOR: En el servidor copiaremos al directorio /etc/openvpn los siguientes archivos:

*ca.crt
*ca.key
*servidor.key
*servidor.crt
*dh1024.pem

Nota: En el caso de que creemos mas adelante mas certificados y claves para mas cleintes se nos pedira que los archivos ca.crt y ca.key esten dentro de /etc/openvpn/easy-rsa/keys, ya que al ejecutar el script sh clear-all lo que hariamos sera limpiar todo lo que este en este directorio, es por eso que debemos copiarlos de regreso si vamos a crear nuevos certificados para clientes, lo podremos hacer de la siguiente manera:

cp /etc/openvpn/ca.crt /etc/openvpn/easy-rsa/keys
cp /etc/openvpn/ca.key /etc/openvpn/easy-rsa/keys

CLIENTE: Como lo hicmos con el servidor, ahora pasaremos los archivos necesarios al directorio /etc/openvpn de cada cliente. Estos son:

*ca.crt
*cliente.crt
*cliente.key


Configuracion Del Servidor

Para la configuracion necesitaremos crear un archivo de configuracion tanto para el servidor como para los clientes.Este contendra todos los parametros de configuracion y debera que tener la extension .conf y debera de estar alojado en /etc/openvpn. Veamos los parametros que debemos de poner al archivo, que en este caso se llamara servidor.conf.

port 1194
proto udp
dev tun
ca ca.crt
cert ca.crt
key servidor.key
dh dh1024.pem
server 10.8.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
persist-key
persist-tun
status openvpn-status.log
verb 4

Parametros a destacar:

* ca: indica como se llama el certificado de autoridad.
* cert: indica como se llama el certificado del servidor.
* key: nombre de la clave de encriptacion.
* dh: indica como se llama el parametro Diffie-Hellman.
* Server: indica las direcciones que se le asignaran a las interfaces TUN/TAP
de los clientes, el servidro siempre tendra la .1.
*push: le indica al servidor que red podra tener alcance los clientes que se
conecten con el.


Configuracion Del Cliente

Como lo habiamos dicho anteriormente los clientes tambien deberan de tener su archivo de configuracion que tendra al igual que el servidor la extension .conf y estar ubicado en /etc/openvpn. Estos con los parametros del archivo de configuracion del cliente llamado cliente.conf.


client
dev tun
proto udp
remote miempresa.dyndns.org
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

Parametros a destacar:

* client: actuara como cliente, y algunas configuraciones las tomara del servidor.
* nobind: que no actue como servidor, que solamente vaya como cliente
* ca: indica como se llama el certificado de autoridad.
* cert: indica como se llama el certificado del servidor.
* key: nombre de la clave de encriptacion.

Configuracion Cliente Windows

Una de las virtudes de OpenVPN es que esta preparado para trabajar entre distintas plataformas que seguramente a muchos de nosotros nos suceda. Es por esto que vamos a ver de donde y como configurar la aplicacion para windows asi como donde se tienen que alojar los diferentes archivos que mencionamos con anterioridad.

Bueno al Grano:

Primero descargaremos el paquete para windows de la siguiente pagina http://openvpn.net/index.php/downloads.html de donde bajaremos la version OpenVPN 2.1_rc12 -- released on 2008.09.23 o la mas reciente que sea rc ya que esta ya viene preparada para trabajar con el problematico pero muy vendido windows vista. Lo instalamos como cualquier programa de windows y nos lo instalara en C:\Archvivos de programa\OpenVPN aqui dentro hay otro directorio que se llama config y sera dentro de este donde debemos de copiar los certificados y las cables de encriptacion generados por el servidor, tambien aqui sera donde crearemos el archivo de configuracion tal cual lo hicimos con GNU/LINUX. La unica diferencia es que este archivo de configuracion llevara la extension .ovpn para que pueda ser reconocido por el programa; y ademas debemos de comentar las lineas user nobody y group nobody, ya que windows necesita ejecutar la aplicacion como administrador. Otra diferencia es que hay que indicarle la ubicacion del certificado y llave de encpritacion usando "\\" para indicar los directorios. A continuacion veremos un ejemplo del archivo cliente.ovpn:

client
dev tun
proto udp
float
remote miempresa.dyndns.org
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

Con esto tendremos el archivo de configuracion de nuestro cliente.


Iniciando Cliente Bajo Windows

En la parte inferior derecha (a un lado del reloj) tendremos dos computadoras en rojo y un mundo para iniciar el cleinte debemos de dar doble click en el icono e inmediatamente se abrira una ventana donde nos mostrara el proceso de conexion con el servidor hasta que se nos asigne una direccion IP que estara en el rango 10.8.0.0
y las dos computadores se deberan de poner en verde y una vez realizada esto tambien se conectara nuestra interface TUN/TAP.


IPTABLES

En Iptables solo hay que permitir el trafico entre la interface tun0 y la red interna de la siguiente manera:

/sbin/iptables -A FORWARD -i tun0 -s 10.8.0.0/24 -d 192.168.1.0/24 -j ACCEPT


Con esto tendremos configurado y Funcionado un Servidor OpenVPN en RoadWarrior

No hay comentarios: