Enviado por admin el
Unos de los problemas de Asterisk es que hasta la versión 1.6.X, no soportaba el protocolo TLS para la señalización SIP. Aunque en las primeras versiones de la rama 1.6.X este soporte no era muy estable, parece que ha ido mejorando.
¿Porque implementar el protocolo TLS en SIP?
Porque de esta forma aumentamos la seguridad de nuestra centralita ya que todos los “mensajes” SIP viajarán por la red cifrados. Muy importante si además de eso, estamos utilizando la versión 1.8 de Asterisk que soporta el protocolo SRTP (Secure Real Time Protocol); en el protocolo SRTP las llaves para el cifrado del audio se envían a través del protocolo SDB (Session description protocol) che es un mensaje que viaja anexo al mensaje SIP. Si el mensaje SIP no esta cifrado, las llaves se enviarán en texto plano dejando abierta la posibilidad que alguien pueda aprovechar esta situación.
En este articulo veremos como conectar dos servidores Asterisk utilizando el protocolo SIP con TLS y como efectuar llamadas entre los dos.
Servidor Asterisk A (serverA):
versión: 1.6.2.13
dominio sip.servidora.com
Extensiones: de 1000 a 1009
Servidor Asterisk B (serverB)
versión 1.8.0
dominio sip.servidorb.com
Extensiones de 3000 a 3009
Los certificados
La parte más importante de la configuración, es la creación de los certificados. Podemos hacerlo de dos formas:
- crear certificados autofirmados
- crear certificados firmados por una autoridad reconocida
En este caso se ha optado para una solución intermedia, es decir, utilizar como entidad certificadora a CAcert que aunque no sea todavía reconocida oficialmente, es una entidad confiable.
Antes que nada entramos en la pagina web de CAcert e creamos una nueva cuenta. Terminada esta operación tenemos que añadir nuestros dominios (servidora.com y servidorb.com).
En la pagina de administración de nuestra cuenta escogemos el menú “Domains” y luego la opción “Add”:
En la pagina que sigue escribimos el nombre del dominio y seguimos presionando el botón “I own or am autorised to control this domain”
El la siguiente pagina tenemos que seleccionar un correo electrónico existente para el dominio que queremos registrar:
A esa dirección nos llegará un correo electrónico con un enlace que deberemos utilizar para confirmar que somos los dueños del dominio que estamos registrando. Una ver terminada esta operación, seguimos el mismo procedimiento para el servidorb.com.
Cuando tengamos los dos servidores registrados y verificados, podemos crear nuestros certificados. En ambos servidores hay que crear un CSR (Certificate Signing Request) que sería nuestra solicitud para decirle a CAcert que nos firme un certificado.
Servidor A:
desde la consola de Linux escribimos:
cd /etc/asterisk
openssl req -nodes -new -keyout sip.servidora.com.key -out sip.servidora.com.csr
Rellenamos los datos del certificado prestando mucha atención a la línea Common Name (en negrita) donde hay que indicar sip.servidora.com:
Generating a 1024 bit RSA private key
...++++++
..............................................++++++
writing new private key to 'sip.servidora.com'
-----
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) [GB]:CO
State or Province Name (full name) [Berkshire]:
Locality Name (eg, city) [Newbury]:Bogota
Organization Name (eg, company) [My Company Ltd]:ServidorA
Organizational Unit Name (eg, section) []:VoIP
Common Name (eg, your name or your server's hostname) []:sip.servidora.com
Email Address []:admin@servidora.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Se generarán dos certificado:
- sip.servidora.com.key
- sip.servidora.com.csr
Volvemos a la pagina de CAcert y vamos al menú “Server Certificates”:
Escogemos la opción “New” y en la pagina que sigue pegamos el contenido del archivo sip.servidora.com.csr:
hundimos el botón Submit y en la pagina que sigue otra vez Submit. El sistema nos devolverá el certificado firmado. Lo copiamos y lo pegamos en un nuevo archivo que llamaremos:
sip.servidora.com.crt.
Ahora bajamos el certificado Root de CAcert en formato PEM:
wget http://www.cacert.org/certs/root.crt
lo renombramos:
mv root.crt cacert.crt
En la versión 1.6.2.13 de Asterisk el certificado y la clave tienen que estar en el mismo archivo:
cat sip.servidora.com.crt sip.servidora.com.key > asterisk.pem
Terminada la operación podemos pasar a la configuración de Asterisk:
nano sip.conf
la parte general:
realm=sip.servidora.com
tlsenable=yes
tlsbindaddr=0.0.0.0
tlscertfile=/etc/asterisk/asterisk.pem
tlscafile=/etc/asterisk/cacert.crt
tlscadir=/etc/asterisk
tlsdontverifyserver=no
Por defecto SIPTLS utiliza el puerto 5061 TCP que hay que abrir en el firewall. El bloque register:
register => tls://servidora:sesamo@sip.servidorb.com:5061/servidorb
y en el bloque de las extensiones:
[servidorb]
type=friend
secret=sesamo
context=phones
qualify=yes
host=dynamic
language=es
transport=tls
port=5061
disallow=all
allow=ulaw
Por ultimo modificamos el dialplan:
nano extensions.conf
añadimos las siguientes líneas en el contexto internas:
exten => _300[1-9],1,Dial(SIP/servidorb/${EXTEN})
exten => _300[1-9],n,Hangup
Servidor B
Seguimos el mismo procedimiento para la generación y firma del certificado (Common Name: sip.servidorb.com)
En este caso no hace falta crear un único archivo para el certificado y la llave. Una vez tengamos nuestros certificados listos, configuramos el sip.conf:
nano sip.conf
realm=sip.servidorb.com
tlsenable=yes
tlsbindaddr=0.0.0.0
tlscertfile=/etc/asterisk/sip.servidorb.com.crt
tlsprivatekey=/etc7asterisk/sip.sipservidorb.com.key
tlscafile=/etc/asterisk/cacert.crt
tlscadir=/etc/asterisk
tlsdontverifyserver=no
tlsclientmethod=tlsv1
la línea de registro:
register => tls://servidorb:sesamo@sip.servidora.com:5061/servidora
y la extensión:
[servidora]
type=friend
secret=sesamo
context=phones
qualify=yes
host=dynamic
language=es
transport=tls
port=5061
disallow=all
allow=ulaw
Modificamos el dialplan:
nano extensions.conf
añadimos las siguientes líneas en el contexto internas:
exten => _100[1-9],1,Dial(SIP/servidora/${EXTEN})
exten => _100[1-9],n,Hangup
Ahora que hemos terminado con la configuración de ambos servidores, actualizamos la configuración de Asterisk (en los dos):
/etc/init.d/asterisk reload
Entramos en la consola de Asterisk del Servidor A y averiguamos que se haya registrado al servidorb:
asterisk –rv
CLI> sip show registry
Host dnsmgr Username Refresh State Reg.Time
sip.servidorb.com:5061 N servidora 105 Registered Sun, 07 Nov 2010 17:07:35
Ya podemos efectuar llamadas de un servidor a otro. Muy pronto veremos como conectar dos servidores Asterisk 1.8.0 con SIP-TLS y SRTP.
Comentarios recientes