Asterisk 12

20 Ene

Hola, como muchos de ustedes ya se habrán dado cuenta desde el pasado Diciembre el grupo de desarrolladores de Asterisk liberó la primer versión  estable de Asterisk 12. A pesar de que no es un Branch LTS, Asterisk 12 será (en mi opinión) un parte-aguas con respecto al modo de trabajar y desarrollar soluciones basadas en Asterisk.

Se preguntarán: ¿Qué es lo que lo hace tan especial? Bueno, técnicamente hablando Asterisk 12 es la fusión del proyecto Asterisk y Asterisk SCF, lo cual da como resultado una nueva arquitectura, los desarrolladores están pensando en dejar de lado el “bugguiento” chan_sip (aún se puede usar en Asterisk 12) por el nuevo core de SIP que usa PJSIP; además de un nuevo modelo de desarrollo usando ARI (no confundir con la interfaz de usuario de FreePBX) y de STATSIS.

Siguiendo la línea técnica habrá mucho que aprender ya sea para desarrollar soluciones … Continuar leyendo

Versión mejorada del mensaje “all circuits are busy” de Elastix/FreePBX (v4)

8 Abr

Actualización 2016-01-13: La liga de los archivos de sonido ya está disponible nuevamente.

Hace casi 2 años escribí un artículo sobre como mejorar los mensajes de código de error en llamadas por E1 para Elastix. El tiempo ha pasado y han habido cambios tanto en Asterisk como en Elastix, ocasionando que algunas partes de ese viejo post ya no funcionen, por lo que decidí reescribirlo y mejorarlo.

Este código les permitirá dar mensajes más descriptivos para los códigos de error Q931 que los enlaces digitales arrojan al momento en que una llamada sale mal. Con respecto del post anterior, estas son las mejoras:

Existen más códigos de error documentados. Las voces son sintetizadas con acento neutro (para todos los que nos leen en América Latina, esto es más cómodo que el acento español que se tenía antes) Ya solo se requiere meter el código en un único archivo .conf, no… Continuar leyendo

Restringe el acceso a carpetas específicas usando Apache

18 Dic

url7[1]Nosotros nunca recomendamos exponer la interfaz web de tu conmutador (entiéndase: FreePBX/Elastix/Trixbox) bajo ningún motivo. Sin embargo, hay casos específicos en los cuales puede existir la necesidad de abrir el puerto HTTP/HTTPS para algunos servicios (ej. un CRM o alguna aplicación in house). Si esto debe de hacerse, es mejor hacerlo teniendo en cuenta algunas funciones básicas de seguridad.

Si aplicáramos lo que vimos en nuestros artículos del modelo de seguridad en Asterisk veremos que no es posible defender a nivel de firewall externo/iptables, ya que no hay una manera de permitir el paso solamente a ciertas carpetas. Para lograrlo, debemos hacer uso de la configuración de Apache la cual nos permite aplicar un mini firewall interno que solo permitirá a ciertas IPs ver ciertas páginas.

Primero, localicemos el archivo /etc/httpd/conf/httpd.conf (en algunos casos cambia de nombre a /etc/apache2/httpd.conf, así que hay que buscarlo con calma). Lo que buscamos … Continuar leyendo

Permitiendo llamadas no autenticadas del exterior (con restricciones)

26 Abr

Fuente: http://www.datacenta.com/Pictures/stop.jpg

En este blog y en muchos otros se ha discutido el uso de aplicaciones como fail2ban para impedir ataques de fuerza bruta combinado junto con iptablespara denegar el acceso a fuentes no autorizadas. Existe un caso especial que es cuando tenemos que aceptar las llamadas anónimas del exterior sin importar desde donde se originen, y ese es el caso del que voy a comentar a continuación.

Recibir llamadas anónimas no es malo, pero hay que saber lo que se hace y tomar las precauciones necesarias. Al permitir las llamadas entrantes desde cualquier fuente estamos permitiendo que cualquiera nos contacte via IP, para que así el interesado no tenga que paga costos de LD, ni tampoco tenga que hacer algún setup muy elaborado en su conmutador. Ofrecer un peer de autenticación a cada usuario sería un poco difícil, ya que lo que se espera de estos escenarios es que … Continuar leyendo

Recuperar la contraseña de FreePBX

3 Oct

Muchos han pedido un tutorial de como recuperar la contraseña de FreePBX, lo cual es bastante sencillo una vez que tienes la contraseña de root de Linux. Asumiendo esto, el proceso a seguir es bastante fácil, solo hay que cambiar los passwords desde MySQL. Aquí pongo los comandos directos para hacerlo desde el CLI de Linux (estamos asumiendo que el password de root de MySQL es eLaStIx.2oo7)

Si tienes FreePBX 2.5 o inferior:

[codesyntax lang=”bash”] echo “UPDATE asterisk.ampusers SET password=’minuevopass’ WHERE username = ‘admin'” | mysql -peLaStIx.2oo7 asterisk [/codesyntax]

Si tienes FreePBX 2.6 o superior

[codesyntax lang=”bash”]

echo "UPDATE asterisk.ampusers SET password_sha1=SHA1('minuevopass') WHERE username = 'admin'" | mysql -peLaStIx.2oo7 asterisk

[/codesyntax]

Con FreePBX 2.6+ la contraseña se guarda como hash SHA1, por lo que no es posible recuperarla. Sin embargo, en versiones anteriores se guardaba en texto plano, por lo que un simple SELECT nos revelaria cual era la contraseña … Continuar leyendo

Respaldando la base de datos de configuración de Elastix/FreePBX por SSH

27 Jun

