miércoles, 7 de agosto de 2013

Servidor VPN en un Elastix. Agregando un nivel de seguridad adicional a las comunicaciones.

Para continuar con el tema de seguridades, y proteger las comunicaciones escribo este artículo.

Lo primero que voy a hacer es explicar como instalar un servidor openvpn en un Elastix. Se debe instalar el paquete openvpn y easy-rsa:

# yum install openvpn easy-rsa.noarch -y

Una vez instalados los paquetes, lo primero que se debe hacer es crear una CA (autoridad de certificación), para poder emitir certificados, tanto para el servidor como para el cliente.
Para esto hay que ir a la carpeta "/usr/share/easy-rsa/2.0". Una vez en este directorio se crea una carpeta en donde se almacenan los certificados:

# cd /usr/share/easy-rsa/2.0
# mkdir keys

Luego se debe editar el archivo "vars":

# vim vars

Se deben cambiar los parámetros:

export KEY_CONFIG="/usr/share/easy-rsa/2.0/openssl-1.0.0.cnf"
export KEY_DIR="/usr/share/easy-rsa/2.0/keys"

Que son los directorios en donde se encuentra el archivo de configuración de openssl, y en donde se van a guardar los certificados creados, respectivamente.
También se recomienda cambiar los valores de los campos país, provincia, entre otros.

Luego se ejecutan los siguientes comandos para crear la autoridad de certificación:

# source ./vars
# ./clean-all
# ./build-ca

El siguiente paso es crear los certificados para el servidor como para el cliente:

# ./build-key-server mi-elastix
# ./build-key cliente1
# ./build-key cliente2

El siguiente paso es crear la llave general para la encriptacion.

# ./build-dh

En el servidor los archivos de la carpeta "keys/":  "ca.crt" "dh1024.pem" "mi-elastix.crt" "mi-elastix.key" se deben copiar a la carpeta "/etc/openvpn".

En la carpeta anterior se debe crear el siguiente archivo:

# vim /etc/openvpn/server.conf

Que contiene lo siguiente:

port 1194
dev tap
ca /etc/openvpn/ca.crt
cert /etc/openvpn/mi-elastix.crt
key /etc/openvpn/mi-elastix.key

dh /etc/openvpn/dh1024.pem
server 10.88.0.0 255.255.255.0
ifconfig-pool-persist /etc/openvpn/ipp.txt
keepalive 10 120
cipher AES-128-CBC
comp-lzo
persist-key
persist-tun

status openvpn-status.log
verb 3

Se inicia el demonio openvpn:

# /etc/init.d/openvpn start

Para los clientes se deben copiar los archivos de la carpeta "keys/":  "ca.crt" "cliente1.crt" "cliente1.key" a la carpeta "/etc/openvpn" (en el caso de ser un linux el cliente).

Luego en se debe crear el siguiente archivo:

# vim /etc/openvpn/client.conf

Con el siguiente contenido:

dev tap
persist-tun
persist-key
cipher AES-128-CBC
tls-client
client
resolv-retry infinite
remote mi-ip 1194 udp
ca /yealink/config/openvpn/keys/ca.crt
cert /yealink/config/openvpn/keys/client1.crt
key /yealink/config/openvpn/keys/client1.key
comp-lzo


Y se inicia el demonio openvpn en el cliente.

Para el caso específico de teléfonos Yealink, se debe hacer lo que se indica en el siguiente enlace:

http://www.voztovoice.org/?q=node/476

Con la diferencia de que el archivo "vpn.cnf" debe contener lo detallado para el archivo "client.conf".

Una vez se sube la configuración al teléfono, el mismo establece la conexión al servidor VPN.

Se debe registrar la extensión apuntando a la dirección IP del servidor VPN, en este caso de la interfaz tap0. Por ejemplo la IP 10.88.0.1.

Si se hace una captura de tráfico, usando wireshark, unicamente se ve tráfico UDP desde el puerto 1194 del teléfono al puerto 1194 de la central y viceversa (no se podrá distinguir que se establece una llamada). Esta comunicación dificilmente será interceptada. Sobre esto se puede agregar SRTP, como se detalló en la entrada anterior, con lo que se agregaría un nivel de dificultad mas, si alguien quisiera interceptar las comunicaciones.

Espero sus comentarios.

4 comentarios:

Silvercorp! dijo...

Buenas tardes.

Como puedo conectar equipos windows donde tengo instalado un sofphone a este servidor, y con que programa (openvpngui, cierto??).

Muchas gracias por la respuesta

Silvestre Perez dijo...

lo lograste por que tengo un problema

Unknown dijo...

Que problema tienes_

Unknown dijo...

hola esta bueno tu tutorial pero tengo un problema ya hice todo lo que me comenta tu blog al momento de arrancar el demonio de openvpn me sale el siguiente error

Options error: In [CMD-LINE]:1: Error opening configuration file: start
Use --help for more information.

revise los logs de openvpn y me aparece essto

Tue Mar 8 17:44:55 2016 OpenVPN 2.3.10 i386-redhat-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [MH] [IPv6] built on Jan 4 2016
Tue Mar 8 17:44:55 2016 library versions: OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008, LZO 2.02
Tue Mar 8 17:44:55 2016 MANAGEMENT: TCP Socket listening on [AF_INET]127.0.0.1:7505
Tue Mar 8 17:44:55 2016 NOTE: your local LAN uses the extremely common subnet address 192.168.0.x or 192.168.1.x. Be aware that this might create routing conflicts if you connect to the VPN server from public locations such as internet cafes that use the same subnet.
Tue Mar 8 17:44:55 2016 Diffie-Hellman initialized with 2048 bit key
Tue Mar 8 17:44:55 2016 Cannot load certificate file /etc/openvpn/Servidor.crt: error:0906D06C:PEM routines:PEM_read_bio:no start line: error:140AD009:SSL routines:SSL_CTX_use_certificate_file:PEM lib
Tue Mar 8 17:44:55 2016 Exiting due to fatal error

espero que me ayudes gracias