miércoles, 11 de julio de 2012

SIP TLS y SRTP en Elastix (2)

Como les mencione en la entrada anterior, Elastix 2.3 tiene todo lo necesario para la encripción de llamadas SIP con TLS y SRTP.

Todo lo que voy a mencionar en este artículo, se lo hizo en un servidor con Elastix 2.3 de 64 bits, y con teléfonos Yealink T20P y T22P.

En el artículo anterior puse todo lo que se debe agregar en las configuraciones generales para que funcione TLS en Elastix.

Para habilitar el soporte SRTP por extensión hace falta agregar el parámetro encryption=yes en cada una de las extensiones. Asi mismo para que las extensiones usen TLS en la señalización se debe agregar transport=tls.

Las configuración de cada extensión se encuentra en el archivo sip_additional.conf. Como se sabe, todos los archivos con el nombre "additional" son modificados por la interfaz web, por lo que, si agregamos los parámetros que mencioné anteriormente en la configuración de cada extensión, con cualquier cambio hecho en la interfaz web va a borrar esa configuración.

Para evitar que se borren las configuraciones, y para poder configurar si es que se va a usar SRTP y TLS he realizado algunos cambios.

Deben bajarse el archivo functions_inc.php y sustituirlo (siempre es bueno sacar una copia del original por si algo falla) por el original que se encuentra en:

cd /var/www/html/admin/modules/core/

Luego de eso reiniciar el amportal:

amportal stop


amportal start

Veran que en PBX -> PBX Configuration -> Extensions y seleccionan cualquier extensión que tengan creada, en la sección Device Options aparecen dos nuevos campos que dicen encryption y transport.

Para habilitar SRTP y SIP TLS, encryption debe estar seteado con yes, y transport con tls, como se muestra en el siguiente gráfico:






Falta habilitar en el teléfono habilitar el soporte SRTP y TLS.
En los teléfonos Yealink, en la configuración de las cuentas Account -> Cuenta 1 -> Basic -> Transport -> TLS.
Y en Account -> Cuenta 1 -> Advanced -> Voice Encryption (SRTP)

 -> On.
Con eso se habilita los dos parámetros en los teléfonos Yealink.

Eso es todo, se puede probar con un sniffer y tratar de capturar llamadas.

SIP TLS y SRTP en Elastix

Asterisk tiene soporte para encripción TLS para la señalización SIP y SRTP para encriptar las llamadas.

Todas las configuraciones fueron hechas en dos servidores cargados con la versión 2.3 de Elastix de 64 bits.

Elastix 2.3 tiene instalado todo lo necesario para soportar TLS y SRTP, solo hay que hacer unas pequeñas modificaciones.

Voy a empezar explicando como encriptar las comunicaciones en una troncal SIP entre dos servidores Elastix, para lo cual:

Servidor 1 con Elastix=serverA
Servidor 2 con Elastix=serverB

Primero se deben generar certificados para los servidores, esto se debe hacer solo en uno de ellos, para el ejemplo lo voy a hacer en el serverA. Para generar los certificados voy a usar el script ast_tls_cert, que se encuentra en:

/usr/share/doc/asterisk-1.8.11.0/contrib/scripts/ast_tls_cert

Vamos al directorio donde se encuentra el script:


cd /usr/share/doc/asterisk-1.8.11.0/contrib/scripts/

Aqui ejecutamos lo siguiente:

./ast_tls_cert -d certs -C serverA -o serverA


./ast_tls_cert -d certs -C serverB -o serverB -c certs/car.crt -k certs/ca.key


 cd certs

 ls

Se observa que se han creado 12 archivos.

Luego de que los certificados han sido creados, se deben mover hacia las ubicaciones respectivas tanto en el serverA como en el serverB. En el serverA:

mv ca.crt /var/lib/asterisk/keys
 
mv serverA.pem /var/lib/asterisk/keys

Y para el serverB:

scp ca.crt root@ip-del-serverB:/var/lib/asterisk/keys



scp serverB.pem root@ip-del-serverB:/var/lib/asterisk/keys

Se deben dar los permisos suficientes a los archivos para que puedan ser leidos por asterisk (yo les di permisos totales, se podria probar cambiando de propietario de los archivos con el comando chown). Esto se debe hacer en ambos servidores.

chmod -R 777 /var/lib/asterisk/keys/

Luego vamos al explorador, ingresamos al Elastix y habilitamos el acceso al FreePBX no embebido, esto se lo hace yendo a la pestaña Security -> Advanced Options -> Enable access to FreePBX -> ON. Luego en una nueva pestaña del explorador se debe poner lo siguiente:

https://ip-del-elastix/admin

Aqui va a solicitar el usuario y contraseña para ingresar.

Una vez adentro de FreePBX no embebido, se debe ir a la sección (ubicada en la esquina superior izquierda) Tools -> Asterisk SIP Settings. Aquí se pueden editar las configuraciones generales para SIP. En la parte final hay una sección que dice Other SIP Settings, ahi ponemos lo siguiente:

tlsenable=yes
tlsbindaddr=0.0.0.0
tlsdontverifyserver=yes
tlscertfile=/var/lib/asterisk/keys/serverA.pem
tlscafile=/var/lib/asterisk/keys/ca.crt

Esto se debe hacer en ambos servidores, para lo cual hay que tomar en cuenta que el parámetro tlscertfile cambiaría de esta manera en el serverB:

tlscertfile=/var/lib/asterisk/keys/serverB.pem

NOTA: Cuando se crean los certificados, el parámetro definido con la opción -C debe coincidir con el hostname. Si se presenta un problema con el hostname, para corregirlo se debe generar el certificado nuevamente. Tambien se puede agregar el parámetro tlsdontverifyserver=yes en la configuración anterior, que no verifica el hostname.

Por último en la interfaz web de Elastix vamos a PBX -> PBX Configuration -> Trunks -> Add Trunk -> Add SIP Trunk. En donde ponemos:

  • Para el serverA:
Trunk Name: troncal-prueba

En Outgoing Settings:

Trunk Name: serverA-serverB

Peer Settings:

host=ip-del-serverB
secret=contraseña

type=friend
context=from-internal
insecure=invite
canreinvite=no
qualify=yes
encryption=yes
transport=tls


  • Para el serverB:

Trunk Name: troncal-prueba


En Outgoing Settings:

Trunk Name: serverA-serverB

Peer Settings:

host=ip-del-serverA
secret=contraseña

type=friend
context=from-internal
insecure=invite
canreinvite=no
qualify=yes
encryption=yes
transport=tls


Eso es todo, pueden probar usando un sniffer, y verán que la comunicación es encriptada. En una siguiente entrega les indicare lo realizado para encriptar la comunicaciones entre extensiones usando teléfonos SIP.