Icono del sitio Sinologic

Llámame a mi correo electrónico

Zoiper llamando a una uri SIP

El verdadero espíritu de la VoIP es ser libre de contactar con quien queramos sin depender de la distancia, coste, operadores, ofreciendo servicios como mensajería instantánea, videoconferencia, transferencias de archivos, y cualquier cosa que pueda hacer falta. La VoIP es mucho más que llamadas baratas, infraestructuras «cool» y mayor control.

Mucha gente, aún no conoce el verdadero potencial de la VoIP y lo suelen reducir a poco más que hacer de sustituto de la telefonía clásica ofreciendo algún servicio extra (pantallas color, monitorización gráfica de extensiones, más control por parte del usuario, videollamadas como máximo exponente…) salvo eso, igualmente podría ser ofrecido por una simple centralita digital.

Una de las ventajas de la VoIP es permitir que alguien pueda llamar a otra persona utilizando únicamente Internet, es decir, que en ningún momento pase la llamada a través de la red telefónica. No obstante, y debido a que existen ciertas personas que se aprovechan de una mala configuración para realizar llamadas no autorizadas a números internacionales (Cuba, China, Nigeria, Costa de Marfil, etc.) lo primero que hacen los usuarios que no conocen cómo funciona la VoIP, es cerrar el acceso al protocolo SIP desde el exterior de la red. Esto tiene una ventaja (evitamos que cualquiera pueda hacer llamadas a nuestro sistema vía SIP) pero tiene una desventaja (evitamos que cualquiera pueda hacer llamadas a nuestro sistema vía SIP). La diferencia entre permitir que ciertas personas hagan llamadas gratis a nuestra costa y permitir que nos llamen a nuestra dirección SIP es tan grande como nuestra propia noción de lo que realmente estamos haciendo.

Hay que empezar diciendo que aquí no cabe sitio para medias tintas, o se hace bien, sabiendo qué haces y porqué, o mejor no lo hagas ya que esta prueba podría salirnos cara si no sabemos perfectamente qué estamos haciendo.

Una vez configuremos nuestro sistema para permitir que nos llamen vía VoIP, podremos tener una dirección SIP en la que cualquier persona pueda llamarnos gratuitamente utilizando únicamente Internet conociendo una URI (login@dominio.tld), por ejemplo, si llamas a la dirección SIP: funalito@nuestrodominio.com, se recibirá en nuestro sistema y podrás dejar un mensaje en el buzón de voz. Por el contrario, si alguien llama al 00123456789123@nuestrodominio.com, el sistema jamás debería cursar la llamada, ni siquiera hacer el intento, ya que de no ser así, acto seguido tendremos un aluvión de peticiones SIP que nos bloquearían el acceso por consumo de ancho de banda y provocándonos un DoS.

NOTA IMPORTANTE: No nos vamos a hacer responsables de los problemas de seguridad que puedan surgir por el mal uso de las instrucciones que se dictan a continuación. Si bien puedo garantizar que funciona a la perfección y que no he tenido problemas, pese a que he recibido bastantes ataques inocentes que no han podido hacer llamadas a ningún sitio no contemplado, estos se encuentran con una «pared» que rechaza todo aquello que no esté contemplado en el contexto default.

Configurando el servidor SIP de un dominio

Partimos con el hecho de que tenemos un dominio propio y un servidor con acceso público y dirección IP fija, tras disponer de esto, debemos configurar los DNS de nuestro dominio para que cualquier petición SIP vaya a la dirección IP a la que queremos que vaya y a ninguna otra (ni servidores web, ni servidores de email, únicamente nuestro sistema Asterisk), para eso existen los registros SRV, por lo que la configuración del DNS de nuestrodominio.com, deberá tener una configuración como esta:

... configuración de nuestro servidor DNS ...
www         A    80.256.49.24
asterisk    A    81.432.43.38 
_sip._udp  SRV   0   5060  asterisk.nuestrodominio.com.

Vamos a ver qué significa esta última línea…

_sip._udp (cualquier petición SIP -mediante UDP-)
SRV  (registro)
0 (prioridad -por si tenemos varios sistemas- esto incluso nos sirve para poder hacer un failover)
5060 (puerto al que vamos a dirigir la petición)
asterisk.nuestrodominio.com (sistema con Asterisk)

