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:
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
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.