Professional Documents
Culture Documents
Varias distros listas para usarse 1.6.2.X Estndar Dic 2009 Abr 2011 Abr 2012
Elastix, Trixbox, AsteriskNow, PBX in a Flash 1.8.X LTS Oct 2010 Oct 2014 Oct 2015
10.X Estndar Dic 2011 Dic 2012 Dic 2013
Muchos entornos de uso 11.X LTS Oct 2012 Oct 2016 Oct 2017
Oficinas, callcenters, corporativos, carriers, aplicaciones remotas
12.X Estndar Oct 2013 Oct 2014 Oct 2015
Introduccin a Asterisk 3 Introduccin a Asterisk 4
Diferencias con un PBX
Dos tipos de versiones
convencional
LTS (Long Term Support) No se requiere hardware propietario
Permanencia mnima de 5 aos en el mercado Muchos fabricantes ofrecen productos similares
Orientado a estabilidad Hardware genrico intercambiable
Mejor opcin para empresas Diferentes soluciones de diferentes fabricantes
Libre competencia = mejores precios y productos
Estndares
Dos aos de vida Sigue una arquitectura universal de PC
Orientado a impulsar nuevas funcionalidades Procesador, memoria, motherboard y almacenamiento
Apta para entusiastas y desarrolladores de nuevas Es posible instalar Asterisk en una PC (ej. Raspberry Pi)
tecnologas
Free software: tanto libre como gratis
Sin pago de licencias
Introduccin a Asterisk 5 Introduccin a Asterisk 6
Qu es lo que NO es
B2BUA vs Proxy
Asterisk?
No es un SIP proxy
Proxy Por definicin, un proxy nunca es parte del fin de la
llamada (ej. Voicemail, IVRs, etc)
Llamada Un proxy solo hace reenvo de paquetes, manejando las
llamadas en nombre de otros usuarios (Asterisk las procesa
completamente en sealizacin y RTP)
No es un sistema plug-and-play
Podemos crear complejas aplicaciones con l, pero es
necesario configurarlo primero
Llamada 1 Llamada 2
Y es muy importante practicar para lograrlo!
Configurando Asterisk
La manera ms simple de configurar Asterisk es a
travs de archivos de texto
Prctica 1.1 En modalidades ms avanzadas podemos usar el CLI, el AMI
o bases de datos
Veremos todo eso ms adelante
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
Especifica las rutas default y ajusta opciones generales Configuraciones que afectan a todo el sistema:
asterisk.conf
de todo el conmutador Lmite de llamadas en general
extensions.conf Controla las reglas del plan de llamadas Estructura de archivos de sonido
Nombre de este equipo (en caso de tener ms de uno)
sip.conf Todo lo relacionado al protocolo SIP
iax.conf Igual que el anterior, pero para IAX2 Raramente necesita ser editado
Se recomienda mucho colocar verbose=3 para subir la
chan_dahdi.conf Configura las tarjetas DAHDI verbosidad del sistema por default
sip.conf 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
Campos que afectan a todos los usuarios Se definen conexiones con dispositivos IAX as como
Campos que afectan de manera individual a cada usuario con troncales IAX
Aqu se configuran tanto telfonos SIP como Se ver ms a detalle en el mdulo intermedio
proveedores (troncales) SIP
No confundir usuarios SIP con extensiones
Las extensiones se declaran en el extensions.conf
En resumen
Asterisk fue escrito por Mark Spencer
Una alternativa open source a conmutadores cerrados.
Captulo Bsico #2
Corre en cualquier distro de Linux
Siempre y cuando, cumplamos sus dependencias Configuracin de Asterisk
No es un proxy, es un B2BUA
Acta como un telfono y un servidor al mismo tiempo
Ing. Christian Cabrera R.
Necesitamos cumplir dependencias para instalar Asterisk
Muy recomendado instalar DAHDI
Los archivos de configuracin se guardan en /etc/asterisk
Introduccin a Asterisk 39
Introduccin Sintaxis de archivos *.conf
La configuracin inicial de Asterisk es a travs de Son similares a un archivo *.ini
archivos de texto 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 Los campos especifican los detalles de configuracin
directamente desde la consola
nano, pico, emacs, vi, vim, cualquier editor nos sirve Estructura base:
[contexto] ; <-- Este es el contexto
campo1=valor1
campo2=valor2 ; <-- Estos son los campos
Ejemplo
;--- Todo esto
es un
comentario ---;
Sintaxis: Ejemplo:
#include mi_otro_archivo.conf #exec /bin/database_config.sh
[general]
Ejemplo: #include sip_general_custom.conf
Esto puede usarse para generar la configuracin
sip.conf #include sip_general_additional.conf desde un sistema externo (ej. base de datos)
Considerar que esto puede afectar el rendimiento
; Aqu comienza la configuracin de usuarios
#include sip_custom.conf Sin embargo, nos da mucha flexibilidad
#include sip_additional.conf
Configuracin de Asterisk 45 Configuracin de Asterisk 46
Direcciones Sencillo
tiene sus propias ventajas y desventajas MAC
00121419AEFF Alta
Difcil de adivinar
Nuevos dispositivos tienen Difcil
nuevas MAC
Debemos decidir cual se adapta mejor a nuestras Mxima
necesidades Virtualmente
Sencillo
Contraseas tel-aJ13K74 imposible de
Es muy simple crear nuevas Muy difcil
entradas aleatoriamente
adivinar
Configuracin de Asterisk 62
Ejemplo de extensiones
Sintaxis
vlidas
La sintaxis general del plan de llamadas es: exten => 123,1,Answer
exten => 123,2,Wait(5)
[contexto] exten => 123,3,Hangup
exten => <extensin>,<prioridad>,<aplicacin>
exten => hola,1,Noop(nada)
exten => hola,2,Playback(welcome)
<extensin> es cualquier valor alfanumrico exten => hola,3,Dial(SIP/100)
<prioridad> es el orden con el que se ejecutarn las
diversas aplicaciones exten => 5546144330,1,Wait(3) *1.6.2+
<aplicacin> es el comando a ejecutar Notar el uso de
same => 2,Dial(DAHDI/g0/${EXTEN}) same => para
same => 3,Hangup abreviar extensiones
[locales]
include => internas
[nivel2] exten => _ZXXXXXXX,1,Dial(DAHDI/g0/${EXTEN})
Evaluador Funciones
Podemos evaluar una operacin lgica o aritmtica Permiten procesar valores o datos que normalmente
usando $[ ] no estaran accesibles:
Ejemplo: exten => s,1,Noop(${MD5(${MI_CLAVE_SECRETA})})
exten => s,1,Set(MiValor=$[10/2])
same => n,Noop(${MiValor}) ;5 Se despliegan con el comando
core show functions
Esto puede usarse para hacer reemplazos o evaluar desde el *CLI
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 93
Plan de llamadas
Captulo Bsico #3
Usuarios SIP
llamada
micontexto
Arquitectura de Asterisk
internas
Configuracin de Asterisk 95
Antecedentes Sistema de archivos
Los mdulos de Asterisk coloca sus archivos en diferentes carpetas:
Asterisk se
configuran de Tipo de archivo Ubicacin
voicemail.conf Voicemail
Aqu configuramos los buzones y sus contraseas Permite dejar un mensaje de voz al buzn
especificado
Configuracin general y mltiples contextos de El buzn/contexto deben existir en el voicemail.conf
buzones de voz Podemos dejar un mensaje en ms de un buzn a la vez
Si queremos tener activo el envo de correos Sintaxis:
debemos instalar un MTA (Mail Transfer Agent) en Voicemail(<buzn>[@<contexto>],<opciones>)
Linux
[general] Ejemplos:
; Aqu va la configuracin general de los buzones de voz
Voicemail(100,b)
[default] Voicemail(201&202,u)
101 => 1234,Juan Prez,juan@dominio.com,,attach=yes
102 => 1234,Jorge Lpez,jorge@dominio.com,,attach=yes
Aplicaciones de Asterisk 115 Aplicaciones de Asterisk 116
VoicemailMain VMAuthenticate
Desde aqu escuchamos nuestros mensajes Autentica al usuario a partir de la contrasea de su buzn
Permite tambin configurar las opciones del buzn, tales como Las contraseas estn definidas en el voicemail.conf
las bienvenidas
Es importante vaciar el buzn para evitar que se llene Usando VoiceMailMain, el usuario final puede actualizar
sus contraseas sin intervencin del administrador
Podemos saltar la autenticacin El usuario se debe hacer responsable de su contrasea y su uso
Permite personalizar contraseas a nivel individual
Hacer que no se le pida contrasea al usuario y pasar directo a
los mensajes
3 intentos fallidos y la llamada es colgada
Sintaxis: Sintaxis:
VoicemailMain([buzn],[opciones]) VMAuthenticate([buzn][@contexto],[opciones])
Ejemplos: Ejemplos:
VoicemailMain(100,s) VMAuthenticate(101@default)
Ejemplos de uso
; voicemail.conf
[default]
101 => 1234,Juan Prez,juan@dominio.com,,attach=yes
; extensions.conf
[sub-llamar]
Prctica 4.1
exten => s,1,Dial(${ARG1},20)
same => s,n,Voicemail(${ARG2}@default)
same => s,n,Hangup
same => s,n,Return
[larga-distancia]
exten => _01ZXXXXXXXXX,1,VMAuthenticate(${CALLERID(num)}@default)
same => n,Dial(SIP/carrier/${EXTEN})
Aplicaciones de Asterisk 119
Interaccin con el usuario Playback
En ocasiones tenemos necesidades como: Reproduce el sonido especificado
Repetir alguna grabacin (bienvenidas) Obliga al usuario a escucharlo (no puede saltarse)
Dar opciones de menu No pueden recibirse tonos mientras se reproduce
Capturar dgitos ingresados en el telfono
La extensin del archivo se omite
Reproducir nmeros
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 Sintaxis:
idiomas para los archivos de sonido
Playback(<archivo>,[opciones])
Los sonidos se buscan por default en
/var/lib/asterisk/sounds Ejemplo:
Playback(bienvenida)
Aplicaciones de Asterisk 121 Aplicaciones de Asterisk 122
Background Read
Muy parecida a Playback, salvo que al usuario se le Pide dgitos al usuario
permiten ingresar dgitos No se hace nada con ellos, solo se almacenan en una
Asterisk transferir al usuario a la extensin marcada variable para uso posterior
Si el nmero marcado no existe, transferir a la extensin i
(invlida) Sintaxis:
Read(<var>,[archivo],[maxdigitos],[opciones],
Sintaxis: [intentos],[timeout])
Background(<archivo>)
Ejemplo:
Ejemplo: Read(pass,enter-account,4)
Background(digite-opciones)
Debe recibir solamente nmeros enteros Para cambiar el idioma de los sonidos, hay 2 maneras:
No hace distincin de nmeros o cadenas 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)
Ejemplo:
Si algn archivo de sonido no existe en el idioma
Saynumber(123192) deseado, se usar el mismo archivo en ingls
Si tampoco existe el archivo en ingls, dar un error
[from-pstn]
include => horario-habil,9:00-18:00,mon-fri,*,*
Prctica 4.2
include => fuera-de-horario
[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)
Rutinas con reproduccin de audio
same => n,Hangup
Comunicacin entre
Dial
usuarios
La tarea ms importante en un conmutador es Permite enlazar usuario con usuario
comunicar extensiones Siempre debe contener una tecnologa y un usuario
Asterisk puede convertir entre los protocolos
Ejemplo:
Dial(SIP/100,30,tT)
Dial(SIP/201&SIP/202,30,tT)
Ejemplo:
Meetme(8500,d)
Meetme(8501,D,2198)
Aplicaciones de Asterisk 137 Aplicaciones de Asterisk 138
Goto GotoIf
Hace saltos incondicionales hacia cualquier contexto- Igual que Goto, pero solo brinca si la condicin se
extensin-prioridad
cumple
Puede recibir 1, 2 o 3 parmetros Dos posibles destinos
1: Solo prioridad (misma ext. y contexto) Es importante evaluar la condicional
2: Extensin y prioridad (mismo contexto)
3: Contexto, extensin y prioridad
Sintaxis:
Goto([contexto],[extensin],<prioridad>) Sintaxis:
GotoIf(<condicin>?<verdadero>:[falso])
Ejemplos:
Goto(opciones)
Goto(s,continua) Ejemplos:
Goto(default,s,1) GotoIf($[${var}>3]?s,1:default,123,1)
Usuarios SIP
saldo
Captulo Bsico #5
llamada
micontexto servicios Conexin con la PSTN
usando DAHDI
menu internas
Introduccin Fabricantes
Asterisk tiene la posibilidad de interactuar con Al no usar protocolos
propietarios, la libre
la PSTN competencia ha reducido
Se requiere de hardware adicional o rentar un los costos del equipo
servicio de terceros Los 3 principales
fabricantes del mercado:
Digium
Para la interconexin directa pueden usarse Sangoma
Openvox
gateways externos o tarjetas internas
Los gateways se configuran por SIP Cualquiera de sus tarjetas
Nos centraremos en las tarjetas funciona con Asterisk,
solo se configuran un
poco diferente
Interconexin por DAHDI 147 Interconexin por DAHDI 148
Tarjetas analgicas Puertos analgicos
FXO (Foreign Exchange Office) Son los ms comunes
Reciben corriente (de la telefnica) Estos son los puertos que usaramos para poner un PBX en
Aqu conectas una lnea que viene de la calle casa
(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, En otros conmutadores se llaman diferente:
Alcatel, Siemens, etc)
FXO = CO
FXS = EXT
Usados en entornos de grandes oficinas o corporativos Las tarjetas digitales tienen 2 opciones:
Hasta 30 canales de voz con muchos DIDs diferentes Tomar la sincrona que proviene del enlace (recomendado si es
que estamos conectados con la telefnica)
Son tecnolgicamente superiores que los anlogos: Generar la sincrona propia (cuando Asterisk es el equipo
Mayor calidad maestro)
No son susceptibles al ruido
Confiabilidad Sin una fuente de sincrona precisa, tendremos problemas
Ruidos en la lnea
Las tarjetas son ms caras Puede ocasionar que las llamadas se desconecten
Aunque la renta del servicio digital suele ser mas cara
El costo puerto por puerto es ms barato Deberemos configurar este parmetro en el system.conf
Comparacin ISDN vs
Framing
R2MFC
Segn el tipo de enlace, hay diferentes tipos: E1s con ISDN PRI E1s Canalizados (R2 MFC)
30 canales de voz 30 canales de voz
T1s (EUA y CAN) E1s (resto del mundo) Usa CCS Usa CAS
D4 Super Frame CAS Channel Associated Canal 1 se usa para framing. Canal 1 se usa para framing.
(obsoleto) Signaling (obsoleto) Canal 16 se usa para sealizacin Canal 16 se usa para sealizacin
CCS Common Channel Soporta Euro ISDN, tanto en modo
ESF Extended Super Frame Soporta FXS, FXO, E&M
Signaling de CPE como red (esclavo / maestro)
Comnmente usa CRC para Obsoleto en Europa
corroborar errores en transmisin Comn en Amrica Latina
Tanto D4 como CAS son tecnologas viejas y no Ms caro, por ser tecnologa nueva
deberan usarse Ofrece mucho ms informacin por
Desafortunadamente, en Latinoamrica usamos llamada
principalmente R2 modificado, el cual usa CAS
Asterisk puede actuar como maestro (simular ser la Es posible comprar DIDs virtuales que lleguen por SIP
telefnica) o actuar como esclavo (dejando al otro Esto evita tener que comprar tarjetas
PBX ser el maestro) Un enlace digital puede tener mltiples DIDs
Puede adaptarse fcilmente a las necesidades del otro Al recibir la llamada, la telefnica indica a que DID marc el
conmutador cliente
Una lnea anloga tiene un DID nico asignado
Tras modificar el archivo, es necesario aplicar los Aqu hacemos que Asterisk trabaje con los
cambios desde el CLI canales de DAHDI instalados
dahdi_cfg vv
Configuramos la sealizacin, las funciones
Si declaramos los canales con errores, los cambios no
se aplicarn
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
Plan de llamadas
contador
Usuarios SIP
saldo
entrada
PSTN
5 5
4 4
3 3
5 4 3 2 2 2 1 1 1 5 4 3 2 2 2 1 1 1
3 3
4 4
5 5
Usuarios SIP
saldo
menu internas
salida
entrada sucursal
PSTN/
Vecinos IAX
IAX autenticados
IAX annimos
Recapitulando
Extensiones se asignan a usuarios SIP/IAX/DAHDI
Captulo Intermedio #2 Comnmente en relacin 1:1
Distribucin automtica Pueden asignarse mltiples dispositivos a una sola
extensin
de llamadas (ACD) Aunque timbrar varios telfonos a la vez no siempre es
buena opcin
Captulo Intermedio #3
Prctica 7.2
Asterisk DB
Agregar miembros
Ing. Christian Cabrera R.
dinmicos a una cola
Recapitulando Introduccin
Las variables solo existen mientras dura la llamada Asterisk posee su propio manejador de base de datos
Al terminar la llamada, se destruyen las variables sencillo
relacionadas Asterisk DB
Podemos guardar informacin como constantes en el Desde Asterisk 10, el AstDB est basado en SQLite
plan de llamadas En versiones inferiores se usaba la Berkeley DB
Algunas funciones requieren un medio de Se puede utilizar mediante funciones de Asterisk:
almacenamiento permanente para pasar datos entre DB()
sesiones DB_EXISTS()
DB_DELETE()
Ambas funciones crean la variable Cualquier dato pequeo y nico que no tenga que ser
consultado para razones histricas
${DB_RESULT}
No recomendable para informacin que deba ser
Contiene el valor que exista en la BD modificada desde fuera de Asterisk
til para evitar reconsultarla
Asterisk Database 37 Enlaces IAX y troncales SIP 38
Caractersticas de
Ejemplo de DND
AstDB
[servicios]
exten => *31,1,Set(DB(dnd/${CALLERID(num):-1}00)=${destino})
Sencilla y fcil de usar en el dialplan
same => n,Playback(do-not-disturb&enabled)
same => n,Hangup No requiere controladores externos
exten => *22,1,Noop(${DB_DELETE(dnd/${CALLERID(num):-1}00)})
same => n,Playback(do-not-disturb&disabled)
Toda la informacin almacenada en un solo archivo
same => n,Hangup /var/lib/asterisk/astdb
[sub-llamada]
exten => s,1,Noop(Llamando a ${ARG1})
Permanece aunque Asterisk se reinicie
same => n,GotoIf(${DB_EXISTS(dnd/${ARG2})}?dnd)
same => n,Dial(${ARG1},10) Solo pueden extraerse datos nicos en base a una
same => n(dnd),Voicemail(${ARG2})
same => n,Hangup
familia y una llave
No pueden hacerse querys
[internas]
exten => _[12]00,1,Gosub(sub-llamada,s,1(SIP/usuario${EXTEN:0:1},100)) No son tablas, sino listas ordenadas
Asterisk Database 41
Plan de llamadas
contador
Usuarios SIP
saldo
menu permitidos
internas
salida
Usar Asterisk DB para bloquear extensiones al final permitir
del da adicional
entrada sucursal
PSTN/
Vecinos IAX
IAX autenticados
IAX annimos
Asterisk Database 44
Recapitulando
Todos los datos que Asterisk posee son estticos
Captulo Intermedio #4 Tenemos que recargar tras actualizarlos
Integracin con
bases de datos Podemos almacenar datos dinmicos en el AstDB
Pero el AstDB nunca se pens para datos grandes (como
CDRs)
Ing. Christian Cabrera R. No podemos hacer consultas estructuradas
unixODBC
Comparacin entre
mecanismos de configuracin
Dos versiones de Realtime
Diferentes mecanismos para diferentes propsitos: Esttico
Los archivos de texto se guardan en BD
Archivos de
CLI AMI Realtime
Es necesario hacer un reload tras cada cambio
texto
La nica diferencia es la ubicacin (BD vs. archivos)
Setup Inicial Bajo Alto Alto Medio
Mantenimiento Medio Medio Medio Bajo Dinmico
Escalabilidad Media Baja Media Alta Los valores se leen solo cuando se necesitan
Flexibilidad Baja Baja Baja Alta No se guardan en memoria
Los archivos de texto son excelentes para iniciar, Permite actualizar sin recargar
pero no son tan flexibles ni escalan tan bien como Solo algunos archivos lo soportan (extensions, sip, iax,
Realtime voicemail y queues)
El formato de la tabla est regido por el nombre de los Asterisk automticamente empieza a leer las tablas
campos requeridos en cuanto encuentra las familias:
La tabla extensions requiere de campos context, exten y priority sippeers
La tabla de sippeers requiere de host, type, username y context sipusers
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 Set(REALTIME(familia,columna,valor,campo)=nuevo)
Realtime extensions
Entonces:
Uso de Realtime Set(${CUT(Fila,&,2)})
personalizado
Es igual a:
Set(saldo=1234.56)
func_odbc Ejemplo 2:
[menu] ; extensions.conf
Ejemplo de funcin que consulte/actualice un saldo exten => s,1,Playback(welcome)
(func_odbc.conf): same => n,GotoIf($[${ODBC_PASS(${CALLERID(num)})}=""]?:YaTiene)
same => n,Playback(no-tiene-pass)
[SALDO] same => n(Regresa),Read(pass1,ingrese-pass)
dsn=realtime-asterisk same => n,Read(pass2,confirme-pass)
readsql=SELECT saldo FROM saldos WHERE usuario=${ARG1} same => n,GotoIf($[${pass1}=${pass2}]?:Regresa)
writesql=UPDATE saldos SET saldo=${VAL1} WHERE usuario=${ARG1} same => n,Set(ODBC_PASS(${CALLERID(num)})=${pass1})
same => n,Goto(continua)
Se invoca como una funcin simple same => n(YaTiene),Read(pass,please-enter-your)
same => n,GotoIf($[${pass}=${ODBC_PASS(${CALLERID(num)})}]?:YaTiene)
(extensions.conf) same => n(continua),Playback(demo-congrats)
same => n,Hangup
[micontexto]
exten => *333,1,Set(saldo=${ODBC_SALDO(${CALLERID(num)})}) [PASS] ; func_odbc.conf
same => n,Set(ODBC_SALDO(${CALLERID(num)})=$[${saldo}/2]) dsn=realtime-asterisk
same => n,Macro(saldo,${saldo}) readsql=SELECT pass FROM usuarios WHERE usuario = '${ARG1}'
writesql=UPDATE usuarios SEt pass = '${VAL1}' WHERE usuario = '${ARG1}'
Integracin con bases de datos 79 Integracin con bases de datos 80
Prctica 9.4 (opcional)
81
Recapitulando
Analizar un dialplan puede resultar complicado tras Permite crear estructuras ms uniformes para el
seguir instrucciones como goto y gosub manejo de extensiones
Menos cdigo intil, ms trabajo con menos
Condicionales: ifTime,
Condicionales: if, else
random
_8XXX => {
Dial(SIP/${EXTEN},20);
iftime sigue la _8XXX => {
ifTime (9:00-18:00,mon-fri,*,*)
if ("${DIALSTATUS}"="BUSY") { misma sintaxis goto horario-habil,s,1;
NoOp(Linea ${EXTEN} ocupada); que en los else {
NoOp(No hay nadie para atender);
Busy(10); includes Playback(fuera-de-horario);
}
};
else random(51)
Voicemail(${EXTEN},u); NoOp(Esto aparecer el 51% de las veces); );
Hangup; random es til random(60)
}; NoOp(Este aparecer el 60% de las veces); );
para tareas else {
Tener cuidado de no cerrar el if antes del else aleatorias random(75)
Hacer esto: if {} else {}; NoOp(Esto aparecer un 30%);
Pero no esto: if {}; else {}; else
NoOp(Esto aparecer el otro 10%);
Lo mismo aplica para el resto de los condicionales };
};
Asterisk Extensions Language 11 Asterisk Extensions Language 12
Condicionales (switch) Macros
Equivalente a un if anidado Se definen e invocan como si fueran funciones de un
lenguaje de programacin
_888Z => {
switch(${EXTEN}) { Reciben variables en vez de argumentos
case 8881: macro llamada(exten,voicemail) {
NoOp(Marcaste 8881!);
break;
Dial(Local/${exten}@default);
pattern 888[3-9]: if (${DIALSTATUS} = BUSY)
NoOp(Marcaste 888 algo!); Voicemail(${voicemail},b);
break; else
default: Voicemail(${voicemail},u);
NoOp(Esta es la clausula default);
};
};
}; Para invocar un macro, se hace con un & al inicio
&llamada(0140,0120);
Qu nmero nunca se activa en el ejemplo?
Asterisk Extensions Language 13 Asterisk Extensions Language 14
Usuarios SIP
saldo
Captulo Avanzado #2
llamada
micontexto servicios Asterisk Gateway
permitidos
micontexto-ael Interface (AGI)
menu internas
salida
permitir Ing. Christian Cabrera R.
adicional
entrada sucursal
PSTN/
Vecinos IAX
IAX autenticados
IAX annimos
Asterisk Extensions Language 17
Recapitulando Introduccin
Tenemos control del dialplan a partir del AGI no es un lenguaje: es una interfaz para controlar
extensions.conf 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
Similar al CGI de Apache
An con estas caractersticas ms avanzadas, algunas
funciones resultaran muy complejas de programar Se interactua con Asterisk a traves de flujos de datos:
utilizando el plan de llamadas STDIN, STDOUT y STDERR
Script
data=12345, result=200 Ingresa "12345"
Escribimos en el STDOUT para enviar comandos AGI
stream file "usuario-valido"
Procesamiento "Su usuario es vlido"
interno en BD
Leemos del STDIN para obtener respuestas
Y el proceso puede repetirse indefinidamente
AGI enva comandos a Asterisk
Escribimos en el STDERR para hacer notificaciones de El AGI toma todas las decisiones
sistema Asterisk enva respuestas al AGI
Hacia Linux, no hacia Asterisk Asterisk solo es un intermediario entre usuario <-> AGI
Asterisk Gateway Interface 21 Asterisk Gateway Interface 22
Captulo Avanzado #3
Asterisk Manager
Prctica 11.1 Interface (AMI) y archivos
de llamadas
Crear un juego interactivo
Ing. Christian Cabrera R.
usando AGIs
Recapitulando Asterisk Manager Interface
Nuestro conocimiento del plan de llamadas es El AMI es una interfaz computadora-PBX
reactivo Fue pensado para permitir el control de Asterisk desde
Creamos extensiones esperando que alguien las marque y software ajeno al PBX
actuamos acorde Poco amigable para un humano, pero fcil de procesar por
un sistema
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 Se recomienda un tnel SSH para resolver esto
llamadas Asterisk 1.6+ soporta uso de TLS
Recapitulando Antecedentes
Asterisk usa SIP como su principal protocolo de Asterisk 1.4
comunicacin No exista mecanismo de seguridad para SIP
Una llamada SIP viaja en 2 flujos diferentes: Asterisk 1.6
La sealizacin (5060 UDP) Se soporta SIP sobre TCP
La voz (RTP aleatorio) 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 Asterisk 1.8
conversacin Se soporta TLS completamente
Se agrega soporte para Secure RTP (SRTP). La voz viaja
cifrada
Ejemplo de usuarios
Llamada con UDP
SIP seguros
[usuario1] Con Wireshark se observan estos paquetes:
type=friend
host=dynamic
context=micontexto
transport=tls
encryption=yes
secret=aYtK4I1!
Prctica 13.1
Recapitulando
Podemos cifrar nuestras llamadas para impedir que
Captulo Avanzado #5 sean escuchadas por alguien ms
Sistemas malintencionados pasan llamadas a travs
Seguridad en Asterisk 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) Preferible usar contraseas aleatorias, difciles de
recordar
Por la urgencia de levantar un sistema, podemos MD5(RAND())
descuidar algunos puntos de seguridad clave openssl rand -base64 12
Existen sistemas cuya nica intencin es ganar Si usamos distribuciones como Elastix, siempre
acceso a nuestro equipo para poder cursar llamadas cambiar las contraseas default
Es conveniente tomar muy en cuenta las siguientes Si mas gente la conoce, es ms fcil de atacar
recomendaciones de seguridad
2) Limitar el acceso a
1) Contraseas inseguras
ciertas IPs
En FreePBX/Elastix/Asterisk, cambiar: Si no tenemos agentes externos, Por qu permitir
root de ssh que las extensiones se registren desde cualquier IP?
root de MySQL
Usar permit y deny segn convenga en sip.conf y
Asterisk Manager Ingerface (manager.conf)
manager.conf
admin de FreePBX
Tabla MySQL asterisk.ampusers
deny=0.0.0.0/0.0.0.0
asteriskuser en /etc/amportal.conf permit=192.168.1.1/255.255.255.0
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
6) Negar llamadas
5) Autenticar al usuario
annimas
Hay llamadas muy caras que son espordicas (ej. Definir adecuadamente el context default dentro de
Internacionales) [general] en sip.conf
Podemos pedir contrasea via DTMFs Cualquier usuario NO autenticado puede marcar a travs de
l
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 76
Asterisk Manager Interface
Qu les pareci el curso? Contacto
Queremos que la siguiente experiencia sea an
mejor, as que pedimos su muy valioso apoyo para Christian Cabrera R.
contestar una encuesta sobre el curso christian@enlaza.mx
enlaza.mx/encuesta (55) 50 181 181
Es annima SIP/enlaza.mx
No tienen que proporcionar su nombre si no lo desean
Twitter y Facebook:
@AsteriskMX
@EnlazaMX
Asterisk Manager Interface 77 Asterisk Manager Interface 78