Nos mudamos!

Nos mudamos a http://zoftweb.com Gracias por visitarnos!


domingo, mayo 24, 2009

OpenVPN EN Linux y Windows

En estos ultimos dias que he desaparecido de este blog me he estado trabajando con OpenVPN (una opcion de vpn libre) por un requerimiento de seguridad de la empresa donde trabajo.

Primero que nada comenzare con explicar una VPN, segun wikipedia es esto:

Es una tecnología de red que permite una extensión de la red local sobre una red
pública o no controlada, como por ejemplo internet.

Ejemplos comunes son, la posibilidad de conectar dos o más sucursales de una empresa utilizando como vínculo Internet, permitir a los miembros del equipo de soporte técnico la conexión desde su casa al centro de cómputo, o que un usuario pueda acceder a su equipo doméstico desde un sitio remoto, como por ejemplo un hotel. Todo ello utilizando la infraestructura de internet.

Esta tecnologia es mucho muy util al momento de tener que hacer una conexion a nuestra oficina o casa para transferir algun archivo pero de manera segura.

La seguridad se logra mediante la encripcion del trafico usando certificados para el cliente y el servidor, esto hace casi imposible que alguien pueda ver el trafico que pasa entre los 2 o mas puntos puntos.

Este tutorial pretende ayudar con ciertos problemas con los que me he encontrado al momento de las configuraciones pero primero que nada debemos obtener ya sea la version GUI para Windows o la version en linea de comando para Linux:

Windows ir a: openvpn.se

Linux ir a: openvpn.org


Windows: Una vez instalado el software nos aparecera una tercera interface de red, le daremos click derecho y renombraremos a cualquier nombre, en mi caso uso "openvpn".


Linux: en caso de contar Ubuntu podremos usar el comando "sudo apt-get install openvpn" para bajarlo desde los repositorios oficiales.

En caso de que no sea asi (no es mi caso) deberemos seguir estos pasos para la instalacion:

1.- abrimos el paquete

tar vxfz openvpn-numero_de_version.tar.gz

2.- nos ubicaremos en el nuevo directorio de Openvpn

cd openvpn-numero_de_version

3.- verificaremos que tengamos las dependencias necesarias

./configure

4.- si todo esta en orden empezaremos a construir

make


5.- despues instalaremos --nota este paso debe realizarse como superusuario

su
make install



Una vez que se compile e instale el paquete podremos ir al nuevo dir usando superusuario

cd /etc/openvpn


Windows: En la pc que sera el servidor


1.- Nos moveremos al directorio donde trabajaremos

c:\program files\openvpn\easy-rsa\


2.- Escribiremos

init-config

3.- Debemos configurar el archivo vars cambiando los ultimos valores del archivo por los nuestros

edit vars.bat

# These are the default values for fields
# which will be placed in the certificate.
# Don't leave any of these fields blank.
export KEY_COUNTRY=KG
export KEY_PROVINCE=NA
export KEY_CITY=BISHKEK
export KEY_ORG="OpenVPN-TEST"
export KEY_EMAIL="me@myhost.mydomain"

4. -una vez que este archivo se edite empezaremos a generar las llaves como sigue:

vars.bat

5.- Limpiaremos el directorio Keys

clean-all.bat

6.- Construiremos nuesta certificadora

build-ca.bat


Nota: En este paso (6) debemos ingresar la informacion tal cual nos la marca, existe un
campo que se llama Common Name, en ese en particular pondremos "server" y listo.


7.- Una vez que esto se complete construiremos la llave del servidor:

build-key-server.bat server

Nota: Una vez mas en Common Name ingresaremos el nombre "server" y los datos
por omision.


8.- Una vez que ese paso se complete debemos generar la llave para nuestro cliente:

build-key.bat cliente

Nota: Una vez mas en Common Name ingresaremos el nombre que hayamos
usado anteriormente para la llave (en el ejemplo puse cliente) y los datos por omision.


9.- Construimos la llave Diffie-Hellman

build-dh.bat

10.- Una vez que esto se complete podremos empezar con las conexiones hay que mover las llaves al directorio de config:

cp keys\ca.crt ..\config
cp keys\server.crt ..\config
cp keys\server.key ..\config
cp keys\dh1024.pem ..\config