Una vez configurado esto, cualquier petición de llamada SIP, será redirigido al sistema asterisk.nuestrodominio.com, puerto 5060.

 

Configurando el dialplan para permitir entradas

Asterisk utiliza el contexto [default] como almacen ‘trasto’, esto significa, cualquier petición de dialplan que no incluya expresamente el contexto al que debe ir, por defecto irá al contexto ‘default’, por lo que este contexto debería tener únicamente lo que vayamos a permitir que accedan desde el exterior, bien números de teléfono de entrada nuestro o bien cualquier nombre que queramos que otros puedan llamar. Por esta razón, un ejemplo de dialplan sencillo podría ser este:

[default]

exten=>fulanito,1,Dial(SIP/elio,30)
exten=>fulanito,n,VoiceMail(elio,u)
exten=>fulanito,n,Hangup()

exten=>951012345,1,Dial(SIP/telefonoCasa,20)
exten=>951012345,n,VoiceMail(casa,u)
exten=>951012345,n,Hangup()

 

[outgoing]

exten=>_[67]XXXXXXXX,1,NoOp(Llamamos a móviles)
exten=>_[67]XXXXXXXX,n,Dial(SIP/vozelia/${EXTEN})

exten=>_[89]ZXXXXXXX,1,NoOp(Llamamos a fijos nacionales)
exten=>_[89]ZXXXXXXX,n,Dial(SIP/vozelia/${EXTEN})

exten=>_90XXXXXXX,1,NoOp(Llamamos a números premiums)
exten=>_90XXXXXXX,n,Authenticate(112233)
exten=>_90XXXXXXX,n,Dial(DAHDI/g1/${EXTEN})

exten=>_1XXXX,1,NoOp(Llamamos a números de información)
exten=>_1XXXX,n,Dial(DAHDI/g1/${EXTEN})

exten=>_0XX,1,NoOp(Llamadas de emergencia)
exten=>_0XX,n,Dial(DAHDI/g1/${EXTEN})

exten=>112,1,Dial(DAHDI/g1/${EXTEN})

exten=>_00XXXXX.,1,Authenticate(112233)
exten=>_00XXXXX.,n,Dial(SIP/vozelia/${EXTEN})

exten=>300,1,Dial(SIP/elio)
exten=>301,1,Dial(SIP/telefonoCasa)

Como podéis ver, tenemos únicamente dos contextos, simples y efectivos: default y outgoing.

[default] se utiliza exclusivamente para llamadas entrantes desde el exterior (sip, dahdi, proveedor, etc.)
[outgoing] se utiliza exclusivamente para llamadas realizadas por nuestros teléfonos de la red interna.

Ambos contextos son independientes, y una llamada que entre al contexto [default], jamás podrá hacer llamadas al contexto [outgoing], por lo que una persona que consiga llamarnos a nuestro sistema, nunca podrá hacer llamadas al exterior.

De esta manera, cualquiera puede ahora utilizar un softphone, un Asterisk o bien un teléfono que permita llamar a direcciones URI SIP y llamar a fulanito@nuestrodominio.com. El dominio resolvería que, a quien tiene que enviar la llamada es al sistema asterisk.nuestrodominio.com puerto 5060, y el paquete SIP se enviaría a esta máquina y a ese puerto solicitando hablar con el usuario fulanito.  La petición entraría a nuestro Asterisk, en el contexto [default] y buscaría la extensión fulanito que, tal y como hemos configurado, haría una llamada a nuestro teléfono IP configurado con la cuenta ‘elio’ si está disponible, y si no, que salte un buzón de voz para dejar un mensaje.

Importante: como veremos ahora, nuestos usuarios SIP configurados en el sip.conf no son nombres, pero en el caso en que fuesen números, hay que recordar que la contraseña que hay que poner:

Deben ser todas diferentes (las contraseñas no se pueden repetir nunca)
No deben incluir el número del login. (si el usuario es ‘100’, la contraseña jamás deberá llevar un ‘100’)
La contraseña debe tener una longitud de, al menos 3 veces la longitud del login (‘100’ – tiene longitud 3, por lo que la contraseña deberá tener, al menos 9 caracteres)

