Qu es Asterisk?
Es software open source
Captulo Bsico #1
Introduccin a Asterisk
Creado por Mark Spencer
Creado como una alternativa a PBX propietarios
Convierte una PC ordinaria en un servidor de
comunicaciones
Es un proyecto, no un modelo ni fabricante
Ante el crecimiento de Asterisk, se funda Digium, que es la
empresa que patrocina el desarrollo de Asterisk
Ing. Christian Cabrera R.
Permite enlazar diferentes medios de comunicacin,
no solamente voz
Introduccin a Asterisk
Uso actual
Versiones de Asterisk
Ms de 1 milln de servidores Asterisk en
produccin hoy en da
Versiones inferiores a 1.8 se consideran obsoletas
Sin soporte oficial. Se recomienda actualizar.
1000+ descargas diarias en cdigo fuente
Asterisk 11 es lo recomendado hoy en da
Mltiples comunidades activas de usuarios
http://voip-info.org
http://asteriskmx.com
Varias distros listas para usarse
Elastix, Trixbox, AsteriskNow, PBX in a Flash
Muchos entornos de uso
Oficinas, callcenters, corporativos, carriers, aplicaciones remotas
Introduccin a Asterisk
Versin
Tipo
Fecha de
lanzamiento
Actualizaciones de
seguridad
Fin de vida
1.4.X
LTS
Dic 2006
Abr 2011
Abr 2013
1.6.2.X
Estndar
Dic 2009
Abr 2011
Abr 2012
1.8.X
LTS
Oct 2010
Oct 2014
Oct 2015
10.X
Estndar
Dic 2011
Dic 2012
Dic 2013
11.X
LTS
Oct 2012
Oct 2016
Oct 2017
12.X
Estndar
Oct 2013
Oct 2014
Oct 2015
Introduccin a Asterisk
Diferencias con un PBX
convencional
Dos tipos de versiones
LTS (Long Term Support)
No se requiere hardware propietario
Permanencia mnima de 5 aos en el mercado
Orientado a estabilidad
Mejor opcin para empresas
Muchos fabricantes ofrecen productos similares
Hardware genrico intercambiable
Diferentes soluciones de diferentes fabricantes
Libre competencia = mejores precios y productos
Estndares
Sigue una arquitectura universal de PC
Dos aos de vida
Orientado a impulsar nuevas funcionalidades
Apta para entusiastas y desarrolladores de nuevas
tecnologas
Procesador, memoria, motherboard y almacenamiento
Es posible instalar Asterisk en una PC (ej. Raspberry Pi)
Free software: tanto libre como gratis
Sin pago de licencias
Introduccin a Asterisk
Diferencias (2)
Introduccin a Asterisk
Escenarios de uso
Totalmente programable y configurable
Hay muchas maneras en las que podemos aprovechar
las caractersticas de Asterisk, entre ellas:
No es necesario solicitar servicios especiales ni
comprar mdulos extras
Todo se hace a travs de software
PBX tradicional
PBX IP
PBX hbrido
Pasarela (Gateway) VoIP
Aumento de funcionalidades
Call center
Plataforma para carriers
Ofrece servicios adicionales de datos
Puede integrarse con cualquier sistema que pueda
correr en una PC con Linux
Bases de datos, consultas web, lectura de archivos, etc.
Puede interactuar con conmutadores existentes
Interconexin a travs de puertos anlogos/digitales
Introduccin a Asterisk
Introduccin a Asterisk
PBX tradicional
PBX VoIP
Introduccin a Asterisk
PBX hbrido
Introduccin a Asterisk
10
Introduccin a Asterisk
12
Pasarela VoIP
Introduccin a Asterisk
11
Aumento de
funcionalidades
Qu es lo que SI es
Asterisk?
Es un SIP registrar
Entidad SIP que mantiene el registro de diferentes
usuarios y de su ubicacin
Es un back-to-back user agent (B2BUA)
Se comporta como un servidor y un telfono de
manera simultnea
Controla una llamada estableciendo comunicacin
individual con cada parte (y luego puentea la
llamada)
Es un cliente multi-sesin, multi-usuario
Convierte la comunicacin entre canales
Introduccin a Asterisk
13
Introduccin a Asterisk
14
Qu es lo que NO es
Asterisk?
B2BUA vs Proxy
No es un SIP proxy
Proxy
Por definicin, un proxy nunca es parte del fin de la
llamada (ej. Voicemail, IVRs, etc)
Un proxy solo hace reenvo de paquetes, manejando las
llamadas en nombre de otros usuarios (Asterisk las procesa
completamente en sealizacin y RTP)
Llamada
No es un sistema plug-and-play
Llamada 1
Podemos crear complejas aplicaciones con l, pero es
necesario configurarlo primero
Y es muy importante practicar para lograrlo!
Llamada 2
Introduccin a Asterisk
15
Introduccin a Asterisk
16
Requisitos de hardware
Requisitos de hardware (2)
Lo ms importante es la estabilidad
Siempre usar hardware de marca (HP, IBM, Dell).
Evitar equipos armados con componentes de dudosa procedencia.
Procurar siempre ofrecer soluciones de redundancia en los
componentes de fallas ms comunes:
Discos duros
Fuentes de poder
Si nuestro sistema es 100% IP, no necesitamos tarjetas
El hardware adicional se usa solamente cuando queremos
conectarnos directamente a la PSTN.
El CPU depende de las tareas a realizar
Adicional a las llamadas, cada nueva accin (grabar, consultar BD,
reproducir audios, etc) reducen la capacidad del sistema
Cualquier PC es buena para pruebas
El procesamiento necesario se mide segn los
requerimientos
Asterisk 1.2 en Celeron 333 Mhz con 32 MB RAM
Es posible usar PCs (ej. Raspberry Pi)
No existe una regla fija de cuanto se necesita.
Lo ms importante es la cantidad de llamadas concurrentes.
Soluciones basadas en ARM son aptas para pequeos entornos.
Espacio en disco dependiente de grabaciones
Cdec * horas de llamada * llamadas simultneas * dias a
permanecer
Pueden usarse entornos virtualizados
Limitados a hardware PSTN externo conectado por IP
Introduccin a Asterisk
17
Requisitos de software
18
DAHDI
Para la interaccin con tarjetas (Digium, Sangoma,
Openvox, etc), Asterisk requiere de las libreras de DAHDI
Preferentemente, Linux nativo
FreeBSD y Mac OS tienen soporte parcial
Digium Asterisk Hardware Device Interface
Asterisk requiere de paquetera adicional:
DAHDI son un conjunto de controladores que le permiten
a Asterisk entenderse con las tarjetas
Recuerda instalar las versiones -devel
GCC
Ncurses
Termcap
Newt
OpenSSL
LibUUID
Introduccin a Asterisk
Esto solo aplica para dispositivos USB y PCI/PCI-e
Para conectar hardware externo se hace a travs de protocolos
como SIP o IAX
En CentOS instalamos estas dependencias con:
yum install -y gcc gcc-c++ ncursesdevel libtermcap-devel openssldevel newt-devel libuuid-devel
En si, DAHDI no es un requisito obligado para Asterisk
Pero se recomienda instalar siempre para tener disponible el
mdulo dahdi_dummy que se usa al crear conferencias con
Meetme y troncales IAX.
En Debian instalamos todas con
apt-get build-dep asterisk
Introduccin a Asterisk
19
Introduccin a Asterisk
20
Libreras extras para
Asterisk
DAHDI (2)
DAHDI tiene su propia lista de dependencias
Cualquier librera que agregue funcionalidades a
Asterisk (ej. openr2 o libsrtp) debe ser instalada antes
de compilar Asterisk.
Principalmente, necesitamos los encabezados de la misma
versin del kernel de Linux que estamos usando
Los headers podemos conseguirlos fcilmente:
En CentOS: yum install kernel-devel
En Debian: apt-get install linux-headers-<versin>
En caso de que Asterisk ya est instalado, tendremos
que repetir el proceso de instalacin para que use las
nuevas libreras.
Si queremos usar enlaces digitales (E1s), necesitamos
ms libreras:
Siempre es posible agregar funcionalidades sobre la
marcha.
Durante el curso tendremos que recompilar Asterisk en
varias ocasiones para aprender a agregar libreras.
libopenr2 si usaremos enlaces con R2 modificado
libpri si usaremos enlaces con ISDN PRI
En nuestra prctica de DAHDI aprenderemos como
compilar estas libreras para su uso
Introduccin a Asterisk
21
Instalando Asterisk
Introduccin a Asterisk
22
Compilando Asterisk
La ltima versin de Asterisk est disponible desde
http://asterisk.org
Tenemos 2 alternativas:
Instalar desde RPMs o DEBs (fcil)
Compilar desde cdigo fuente (difcil)
Los RPMs nos permiten instalar paquetes de manera fcil
y rpida, as como cumplir sus dependencias
Sin embargo, son paquetes pre-hechos, lo que quiere decir que
no es tan fcil personalizarlos
El proceso para compilar es muy parecido al de otros
paquetes de software:
Descargar el paquete (normalmente, con wget, o tambin
podemos copiarlo desde nuestro equipo por SFTP).
Desempaquetar el cdigo fuente (usando tar).
Entrar al directorio ya desempaquetado.
Compilar (normalmente con make)
Instalar
Compilar el cdigo fuente nos da mximo control
Toma ms tiempo, es ms trabajo, ms cosas pueden salir mal,
pero creamos un sistema a la medida
Obviamente, nos iremos por el camino difcil ;-)
Introduccin a Asterisk
El histrico de versiones, parches y otros componentes, se
consigue desde http://downloads.digium.com
23
Introduccin a Asterisk
24
Compilando Asterisk
Algunas notas precautorias
En caso de que ./configure nos arroje errores, quiere
decir que nos faltan dependencias
Dentro del proceso de compilacin hay varios
comandos:
./configure
make menuselect
make
make install
make config
make samples
En caso de que make nos arroje errores, probablemente
tengamos dependencias incompatibles
: Revisar dependencias
: Escoger las opciones a compilar
: Compilar cdigo fuente
: Copiar a las carpetas necesarias
: Crear scripts de autoarranque
: Crear ejemplos de configuracin
Nunca debemos ejecutar make samples en un
sistema que ya fue configurado
De lo contrario sobreescribiremos nuestra configuracin
con los archivos de ejemplo
make y make install pueden ejecutarse cuantas veces
necesitemos para compilar nuevas funcionalidades
Al terminar estos comandos habremos dejado
Asterisk instalado
Estos pasos sern repetidos constantemente durante el
curso.
El siguiente paso sera arrancarlo y configurarlo.
Introduccin a Asterisk
25
Iniciando Asterisk
Introduccin a Asterisk
26
Iniciando Asterisk (2)
Hay 2 maneras en las que podemos ejecutar Asterisk:
Para arrancar Asterisk en primer plano:
Como un comando en primer plano
Como un servicio
asterisk vvvc
La v significa verbosidad (ms detalle)
Al ejecutar Asterisk como un comando, la consola se
queda pegada a la sesin del usuario que estemos
ocupando (normalmente root)
Para arrancarlo como servicio
/etc/init.d/asterisk start
Si cerramos nuestra sesin de usuario, Asterisk se cerrar
tambin.
Por esta razn, este mtodo se ocupa solamente cuando
queremos hacer pruebas y debug de nuestro sistema.
Una vez que Asterisk ya est ejecutndose:
Para acceder a la consola lo hacemos con:
asterisk r
Si nos da un error de conexin, arranqumoslo primero
como servicio y reintentemos
Al ejecutarlo como servicio, permanece activo aunque
nuestra sesin se cierre
Asterisk sigue corriendo en segundo plano.
Introduccin a Asterisk
27
Introduccin a Asterisk
28
Deteniendo Asterisk
Reiniciando Asterisk
Para detener el servicio completo (desde el CLI):
Solo hay que cambiar stop/start por restart:
/etc/init.d/asterisk stop
/etc/init.d/asterisk restart
*CLI> core restart now
Desde adentro del CLI de Asterisk
*CLI> core stop now
En varias ocasiones se nos pedir reiniciar el servicio
de Asterisk
Matando el proceso (desde el CLI)
Usar como ltimo recurso:
ps eF | grep asterisk
kill -9 <PID de Asterisk>
Es conveniente familiarizarse con los comandos.
Introduccin a Asterisk
29
Introduccin a Asterisk
30
Configurando Asterisk
Prctica 1.1
La manera ms simple de configurar Asterisk es a
travs de archivos de texto
En modalidades ms avanzadas podemos usar el CLI, el AMI
o bases de datos
Veremos todo eso ms adelante
Los archivos se ubican en /etc/asterisk
Instalacin de Asterisk
Tienen extensin *.conf
Sintaxis muy similar a archivos *.ini
Introduccin a Asterisk
32
Archivos de configuracin
asterisk.conf
Hay muchos, pero estos son los ms importantes:
Archivo maestro de configuracin
Le indica a Asterisk donde buscar o crear otros archivos
Archivo
Funcin
asterisk.conf
Configuraciones que afectan a todo el sistema:
Especifica las rutas default y ajusta opciones generales
de todo el conmutador
Lmite de llamadas en general
Estructura de archivos de sonido
Nombre de este equipo (en caso de tener ms de uno)
extensions.conf Controla las reglas del plan de llamadas
sip.conf Todo lo relacionado al protocolo SIP
Raramente necesita ser editado
iax.conf Igual que el anterior, pero para IAX2
Se recomienda mucho colocar verbose=3 para subir la
verbosidad del sistema por default
chan_dahdi.conf Configura las tarjetas DAHDI
Introduccin a Asterisk
33
sip.conf
Introduccin a Asterisk
34
iax.conf
Configuracin del canal SIP
Configura lo relacionado al canal IAX2
El archivo de muestra viene lleno de ejemplos
Igual que con SIP, configura valores generales e
individuales para usuarios
2 tipos de configuraciones
Se definen conexiones con dispositivos IAX as como
con troncales IAX
Campos que afectan a todos los usuarios
Campos que afectan de manera individual a cada usuario
Se ver ms a detalle en el mdulo intermedio
Aqu se configuran tanto telfonos SIP como
proveedores (troncales) SIP
No confundir usuarios SIP con extensiones
Las extensiones se declaran en el extensions.conf
Introduccin a Asterisk
35
Introduccin a Asterisk
36
chan_dahdi.conf
extensions.conf
Aqu se define el plan de llamadas
Toda la tarjetera se configura aqu:
Los permisos a los que cada usuario tiene derecho para
marcar (clases de servicio)
Se construye por contextos, extensiones, prioridades y
aplicaciones
Enlaces digitales (E1s)
Troncales anlogas (FXO)
Extensiones anlogas (FXS)
Requiere de la configuracin equivalente dentro del
/etc/dahdi/system.conf
Los archivos de SIP e IAX controlan quien puede
acceder a l
El archivo de extensiones controla que es lo que ese
alguien puede hacer
Dedicaremos un captulo a explicar esto
Se ver ms a detalle adelante
Similar a un archivo de programacin
La mayora del curso se centra en este archivo
Introduccin a Asterisk
37
Introduccin a Asterisk
En resumen
Asterisk fue escrito por Mark Spencer
Captulo Bsico #2
Configuracin de Asterisk
Una alternativa open source a conmutadores cerrados.
Corre en cualquier distro de Linux
Siempre y cuando, cumplamos sus dependencias
No es un proxy, es un B2BUA
Acta como un telfono y un servidor al mismo tiempo
Necesitamos cumplir dependencias para instalar Asterisk
Muy recomendado instalar DAHDI
Los archivos de configuracin se guardan en /etc/asterisk
Introduccin a Asterisk
39
Ing. Christian Cabrera R.
38
Introduccin
Sintaxis de archivos *.conf
La configuracin inicial de Asterisk es a travs de
archivos de texto
Son similares a un archivo *.ini
Se contruye a partir de un encabezado y varios campos
Conforme avancemos en el curso veremos mtodos ms
complejos
El contexto determina el nombre de la seccin en la
que estamos trabajando
Todos los archivos pueden ser modificados
directamente desde la consola
Los campos especifican los detalles de configuracin
Estructura base:
nano, pico, emacs, vi, vim, cualquier editor nos sirve
[contexto]
campo1=valor1
campo2=valor2
Configuracin de Asterisk
; <-- Este es el contexto
; <-- Estos son los campos
41
Comentarios
Configuracin de Asterisk
42
Ejemplo de sintaxis
Los archivos de configuracin en Linux tienen
comenarios que se especifican con el smbolo #
Archivo res_mysql.conf
Sin embargo, los de Asterisk reciben comentarios con el ;
(punto y coma)
Todo lo que est a la derecha del ; ser ignorado
Tambin podemos declarar comentarios multilnea:
Usamos los tags de ;-- y --;
Ejemplo
;--- Todo esto
es un
comentario ---;
Configuracin de Asterisk
43
Configuracin de Asterisk
44
Inclusin de archivos
Inclusin de archivos (2)
Si un archivo es muy grande, puede resultar difcil de
administrar
Tambin es posible incluir configuracin a partir de
la ejecucin de scripts usando #exec.
Podemos separar el contenido en archivos ms pequeos
Esta idea es muy usada por interfases como FreePBX
Todo lo que el comando imprimira a pantalla, es
interpretado como cdigo de configuracin por Asterisk
Ejemplo:
Sintaxis:
#exec /bin/database_config.sh
#include mi_otro_archivo.conf
Ejemplo:
sip.conf
[general]
#include sip_general_custom.conf
#include sip_general_additional.conf
Esto puede usarse para generar la configuracin
desde un sistema externo (ej. base de datos)
Considerar que esto puede afectar el rendimiento
Sin embargo, nos da mucha flexibilidad
; Aqu comienza la configuracin de usuarios
#include sip_custom.conf
#include sip_additional.conf
Configuracin de Asterisk
45
Configuracin de Asterisk
46
Usuarios SIP/IAX <>
extensiones
Contextos
Son secciones que identifican un grupo de campos
Usuario SIP/IAX no es igual a extensin
Confusin creada por distribuciones como Elastix/Trixbox.
Un usuario se refiere al dispositivo que se conectar con
Asterisk (archivo sip.conf/iax.conf).
Las extensiones representan lo que se puede marcar
(archivo extensions.conf).
Se les identifica por escribirse entre [ ]
Segn el archivo en que se ocupe, el [contexto] puede
significar algo diferente
sip.conf: Un usuario SIP
extensions.conf: Un grupo de extensiones
voicemail.conf: Un conjunto de buzones de voz
El campo context define los derechos de marcacin
de un usuario SIP
Un [contexto] permanece abierto hasta que se
encuentre con otro [contexto]
Al abrir un nuevo contexto hay que cuidar no romper los ya
existentes
Configuracin de Asterisk
47
Configuracin de Asterisk
48
Dejando en claro la
diferencia
sip.conf
El telfono requiere del sip.conf para autenticarse
Aqu se define todo lo relacionado con SIP
El usuario requiere de las reglas del extensions.conf
para poder marcar
Configuracin de usuarios y troncales
Tiene 2 secciones: [general] y rea de usuarios
[general] contiene valores que afectan a todos los
usuarios, as como al canal SIP mismo. Es la configuracin
default.
El rea de usuarios define la configuracin especfica de
cada usuario.
En caso de que el mismo campo est configurado en
ambas secciones, la individual gana
Cualquier dato que no exista, se tomar su valor default.
Fuente: Asterisk The Definitive Guide
Empezaremos por la configuracin del sip.conf
Configuracin de Asterisk
49
Configuracin de Asterisk
sip.conf (2)
Campos bsicos
Hay muchos campos diferentes que podemos configurar
para cada usuario SIP
Valores
posibles
Funcin
type
user,
peer
o friend
Controla las llamadas que hace/recibe, as como
interpretar la autenticacin del dispositivo
user: Se autentica por username. Solo puede
hacer llamadas hacia Asterisk
peer: Se autentica por direccin IP y puerto.
friend: Combinacin de ambas
host
<direccin IP>
o dynamic
Especifica si el equipo (el telfono) tiene una IP
fija o si puede tomar cualquiera (dinmica).
Tambin indica si el telfono tiene que
registrarse hacia Asterisk o no.
context
<nombre del
contexto>
Determina el contexto (el conjunto de reglas de
marcacin) al que podr acceder el usuario.
secret
<contrasea>
Especifica la contrasea para el usuario
Campo
Hay ms de 30, y la lista crece en cada versin nueva de Asterisk.
Para dar de alta un usuario SIP existen 3 campos
obligatorios:
50
type
host
context
El nombre del usuario es lo que aparece como el [encabezado]
Cualquier campo no especificado se usar su valor
default
Configuracin de Asterisk
51
Configuracin de Asterisk
52
Algunos campos
adicionales
Ejemplos de usuarios SIP
Algunos campos adicionales por usuario:
Campo
Valores posibles
allow /
disallow
<cdec>
language
<cdigo de idioma>
dtmfmode
auto, inband,
rfc2833
mailbox
<buzn>@
<contexto>
permit
/deny
<Direccin IP>
/<Mscara>
Bsico
Avanzado
Seguro
[usuario1]
context=agentes
type=friend
host=dynamic
[usuario2]
context=supervisor
type=peer
host=192.168.1.34
secret=abcde12345
dtmfmode=auto
disallow=all
allow=g729
language=es
mailbox=200@default
[usuario2]
context=supervisor
type=friend
host=dynamic
secret=JuK!23+c9
deny=0.0.0.0/0
permit=192.168.1.0/24
Funcin
Habilita o deshabilita el uso de ciertos
cdecs
Permite cambiar el lenguaje default de este
usuario
Determina como se enviarn los cdigos
DTMF
Hace que el telfono consulte el buzn de
voz por nuevos mensajes
Limita el registro a dispositivos cuya IP
coincida con la indicada aqu.
El orden de deny/permit es importante.
Esto permite que un
telfono se registre
hacia Asterisk sin
contrasea
Para conocer todos los campos, consultar los comentarios del archivo
muestra sip.conf
Configuracin de Asterisk
53
Esto limita a una
contrasea ms
segura y obliga a que
tenga que tener una
IP local
Configuracin de Asterisk
Control de nombres
54
Control de nombres (2)
Debemos llevar un control de nombre de los
dispositivos
Evitar que se repitan
Dar seguridad
Facilitar la administracin
Diferentes esquemas de nombrado de dispositivos
tiene sus propias ventajas y desventajas
Debemos decidir cual se adapta mejor a nuestras
necesidades
Configuracin de Asterisk
El usuario tiene ms
argumentos
configurados
Mtodo
Ejemplo
Extensiones
101
201
320
Personas/
Ubicaciones
jortiz
sala_juntas
Direcciones
MAC
00121419AEFF
Contraseas
tel-aJ13K74
Seguridad
Baja
fciles de adivinar
Difcil
Cambiar equipos sin cambiar
extensin
Fcil de
recordar
Muy Fcil
Dgitos simples
Difcil
Media
Alta
Difcil de adivinar
Mxima
55
Crear/cambiar
usuarios
Virtualmente
imposible de
adivinar
Imaginar casos donde el
mismo usuario tiene 2
dispositivos, o 2 personas se
llaman igual en la compaa
Sencillo
Nuevos dispositivos tienen
nuevas MAC
Sencillo
Es muy simple crear nuevas
entradas aleatoriamente
Muy Fcil
Nombres sencillos
Difcil
Muy difcil
Configuracin de Asterisk
56
Un poco ms de seguridad
Adicional al campo secret,
siempre que sea posible
debemos utilizar el permit
y deny.
Solo en aquellos usuarios
externos dinmicos no ser
posible aplicarlo
El orden es importante
Lo comn es negar todo y
luego permitir lo que
queremos
Podemos usar
nomenclatura estndar
(/255.255.255.0) o
abreviada (/24)
Plantillas
Es posible crear plantillas
de usuarios
[juan]
type=friend
context=agentes
host=dynamic
deny=0.0.0.0/0
permit=192.168.5.1/24
[carrier]
type=peer
contect=from-trunk
host=201.194.200.9
deny=0.0.0.0/0.0.0.0
permit=201.194.200.9/255.255.255.255
Configuracin de Asterisk
57
Los campos comunes se
aplican una nica vez y de ah
se reutilizan las veces que
sean necesarias
Ahorro de cdigo al no tener
que redeclarar valores
Se declaran con (!)
Es posible aplicar mltiples
plantillas al mismo tiempo
[usuario](!)
type=friend
context=micontexto
host=dynamic
[local](usuario,!)
nat=no
deny=0.0.0.0/0
permit=10.1.1.2/24
[100](usuario)
secret=55tDyXID
[200](local)
secret=32nAc5Tt
Configuracin de Asterisk
Ejemplo general sip.conf
[general]
disallow=all
allow=alaw
; Negamos todos los codecs a todos
; y solo permitimos alaw
[usuarios](!)
host=dynamic
type=friend
context=micontexto
deny=0.0.0.0/0
permit=192.168.1.0/24
; Creamos una plantilla para
; homologar nuestros usuarios
[usuario1](usuarios)
secret=abcde12345
; Invocamos la plantilla y solo
; declaramos la contrasea
[usuario2](usuarios)
secret=fghij9876
; Mismo caso. Podemos repetir cuantas
; veces queramos
[micarrier]
username=ccabrera
secret=$uYjOpa2!
context=from-trunk
type=peer
; Una troncal SIP para enviar llamadas
; No podemos reaprovechar la plantilla
; porque los campos son muy diferentes
#include sip_extra.conf ; Podemos tener la configuracin en ms
; distribuida en varios archivos
Configuracin de Asterisk
Prctica 2.1
Creacin de usuarios SIP y
configuracin de softphone
59
58
Plan de marcacin
Se define en el archivo extensions.conf
Contiene 3 secciones:
Prctica 2.2
[general]
[globals]
rea de contextos
[general] configura el manejo del archivo de
extensiones (comnmente no se altera)
[globals] define constantes que pueden ser
referenciadas desde cualquier parte del dialplan
Configurar un telfono IP
El rea de contextos declara los diferentes contextos que
definen el plan de llamadas
Configuracin de Asterisk
62
Ejemplo de extensiones
vlidas
Sintaxis
La sintaxis general del plan de llamadas es:
exten => 123,1,Answer
exten => 123,2,Wait(5)
exten => 123,3,Hangup
[contexto]
exten => <extensin>,<prioridad>,<aplicacin>
<extensin> es cualquier valor alfanumrico
<prioridad> es el orden con el que se ejecutarn las
diversas aplicaciones
<aplicacin> es el comando a ejecutar
Configuracin de Asterisk
63
exten => hola,1,Noop(nada)
exten => hola,2,Playback(welcome)
exten => hola,3,Dial(SIP/100)
exten => 5546144330,1,Wait(3)
same => 2,Dial(DAHDI/g0/${EXTEN})
same => 3,Hangup
*1.6.2+
Notar el uso de
same => para
abreviar extensiones
Configuracin de Asterisk
64
Extensiones especiales
Extensin s (start)
GDL
MEX
Extensin Significado
Funcin
timeout
Extensin que llega al no ingresar dgitos dentro
del tiempo establecido
absolute
timeout
Se activa automticamente cuando la llamada
cumple con la duracin especificada por
${TIMEOUT(absolute)}
hangup
Activada al colgar un canal
invalid
Activada al teclear una extensin que no existe
en el contexto
a,o
operator
Utilizadas para escapar de un Voicemail al
presionar * o cero al momento de escuchar la
bienvenida
start
Llamada hacia
SIP/GDL/101
Llamada hacia
SIP/GDL ?
Extensin default de entrada
Configuracin de Asterisk
101
65
101
Configuracin de Asterisk
Prioridades
66
Ejemplos de prioridades
Extensin escrita en desorden pero numerada
Determinan el orden de ejecucin de los comandos
de una extension
exten => 100,3,Hangup
exten => 100,1,Noop
exten => 100,2,Answer
Siempre deben comenzar con 1, de lo contrario Asterisk
invalidar toda la extensin
El orden debe ser consecutivo
La misma extensin escrita con prioridad n
Al numerarlas, pueden ser escritas en cualquier orden
Asterisk las ordenar en memoria
exten => 100,1,Noop
exten => 100,n,Answer
exten => 100,n,Hangup
O bien:
exten => 100,1,Noop
same => n,Answer
same => n,Hangup
El uso de la prioridad n (next) facilita la escritura
Facilita hacer inserciones o cambios
Usar n es ms fcil al no tener que renumerar
Configuracin de Asterisk
67
Configuracin de Asterisk
68
Prioridades (2)
Para diferenciar una prioridad de otra, la prioridad n
puede contener etiquetas:
Prctica 2.3
[default]
exten => 100,1,Answer
same => n,Wait(2)
same => n(bienvenida),Playback(welcome)
same => n,Hangup
La referencia a estas etiquetas se puede hacer
mediante un Goto
Plan de llamadas sencillo
exten => 100,n,Goto(default,100,bienvenida)
Esto nos permite controlar el flujo de nuestro plan de
marcacin
Configuracin de Asterisk
69
Plan de llamadas
Patrones
No es posible definir todas las posibles extensiones
Usuarios SIP
Los patrones son caracteres especiales que reemplazan un rango de
dgitos:
Patrn
micontexto
Dgitos que reemplaza
Dgitos entre 0 y 9
Dgitos entre 1 y 9
Dgitos entre 2 y 9
[x-y]
.
Cualquier dgito comprendido en el rango
uno o ms dgitos cualesquiera
Todos los patrones deben ser precedidos por _ para no ser
descartados al momento de marcarlos
Configuracin de Asterisk
71
Configuracin de Asterisk
72
Ejemplos
Patrn
_0133ZXXXXXXX
_0181ZXXXXXXX
_0155ZXXXXXXX
_01NXXZXXXXXX
_01900XXXXXXX
_ZXXXXXXX
_ZXXXXX00
_0[347]0
_9.
_1XZ
Patrones (3)
En caso de que ms de un patrn coincida, Asterisk los
ordena del ms especfico al ms general:
Dgitos que reemplaza
Llamadas de LDN hacia MGM
Llamadas de LDN a provincia
Llamadas a 01900
Llamadas locales
Llamadas locales que terminen en 00
Servicios 030, 040 y 070
Todo lo prefijado por 9
Extensiones 101-199, excepto 100, 110, 120, etc.
Configuracin de Asterisk
1.
2.
3.
4.
5.
6.
Por lo que si marcamos un nmero 019001234567:
_01NXXXXXXXXX
_01900XXXXXXX
Siempre coincide primero el 01900 por ser el ms especfico
Considerar esto al momento de permitir/negar patrones
73
Configuracin de Asterisk
Atencin especial a los
patrones
74
Variables
Mismo concepto que en un lenguaje de programacin
[largadistancia]
exten => _01ZXXXXXXXXX,1,Noop(Llamada de LD)
same => n,Dial(SIP/carrier/${EXTEN})
Son etiquetas que hacen referencia a un valor
Podemos extraer el valor en cualquier momento
Hay 4 tipos de variables
exten => _01900ZXXXXXX,1,Noop(No permitir llamada)
Si marcramos hacia 019001234567,
la llamada pasara o se colgara?
R: La llamada pasara
Si bien no hay un Dial explcito que la deje salir, al no colgarse la
llamada coincide con el patrn _01ZXXXXXXXXX prioridad 2.
Siempre colgar la llamada cuando no deba continuar.
Configuracin de Asterisk
Nmeros/letras (1 nica coincidencia)
Rangos [ ] (coincidencias de 1 a 7 dgitos)
N (8 coincidencias)
Z (9 coincidencias)
X (10 coincidencias)
. (infinitas coincidencias)
75
Globales
De canal (definidas por el usuario o pre-definidas)
De entorno
Heredadas
Se declaran conforme al tipo de variable
Se identifican por los smbolos ${ }
El ${ } solo se usa al invocar, no al guardar el valor
Configuracin de Asterisk
76
Variables globales
Variables de canal
Se declaran en la seccin [globals] del archivo
extensions.conf
Asociadas con una nica instancia (copia) del canal
Diferentes copias del canal no cruzan sus variables
Al colgar un canal, se destruyen las variables asociadas con l
[globals]
celular=0445512345678
Se declaran con la aplicacin Set
exten => s,1,Set(MIVAR=hola)
[micontexto]
exten => 911,1,Dial(DAHDI/g0/${celular})
Hay algunas variables pre-definidas por el sistema:
Si se actualiza el archivo, todas las referencias a la
variable cambian
Disponibles desde todos los canales
Es global porque puede accederse desde cualquier lado
Configuracin de Asterisk
${CONTEXT}:
el contexto actual
${EXTEN}:
la extensin actual (marcada)
${PRIORITY}: la prioridad de procesamiento actual
${DIALSTATUS}: el estado del ltimo comando Dial ejecutado
77
Configuracin de Asterisk
Variables de entorno
78
Variables heredadas
Variables de Linux que se pueden acceder desde
Asterisk
Heredadas
Se acceden con la funcin ${ENV(variable)}
Heredadas indefinidamente
Llevan un guin bajo _
Solo estn disponibles para el primer canal creado por el canal padre
Llevan dos guiones bajos __
Disponibles para todos los canales generados por el padre
Ejemplo:
exten => 123,1,Noop(El path de Linux es ${ENV(PATH)})
[micontexto]
exten => 100,1,Set(VAR1=1)
same => n,Set(_VAR2=2)
same => n,Set(__VAR3=3)
same => n,Noop(Var1 es ${VAR1}, Var2 es ${VAR2}, Var3 es ${VAR3})
same => n,Dial(Local/nivel1@micontexto)
exten => nivel1,1,Noop(Var1 es ${VAR1}, Var2 es ${VAR2}, Var3 es ${VAR3})
; Var1 dar vaco, Var2 dar 2 y Var3 dar 3
same => n,Dial(Local/nivel2@micontexto)
Configuracin de Asterisk
79
exten => nivel2,1,Noop(Var1 es ${VAR1}, Var2 es ${VAR2}, Var3 es ${VAR3})
; Var1 dar vaco, Var2 dar vaco y Var3 dar 3
Configuracin de Asterisk
80
Manipulando variables
Se usa la sintaxis:
${<nombre variable>[:<offset>:[<cantidad>]]}
Ejemplo
${MIVAR}
= holamundo
= amundo
${MIVAR:3}
${MIVAR:-5}
= mundo
${MIVAR:3:2}
= am
Cmo nos quedaramos solo con 'hola'?
Prctica 2.4
Uso de patrones y variables
til para reformatear nmeros:
Noop(${EXTEN})
Set(EXTEN=52${EXTEN:2})
Noop(${EXTEN})
;015546144330
;525546144330
Configuracin de Asterisk
81
Contextos de extensin
Considerar cada contexto
como un grupo de
permisos nico
Reutilizar contextos
declarados previamente
Pueden incluirse contextos
dentro de otros
Contextos de extensin (2)
[nivel3]
Celulares
Notar lo siguiente:
[internas]
exten => _ZXXX,1,Dial(SIP/${EXTEN})
[locales]
include => internas
exten => _ZXXXXXXX,1,Dial(DAHDI/g0/${EXTEN})
[nivel2]
LDN
[largadistancia]
include => locales
exten => _01ZXXXXXXXXX,1,Dial(DAHDI/g0/${EXTEN})
exten => _ZXXXXXXX,1,Hangup
[nivel1]
Locales
Al marcar 50181181 dentro de [largadistancia] obtendremos
siempre un hangup, a pesar que en [locales] se permite
Contexto principal siempre tiene preferencia sobre contextos incluidos
Configuracin de Asterisk
83
Configuracin de Asterisk
84
Contextos de extensin (3)
Pueden incluirse contextos basados en tiempo
Prioridades de ejecucin
Exten vs. Exten
Gana el que tenga el patrn de marcacin ms especfico
Sintaxis:
Exten vs. Include
include => contexto,<hora>,<dia>,<dia mes>,<mes>
Siempre gana el exten
Ejemplo:
Include vs. Include
Gana el que est declarado primero
[micontexto]
include => gratis,21:00-23:59,mon-fri,*,*
include => gratis,*,sat-sun,*,*
Es recomendable incluir primero lo ms especfico y
al ltimo lo ms general
Configuracin de Asterisk
85
Evaluador
Configuracin de Asterisk
86
Funciones
Permiten procesar valores o datos que normalmente
no estaran accesibles:
Podemos evaluar una operacin lgica o aritmtica
usando $[ ]
Ejemplo:
exten => s,1,Noop(${MD5(${MI_CLAVE_SECRETA})})
exten => s,1,Set(MiValor=$[10/2])
;5
same => n,Noop(${MiValor})
Se despliegan con el comando
core show functions
desde el *CLI
Esto puede usarse para hacer reemplazos o evaluar
condicionales
Asterisk no evala operaciones por default
Se escriben completamente en maysculas
Operadores vlidos
Se acceden como si fueran variables ${FUNC()}
No perder de vista el orden de los { ( ) }
+, -, *, /, %, >, >=, <, <=, =, !=, &, |, ~
Configuracin de Asterisk
87
Configuracin de Asterisk
88
Funciones (2)
Subrutinas
Algunas funciones guardan valores, otras slo los
despliegan
Conjuntos de acciones agrupadas que reciben parmetros
Hechas por el usuario
tiles para procesos repetitivos con cambios entre invocaciones
Ejemplo: LEN() regresa la longitud de una cadena
Set(MIVAR=hola mundo)
Noop(${LEN(${MIVAR})})
Reemplazan el concepto de macros de versiones
anteriores de Asterisk
; 10
Las subrutinas no tienen lmite de anidamiento
Ejemplo: CALLERID(num) permite cambiar o mostrar
el caller id
Al ejecutar una subrutina, se brinca hacia el contextoextensin-prioridad que la subrutina indique
Set(CALLERID(num)=5544332211)
Noop(El valor es ${CALLERID(num)})
Es necesario agretar un Return() para regresar al punto desde el
que se invoc a la subrutina.
Configuracin de Asterisk
89
Configuracin de Asterisk
90
Ejemplo de una subrutina
Subrutinas (2)
Cuando se invoca una subrutina, se pueden
proporcionar argumentos
[sub-llamada]
exten => s,1,Answer
same => n,Dial(${ARG1},20)
same => n,Voicemail(${ARG2})
same => n,Hangup
same => n,Return
Se usan para personalizar la subrutina
Se crean automticamente en las variables
${ARG1}, ${ARG2}, ${ARG3}, etc
Cada subrutina tiene variables individuales
Este es el cdigo que
declara la subrutina.
No sirve de nada hasta
que no la invoquemos
[default]
exten => 100,1,Gosub(sub-llamada,s,1(SIP/chris,${EXTEN}))
exten => 110,1,Gosub(sub-llamada,s,1(SIP/juan,${EXTEN}))
exten => 120,1,Gosub(sub-llamada,s,1(SIP/carlos,${EXTEN}))
Los argumentos no se mezclan entre si
Se invocan con la aplicacin Gosub
Gosub(<contexto>,<extensin>,<prioridad>([argumentos]))
De esta manera, pueden alterarse todas las acciones modificando
solamente la subrutina
Cualquier extensin puede convertirse en subrutina
Configuracin de Asterisk
;
;
;
;
En este ejemplo el Return sobra porque de cualquier manera, la llamada se
cuelga antes de llegar a l.
91
Configuracin de Asterisk
92
En resumen
Cada archivo en Asterisk tiene una labor especfica
Usuarios SIP en sip.conf
Plan de llamadas en extensions.conf
Prctica 2.5
Cada extensin debe tener una prioridad y aplicacin para
ejecutarse
No repetir extensiones/prioridades
Los patrones nos ahorran extensiones
Muchas extensiones coinciden con una sola lnea
Subrutinas e inclusiones
Las variables almacenan valores que podemos reutilizar
Podemos agrupar tareas usando subrutinas
E invocarlas las veces que sean necesarias cambiando solo los
argumentos
Configuracin de Asterisk
93
Plan de llamadas
Captulo Bsico #3
Arquitectura de Asterisk
Usuarios SIP
llamada
micontexto
internas
Ing. Christian Cabrera R.
adicional
Configuracin de Asterisk
95
Antecedentes
Sistema de archivos
Los mdulos de
Asterisk se
configuran de
manera
independiente
Asterisk coloca sus archivos en diferentes carpetas:
Tipo de archivo
Ubicacin
Configuracin /etc/asterisk
Mdulos /usr/lib/asterisk/modules
Alto nivel de
control
Logs /var/log/asterisk
AGIs /var/lib/asterisk/agi-bin
En el ncleo,
Asterisk solo es
un conmutador
Sonidos /var/lib/asterisk/sounds
Voicemail /var/spool/asterisk/voicemail
Grabaciones /var/spool/asterisk/monitor
Ajeno a cualquier
tecnologa
Salida de llamadas /var/spool/asterisk/outgoing
Fuente: wiki.asterisk.org
Arquitectura de Asterisk
97
Ncleo de Asterisk
98
Arquitectura de Asterisk
Haciendo crecer a Asterisk
Para agregar/quitar funcionalidades, controlamos los
mdulos que Asterisk carga
Editando /etc/asterisk/modules.conf limitamos cuales
mdulos sern cargados
Responsable de
Administrar mdulos
Carga de configuracin
Sincrona del sistema
Manejo de canales
Control del plan de
llamadas
Ajeno a cualquier tecnologa
Podemos hacer crecer a Asterisk
agregando el mdulo que le
brinde las nuevas
funcionalidades
Provee las interfaces de
configuracin y control del
sistema
Tenemos 4 clases principales de mdulos:
Canales
Cdecs
Aplicaciones/funciones
Recursos adicionales
AMI, AGI, CLI
Arquitectura de Asterisk
99
Arquitectura de Asterisk
100
Lista de mdulos
app_adsiprog.so
app_alarmreceiver.so
app_amd.so
app_authenticate.so
app_cdr.so
app_celgenuserevent.so
app_chanisavail.so
app_channelredirect.so
app_chanspy.so
app_confbridge.so
app_controlplayback.so
app_dahdiras.so
app_db.so
app_dial.so
app_dictate.so
app_directed_pickup.so
app_directory.so
app_disa.so
app_dumpchan.so
app_echo.so
app_exec.so
app_externalivr.so
app_festival.so
app_flash.so
app_followme.so
app_forkcdr.so
app_getcpeid.so
app_ices.so
app_image.so
app_macro.so
app_milliwatt.so
app_minivm.so
app_mixmonitor.so
app_morsecode.so
app_mp3.so
app_nbscat.so
app_originate.so
app_page.so
app_parkandannounce.so
app_playback.so
app_playtones.so
app_privacy.so
app_queue.so
app_readexten.so
app_read.so
app_record.so
app_sayunixtime.so
app_senddtmf.so
app_sendtext.so
app_sms.so
app_softhangup.so
app_speech_utils.so
app_stack.so
app_system.so
app_talkdetect.so
app_test.so
app_transfer.so
app_url.so
app_userevent.so
app_verbose.so
app_voicemail.so
app_waitforring.so
app_waitforsilence.so
app_waituntil.so
app_while.so
app_zapateller.so
bridge_builtin_features.so
bridge_multiplexed.so
bridge_simple.so
bridge_softmix.so
cdr_custom.so
cdr_manager.so
cdr_syslog.so
chan_agent.so
chan_bridge.so
chan_dahdi.so
chan_iax2.so
chan_local.so
chan_multicast_rtp.so
chan_sip.so
codec_adpcm.so
codec_alaw.so
codec_a_mu.so
codec_dahdi.so
codec_g722.so
codec_g726.so
codec_g729.so
codec_gsm.so
codec_ilbc.so
codec_lpc10.so
codec_resample.so
codec_ulaw.so
format_g719.so
format_g723.so
format_g726.so
format_g729.so
format_gsm.so
format_h263.so
format_h264.so
format_ilbc.so
format_jpeg.so
format_pcm.so
format_siren14.so
format_siren7.so
format_sln.so
format_vox.so
format_wav_gsm.so
format_wav.so
Mdulos: Canales
func_aes.so
func_audiohookinherit.so
func_base64.so
func_blacklist.so
func_callcompletion.so
func_callerid.so
func_cdr.so
func_channel.so
func_config.so
func_cut.so
func_db.so
func_devstate.so
func_dialgroup.so
func_dialplan.so
func_enum.so
func_env.so
func_extstate.so
func_frame_trace.so
func_global.so
func_groupcount.so
func_hangupcause.so
func_iconv.so
func_jitterbuffer.so
func_lock.so
func_logic.so
func_math.so
func_md5.so
func_module.so
func_pitchshift.so
func_presencestate.so
func_rand.so
func_realtime.so
func_sha1.so
func_shell.so
func_sprintf.so
func_srv.so
func_strings.so
func_sysinfo.so
func_timeout.so
func_uri.so
func_version.so
func_vmcount.so
func_volume.so
pbx_ael.so
pbx_config.so
pbx_loopback.so
pbx_realtime.so
pbx_spool.so
res_adsi.so
res_ael_share.so
res_agi.so
res_calendar.so
res_clialiases.so
res_clioriginate.so
res_config_sqlite3.so
res_convert.so
res_crypto.so
res_fax.so
res_format_attr_celt.so
res_format_attr_h263.so
res_format_attr_h264.so
res_format_attr_silk.so
res_limit.so
res_monitor.so
res_musiconhold.so
res_mutestream.so
res_realtime.so
res_rtp_multicast.so
res_security_log.so
res_smdi.so
res_speech.so
res_stun_monitor.so
Arquitectura de Asterisk
Asterisk puede interactuar con cualquier medio para
el cual tenga un canal para comunicarse
SIP, IAX2, H323, DAHDI, Local, Unicall, etc
Cada canal es responsable de manejar su propia
lgica y memoria
El funcionamiento de un canal no afecta a los dems
Algunos canales representan un protocolo (ej. SIP),
mientras que otros solo siguen argumentos lgicos
(ej. Local)
101
Arquitectura de Asterisk
Mdulos: Aplicaciones
102
Mdulos: Aplicaciones (2)
Ejecutan acciones durante una llamada
Algunas aplicaciones:
Aplicacin
Se cargan dinmicamente conforme se necesitan
Accin
Dial Marca hacia la tecnologa/canal especificado
Ejecutadas sncronamente
Wait Espera x segundos
Se invoca la aplicacin al momento en que se le manda llamar,
sin que previamente est corriendo
Podemos aumentar la serie de comandos que Asterisk
puede ejecutar en cada llamada
Goto Brinca hacia la prioridad especificada
GotoIf Brinca condicionalmente
Macro Permite agrupar ms aplicaciones y repetirlas
AGI Invoca un AGI script externo
Asterisk carga 180+ aplicaciones al momento de arrancar el
sistema
Playback Reproduce un archivo de sonido
Background Igual que Playback, pero permite ingresar DTMFs
Pueden consultarlas usando
Read Pide dgitos al usuario y los almacena en una variable
*CLI> core show applications
Hangup Cuelga la llamada
Set Guarda un valor en una variable
Arquitectura de Asterisk
103
Arquitectura de Asterisk
104
Mdulos: Recursos
Asterisk CLI
Integran a Asterisk con recursos externos
La interfaz humano-Asterisk
Bases de datos
Calendarios
Msica en espera
Monitoreo (grabacin)
Nuestra principal herramienta de control en el curso
Le permite al administrador:
Consultar el estado del sistema
Recargar o reiniciar el sistema
Actualizar valores en tiempo real
Desplegar ayuda
Hacer debug
Se cargan de manera esttica
Requieren una recarga de mdulo al modificarse
Pueden operar simultneamente en varios canales
Mdulos pueden agregar comandos al *CLI
Cada canal recibe lo mismo que los otros
Ej. sip show peers depende del mdulo chan_sip.so
Arquitectura de Asterisk
105
AGI: Asterisk Gateway
Interface
Arquitectura de Asterisk
106
AMI: Asterisk Manager
Interface
Ejecuta scripts externos a Asterisk
A diferencia del CLI, esta es una interfaz computadoraAsterisk
Escritos en diferentes lenguajes
Permite ejecutar comandos o monitorear al sistema
Perl, PHP, Python, Bash, etc
Al igual que el CLI, algunos mdulos agregan
comandos
Permite que Asterisk sea una puerta de enlace
(gateway) entre un telfono y una aplicacin notelefonica
Usada por aplicaciones como el FOP, popups de
agente para callcenter, sistemas de click-to-call, etc
Encuestas, IVRs, juegos, etc
Se ver ms a detalle en un captulo propio
Arquitectura de Asterisk
Se ver ms a detalle al final del curso
107
Arquitectura de Asterisk
108
Prctica 3.1
Prctica 3.2
Instalando un mdulo desde source:
format_mp3 para msica en espera
Instalando un mdulo precompilado: Cdec G729
Prctica 3.3
(opcional)
Captulo Bsico #4
Aplicaciones
Cambiando el idioma de Asterisk
Ing. Christian Cabrera R.
Introduccin
Buzones de voz
Existen muchas aplicaciones en Asterisk
Ofrecer funcionalidad de dejar mensaje a un usuario.
Ms de 150+
Los buzones se crean en archivo voicemail.conf
Cada aplicacin tiene su propia sintaxis
No es necesario aprenderlas todas, pero si las ms
importantes
Se usa a travs de 2 aplicaciones:
Dejar el mensaje: Voicemail
Recuperar los mensajes: VoicemailMain
Todas son consultables desde el *CLI
core show applications
core show application <aplicacin>
Aplicaciones de Asterisk
All se definen los usuarios, sus nombres, contraseas y
correos para envio de mensajes
Es necesario programar estas aplicaciones en el
extensions.conf
113
Aplicaciones de Asterisk
voicemail.conf
114
Voicemail
Aqu configuramos los buzones y sus contraseas
Permite dejar un mensaje de voz al buzn
especificado
Configuracin general y mltiples contextos de
buzones de voz
El buzn/contexto deben existir en el voicemail.conf
Podemos dejar un mensaje en ms de un buzn a la vez
Si queremos tener activo el envo de correos
debemos instalar un MTA (Mail Transfer Agent) en
Linux
Sintaxis:
Voicemail(<buzn>[@<contexto>],<opciones>)
Ejemplos:
[general]
; Aqu va la configuracin general de los buzones de voz
Voicemail(100,b)
Voicemail(201&202,u)
[default]
101 => 1234,Juan Prez,[email protected],,attach=yes
102 => 1234,Jorge Lpez,[email protected],,attach=yes
Aplicaciones de Asterisk
115
Aplicaciones de Asterisk
116
VoicemailMain
VMAuthenticate
Autentica al usuario a partir de la contrasea de su buzn
Desde aqu escuchamos nuestros mensajes
Permite tambin configurar las opciones del buzn, tales como
las bienvenidas
Es importante vaciar el buzn para evitar que se llene
Podemos saltar la autenticacin
Hacer que no se le pida contrasea al usuario y pasar directo a
los mensajes
Sintaxis:
Las contraseas estn definidas en el voicemail.conf
Usando VoiceMailMain, el usuario final puede actualizar
sus contraseas sin intervencin del administrador
El usuario se debe hacer responsable de su contrasea y su uso
Permite personalizar contraseas a nivel individual
3 intentos fallidos y la llamada es colgada
Sintaxis:
VoicemailMain([buzn],[opciones])
VMAuthenticate([buzn][@contexto],[opciones])
Ejemplos:
Ejemplos:
VoicemailMain(100,s)
VMAuthenticate(101@default)
Aplicaciones de Asterisk
117
Aplicaciones de Asterisk
Ejemplos de uso
; voicemail.conf
[default]
101 => 1234,Juan Prez,[email protected],,attach=yes
Prctica 4.1
; extensions.conf
[sub-llamar]
exten => s,1,Dial(${ARG1},20)
same => s,n,Voicemail(${ARG2}@default)
same => s,n,Hangup
same => s,n,Return
Agregar servicio de voicemail para nuestras
extensiones
[internas]
include => larga-distancia
exten => _*86,1,VoicemailMain()
exten => _1XX,1,Gosub(sub-llamar,s,1(SIP/${EXTEN},${EXTEN}))
[larga-distancia]
exten => _01ZXXXXXXXXX,1,VMAuthenticate(${CALLERID(num)}@default)
same => n,Dial(SIP/carrier/${EXTEN})
Aplicaciones de Asterisk
119
118
Interaccin con el usuario
Playback
En ocasiones tenemos necesidades como:
Reproduce el sonido especificado
Obliga al usuario a escucharlo (no puede saltarse)
No pueden recibirse tonos mientras se reproduce
Repetir alguna grabacin (bienvenidas)
Dar opciones de menu
Capturar dgitos ingresados en el telfono
Reproducir nmeros
La extensin del archivo se omite
Asterisk escoger el mejor cdec disponible
Lo mismo aplica para el resto de las aplicaciones de sonidos
Asterisk permite reproducir archivos de audio
Se soportan diferentes cdecs, adems de diferentes
idiomas para los archivos de sonido
Los sonidos se buscan por default en
/var/lib/asterisk/sounds
Sintaxis:
Playback(<archivo>,[opciones])
Ejemplo:
Playback(bienvenida)
Aplicaciones de Asterisk
121
Aplicaciones de Asterisk
Background
122
Read
Pide dgitos al usuario
Muy parecida a Playback, salvo que al usuario se le
permiten ingresar dgitos
Asterisk transferir al usuario a la extensin marcada
Si el nmero marcado no existe, transferir a la extensin i
(invlida)
No se hace nada con ellos, solo se almacenan en una
variable para uso posterior
Sintaxis:
Read(<var>,[archivo],[maxdigitos],[opciones],
[intentos],[timeout])
Sintaxis:
Background(<archivo>)
Ejemplo:
Ejemplo:
Read(pass,enter-account,4)
Background(digite-opciones)
Aplicaciones de Asterisk
123
Aplicaciones de Asterisk
124
Entendiendo la diferencia
SayDigits
Reproduce un nmero dgito por dgito
Read pide datos para almacenar o procesar
Ej. Contraseas o nmeros de cuenta
12345 = Uno dos tres cuatro cinco
Se usa para reproducir nmeros que no correspondan
a una cantidad
Background transfiere hacia la ext. marcada
Nmeros de contrato
Nmeros de cuenta
Contraseas
Ej. Para ventas, digite 1. Soporte digite 2
Playback solo reproduce archivos
Ejemplo:
Obligamos al usuario a que escuche la grabacin
SayDigits(123192)
Aplicaciones de Asterisk
125
Aplicaciones de Asterisk
126
Sobre las aplicaciones
de audio
SayNumber
Lee un nmero como una cantidad
Todos los sonidos se buscan por default en
/var/lib/asterisk/sounds
12345 = Docemil trescientos cuarenta y cinco
Para cambiar el idioma de los sonidos, hay 2 maneras:
Debe recibir solamente nmeros enteros
Cambiar el campo language=XX dentro del sip.conf, iax.conf o
chan_dahdi.conf
Hacer un Set(CHANNEL(language)=XX) en el plan de llamadas
XX es el cdigo de idioma deseado (es, fr, it, en, etc)
No hace distincin de nmeros o cadenas
Ejemplo:
Si algn archivo de sonido no existe en el idioma
deseado, se usar el mismo archivo en ingls
Saynumber(123192)
Si tampoco existe el archivo en ingls, dar un error
Aplicaciones de Asterisk
127
Aplicaciones de Asterisk
128
Ejemplo
[from-pstn]
include => horario-habil,9:00-18:00,mon-fri,*,*
include => fuera-de-horario
Prctica 4.2
[horario-habil]
include => internas
exten => s,1,Background(bienvenida)
same => n(opciones),Background(digite-opcion)
same => n,Goto(opciones)
[fuera-de-horario]
exten => s,1,Playback(recordamos-horarios-operacion)
same => n,Hangup
Aplicaciones de Asterisk
Rutinas con reproduccin de audio
129
Control de llamadas
Answer
Para asegurar que el audio fluya a travs del canal, es
recomendable contestarlo primero
Algunas aplicaciones lo hacen automticamente
Contesta un canal y comienza la tarificacin
Puede especificarse un tiempo de espera antes de continuar
con la siguiente prioridad
Procurar no usar Answer sino dejar que otra
aplicacin haga un contestado implcito
Es ocasiones es necesario insertar silencios antes o
despus del audio
Sintaxis:
Answer([milisegundos])
Dar mejor espacio entre llamadas o dar oportunidad al
usuario a que ingrese dgitos
Ejemplo:
Answer(3000)
Aplicaciones de Asterisk
131
Aplicaciones de Asterisk
132
Wait
WaitExten
Funciona igual que Wait, pero el usuario puede
ingresar dgitos
Hace al usuario esperar un tiempo obligatorio
No se pueden ingresar dgitos mientras se espera
Puede especificarse el tiempo que dure el silencio en
decimales
Es equivalente a un Playback en silencio
Asterisk intentar comunicar al usuario a la extensin
marcada
til para dar tiempos adicionales en IVRs
Es equivalente a un Background en silencio
Sintaxis:
Sintaxis:
Wait(<segundos>)
WaitExten(<segundos>,[opciones])
Ejemplo:
Ejemplo:
Wait(10)
WaitExten(3.5)
Aplicaciones de Asterisk
133
Aplicaciones de Asterisk
Comunicacin entre
usuarios
134
Dial
La tarea ms importante en un conmutador es
comunicar extensiones
Permite enlazar usuario con usuario
Siempre debe contener una tecnologa y un usuario
Asterisk puede convertir entre los protocolos
Podemos marcar a ms de un usuario a la vez
Asterisk ofrece la posibilidad de comunicar
varios usuarios en una misma llamada
Sintaxis:
Dial(<tech/user>,[timeout],[opciones])
Ejemplo:
Dial(SIP/100,30,tT)
Dial(SIP/201&SIP/202,30,tT)
Aplicaciones de Asterisk
135
Aplicaciones de Asterisk
136
Meetme
Controles de flujo
Establece cuartos de conferencia
El dialplan sigue una programacin secuencial
Une a n personas en una sola llamada
Tiene muchas opciones disponibles:
Solo hablar, solo escuchar, grabar conferencia, ejecutar AGI en el fondo,
usar contrasea, etc
Si no se proporciona el nmero de la conferencia, se le pedir
uno al usuario
Al colgar el ltimo usuario, la conferencia se cierra
Cada evento que ocurre va despus de otro
Es posible alterar el flujo haciendo saltos
Podemos evaluar condiciones para saber si es
necesario saltar o no
Tambin es posible evaluar acciones directamente
Sintaxis:
MeetMe([conferencia][,opciones[,nip]])
Ejemplo:
Meetme(8500,d)
Meetme(8501,D,2198)
Aplicaciones de Asterisk
137
Aplicaciones de Asterisk
Goto
138
GotoIf
Hace saltos incondicionales hacia cualquier contextoextensin-prioridad
Igual que Goto, pero solo brinca si la condicin se
cumple
Puede recibir 1, 2 o 3 parmetros
Dos posibles destinos
Es importante evaluar la condicional
1: Solo prioridad (misma ext. y contexto)
2: Extensin y prioridad (mismo contexto)
3: Contexto, extensin y prioridad
Sintaxis:
Sintaxis:
Goto([contexto],[extensin],<prioridad>)
GotoIf(<condicin>?<verdadero>:[falso])
Ejemplos:
Goto(opciones)
Goto(s,continua)
Goto(default,s,1)
Ejemplos:
GotoIf($[${var}>3]?s,1:default,123,1)
Aplicaciones de Asterisk
139
Aplicaciones de Asterisk
140
ExecIf
Ejemplo global: IVR
Permite ejecutar una aplicacin nica basada en una
condicional
til para hacer variaciones en un solo comando
[from-pstn]
include => internas
exten => s,1,Answer(3000)
same => n,Playback(bienvenida)
same => n,Wait(1)
same => n(opciones),Background(digite-opcion)
same => n,WaitExten(4)
same => n,Goto(opciones)
exten => 1,1,Dial(SIP/100)
exten => 2,1,Dial(SIP/201&SIP/202)
Ejemplo:
ExecIf($[${var}>1]?Playback(hola):Playback(adios))
exten => 3,1,Read(password,dame-tu-pass)
same => n,GotoIf($[${password}=1234]?bien:mal)
same => n(mal),Playback(pbx-invalid)
same => n,Goto(s,opciones)
same => n(bien),Playback(demo-congrats)
same => n,Goto(s,opciones)
exten => 5,1,Meetme(5000)
same => n,Goto(s,opciones)
exten => i,1,Goto(s,opciones)
Aplicaciones de Asterisk
141
Aplicaciones de Asterisk
Prctica 4.3
Prctica 4.4 (opcional)
Crear un menu IVR
Uso de funciones
142
Plan de llamadas
contador
Captulo Bsico #5
Conexin con la PSTN
usando DAHDI
Usuarios SIP
saldo
llamada
menu
micontexto
servicios
internas
Ing. Christian Cabrera R.
adicional
Aplicaciones de Asterisk
145
Introduccin
Fabricantes
Asterisk tiene la posibilidad de interactuar con
la PSTN
Se requiere de hardware adicional o rentar un
servicio de terceros
Los 3 principales
fabricantes del mercado:
Digium
Sangoma
Openvox
Para la interconexin directa pueden usarse
gateways externos o tarjetas internas
Cualquiera de sus tarjetas
funciona con Asterisk,
solo se configuran un
poco diferente
Los gateways se configuran por SIP
Nos centraremos en las tarjetas
Interconexin por DAHDI
Al no usar protocolos
propietarios, la libre
competencia ha reducido
los costos del equipo
147
Interconexin por DAHDI
148
Tarjetas analgicas
Puertos analgicos
Son los ms comunes
FXO (Foreign Exchange Office)
Estos son los puertos que usaramos para poner un PBX en
casa
Reciben corriente (de la telefnica)
Aqu conectas una lnea que viene de la calle
(Telmex, Axtel, Alestra, etc)
Limitados a una llamada simultnea por canal
FXS (Foreign Exchange Station)
El par de cobre est dedicado a un nico circuito
Entregan corriente hacia el telfono
Conectas un telfono convencional (Panasonic,
Alcatel, Siemens, etc)
En otros conmutadores se llaman diferente:
FXO = CO
FXS = EXT
Nunca conectar FXS-FXS!
Podras quemar los puertos
Interconexin por DAHDI
149
Tarjetas digitales
Interconexin por DAHDI
150
Conexin fsica
Todas soportan tanto E1s como T1s
Las tarjetas digitales tienen puertos RJ45 (8 pines),
pero los enlaces normalmente vienen en G703
(coaxial)
Configurable por software
T1: Estndar Americano
23 canales de voz + 1 sealizacin
Es necesario un convertidor que adems de adaptar el
conector, acople las impedancias correctamente
E1: Estndar Europeo
30 canales de voz + 1 de sealizacin + 1 de
sincrona
Para estos propsitos se usa un balun
Interconexin por DAHDI
151
Interconexin por DAHDI
152
Puertos digitales
Sincrona
Son troncales de mltiples canales digitales (DS-0)
Dado que los enlaces digitales estn multiplexados en
tiempo, requieren de una fuente de sincrona
Usados en entornos de grandes oficinas o corporativos
Las tarjetas digitales tienen 2 opciones:
Usando TDM (Time Division Multiplexing) es posible agrupar
muchos canales en un solo enlace
Tomar la sincrona que proviene del enlace (recomendado si es
que estamos conectados con la telefnica)
Generar la sincrona propia (cuando Asterisk es el equipo
maestro)
Hasta 30 canales de voz con muchos DIDs diferentes
Son tecnolgicamente superiores que los anlogos:
Mayor calidad
No son susceptibles al ruido
Confiabilidad
Sin una fuente de sincrona precisa, tendremos problemas
Ruidos en la lnea
Puede ocasionar que las llamadas se desconecten
Las tarjetas son ms caras
Aunque la renta del servicio digital suele ser mas cara
El costo puerto por puerto es ms barato
Interconexin por DAHDI
Deberemos configurar este parmetro en el system.conf
153
Interconexin por DAHDI
Comparacin ISDN vs
R2MFC
Framing
Segn el tipo de enlace, hay diferentes tipos:
T1s (EUA y CAN)
D4 Super Frame
(obsoleto)
ESF Extended Super Frame
154
E1s con ISDN PRI
E1s (resto del mundo)
E1s Canalizados (R2 MFC)
30 canales de voz
30 canales de voz
Usa CCS
Usa CAS
CAS Channel Associated
Signaling (obsoleto)
Canal 1 se usa para framing.
Canal 16 se usa para sealizacin
Canal 1 se usa para framing.
Canal 16 se usa para sealizacin
CCS Common Channel
Signaling
Soporta Euro ISDN, tanto en modo
de CPE como red (esclavo / maestro)
Soporta FXS, FXO, E&M
Comnmente usa CRC para
corroborar errores en transmisin
Obsoleto en Europa
Comn en Amrica Latina
Tanto D4 como CAS son tecnologas viejas y no
deberan usarse
Ms caro, por ser tecnologa nueva
Ofrece mucho ms informacin por
llamada
Desafortunadamente, en Latinoamrica usamos
principalmente R2 modificado, el cual usa CAS
Interconexin por DAHDI
155
Interconexin por DAHDI
156
Interconexin con
otros PBX
Qu es un DID?
Es posible interconectar Asterisk con otros sistemas
no IP
FXS-FXO o FXO-FXS es lo ms comn, pero te limita a una
sola llamada por puerto
Tambin es posible usar E1s con cable cruzado
Direct Inward Dialing
Es el nmero telefnico al cual marcamos
Un DID debe estar asociado con un canal para poder
recibir las llamadas
No confundir el DID con la lnea/canal para recibir (similar a
usuarios SIP y extensiones)
Asterisk puede actuar como maestro (simular ser la
telefnica) o actuar como esclavo (dejando al otro
PBX ser el maestro)
Es posible comprar DIDs virtuales que lleguen por SIP
Puede adaptarse fcilmente a las necesidades del otro
conmutador
Al recibir la llamada, la telefnica indica a que DID marc el
cliente
Una lnea anloga tiene un DID nico asignado
Interconexin por DAHDI
Esto evita tener que comprar tarjetas
Un enlace digital puede tener mltiples DIDs
157
Interaccin en software
OpenR2
Archivo base de configuracin de las tarjetas
/etc/asterisk/chan_dahdi.conf
Liga los mdulos de DAHDI con los puertos de las tarjetas
Por cada puerto digital, declaramos un span
DAHDI
Se configura el framing y el coding que el enlace use (segn sean
ISDN PRI, R2 MFC, etc)
Adicionalmente, deben declararse los canales de cada span
/etc/dahdi/system.conf
Los puertos anlogos de declaran cruzados
Wanpipe
FXO se declaran como FXS y viceversa
/etc/wanpipe/wanpipe1.conf
Tarjetas
Digium
158
/etc/dahdi/system.conf
Asterisk
Solo en caso que
usemos R2 MFC
Interconexin por DAHDI
Los canales deben ser consecutivos de acuerdo al orden
en que se cargan los mdulos
Tarjetas
Sangoma
Interconexin por DAHDI
/etc/dahdi/modules
159
Interconexin por DAHDI
160
system.conf
system.conf (2)
Los spans se declaran con la sintaxis:
Ejemplo para 1 E1 ISDN + 4 FXO + 1 FXS
span=<nmero>,<sincrona>,<atenuacin>,<framing>,<coding>
La sincrona se configura como
0 para maestro (usamos nuestra propia sincrona)
1 para esclavo (tomamos la sincrona que recibimos en el
enlace)
2 en adelante para definir los enlaces secundarios,
terciarios, etc
La atenuacin normalmente va en 0 (cero)
Solo sera necesario hacer cambios si estamos fsicamente
distantes (> 40 m) del mdem que trae el enlace
Interconexin por DAHDI
# Configuracin para E1 ISDN
span=1,1,0,ccs,hdb3
bchan=1-15,17-31
dchan=16
# Configuracin para 4 puertos FXO
fxsks=32-35
# Sealizacin inversa
# Configuracin para 1 puerto FXS
fxoks=36
# Inversa
161
system.conf (3)
# R2 MFC
span=1,1,0,cas,hdb3
cas=1-15:1101
cas=17-31:1101
dchan=16
Interconexin por DAHDI
162
/etc/asterisk/ chan_dahdi.conf
Aqu hacemos que Asterisk trabaje con los
canales de DAHDI instalados
Tras modificar el archivo, es necesario aplicar los
cambios desde el CLI
dahdi_cfg vv
Si declaramos los canales con errores, los cambios no
se aplicarn
Configuramos la sealizacin, las funciones
del canal, los grupos y los contextos a los que
pertenecen
Tomar nota del orden de los canales, ya que los
ocuparemos en el siguiente archivo
Prestar atencin a la sintaxis
Interconexin por DAHDI
163
Interconexin por DAHDI
164
chan_dahdi.conf
; ISDN PRI
signalling = pri_cpe
pridialplan=unknown
switchtype = euroisdn
context=from-pstn
group=0
channel => 1-15,17-31
signalling=fxs_ks
context=from-pstn
group=8
channel => 32-35
signalling=fxo_ks
context=from-internal
group=9
channel => 36
chan_dahdi.conf (2)
Para aplicar los cambios (se caern las llamadas):
; R2 modificado
signalling=mfcr2
mfcr2_variant=mx
mfcr2__ani_first=no
mfcr2_max_ani=10
mfcr2_max_dnis=4
mfcr2_category=national_subscriber
mfcr2_mfback_timeout=-1
mfcr2_metering_pulse_timeout=-1
mfcr2_forced_release=no
mfcr2_logdir=log
mfcr2_logging=all
*CLI> dahdi restart
Consultamos el estado de los canales:
*CLI> dahdi show channels
O si tenemos un enlace con R2MFC:
*CLI> mfcr2 show channels
ltimo paso es configurar el extensions.conf para enviar las
llamadas mediante DAHDI
Podemos enviar llamadas por canal o por grupo
exten
exten
exten
exten
exten
context=from-pstn
group=0
channel => 1-15,17-31
Interconexin por DAHDI
=>
=>
=>
=>
=>
_ZXXXXXXX,1,Dial(DAHDI/g0/${EXTEN})
_01ZXXXXXXXXX,1,Dial(DAHDI/g0/${EXTEN})
_04455ZXXXXXXX,1,Dial(DAHDI/g0/${EXTEN})
_045ZXXXXXXXXX,1,Dial(DAHDI/g0/${EXTEN})
_01900.,1,Congestion
165
Interconexin por DAHDI
166
Plan de llamadas
contador
Usuarios SIP
saldo
Prctica 5.1
llamada
menu
Instalacin de una tarjeta DAHDI
micontexto
internas
salida
adicional
entrada
PSTN
Interconexin por DAHDI
168
Recapitulando
IAX es un protocolo de comunicacin
Captulo Intermedio #1
Enlaces IAX y
troncales SIP
Se define en el archivo /etc/asterisk/iax.conf
El protocolo SIP se ocupa principalmente para
extensiones
Pero tambin podemos tener troncales en SIP
Ing. Christian Cabrera R.
Enlaces IAX y troncales SIP
Introduccin
Comparativa SIP vs IAX
SIP
IAX2
Pros
Amplio soporte en hardware
Cientos de implementaciones en
software (propietarias y
gratuitas)
Estandarizado
Ahorro de ancho de banda
reutilizando encabezados
Encabezados en binario (menor
ancho de banda)
Facilidad de configuracin a travs
de firewalls
Ms seguro (al ser menos conocido)
Diseado a partir de requerimientos
en el mundo real
Contras
IAX = Inter Asterisk eXchange
Problemas con NAT
Muy conocido, y por lo tanto,
atacado
Dbil soporte en hardware
Limitada cantidad de software que
lo utiliza
No es un estndar
Desarrollado por Mark Spencer
Creado especficamente como un protocolo de telefona
Usa un solo puerto UDP, el 4569
Mismo puerto para sealizacin y envo de la voz
Amigable con NAT
Ofrece posibilidad de trunking, permitiendo agrupar
mltiples llamadas en un solo enlace
Enlaces IAX y troncales SIP
Enlaces IAX y troncales SIP
Trunking IAX desactivado
En SIP, cada paquete tiene
su propio encabezado
En ocasiones, el tamao de
los encabezados supera al
del mensaje
5
5
4
4
4
Trunking IAX activado
Con IAX podemos
habilitar el trunking y
compartir los
encabezados
Si los paquetes son
siempre entre el punto A
y B, se repite mucha
informacin
Solo cambia el cuerpo de
los mensajes
5
3
3
3
5
Enlaces IAX y troncales SIP
Alta de usuarios IAX
4
4
4
La relacin
encabezados/cuerpo es
mucho menor
El ancho de banda se
aprovecha mejor
3
3
Enlaces IAX y troncales SIP
Conectando los equipos
Igual que en SIP
Hay 3 escenarios para interconectar equipos:
Campos context, type y host
Seccin general y seccin de mltiples usuarios
1. Ambos equipos cuentan con IP fija
El ms sencillo de implementar
Cada host siempre conoce la ubicacin del otro
Si no se especifica secret, cualquier usuario sin
contrasea podr llamar
2. Uno tiene IP fija y el otro dinmica
Esto se usa para poder recibir llamadas annimas
Es preferible declarar una cuenta iax sin contrasea con
accesos muy restringidos
Equipo dinmico debe registrarse con equipo fijo para
darse a conocer
3. Ambos equipos tienen IP dinmica
Es necesario convertirlo en uno de los otros escenarios (al
menos uno de los dos debe simular ser fijo)
Enlaces IAX y troncales SIP
Enlaces IAX y troncales SIP
Creando el enlace
; Host A
; sip.conf/iax.conf
; Host B
; sip.con/iax.conf
[usuario B]
username=<usuario A>
host=<ip B>
secret=<elmismo>
context=entrada
type=friend
deny=0.0.0.0/0
permit=<ip B>/32
[usuario A]
username=<usuario B>
host=<ip A>
secret=<elmismo>
context=entrada
type=friend
deny=0.0.0.0/0
permit=<ip A>/32
Proceso de registro
Esto es necesario cuando queremos interconectar 2
equipos y uno de ellos tiene una IP dinmica
El equipo dinmico se reporta con el fijo de manera
peridica
Tambin es posible que Asterisk se registre hacia otro
Asterisk (o cualquier
otro101
proxy)
Soy el usuario
y estoy en la
IP 192.168.1.145.
Registrame por
Mi
contrasea es ******
favor
Correcto!
Quedas
registrado
Si en
verdad eres
el usuario
101,
desde
192.168.1.145
CullaesIPtu
contrasea?
101 @ 192.168.1.145
(IP dinmica)
9
Enlaces IAX y troncales SIP
Proceso de registro (2)
Enlaces IAX y troncales SIP
10
Creando el enlace (2)
Los registros se hacen en la seccin [general] del
iax.conf/sip.conf y tienen el siguiente formato:
; Host A (dinmico)
; sip.con/iax.conf
register => <usuario>:<password>@<dominio>
; Host B (fijo)
; sip.con/iax.conf
[general]
register => usuarioA:elmismo@<ip B>
Ejemplos:
register => 10025:[email protected]
register => 5550181181:[email protected]
Al registrarse, el equipo que recibe (el fijo) ya conoce
la direccin del dispositivo dinmico
Ya sabe a donde enviar las llamadas
Enlaces IAX y troncales SIP
192.168.1.200
(IP fija)
11
[usuario B]
username=<usuario A>
host=<ip B>
secret=<elmismo>
context=entrada
type=friend
deny=0.0.0.0/0
permit=<ip B>/32
[usuario A]
username=<usuario B>
host=dynamic
secret=<elmismo>
context=entrada
type=friend
Enlaces IAX y troncales SIP
12
Envo de llamadas
Ejemplos de llamadas
Existen varios formatos para mandar las llamadas:
[micontexto]
include => salida
include => sucursales
IAX2/usuario_iax/extension
IAX2/proveedor/0140
[salida]
; Llamadas locales en DF y LDN
exten => _ZXXXXXXX,1,Dial(SIP/micarrier/${EXTEN})
exten => _01ZXXXXXXXXX,1,Dial(SIP/micarrier/52${EXTEN:2})
; Pido prestadas las lineas de mis otros conmutadores
exten => _0133ZXXXXXXX,1,Dial(IAX2/pbxGDL/${EXTEN:4})
exten => _0181ZXXXXXXX,1,Dial(IAX2/pbxMTY/${EXTEN:4})
IAX2/username:password@dominio/extension
IAX2/10999:[email protected]/525512345678
IAX2/dominio/extension
IAX2/asteriskmx.com/101
[sucursales]
; Llamadas internas entre conmutadores. El primer dgito
; identifica a que conmutador van
exten => _3XXX,1,Dial(IAX2/pbxGDL/${EXTEN})
exten => _4XXX,1,Dial(IAX2/pbxMTY/${EXTEN})
Todos estos formatos aplican para SIP e IAX
Algunos pueden simplificarse creando previamente una
entrada en el archivo de configuracin
Enlaces IAX y troncales SIP
13
Enlaces IAX y troncales SIP
Prctica 6.1
Prctica 6.2
Crear un enlace IAX entre
2 servidores Asterisk
Recibir llamadas IAX annimas
14
Plan de llamadas
contador
Usuarios SIP
saldo
Prctica 6.3
llamada
menu
Conexin con un carrier IAX/SIP
servicios
micontexto
internas
salida
adicional
sucursal
entrada
IAX autenticados
PSTN/
Vecinos IAX
IAX annimos
Recapitulando
Captulo Intermedio #2
Distribucin automtica
de llamadas (ACD)
Ing. Christian Cabrera R.
Extensiones se asignan a usuarios SIP/IAX/DAHDI
Comnmente en relacin 1:1
Pueden asignarse mltiples dispositivos a una sola
extensin
Aunque timbrar varios telfonos a la vez no siempre es
buena opcin
El plan de llamadas no permite controlar de manera
especfica a quienes se les enviarn las llamadas en
base a su ocupacin
Distribucin automtica de llamadas (ACD)
20
Asterisk como CallCenter
Componentes
Qu puede ofrecernos la plataforma?
Hay 2 partes importantes en todo esquema de atencin
al usuario: miembros y colas
Distribucin automtica de llamadas (ACD)
Agentes remotos
Monitoreo y grabacin de llamadas
Msica en espera
Enrutamiento basado en habilidades (skills)
Distribucin y enrutamiento geogrfico
Soluciones de contingencia
Una cola es una fila donde entran aquellos que desean
comunicarse a un rea especfica (soporte, ventas, etc)
Un callcenter puede tener N colas
Un miembro es el dispositivo que se registrar a una cola
para empezar a recibir llamadas
Los miembros pueden estar suscritos a mltiples colas
Estos conceptos se usan para recibir llamadas de inbound
Sin embargo, pueden aprovecharse para conectar llamadas de
outbound que sean traidas por un proceso externo
Distribucin automtica de llamadas (ACD)
21
Distribucin automtica de llamadas (ACD)
Caractersticas
Colas: queues.conf
Archivo donde se configuran todas las colas del sistema
Si una cola no tiene miembros asignados, no podr
atender llamadas
Existe la seccin de [general] y mltiples [colas]
Podemos agregar miembros estticos a cada cola usando
el campo de member:
Si no ha nadie al telfono, quin contesta?
Los miembros pueden ser estticos o dinmicos
member => <Tech>/<usuario>, [penalizacin],[nombre
Los estticos se configuran en el queues.conf
Los dinmicos se dan de alta por CLI o por el dialplan
miembro]
Ejemplo:
[soporte]
; Agrego 2 miembros a soporte
member => SIP/100,0,Christian Cabrera
member => IAX2/vecino/200,1,Juan Lopez
En versiones anteriores de Asterisk exista el
concepto de agente
Este concepto ha sido depreciado, por lo que ya no se
estudiar
Debe reemplazarse por el uso de miembros dinmicos
Distribucin automtica de llamadas (ACD)
22
Los miembros estticos siempre se consideran en lnea
Para tener el concepto de login/logout, debemos usar miembros
dinmicos
23
Distribucin automtica de llamadas (ACD)
24
Ejemplo de queues.conf
Colas: queues.conf (2)
Campo
musicclass
announce
strategy
Valores posibles
[general]
persistentmembers=yes
monitor-type=MixMonitor
Funcin
<clase de MOH>
Especificar la clase de la msica en espera.
Se define en el archivo musiconhold.conf
<archivo de sonido
del anuncio>
Reproducir un anuncio para el agente al
momento de contestar una llamada. Util para
miembros registrados en ms de una cola
[ventas]
announce=sales
musicclass=nuevosproductos
strategy=lineal
weight=5
member => SIP/ventas1
member => SIP/ventas2
linear, leastrecent,
Define la estrategia de timbrado a seguir
ringall, fewestcalls,
(random, rrordered y rrmemory son los ms
random, rrordered,
justos)
rrmemory,wrandom
timeout
<segundos>
Tiempo mximo que se le timbrar a un
miembro antes de considerarlo no disponible
weight
<peso>
Importancia de la cola con respecto a otras. Una
cola ms importante ser atendida antes
Distribucin automtica de llamadas (ACD)
[soporte]
timeout=10
strategy=rrmemory
member => SIP/soporte1
member => SIP/soporte2
25
; Miembros estticos
Esto crea las colas del sistema, ahora es
necesario dejar que los clientes lleguen
a ella
Distribucin automtica de llamadas (ACD)
Aplicacin: Queue
26
Pausas
Permiten al miembro dejar de tomar llamadas
temporalmente
Permite a los clientes formarse en una cola
Pueden introducirse posiciones en la cola para tomar
preferencias
Se especifican con las aplicaciones PauseQueueMember() y
UnpauseQueueMember()
[from-pstn]
exten => s,1,Answer(3000)
same => n(opciones),Background(digite-opcion)
same => n,WaitExten(4)
same => n,Goto(opciones)
Ejemplo:
; Pausar
exten =>
exten =>
; Pausar
exten =>
exten =>
exten => 1,1,Queue(ventas)
exten => 2,1,Queue(soporte)
En este ejemplo, ventas y soporte deben existir en el
queues.conf
Distribucin automtica de llamadas (ACD)
; Activar la grabacin general
27
solamente la cola de ventas
*60,1,PauseQueueMember(ventas,SIP/${CALLERID(num)})
*61,1,UnpauseQueueMember(ventas,SIP/${CALLERID(num)})
todas las colas
*70,1,PauseQueueMember(,SIP/${CALLERID(num)})
*71,1,UnpauseQueueMember(,SIP/${CALLERID(num)})
Tambin podemos pausar desde el *CLI
*CLI> queue pause member SIP/101
*CLI> queue unpause member SIP/101 queue ventas
; Para todas
; Para ventas
Distribucin automtica de llamadas (ACD)
28
Miembros dinmicos
Permiten simular el uso de agentes
Prctica 7.1
Tenemos que crear nuestras propias rutinas de login/logout
Opcional pedir usuario/contrasea
Se agregan desde el dialplan (extensions.conf) usando
AddQueueMember() y RemoveQueueMember()
Si no se especifica la interfaz, agregar el canal desde el que
estemos marcando en este momento
Crear un centro de
atencin a clientes
; Login/logout a la cola de ventas
exten => *80,1,AddQueueMember(ventas)
exten => *81,1,RemoveQueueMember(ventas)
Tambin podemos agregar miembros desde el *CLI
*CLI> queue add member SIP/101 to ventas
*CLI> queue remove member SIP/101 from ventas
Distribucin automtica de llamadas (ACD)
Prctica 7.2
Captulo Intermedio #3
Asterisk DB
Agregar miembros
dinmicos a una cola
Ing. Christian Cabrera R.
30
Recapitulando
Introduccin
Las variables solo existen mientras dura la llamada
Asterisk posee su propio manejador de base de datos
sencillo
Al terminar la llamada, se destruyen las variables
relacionadas
Asterisk DB
Podemos guardar informacin como constantes en el
plan de llamadas
Desde Asterisk 10, el AstDB est basado en SQLite
Algunas funciones requieren un medio de
almacenamiento permanente para pasar datos entre
sesiones
Se puede utilizar mediante funciones de Asterisk:
Asterisk Database
En versiones inferiores se usaba la Berkeley DB
DB()
DB_EXISTS()
DB_DELETE()
33
Asterisk Database
Asterisk DB
34
Estructura jerrquica
DB() permite modificar y obtener valores contenidos
en la base de datos de Asterisk
DB(<familia>/<llave>)
Los valores se leen y escriben como si fueran
variables
Set(DB(sigueme/100)=5546144330)
Noop(${DB(sigueme/100)})
Cada familia puede descomponerse en subniveles
Familias dentro de familias dentro de familias
Cualquier nivel se crea automticamente al declararlo la
primera vez
Llave1
Valor1
Familia1
Es posible especificar ms de una familia/llave
Llave2
Valor2
SubFamilia1
Llave3
Valor3
DB(usuario/100/fwd)
Familia2
Asterisk Database
35
Llave5
(vaca)
Enlaces IAX y troncales SIP
36
DB_DELETE y DB_EXISTS
Usos prcticos del AstDB
Funciones que deban recordar el status de los
telfonos
DB_DELETE() elimina la llave especificada
DB_EXISTS() determina si la llave especificada
existe
DND (no molestar)
Redireccionamiento
Contraseas
*69 (ltimo nmero marcado)
Regresa un 1/0 segn si la llave existe o no
Es indiferente a valores vacios
Cualquier dato pequeo y nico que no tenga que ser
consultado para razones histricas
Ambas funciones crean la variable
${DB_RESULT}
No recomendable para informacin que deba ser
modificada desde fuera de Asterisk
Contiene el valor que exista en la BD
til para evitar reconsultarla
Asterisk Database
37
Enlaces IAX y troncales SIP
38
Caractersticas de
AstDB
Ejemplo de DND
[servicios]
exten => *31,1,Set(DB(dnd/${CALLERID(num):-1}00)=${destino})
same => n,Playback(do-not-disturb&enabled)
same => n,Hangup
Sencilla y fcil de usar en el dialplan
exten => *22,1,Noop(${DB_DELETE(dnd/${CALLERID(num):-1}00)})
same => n,Playback(do-not-disturb&disabled)
same => n,Hangup
Toda la informacin almacenada en un solo archivo
[sub-llamada]
exten => s,1,Noop(Llamando a ${ARG1})
same => n,GotoIf(${DB_EXISTS(dnd/${ARG2})}?dnd)
same => n,Dial(${ARG1},10)
same => n(dnd),Voicemail(${ARG2})
same => n,Hangup
Permanece aunque Asterisk se reinicie
No requiere controladores externos
/var/lib/asterisk/astdb
Solo pueden extraerse datos nicos en base a una
familia y una llave
[internas]
exten => _[12]00,1,Gosub(sub-llamada,s,1(SIP/usuario${EXTEN:0:1},100))
Enlaces IAX y troncales SIP
39
No pueden hacerse querys
No son tablas, sino listas ordenadas
Asterisk Database
40
Caractersticas de
AstDB (2)
Rpida
Asterisk la utiliza para guardar informacin
Prctica 8.1
Ej. Registro de usuarios SIP
Puede verse el contenido completo usando
*CLI> database show
Usar Asterisk DB para crear un redireccionamiento
de llamada
Asterisk Database
41
Plan de llamadas
contador
Usuarios SIP
saldo
Prctica 8.2 (opcional)
llamada
menu
Usar Asterisk DB para bloquear extensiones al final
del da
internas
adicional
entrada
servicios
micontexto
permitidos
salida
permitir
sucursal
IAX autenticados
PSTN/
Vecinos IAX
IAX annimos
Asterisk Database
44
Recapitulando
Todos los datos que Asterisk posee son estticos
Captulo Intermedio #4
Integracin con
bases de datos
Tenemos que recargar tras actualizarlos
Podemos almacenar datos dinmicos en el AstDB
Pero el AstDB nunca se pens para datos grandes (como
CDRs)
No podemos hacer consultas estructuradas
Ing. Christian Cabrera R.
Integracin con bases de datos
45
Introduccin
46
Escogiendo el manejador
Asterisk puede integrarse con diferentes manejadores
de bases de datos
Leer configuracin
Almacenar el detalle de llamadas
Consultar informacin externa (contraseas, tipo de cambio,
saldos, etc)
Facilita la integracin con interfases y scripts
externos
Usamos la BD como un medio alternativo donde guardar la
informacin
Asterisk puede consultarla en paralelo que otros procesos
Puede escribir en BD y dejar que otro proceso la lea
Integracin con bases de datos
47
Asterisk soporta varias opciones de BD
MySQL
PostgreSQL
LDAP
SQLite
Tambin existe el estndar ODBC (Open Database
Connectivity)
Abre el acceso a manejadores como MSSQL Server, Oracle,
Access, Informix y otros ms que no estn disponibles en
Linux
Nos enfocaremos en ODBC para tener un abanico de
opciones ms completo
Integracin con bases de datos
48
Asterisk y ODBC
unixODBC
Asterisk soporta ODBC a travs de 3 mdulos
Nos permite conectarnos por ODBC con cualquier
manejador
res_odbc
res_config_odbc
cdr_odbc
Punto nico de interaccin con mltiples manejadores
Debemos conseguir la librera necesaria para el
manejador deseado
Puede tener costo
Linux ofrece conectividad con ODBC mediante el
paquete unixODBC
unixODBC
Integracin con bases de datos
49
unixODBC (2)
Integracin con bases de datos
50
odbcinst.ini
Configura los controladores necesarios para
que ODBC interactue con la base de datos
requerida
ODBC -> MySQL requiere la librera libmyodbc
apt-get install unixodbc libmyodbc
Es necesario modificar 2 archivos:
/etc/odbc.ini
/etc/odbcinst.ini
Notar que estos archivos NO estn en la carpeta de Asterisk
odbc.ini configura los data sources (DSNs) de ODBC
odbcinst.ini especifica que libreras usaremos
cuando nos conectemos con cada manejador
Integracin con bases de datos
51
Ejemplo para MySQL:
[MySQL]
Description =MySQL driver
Driver
=/usr/lib/odbc/libmyodbc.so
Setup
=/usr/lib/odbc/libodbcmyS.so
Integracin con bases de datos
52
odbc.ini
Instalando un CDR
Configura los data sources de ODBC
Call Detail Recording
Ejemplo para MySQL:
Por default, los CDRs se escriben en un archivo CSV
Detalle de llamadas
/var/log/asterisk/cdr-csv/Master.csv
[MySQL-asterisk]
Description=MySQL ODBC Driver Testing
Driver=MySQL
Socket=/var/run/mysqld/mysqld.sock
Server=localhost
Database=asterisk
Integracin con bases de datos
Es ms til que los registros se guarden en una BD
Podemos hacer queries y formular los reportes segn nos
convenga
Asterisk requiere de tablas con un formato especfico
Si usamos ODBC, es necesario configurar 2 archivos
dentro de Asterisk:
res_odbc.conf
cdr_odbc.conf
53
ODBC en Asterisk
res_odbc.conf
Creamos los perfiles de
conexin para Asterisk
El usuario y contrasea
debe haberse creado
previamente
[cdr-asterisk]
enabled => yes
dsn => MySQL-asterisk
username => cdruser
password => cdrpass
pre-connect => yes
54
Todo relacionado
cdr_odbc.conf
Especificamos que tablas y
que perfil usar para
guardar el CDR
; /etc/asterisk/res_odbc.conf
[cdr-asterisk]
dsn => MySQL-asterisk
; /etc/asterisk/cdr_odbc.conf
[general]
dsn => cdr-asterisk
; /etc/odbc.ini
[MySQL-asterisk]
Driver=MySQL
[global]
dsn=cdr-asterisk
loguniqueid=yes
dispositionstring=yes
table=cdr
Integracin con bases de datos
Integracin con bases de datos
; /etc/odbcinst.ini
[MySQL]
Driver=/usr/lib/odbc/libmyodbc.so
Setup=/usr/lib/odbc/libodbcmyS.so
55
libmyodbc
Integracin con bases de datos
56
Realtime
Asterisk Realtime Architecture (ARA)
Capa intermedia que abstrae el cdigo de BD
No es necesario hacer queries
Prctica 9.1
Reemplaza archivos de texto por tablas
Convertimos los archivos de texto a formato tabular
Permite actualizar datos sin recargar el sistema
Configurar el CDR por ODBC (MySQL)
Integracin con bases de datos
57
Comparacin entre
mecanismos de configuracin
Diferentes mecanismos para diferentes propsitos:
Archivos de
texto
CLI
AMI
Realtime
Bajo
Alto
Alto
Medio
Mantenimiento
Medio
Medio
Medio
Bajo
Escalabilidad
Media
Baja
Media
Alta
Baja
Baja
Baja
Alta
Setup Inicial
Flexibilidad
Dos versiones de Realtime
Esttico
Los archivos de texto se guardan en BD
Es necesario hacer un reload tras cada cambio
La nica diferencia es la ubicacin (BD vs. archivos)
Dinmico
Los valores se leen solo cuando se necesitan
No se guardan en memoria
Permite actualizar sin recargar
Solo algunos archivos lo soportan (extensions, sip, iax,
voicemail y queues)
Los archivos de texto son excelentes para iniciar,
pero no son tan flexibles ni escalan tan bien como
Realtime
Integracin con bases de datos
58
59
Integracin con bases de datos
60
Requerimientos
Configurando Realtime
1. Escoger el manejador de base de datos:
Creamos un nuevo perfil en res_odbc.conf para la
conexin con Realtime
MySQL, PostgreSQL, SQLite3, LDAP, ODBC
2. Configurar el archivo del modulo que le permita a
Asterisk interactuar con el manejador escogido
res_config_mysql.conf, res_odbc.conf, etc
3. Crear la familia necesaria en extconfig.conf
En los ejemplos siguientes veremos la configuracin
con ODBC
Integracin con bases de datos
61
Configurando Realtime (2)
Por cada tabla a consultar por Realtime, necesitamos
crear una familia en el archivo extconfig.conf
[settings]
<familia> => <controlador>,<conector>,<tabla>
Donde:
<familia> es una referencia a Realtime
<controlador> es el tipo de BD a usar (ODBC, MySQL,, etc)
<conector> es el nombre del perfil creado para esta
conexin (res_config_mysql.conf, res_odbc.conf, etc)
<tabla> es la tabla para esta familia de Realtime
Integracin con bases de datos
En este ejemplo, usamos el mismo DSN que el que definimos
para nuestra conexin del CDR
[realtime-asterisk]
enabled => yes
dsn => MySQL-asterisk
username => realtimeuser
password => realtimepass
pre-connect => yes
Con esto le indicamos a Asterisk que futuras conexiones
utilizarn estas credenciales
Darle los privilegios necesarios al usuario realtimeuser en MySQL
Integracin con bases de datos
62
Ejemplo: extconfig.conf
Segn el manejador que elijamos (ODBC,MySQL, etc)
debemos crear el conector en el archivo adecuado
(res_odbc.onf, res_config_mysql.conf, etc)
[settings]
sippeers
=> odbc,realtime-asterisk,rt_sipfriends
sipusers
=> odbc,realtime-asterisk,rt_sipfriends
extensions => odbc,realtime-asterisk,rt_extensions
; Tambin podemos mezclar diferentes conectores/manejadores
saldos
=> mysql,crmdb,clientes
Se puede escoger cualquier nombre para los [conectores]
y para las tablas
Solo hay que recordar hacer referencia al nombre correcto
63
Integracin con bases de datos
64
Configurando Realtime (3)
Realtime SIP
Almacena la configuracin de usuarios SIP
Por default, el nombre de la familia se usa como tabla
Configuracin general permanece en sip.conf
sipusers => mysql,asterisk
es igual a
sipusers => mysql,asterisk,sipusers
La tabla puede tener cualquier campo para SIP,
aunque no se usen todos
Debemos ocupar una tabla diferente para cada familia
Si no se llenan, Asterisk usar los default
Podemos crear una tabla bsica, con solo 4 campos
Los campos que cada familia requiere son nicos
Comnmente, solo se comparten tablas para users/peers
Asterisk automticamente empieza a leer las tablas
en cuanto encuentra las familias:
El formato de la tabla est regido por el nombre de los
campos requeridos
La tabla extensions requiere de campos context, exten y priority
La tabla de sippeers requiere de host, type, username y context
Integracin con bases de datos
sippeers
sipusers
65
Realtime SIP (2)
Integracin con bases de datos
66
Realtime extensions
Recordar que al usar Realtime no se guardan en
memoria los peers registrados
Se puede usar para casi cualquier tipo de extensin
(ej. no macros)
El sip show peers regresar vacio
El resto debe existir en extensions.conf
Si queremos habilitar que se guarden en memoria, es
necesario activar el cache:
rtcachefriends=yes
Tras activar el cache, re-registramos los telfonos
para que se muestren
switch => Realtime/[contexto]@[familia]
Para poder invocar Realtime correctamente
Si [contexto] no se especifica, se usar el actual
Si [familia] no se especifica, se toma la palabra
extensions
A partir de este momento comienzan a almacenarse en
memoria
Integracin con bases de datos
En extensions.conf es necesario usar:
67
Integracin con bases de datos
68
Realtime extensions (2)
Todo relacionado
No hay que olvidar de utilizar switch
; /etc/asterisk/extensions.conf
[internas]
switch => Realtime/internas@extensions
[micontexto]
switch => Realtime/@
; /etc/asterisk/extconfig.conf
sipusers => odbc,realtime-asterisk,rt_sipfriends
extensions=> odbc,realtime-asterisk,rt_extensions
es lo mismo que usar
[micontexto]
switch => Realtime/micontexto@extensions
; /etc/asterisk/res_odbc.conf
[realtime-asterisk]
dsn => MySQL-asterisk
[cdr-asterisk]
dsn => MySQL-asterisk
Siempre es necesario utilizar switch, o nunca se
buscarn extensiones en la BD
Integracin con bases de datos
69
; /etc/asterisk/cdr_odbc.conf
[general]
dsn => cdr-asterisk
Integracin con bases de datos
70
Funcin REALTIME
Una funcin muy poderosa que nos permite consultar
o cambiar valores de una tabla
Prctica 9.2
Se requiere de una familia para poder usarse
Sintaxis para lectura
Set(Fila=${REALTIME(familia,columna,valor,sep1)})
Sintaxis para escritura
Realtime SIP y
Realtime extensions
Set(REALTIME(familia,columna,valor,campo)=nuevo)
71
Integracin con bases de datos
72
Leer valores
Escribir valores
REALTIME nos regresa una cadena de texto
Ejemplo:
Set(REALTIME(saldos,usuario,100,saldo)=302)
Ejemplo:
Es equivalente a
UPDATE saldos
SET saldo='302'
WHERE usuario=100
Set(Fila=${REALTIME(saldos,usuario,100,&)})
Nos arroja:
Set(Fila=usuario=100&saldo=123.45)
Es equivalente a
SELECT * FROM saldos WHERE usuario=100
Esto modificara la base de datos y guardara 302 en
el campo saldo
De ah podemos usar CUT para quedarnos con los
valores que queremos
Integracin con bases de datos
73
Integracin con bases de datos
74
Cmo funciona el CUT?
Tenemos esta lnea:
Set(Fila=${REALTIME(saldos,usuario,${CALLERID(num)},&)})
Prctica 9.3
Es equivalente a:
Set(Fila=usuario=100&saldo=1234.56)
Entonces:
Set(${CUT(Fila,&,2)})
Uso de Realtime
personalizado
Es igual a:
Set(saldo=1234.56)
75
Integracin con bases de datos
76
Plan de llamadas
Funciones personalizadas
contador
El mdulo func_odbc permite la posibilidad de crear
funciones personalizadas
Usuarios SIP
saldo
llamada
Podemos hacer cualquier consulta SQL
servicios
micontexto
No estamos limitados a consultas de Realtime
menu
Se configura desde el func_odbc.conf
permitidos
internas
salida
La sintaxis es como sigue:
permitir
adicional
[FUNCION]
dsn=<nombre del DSN en Asterisk>
readsql=<query de lectura>
writesql=<query de escritura>
sucursal
entrada
IAX autenticados
PSTN/
Vecinos IAX
IAX annimos
Integracin con bases de datos
77
func_odbc
Integracin con bases de datos
78
Ejemplo 2:
[menu]
; extensions.conf
exten => s,1,Playback(welcome)
same => n,GotoIf($[${ODBC_PASS(${CALLERID(num)})}=""]?:YaTiene)
same => n,Playback(no-tiene-pass)
same => n(Regresa),Read(pass1,ingrese-pass)
same => n,Read(pass2,confirme-pass)
same => n,GotoIf($[${pass1}=${pass2}]?:Regresa)
same => n,Set(ODBC_PASS(${CALLERID(num)})=${pass1})
same => n,Goto(continua)
same => n(YaTiene),Read(pass,please-enter-your)
same => n,GotoIf($[${pass}=${ODBC_PASS(${CALLERID(num)})}]?:YaTiene)
same => n(continua),Playback(demo-congrats)
same => n,Hangup
Ejemplo de funcin que consulte/actualice un saldo
(func_odbc.conf):
[SALDO]
dsn=realtime-asterisk
readsql=SELECT saldo FROM saldos WHERE usuario=${ARG1}
writesql=UPDATE saldos SET saldo=${VAL1} WHERE usuario=${ARG1}
Se invoca como una funcin simple
(extensions.conf)
[micontexto]
exten => *333,1,Set(saldo=${ODBC_SALDO(${CALLERID(num)})})
same => n,Set(ODBC_SALDO(${CALLERID(num)})=$[${saldo}/2])
same => n,Macro(saldo,${saldo})
Integracin con bases de datos
[PASS]
; func_odbc.conf
dsn=realtime-asterisk
readsql=SELECT pass FROM usuarios WHERE usuario = '${ARG1}'
writesql=UPDATE usuarios SEt pass = '${VAL1}' WHERE usuario = '${ARG1}'
79
Integracin con bases de datos
80
Prctica 9.4 (opcional)
Crear una funcin personalizada
ODBC
81
Recapitulando
Captulo Avanzado #1
Asterisk Extensions
Language (AEL)
El dialplan se define en extensions.conf
Pueden incluirse contextos dentro de otros
Para todo movimiento en el dialplan, tiene que existir
una extensin y prioridad asignada
La sintaxis base es:
exten => <extensin>,<prioridad>,<aplicacin>
Ing. Christian Cabrera R.
Ejemplo
exten =>_ZXXXXXXX,1,Dial(SIP/amx/${EXTEN})
Asterisk Extensions Language
Introduccin
AEL 2.0
Algunas funciones (ej. ciclos) son difciles de
programar en el dialplan bsico
Sintaxis ms similar a un lenguaje de programacin
Analizar un dialplan puede resultar complicado tras
seguir instrucciones como goto y gosub
Permite crear estructuras ms uniformes para el
manejo de extensiones
Programadores preferirn esta sintaxis
Menos cdigo intil, ms trabajo con menos
Se decide crear un lenguaje de programacin de
extensiones, conocido como Asterisk Extension
Language (AEL)
Asterisk Extensions Language
Se configura en el archivo extensions.ael
3
Asterisk Extensions Language
Sintaxis general
context largadistancia {
_01XXX. => {
Answer();
Dial(SIP/user/${EXTEN});
};
// Esto es un comentario
_00XXX. => {
NoOp(No permitido);
Hangup;
/* Tambien es
un comentario
*/
};
};
Contextos
Saltos de lnea
indiferentes
Se definen con context. Un contexto va delimitado
por sus llaves respectivas
Bloques contenidos entre
{ y };
Fin de comando con ;
Asignacin de variables
natural
Hay que cuidar no dejar extensiones fuera del
contexto
Comentarios con //
(monolnea) y /* */
(multilnea)
Asterisk Extensions Language
Siempre terminar la ltima } con ;
5
Extensiones
context default {
1234 => Playback(tt-monkeys);
8000 => {
NoOp(uno);
etiqueta:
NoOp(dos);
NoOp(tres);
};
<extensin> => {
<aplicacin 1>;
<aplicacin 2>;
};
Las prioridades ya no se
numeran, pero deben ser
escritas en orden
Asterisk Extensions Language
Inclusiones de contextos
Sintaxis:
<extensin> => <aplicacin>;
context default {
// Las extensiones van aqu
};
_5XXX => goto 8000,etiqueta;
};
Todos los includes deben estar contenidos en el mismo
bloque:
context default {
includes {
longdistance,16:00-23:59,mon-fri,*,*;
local;
};
};
Tambin pueden incluirse archivos enteros usando #include
#include more_extensions.ael
No olvidar que al dejar {} abiertos en un archivo, continan
abiertos en los que siguen
Asterisk Extensions Language
Asterisk Extensions Language
Variables
Ciclos
Las variables y funciones se asignan directamente sobre el dialplan:
Soporte para for y while
context default {
100 => {
CALLERID(num)=1234567890;
NoOp(Mi CID es ${CALLERID(num)});
};
};
El valor intermedio tambin es evaluado ( $[] )
El lado derecho de la asignacin es evaluado, de manera que estas
expresiones son equivalentes:
MIVAR=10/2;
Set(MIVAR=$[10/2])
Cuidado con lneas como
Fila=${REALTIME(saldos,usuario,100,&)};
Fila=usuario=100&saldo=1234.56;
Asterisk Extensions Language
x=${x}+1) {
${x});
{
${y});
Asterisk Extensions Language
10
Condicionales: ifTime,
random
Condicionales: if, else
_8XXX => {
Dial(SIP/${EXTEN},20);
if ("${DIALSTATUS}"="BUSY") {
NoOp(Linea ${EXTEN} ocupada);
Busy(10);
}
else
Voicemail(${EXTEN},u);
Hangup;
};
iftime sigue la
misma sintaxis
que en los
includes
random es til
para tareas
aleatorias
Tener cuidado de no cerrar el if antes del else
Hacer esto: if {} else {};
Pero no esto: if {}; else {};
Lo mismo aplica para el resto de los condicionales
Asterisk Extensions Language
context ciclos {
1 => {
for (x=0; ${x}<3;
Verbose(x vale
};
};
2 => {
y=10;
while (${y} >= 0)
Verbose(y vale
y=${y}-1;
};
};
};
11
_8XXX => {
ifTime (9:00-18:00,mon-fri,*,*)
goto horario-habil,s,1;
else {
NoOp(No hay nadie para atender);
Playback(fuera-de-horario);
};
random(51)
);
NoOp(Esto aparecer el 51% de las veces);
random(60)
);
NoOp(Este aparecer el 60% de las veces);
else {
random(75)
NoOp(Esto aparecer un 30%);
else
NoOp(Esto aparecer el otro 10%);
};
};
Asterisk Extensions Language
12
Macros
Condicionales (switch)
Se definen e invocan como si fueran funciones de un
lenguaje de programacin
Equivalente a un if anidado
_888Z => {
switch(${EXTEN}) {
case 8881:
NoOp(Marcaste 8881!);
break;
pattern 888[3-9]:
NoOp(Marcaste 888 algo!);
break;
default:
NoOp(Esta es la clausula default);
};
};
Reciben variables en vez de argumentos
macro llamada(exten,voicemail) {
Dial(Local/${exten}@default);
if (${DIALSTATUS} = BUSY)
Voicemail(${voicemail},b);
else
Voicemail(${voicemail},u);
};
Para invocar un macro, se hace con un & al inicio
&llamada(0140,0120);
Qu nmero nunca se activa en el ejemplo?
Asterisk Extensions Language
context menu {
s => {
Playback(welcome);
if (${ODBC_PASS(${CALLERID(num)})}="") {
Playback(no-tiene-pass);
Cuenta=0;
Regresa:
Cuenta=${Cuenta}+1;
Read(pass1,ingrese-pass);
Read(pass2,confirme-pass);
if (${pass1}!=${pass2}) {
if (${Cuenta}>=3)
goto Fin;
goto Regresa;
};
Set(ODBC_PASS(${CALLERID(num)})=${pass1});
}
else {
PidePass:
Read(pass,please-enter-your);
if (${pass}!=${ODBC_PASS(${CALLERID(num)})})
goto PidePass;
};
Playback(demo-congrats);
Fin:
Hangup;
}; // Cierre de s
Asterisk Extensions Language
}; // Cierre de contexto
13
Asterisk Extensions Language
; extensions.ael
Prctica 10.1
Crear un pseudo marcador predictivo
usando Realtime y ciclos
15
14
Plan de llamadas
contador
Captulo Avanzado #2
Asterisk Gateway
Interface (AGI)
Usuarios SIP
saldo
llamada
servicios
micontexto
micontexto-ael
menu
internas
adicional
entrada
permitidos
salida
permitir
Ing. Christian Cabrera R.
sucursal
PSTN/
Vecinos IAX
IAX autenticados
IAX annimos
Asterisk Extensions Language
17
Recapitulando
Introduccin
Tenemos control del dialplan a partir del
extensions.conf
AGI no es un lenguaje: es una interfaz para controlar
Asterisk
No est ligado a ningn lenguaje en especfico
Podemos usar Perl, PHP, Python, C, Java, Bash, etc
Existe una lgica de programacin ms avanzada
utilizando extensions.ael
Los scripts se colocan en la carpeta
/var/lib/asterisk/agi-bin
An con estas caractersticas ms avanzadas, algunas
funciones resultaran muy complejas de programar
utilizando el plan de llamadas
Asterisk Gateway Interface
19
Similar al CGI de Apache
Se interactua con Asterisk a traves de flujos de datos:
STDIN, STDOUT y STDERR
Asterisk Gateway Interface
20
Flujos
Flujos (2)
Por cada escritura que se haga al STDOUT, existe una
lectura en el STDIN
Script
AGI
Escribimos en el STDOUT para enviar comandos
AGI(script.agi)
Ext. 777
get data "please-enter-your"
"Por favor ingrese su"
data=12345, result=200
Ingresa "12345"
stream file "usuario-valido"
Procesamiento
interno en BD
Leemos del STDIN para obtener respuestas
"Su usuario es vlido"
Y el proceso puede repetirse indefinidamente
AGI enva comandos a Asterisk
Escribimos en el STDERR para hacer notificaciones de
sistema
El AGI toma todas las decisiones
Asterisk enva respuestas al AGI
Hacia Linux, no hacia Asterisk
Asterisk solo es un intermediario entre usuario <-> AGI
Asterisk Gateway Interface
21
PHPAGI
Asterisk Gateway Interface
22
Ejemplo de AGI
Es una clase para PHP que nos permite ahorrar
cdigo
Reproducir los nmeros del 1 al 10:
#!/usr/bin/php q
<?php
include phpagi.php;
$agi = new AGI();
Permite concentrarnos en la aplicacin
Maneja automticamente el flujo de datos
Solo invocamos mtodos de la clase y se nos entrega el
resultado, sin preocupaciones de formato
foreach (range(1,10) as $x) {
$agi->say_number($x);
}
$agi->hangup();
?>
Creamos una instancia de la clase para despues
enviar/leer comandos desde all
$var = $agi->get_variable(CALLERID(num));
Asterisk Gateway Interface
23
Asterisk Gateway Interface
24
Comandos
Comandos (2)
AGI tiene su propia serie de comandos
Estn ligados a aplicaciones bsicas de Asterisk
An cuando la lista es reducida, cualquier aplicacin
de Asterisk est disponible para su uso con AGIs
Usar comando Exec
Asterisk Gateway Interface
answer
channel status
control stream file
database del
database deltree
database get
database put
exec
get data
get full variable
get option
get variable
hangup
noop
receive char
receive text
record file
say alpha
say date
say datetime
say digits
say number
say phonetic
say time
25
send image
send text
set autohangup
set callerid
set context
set extension
set music
set priority
set variable
stream file
tdd mode
verbose
wait for digit
Asterisk Gateway Interface
Prctica 11.1
Captulo Avanzado #3
Asterisk Manager
Interface (AMI) y archivos
de llamadas
Crear un juego interactivo
usando AGIs
Ing. Christian Cabrera R.
26
Recapitulando
Asterisk Manager Interface
Nuestro conocimiento del plan de llamadas es
reactivo
El AMI es una interfaz computadora-PBX
Fue pensado para permitir el control de Asterisk desde
software ajeno al PBX
Poco amigable para un humano, pero fcil de procesar por
un sistema
Creamos extensiones esperando que alguien las marque y
actuamos acorde
En ocasiones, tenemos necesidad de que Asterisk
haga llamadas sin nadie que las origine
Su puerto default es el TCP 5038
Marcadores predictivos, sistemas automticos, etc
Comunicacin en texto plano
Existen 2 maneras de instruir a Asterisk a que haga
llamadas
Asterisk Manager Interface
Se recomienda un tnel SSH para resolver esto
Asterisk 1.6+ soporta uso de TLS
29
Funciones principales
Asterisk Manager Interface
30
Envo de comandos
Solicitar nuevas llamadas
Los datos que se envan al AMI tienen la sintaxis:
Campo: valor
Grabar bajo demanda
Segn la accin que se enve (Login, Originate,
Command, etc) son los campos a enviar.
Transferir/colgar llamadas
Ejecutar comandos del CLI
Para ver la lista completa de acciones, usar
Acceso remoto al AstDB
*CLI> manager show commands
Obtener el estado de las extensiones
Un doble salto de lnea significa que el grupo de
valores termino y que el AMI debe procesar la
solicitud
Editar archivos de configuracin
Recibir informacin de eventos del sistema
Asterisk Manager Interface
31
Asterisk Manager Interface
32
Ejemplo de autenticacin
Archivo: manager.conf
Conexin por telnet al puerto TCP 5038
Aqu se activa el AMI y conceden los permisos
amx:~# telnet 127.0.0.1 5038
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Asterisk Call Manager/1.1
Action: login
Username: admin
Secret: mysecret
Siempre restringir a 127.0.0.1
[general]
enabled = yes
port = 5038
bindaddr = 0.0.0.0
Response: Success
Message: Authentication accepted
Para que el login sea vlido, debe existir un usuario creado en
el manager.conf
Asterisk Manager Interface
[admin]
secret = mysecret
deny=0.0.0.0/0.0.0.0
permit=127.0.0.1/255.255.255.0
read = system,call,log,verbose,agent,user,config,dtmf,
reporting,cdr,dialplan
write = system,call,agent,user,config,command,reporting,
originate
33
Usos del AMI
Asterisk Manager Interface
34
Solicitando llamadas
Tras hacer login, ejecutamos un comando como el
que sigue
Ventanas emergentes para agentes
Sistemas de callcenter que le dan al agente informacin
sobre quien le llama
Tener cuidado con la escritura, ya que el AMI no se lleva
bien con los errores
Aplicaciones de marcado automtico
Action: Originate
Channel: SIP/100
Context: micontexto
Exten: 200
Priority: 1
Timeout: 10000
ActionId: ABCDE12345
Click 2 dial
Llamadas via web
Marcadores automticos/predictivos
Monitoreo del sistema
Esto es equivalente a hacer un
Consolas de operadora (Flash Operator Panel)
*CLI> originate SIP/100 extension 200@micontexto
Asterisk Manager Interface
35
Asterisk Manager Interface
36
Interactuando con el AMI
Call files
El AMI es la manera ms poderosa de controlar
Asterisk
Los archivos de llamada son comandas de llamadas
Instrucciones en texto que le dicen a Asterisk a quien, como
y cuando llamar
Por obvias razones, el AMI no es user-friendly
El AMI nunca se pens para que un humano lo usara
Se colocan en la carpeta
/var/spool/asterisk/outgoing
Existen clases en diferentes lenguajes que nos
permiten conectarnos fcilmente al AMI
Sintaxis muy similar al Originate de AMI
Ej. AGI_AsteriskManager() de PHPAGI
Nota: los archivos deben ser movidos, no copiados
Si un archivo se copia al momento que se est creando,
puede dar problemas
Existe algo ms sencillo para hacer que Asterisk
solicite llamadas?
Asterisk Manager Interface
37
Ejemplo de call file
Asterisk Manager Interface
38
Controlando los tiempos
Creamos un archivo
Los archivos de llamada nos permiten especificar la
hora en que se ejecutarn
nano /root/test.call
Si cambiamos la fecha de modificacin al futuro, Asterisk
leer los archivos solo si la hora ocurre
Esto se logra con el comando touch
Channel: SIP/usuario2
Application: Playback
Data: demo-congrats
Movmoslo a la carpeta adecuada
mv /root/test.call /var/spool/asterisk/outgoing
Qu ocurre?
Podemos consultar todos los campos igual que con el
comando Originate del AMI
Es posible programar cientos de archivos para que
sean leidos al futuro
Esto facilita hacer campaas de marcacin que no pasen de
X llamadas por minuto
*CLI> manager show command originate
Asterisk Manager Interface
39
Asterisk Manager Interface
40
Prctica 12.1
Captulo Avanzado #4
Cifrado de llamadas en
SIP
Crear un verdadero marcador predictivo que lea un
saldo adeudado
Ing. Christian Cabrera R.
Recapitulando
Antecedentes
Asterisk usa SIP como su principal protocolo de
comunicacin
Asterisk 1.4
Una llamada SIP viaja en 2 flujos diferentes:
Asterisk 1.6
No exista mecanismo de seguridad para SIP
La sealizacin (5060 UDP)
La voz (RTP aleatorio)
Se soporta SIP sobre TCP
Se agrega soporte experimental para TLS (solo se encripta
la sealizacin)
Por default, ninguno de los dos va cifrado
Cualquiera que intercepte los paquetes puede reconstruir la
conversacin
Cifrado de llamadas en SIP
43
Asterisk 1.8
Se soporta TLS completamente
Se agrega soporte para Secure RTP (SRTP). La voz viaja
cifrada
Cifrado de llamadas en SIP
44
Transport Layer Security
(TLS)
Flujo del handshake
Es un protocolo criptogrfico extensible para
intercambio seguro de datos
Continuacin/evolucin de SSL (Secure Sockets
Layer)
Versin actual: TLS 1.2
TLS 1.2 > TLS 1.1 > TLS 1.0 > SSL 3.0
Cifrado de llamadas en SIP
45
Cifrado de llamadas en SIP
TLS Handshake
Cliente
Servidor
TLS Handshake (2)
Resultado
Cliente
Cliente enva el # de la ms alta versin de TLS
soportada, un nmero aleatorio, algoritmos de
cifrado y compresin posibles
ClientHello
46
Servidor
Resultado
ChangeCipherSpec
Todo lo que venga a continuacin viene
autenticado/cifrado
Finished
Se enva un hash del condensado de todos los
mensajes anteriores
Servidor escoge la versin de TLS ms alta
posible y los algoritmos a usar. Enva un nmero
aleatorio
ChangeCipherSpec
Todo lo que venga a continuacin viene
autenticado/cifrado
Certificate
Servidor enva su certificado para que cliente
pueda autenticarlo
Finished
Se enva un hash del condensado de todos los
mensajes anteriores
ServerHelloDone
Servidor finaliza handshake
ServerHello
ClientKeyExchange
MasterSecret
A partir de aqu, todo viaja encriptado
Cliente enva PreMasterSecret, llave pblica o
nada (segn algoritmo elegido)
Se calcula el MasterSecret
Cifrado de llamadas en SIP
47
Cifrado de llamadas en SIP
48
Configurando Asterisk
para TLS
Creando la llave y
certificado
Ya existe un script proporcionado dentro del cdigo
fuente de Asterisk:
Se necesita lo siguiente:
Un certificado digital (para el servidor)
Preparar el certificado para Asterisk
Configurar Asterisk
Opcional: Instalar el certificado de CA en el cliente
<astsrcdir>/contrib/scripts/ast_tls_cert
Lo invocamos dando los siguientes argumentos:
IP de Asterisk
Nombre de la empresa
Directorio que almacenar la llave y certificado
OpenSSL nos da herramientas para crear certificados
Podemos usar certificados autofirmados, pero eso permitira
que cualquiera nos reemplace
Cifrado de llamadas en SIP
./ast_tls_cert -C <IP> -O "<Empresa>" -d <Directorio>
El sistema nos pedir una contrasea que deberemos
confirmar para firmar nuestros certificados
49
Cifrado de llamadas en SIP
Configurando Asterisk
50
Configurando Asterisk (2)
Qu significa cada opcin en [general]?
Editamos sip.conf bajo [general]
tlsenable=yes
tlsbindaddr=192.168.1.x
tlscertfile=/etc/asterisk/certs/asterisk.pem
tlscafile=/etc/asterisk/certs/ca.crt
tlsdontverifyserver=yes
tlscipher=ALL
tlsclientmethod=tlsv1
Campo
Por ltimo, habilitamos TLS al cliente SIP (tambin
podemos bajo [general])
transport=tls
Cifrado de llamadas en SIP
51
Significado
tlsenable
Habilita el uso de TLS en todo el equipo (requiere
reiniciar Asterisk)
tlsbindaddr
Direccin IP donde escucharemos por nuevas peticiones
TLS (debe coincidir con la IP del certificado)
tlscertfile
Ubicacin del certificado para TLS
tlscafile
Ubicacin del certificado para la entidad certificadora
(CA)
tlsdontverifyserver
Activar/Desactivar la verificacin del servidor (solo se usa
cuando Asterisk trabaja como cliente)
tlscipher
Mtodos de cifrado permitidos (DES, 3DES, AES, etc)
tlsclientmethod
Versin de TLS mnima a permitir en el cliente
Cifrado de llamadas en SIP
52
Transporte seguro,
carga no
Requisitos para usar SRTP
Con TLS, los encabezados SIP ya no pueden ser
descifrados
Conseguir, compilar e instalar la librera libSRTP
http://srtp.sourceforge.net/srtp.html
Sin embargo, es posible interceptar la voz, aunque no
conozcamos los datos de la llamada
Recompilar Asterisk para agregar el soporte para el
mdulo res_srtp.so
Para hacer que la voz viaje cifrada, requerimos hacer
uso de Secure RTP (sRTP)
Editar el archivo sip.conf para habilitar la
encriptacin (encryption=yes) para cada usuario SIP
que queramos que la use.
Se soporta desde Asterisk 1.8
En versiones previas, solo era posible lograr el cifrado
completo del medio (ej. VPN), y no todos los telfonos son
capaces de soportar esto.
Cifrado de llamadas en SIP
53
Ejemplo de usuarios
SIP seguros
Cifrado de llamadas en SIP
54
Llamada con UDP
[usuario1]
type=friend
host=dynamic
context=micontexto
transport=tls
encryption=yes
secret=aYtK4I1!
Con Wireshark se observan estos paquetes:
Asterisk Manager Interface
55
Cifrado de llamadas en SIP
56
Llamada con UDP (2)
Llamada con UDP (3)
El anlisis de VoIP detecta fcilmente la llamada:
Cifrado de llamadas en SIP
Es posible graficarla:
57
Llamada con UDP (4)
Cifrado de llamadas en SIP
58
Llamada con TLS/sRTP
E inclusive, guardar el audio:
No es posible ver el contenido SIP
Cifrado de llamadas en SIP
59
Cifrado de llamadas en SIP
60
Llamada con TLS/sRTP (2)
El stream de la llamada no es detectado
Prctica 13.1
Configurar SIP mediante TLS y sRTP
Obviamente, no es posible graficarla ni reproducir el
audio
Cifrado de llamadas en SIP
61
Recapitulando
Captulo Avanzado #5
Seguridad en Asterisk
Podemos cifrar nuestras llamadas para impedir que
sean escuchadas por alguien ms
Sistemas malintencionados pasan llamadas a travs
de nuestro PBX, con costo para nosotros
Errores comunes en administracin pueden ocasionar
grandes costos (miles de dlares en una noche)
Ing. Christian Cabrera R.
Contraseas inseguras
Puertos abiertos
Validar al telfono, no al usuario
Seguridad en Asterisk
Introduccin
1) Contraseas inseguras
Instalar Asterisk es muy rpido
No usemos secret=100 si nuestro username=100
Es ms rpido an si usamos distribuciones todo en uno (ej.
Elastix o Trixbox)
Por la urgencia de levantar un sistema, podemos
descuidar algunos puntos de seguridad clave
Existen sistemas cuya nica intencin es ganar
acceso a nuestro equipo para poder cursar llamadas
Es conveniente tomar muy en cuenta las siguientes
recomendaciones de seguridad
Preferible usar contraseas aleatorias, difciles de
recordar
MD5(RAND())
openssl rand -base64 12
Si usamos distribuciones como Elastix, siempre
cambiar las contraseas default
Si mas gente la conoce, es ms fcil de atacar
Seguridad en Asterisk
1) Contraseas inseguras
En FreePBX/Elastix/Asterisk, cambiar:
Seguridad en Asterisk
2) Limitar el acceso a
ciertas IPs
Si no tenemos agentes externos, Por qu permitir
que las extensiones se registren desde cualquier IP?
root de ssh
root de MySQL
Asterisk Manager Ingerface (manager.conf)
admin de FreePBX
Usar permit y deny segn convenga en sip.conf y
manager.conf
deny=0.0.0.0/0.0.0.0
permit=192.168.1.1/255.255.255.0
Tabla MySQL asterisk.ampusers
asteriskuser en /etc/amportal.conf
admin de Elastix
Mejor an, cerrar los puertos a nivel de firewall
Tabla SQLite3 /var/www/db/acl.db
Usar iptables
Todos los usuarios SIP/IAX
Seguridad en Asterisk
Seguridad en Asterisk
3) Rechazar sin dar
informacin
Si hemos de recibir conexiones desde afuera,
entregar siempre el mismo mensaje de error
4) Limitar llamadas
simultneas
Si un atacante ganara acceso a nuestro sistema,
limitar la cantidad de llamadas simultneas posibles
No evita el dao, pero lo reduce
Usar un [macro-contador] para estos casos
Usar alwaysauthreject=yes en sip.conf
Esto impedir que los atacantes conozcan si el
usuario es vlido o no
Esto ayuda en casos que a usuarios legtimos les fue
robada su contrasea
Seguridad en Asterisk
5) Autenticar al usuario
Hay llamadas muy caras que son espordicas (ej.
Internacionales)
Podemos pedir contrasea via DTMFs
Seguridad en Asterisk
6) Negar llamadas
annimas
Definir adecuadamente el context default dentro de
[general] en sip.conf
Cualquier usuario NO autenticado puede marcar a travs de
l
Si la extensin ya se registro, pedir autenticacin al
usuario al momento de hacer llamadas
Un PIN con Authenticate es muy sencillo de implementar
Seguridad en Asterisk
Nuestro contexto default siempre debe ser limitado
Nunca permitir llamadas que puedan tener costo
Seguridad en Asterisk
8) Patrones de marcado
claros
7) Bloquear fuerza bruta
Herramientas como fail2ban pueden analizar logs y
bloquear mltiples intentos de registro
Inclusive enviar correos de la notificacin
No utilizar patrones como
_9.,1,Dial(DAHDI/g0/${EXTEN:1})
mejor usar
_9ZXXXXXXX,1,Dial(DAHDI/g0/${EXTEN:1})
Aplicable a cualquier log (SSH, HTTP, etc)
Posibilidad de ataques de inyeccin
[incoming]
exten => _X.,1,Dial(SIP/${EXTEN})
exten => _X.,n,Hangup()
Qu ocurre si el atacante enva llamada hacia
9100&DAHDI/g0/0033123456789?
Recordar que el punto (.) coincide con TODO
Seguridad en Asterisk
Seguridad en Asterisk
9) Confianza
Cuidar a que dispositivos les permitimos la
autenticacin sin contrasea
insecure=invite
Siempre usar permit/deny en conjuncin con insecure
Prctica 14.1
No usar el parmetro de host como una restriccin de
IP
Para eso existe permit/deny
Aseguramiento del conmutador
Seguridad en Asterisk
Asterisk Manager Interface
76
Qu les pareci el curso?
Contacto
Queremos que la siguiente experiencia sea an
mejor, as que pedimos su muy valioso apoyo para
contestar una encuesta sobre el curso
Christian Cabrera R.
[email protected]
(55) 50 181 181
SIP/enlaza.mx
Twitter y Facebook:
@AsteriskMX
enlaza.mx/encuesta
Es annima
No tienen que proporcionar su nombre si no lo desean
@EnlazaMX
Asterisk Manager Interface
77
Asterisk Manager Interface
78