11.- copiaremos el archivo de configuracion de servidor en el directorio de c:\program files\openvpn\config\server.ovpn:

# usaremos la ip del servidor (ejemplo: local 192.168.30.5)
;local a.b.c.d

# puerto en el que OpenVPN funcionara
port 1194

# TCP or UDP - En este punto he encontrado que
# al menos la primera vez debemos usar TCP para
# que el puerto se abra, despues de eso podremos
# cambiar a udp
proto tcp
;proto udp

# "dev tun" will create a routed IP tunnel,
# "dev tap" will create an ethernet tunnel.
# Use "dev tap0" if you are ethernet bridging
# and have precreated a tap0 virtual interface
# and bridged it with your ethernet interface.
# If you want to control access policies
# over the VPN, you must create firewall
# rules for the the TUN/TAP interface.
# On non-Windows systems, you can give
# an explicit unit number, such as tun0.
# On Windows, use "dev-node" for this.
# On most systems, the VPN will not function
# unless you partially or fully disable
# the firewall for the TUN/TAP interface.
;dev tap
dev tun

# Nombre de la conexion de Windows -- Solo usuarios
# de Windows, en caso de ser usuario de Linux comentar la linea con un #
dev-node openvpn

# Declaramos los certificados
# Deben estar en el mismo directorio que la configuracion
ca ca.crt
cert server.crt
key server.key

# Llave Diffie hellman.
dh dh1024.pem

# Rango con el que trabajaremos cuando nos conectemos
# al servidor. La subnet puede ser cambiada si lo desean
server 10.8.0.0 255.255.255.0

# Con este archivo se mantiene un record
# de las ips asignadas a cada cliente
ifconfig-pool-persist ipp.txt

# En esta opcion les daremos acceso a los usuarios
# a las subnets con las que trabajemos
# (ejemplo push "route 192.168.30.0 255.255.255.0")
;push "route 192.168.10.0 255.255.255.0"
;push "route 192.168.20.0 255.255.255.0"


# En caso de tener un servidor DNS
# con el que se necesite hablar habilitar la opcion
;push "dhcp-option DNS 10.8.0.1"
;push "dhcp-option WINS 10.8.0.1"

# Esta opcion es para que los clientes
# puedan verse entre si
client-to-client

# Con esta opcion OpenVPN verificara
# que el cliente siga vivo
keepalive 10 120

# Compresion para la conexion
# volvera la conexion un poco mas rapida
comp-lzo

# Numero de clientes que aceptaremos
max-clients 100

# por seguridad debemos
# habilitar estas lineas en sistemas
# Linux
;user nobody
;group nobody

persist-key
persist-tun
status openvpn-status.log
verb 5


Linux:


1.- Deberemos copiar al directorio easy-rsa (como superusuario)


cp -a /usr/share/doc/openvpn-nuestra_version/easy-rsa /etc/opevpn

2.- Nos moveremos al directorio donde trabajaremos

cd /etc/openvpn/easy-rsa/2.0

3.- Editaremos el archivo vars

vim vars

Nota: para iniciar a escribir debemos presionar la letra i una vez, editaremos las
lineas necesarias, presionaremos la tecla ESC y escribiremos :wq (con los 2 puntos)



# These are the default values for fields
# which will be placed in the certificate.
# Don't leave any of these fields blank.
export KEY_COUNTRY=KG
export KEY_PROVINCE=NA
export KEY_CITY=BISHKEK
export KEY_ORG="OpenVPN-TEST"
export KEY_EMAIL="me@myhost.mydomain"

4.- Una vez editado este archivo iniciaremos con los certificados:

source ./vars

5.- limpiaremos el directorio keys
./clean-all

6.- Crearemos nuestra certificadora

./build-ca

Nota: En este paso (6) debemos ingresar la informacion tal cual nos la marca, existe un campo que se llama Common Name, en ese en particular pondremos "server" y listo.

7.- crearemos la llave para nuestro servidor

./build-key-server server

Nota: Una vez mas en Common Name ingresaremos el nombre "server" y los datos por
omision.

8.- .Creamos la llave de Diffie-Hellman

./build-dh

9.- Moveremos las llaves y certificados a /etc/openvpn

cp keys/ca.crt /etc/openvpn
cp keys/server.crt /etc/openvpn
cp keys/server.key /etc/openvpn
cp keys/server/key /etc/openvpn