El principal problema de seguridad que existe en Asterisk no es por permitir llamadas anónimas a nuestro sistema (ya que estas entran en default y de ahí, no van a poder hacer llamadas salientes si lo hemos configurado bien), si no porque los bots intentan registrarse con números y contraseñas «tontas», por ejemplo: Usuario 100 contraseña 100. Usuario 100 contraseña 100100, y cosas así… con estas contraseñas, hasta un bot ‘tonto’ es capaz de hacer 50000 peticiones por segundo provocando primero, que encuentre el usuario y la contraseña en cierto tiempo, y en segundo lugar, que nos sature la conexión a internet con sus cientos de millones de pruebas hasta dar con el usuario/contraseña correcto. Una vez haya dado con los datos de autentificación, es cuando empieza a hacer llamadas «de forma autentificada» a números internacionales. (por ese motivo, lo de utilizar el Authenticate que todos los de la empresa/casa conocen. Un truco tonto, pero efectivo)

Configurando el archivo sip.conf

Cómo no, si queremos que nos puedan llamar por SIP, debemos configurar el sistema para permitir correctamente la entrada de llamadas (al contexto default) mientras que autentifiquemos correctamente los usuarios SIP nuestros para poder hacer y recibir las llamadas (teléfonos IP, softphones, etc.)

[general]
context=default
match_auth_username=yes
allowoverlap=no
realm=nuestrodominio.com
domainsasrealm=yes
udpbindaddr=0.0.0.0
srvlookup=yes
pedantic=yes
maxexpiry=3600
minexpiry=60
defaultexpiry=120
qualifyfreq=30
language=es

disallow=all
allow=g722
allow=alaw

trustrpid = yes
sendrpid = yes
usereqphone = no
dtmfmode = rfc2833
callevents=no
authfailureevents=no
alwaysauthreject = yes
auth_options_requests = yes
accept_outofcall_message = no
outofcall_message_context = default
engine=asterisk
shrinkcallerid=yes
use_q850_reason = no

rtptimeout=300
rtpholdtimeout=300
rtpkeepalive=30

session-timers=originate
session-expires=600
session-minse=90
session-refresher=uas

allowsubscribe=yes
subscribecontext=outgoing
notifyringing = yes
notifyhold = yes
notifycid = yes
callcounter = yes

localnet=192.168.0.0/255.255.255.0
externip= 81.264.243.138
nat=yes
directmedia=no
directrtpsetup=no
ignoresdpversion=yes
jbenable = yes
jbforce = no
jbmaxsize = 200
jbresyncthreshold = 1000
jbimpl = fixed
jbtargetextra = 40
jblog = no
storesipcause = no

register=> usuario@sip03.vozelia.com/usuario

[authentication]

[vozelia]
type=peer
host=sip03.vozelia.com
context=default
defaultuser=USUARIOdelPROVEEDOR
fromuser=USUARIOdelPROVEEDOR
fromdomain=vozelia.com
insecure=invite,port
disallow=all
allow=g729
allow=alaw
… resto de la configuración del proveedor … 

[elio]
type=friend
host=dynamic
secret=b5n6m7d8e7r63
context=outgoing
nat=no
callerid=»Elio Rojano» <fulanito@nuestrodominio.com>

[telefonoCasa]
type=friend
host=dynamic
secret=t4e3w239dfj49494jf49
context=outgoing
nat=no
callerid=»telefonoCasa» <casadefulatino@nuestrodominio.com>

 

Sé que no es el mejor ejemplo de un archivo de configuración SIP, pero es un ejemplo didáctico sobre los parámetros que hay que tener para permitir llamadas entrantes y que estas se redirijan exclusivamente al contexto [default] manteniendo lejos (muy lejos) el acceso a nuestra red telefónica.
Al tratarse de gestionar el SIP, podemos hacer lo mismo con Kamailio en lugar de con Asterisk.

De esta manera, y si hemos seguido todos los pasos y tenemos un dialplan como el que hemos mencionado arriba, siguiendo las indicaciones que hemos marcado, podremos decirle a nuestros amigos:
-«Llamame por SIP a fulanito@nuestrodominio.com» 
y ellos al llamar a esta dirección, entrará a nuestro Asterisk que bien puede redirigirnos la llamada a nuestro teléfono, al buzón de voz, o a donde queramos.

 

Salir de la versión móvil