Una gran ventaja que tenemos en Linux es la facilidad de crear procesos automatizados que nos ayuden a ejecutar tareas cotidianas. Para nuestros usos comunes como administrador de equipos basados en Asterisk/Elastix/FreePBX, puede ser una labor cotidiana respaldar la configuración alojada en bases de datos de MySQL.

SSH nos permite ejecutar comandos en servidores Linux remotos y traernos el resultado al mismo tiempo, por lo que resulta ideal para realizar un respaldo en un equpo distante y almacenarlo en nuestro equipo Linux loca. El comando para hacerlo sería el siguiente (asumiendo que usamos la contraseña default de MySQL en nuestro equipo remoto):

[codesyntax lang=”bash”]

ssh 192.168.1.100 "mysqldump -peLaStIx.2oo7 --databases asterisk | gzip -9" > respaldo.sql.gz

[/codesyntax]

El comando de arriba se encargará de hacer un dump de la BD asterisk. Si quisiéramos traernos también el CDR, hariamos lo siguiente:

[codesyntax lang=”bash”]

ssh 192.168.1.100 "mysqldump -peLaStIx.2oo7 --databases asterisk cdr | gzip… Continuar leyendo

Activar las grabaciones por default para todos los usuarios en Elastix/FreePBX

22 Jun

Algunas veces como profesionales llegamos a un conmutador que ya tiene alguna configuración cargada y se nos pide que hagamos modificaciones. Imaginen que de pronto llegan a un callcenter de 100 posiciones que hace uso de Elastix/FreePBX y les dicen: “Queremos que todas las llamadas de todos los usuarios se graben”, pero analizando las extensiones se dan cuenta que todas (o ninguna) tiene la grabación habilitada, y que la mayoría se encuentran en modo de grabación “On Demand”, cuando ustedes lo que quieres es que sea “Always”

¿Cómo lo hacen? Espero que no piensen en ir extensión por extensión haciendo el cambio…

Para solucionar esto rápidamente, necesitamos hacer 2 cosas:

Modificar la tabla de MySQL asterisk.users Modificar el Asterisk DB para que coincida con los valores que necesitamos

Y ambas las logramos fácilmente con el siguiente código (desde el Linux CLI):

[codesyntax lang=”bash” tab_width=”3″]

# Primero nos hacemos cargo del… Continuar leyendo

Balanceo de troncales en Elastix (round robin)

21 Jun

Este mini tutorial aplica para FreePBX/Trixbox/Elastix.

La idea tras de esta guía es crear un balanceador de carga. Es decir, tener una sola troncal que automáticamente rote una serie de troncales posibles por las cuales pueden salir las llamadas. Dichas troncales pueden ser DAHDI, IAX2 o SIP, así que esto le agrega flexibilidad.

El código sería algo así (la sintaxis está en AEL para hacer la programación más simple)

[codesyntax lang=”c” tab_width=”3″ blockstate=”expanded”]

// Archivo extensions.ael context roundrobin { _X. => { Set(max=10); Set(n=0); repetir: Set(n=${n}+1); Set(last=$[(${DB(rr/last)}+1)%${max}); Set(DB(rr/last)=${last}); Dial(${DB(rr/trunk${last})}/${EXTEN},30,g); if (${DIALSTATUS}!="ANSWERED") { if (${n}<${max}) { // Repetir ciclo goto repetir; }; }; Hangup; }; }; [/codesyntax]

Nos faltan dos pasos:

Inicializar el AstDB con el valor de la primer troncal. Esto es sencillo ejecutando el comando database put rr last 1 dentro del CLI de Asterisk El paso final es crear una troncal ‘Custom’ dentro de FreePBX/Elastix y agregarla como… Continuar leyendo

Recuperar la contraseña de Elastix/FreePBX

13 Jun

En ocasiones me he enfrentado a la tarea de apoderarme del control de algún servidor Elastix/FreePBX porque el cliente no ha quedado satisfecho con el servicio que su proveedor anterior le ofrecía, así que dado que el cliente no conoce los accesos y los que si lo conocen no me lo van a dar “por la buena”, entonces tengo que recuperarlo yo.

Obtener las contraseñas de admin tanto para Elastix como para FreePBX no es complicado, lo único que se requiere es tener acceso de root por SSH (si no tenemos este acceso, podemos obtenerlo siguiendo una de tantas guías para recuperar el password de root que hay en internet). Ya adentro del sistema, podemos hacer lo siguiente desde el CLI de Linux:

echo "UPDATE acl_user SET md5_password='827ccb0eea8a706c4c34a16891f84e7b' WHERE name='admin';" | sqlite3 /var/www/db/acl.db

Con esto cambiamos el password de Elastix a admin/12345. Ahora, para FreePBX:

echo "UPDATE asterisk.ampusers SET password_sha1… Continuar leyendo

Estadísticas de inseguridad en Elastix (México)

9 Mar

Hoy decidí realizar un estudio sobre las vulnerabilidades que sería capaz de encontrar en un entorno como Elastix en México. Me puse mi sombrero blanco y decidí escanear todas las posibles redes del país y buscar cuantos equipos utilizan la distribución antes mencionada (al menos las visibles en el puerto TCP 443), y los resultados fueron alarmantes. Aquí algunas estadísticas:

25.4 millones de hosts escaneados 69 mil tienen el puerto 443 abierto 467 equipos eran Elastix

Aclaro que esto no quiere decir que estos sean todos los equipos Elastix en México. Esto quiere decir que en una noche cualquiera fui capaz de encontrar 467 equipos visibles abiertamente en internet, los demás están tras algún firewall y son invisibles al exterior (¡bien!).

Ahora, para los números del terror:

287 tienen algún tipo de dato “secreto” que se puede obtener fácilmente (contraseña de FreePBX, contraseña de Elastix, contraseñas de extensiones) los mismos… Continuar leyendo