10. - instalaremos el archivo de configuracion servidor.conf

vim servidor.conf

# usaremos la ip del servidor (ejemplo: local 192.168.30.5)
;local a.b.c.d

# puerto en el que OpenVPN funcionara
port 1194

# TCP or UDP - En este punto he encontrado que
# al menos la primera vez debemos usar TCP para
# que el puerto se abra, despues de eso podremos
# cambiar a udp
proto tcp
;proto udp

# "dev tun" will create a routed IP tunnel,
# "dev tap" will create an ethernet tunnel.
# Use "dev tap0" if you are ethernet bridging
# and have precreated a tap0 virtual interface
# and bridged it with your ethernet interface.
# If you want to control access policies
# over the VPN, you must create firewall
# rules for the the TUN/TAP interface.
# On non-Windows systems, you can give
# an explicit unit number, such as tun0.
# On Windows, use "dev-node" for this.
# On most systems, the VPN will not function
# unless you partially or fully disable
# the firewall for the TUN/TAP interface.
;dev tap
dev tun

# Nombre de la conexion de Windows -- Solo usuarios
# de Windows, en caso de ser usuario de Linux comentar la linea con un #
;dev-node openvpn

# Declaramos los certificados
# Deben estar en el mismo directorio que la configuracion
ca ca.crt
cert server.crt
key server.key

# Llave Diffie hellman.
dh dh1024.pem

# Rango con el que trabajaremos cuando nos conectemos
# al servidor. La subnet puede ser cambiada si lo desean
server 10.8.0.0 255.255.255.0

# Con este archivo se mantiene un record
# de las ips asignadas a cada cliente
ifconfig-pool-persist ipp.txt

# En esta opcion les daremos acceso a los usuarios
# a las subnets con las que trabajemos
# (ejemplo push "route 192.168.30.0 255.255.255.0")
;push "route 192.168.10.0 255.255.255.0"
;push "route 192.168.20.0 255.255.255.0"


# En caso de tener un servidor DNS
# con el que se necesite hablar habilitar la opcion
;push "dhcp-option DNS 10.8.0.1"
;push "dhcp-option WINS 10.8.0.1"

# Esta opcion es para que los clientes
# puedan verse entre si
client-to-client

# Con esta opcion OpenVPN verificara
# que el cliente siga vivo
keepalive 10 120

# Compresion para la conexion
# volvera la conexion un poco mas rapida
comp-lzo

# Numero de clientes que aceptaremos
max-clients 100

# por seguridad debemos
# habilitar estas lineas en sistemas
# Linux
user nobody
group nobody

persist-key
persist-tun
status openvpn-status.log
verb 5
11.- crear llave para cliente en el directorio /etc/openvpn/easy-rsa/2.0/ usaremos el comando

./build-key cliente


Windows y Linux

el cliente necesitara los archivos: client.crt, client.key y ca.crt para hacer la conexion al servidor, este sera su archivo de configuracion:

# Especificamos que somos el cliente
client

# Use the same setting as you are using on
# the server.
# On most systems, the VPN will not function
# unless you partially or fully disable
# the firewall for the TUN/TAP interface.
;dev tap
dev tun

# Windows necesita el nombre de la conexion
# ejemplo: openvpn
;dev-node MyTap

# Tcp o udp
proto tcp
;proto udp

# La ip o direccion DNS a donde
# nos conectaremos y el puerto
remote my-server-1 1194
;remote my-server-2 1194

resolv-retry infinite

nobind

# Esta opcion debera ser usada en Linux unicamente
;user nobody
;group nobody

persist-key
persist-tun

ca ca.crt
cert cliente.crt
key cliente.key

ns-cert-type server

#compresion para la VPN
comp-lzo

# Set log file verbosity.
verb 3

# Silence repeating messages
;mute 20


Y listo, despues de esto podremos hacer ping a las
maquinas de nuestra red.

ejemplo de esto es que el segmento donde estoy ahora es:
192.168.0.0 y el netmask 255.255.255.0

pero puedo hacer ping al segmento 192.168.30.0 con netmask 255.255.255.0
ya que me encuentro conectado por medio de VPN a mi oficina.

Espero les ayude este How-to de openvpn, en caso de necesitar soporte
visiten Gultij.org.