domingo, 28 de febrero de 2010

Monitorizando Asterisk con Munin

Una forma muy sencilla de monitorizar todos los datos de vuestros sistemas es mediante Munin que estoy segura que la mayoría ya conoce, pero por si todavía queda alguien que no sepa como tener gráficas de rendimiento de vuestro sistema.

Lo  primero que nos hace falta es instalar un servidor web, para que podamos ver las estadísticas, como Apache. Una vez instalado, pasamos a instalar Munin:

apt-get install munin

Una vez instalado, debemos descargar los plugins para Asterisk:

wget http://rodolphe.quiedeville.org/hack/munin/asterisk-1.4/asterisk-munin.tar.gz

Estos son para Asterisk 1.4 pero los plugins para Asterisk 1.6 se encuentan en: wget http://www.sinologic.net/proyectos/asterisk/asterisk-munin.1.6.tar.gz

Agradezco a la gente de Sinologic por modificar y subir los archivos para que funcionarán con la versión 1.6

Debemos descomprimir el directorio y copiar todos los archivos a usr/share/munin/plugins

cd /usr/src

wget http://rodolphe.quiedeville.org/hack/munin/asterisk-1.4/

tar xvfz asterisk-munin.tar.gz

mv asterisk_*  /usr/share/munin/plugins/

Ése es el directorio donde munin almacena todos los plugins, activos o no.  Para activar nuestros plugins, tenemos que crear un enlace simbólico hacia /etc/munin/plugins y de esta forma pasarán a a recoger datos, vamos prácticamente listos para empezar a funcionar.

Linkeo de Plugins:

cd /etc/munin/plugins

ln -s /usr/share/munin/plugins/asterisk_iaxlag asterisk_iaxlag

ln -s /usr/share/munin/plugins/asterisk_meetme asterisk_meetme

ln -s /usr/share/munin/plugins/asterisk_modules asterisk_modules

ln -s /usr/share/munin/plugins/asterisk_sipobjects asterisk_sipobjects

ln -s /usr/share/munin/plugins/asterisk_voicemail asterisk_voicemail

ln -s /usr/share/munin/plugins/asterisk_channels asterisk_channels

ln -s /usr/share/munin/plugins/asterisk_codecs asterisk_codecs

ln -s /usr/share/munin/plugins/asterisk_iaxpeers asterisk_iaxpeers

ln -s /usr/share/munin/plugins/asterisk_meetme_ asterisk_meetme_

ln -s /usr/share/munin/plugins/asterisk_sipchannels asterisk_sipchannels

ln -s /usr/share/munin/plugins/asterisk_sippeers asterisk_sippeers

ln -s /usr/share/munin/plugins/asterisk_channelstypes asterisk_channelstypes

ln -s /usr/share/munin/plugins/asterisk_iaxchannels asterisk_iaxchannels

ln -s /usr/share/munin/plugins/asterisk_meetmeusers asterisk_meetmeusers

Configuraciones de ficheros:

Bien tras esto tenemos que configurar el fichero munin.conf que se encuentra en el /etc, y es el fichero de configuración del servidor munin, en él vamos a indicar cuales son los directorios que vamos a utilizar y la configuración de distintas máquinas si las tuviesemos, en este caso como solo vamos a monitorizar la propia quedaría así:

dbdir   /var/lib/munin

htmldir /var/www/munin

logdir  /var/log/munin

rundir  /var/run/munin

[localhost.localdomain]

address 127.0.0.1

use_node_name yes

Tras esto, solo nos queda una cosa modificar el /etc/munin/plugin-conf/munin-node y añadir lo siguiente:

[asterisk_*]

user root

Ahora arrancamos el servicio o lo reiniciamos si estaba arriba:

/etc/init.d/munin-node restart

Esperamos un momento a que Munit empiece a recopilar datos y ya tendremos todas nuestras estadístcas diponibles en http://localhost/munin

Dentro de todos los plugins que hay, podemos ver 2 tipos los que conectan a Asterisk directamente mediante la consola y que lo hacen mediante el manager, por lo que  si quereis que las conexiones se hagan mediante el manager debereis configurar una cuenta para Munin, éstos son los datos que utiliza por defecto:

[munin]

secret=mysecret

deny=0.0.0.0/0.0.0.0

permit=127.0.0.1/255.255.255.255

Aquí dejo algunos screenshots de la máquina de pruebas:






































viernes, 26 de febrero de 2010

Howler Technologies anuncion su tarjeta de trascoding G.729 de 64-bit G.729 para Plataformas Asterisk y FreeSWITCHH

Howler Technologies, un proveedor  de soluciones de costo efectivas de telecomunicaciones, hoy anuncio que ha expandidieron su línea de productos de Screamer transcoding lanzando su tarjeta de G.729 transcoder

Los operadores de redes de VoIP y las grandes empresas con centros de llamadas IP que soportan cientos de agentes pueden beneficiarse de esta solución de transcodificación G.729 de alta capacidad, que tiene más de tres veces el poder detranscodificación que cualquier otra tarjeta PCI express basada en G.729, es de alta calidad, velocidad de bits bajo códec para el ahorro de ancho de banda.

Howler Screamer no depende deun  especialista en procesamiento de señales digitales (DSP) de hardware, por lo que los clientes pueden configurar sus tarjetas Screamer de acuerdo a sus necesidades de negocio y mejorar su capacidad de transcodificación cuando quieran. Mediante la adición de varias tarjetas a un servidor, las empresas pueden construir miles de canales de transcodificación en sus redes a una fracción del costo del despliegue de costos usando pasarelas Gateway.

"La capacidad de optimizar la transcodificación entre G.729 y G.711 significa operadores de telecomunicaciones de propiedad intelectual puede racionalizar su infraestructura, así como crear más oportunidades de ingresos por el ruteo de tráfico VoIP directamente desde y hacia , con un ancho de banda limitado", dijo Mike Vieyra, CEO of Howler.

La línea de productos Howler Screamer es compatible con muchos de los softswitches populares , como Asterisk, FreeSWITCH, trixbox y Elastix.

Conectarse a un servidor Mysql usando la API de C bajo Linux o Unix

En estos días me he estado poniendo a tomar más en serio la idea de empezar a programar modulos en Asterisk, ya había probado un par de ejemplos que había visto en la pagina de Rusell Bryant las cuales postearé mañana, me ha entrado de nuevo la fiebre por C para ver si empezamos a superarnos jaja aquí dejo un codigo que halle en cibercity de como conectarse a Mysql usando la API de C

Es importante recordar que debemos tener instalados buil-tools, gcc y la librería  mysqlclient la cual contiene el código API de C que distribuye Mysql, antes que nada un recordatorio de todos los requerimientos necesarios:

  • mysql: MySQL client programs and shared library

  • mysqlclient: Backlevel MySQL shared libraries (old libs)

  • mysql-devel: Files for development of MySQL applications (a must have)

  • mysql-server: Mysql server itself

  • gcc, make and other development libs: GNU C compile


Programa sencillo para conectarse a Mysql: el link para descargar el código es este: fuente

Este programa debería funcionar en las mayoría de sistemas Linux y Unix. Ahora sí a lo que vinimos la carnita:
/* Simple C program that connects to MySQL Database server*/
#include <mysql.h>
#include <stdio.h>

main() {
MYSQL *conn;
MYSQL_RES *res;
MYSQL_ROW row;

char *server = "localhost";
char *user = "root";
char *password = "PASSWORD"; /* set me first */
char *database = "mysql";

conn = mysql_init(NULL);

/* Connect to database */
if (!mysql_real_connect(conn, server,
user, password, database, 0, NULL, 0)) {
fprintf(stderr, "%s\n", mysql_error(conn));
exit(1);
}

/* send SQL query */
if (mysql_query(conn, "show tables")) {
fprintf(stderr, "%s\n", mysql_error(conn));
exit(1);
}

res = mysql_use_result(conn);

/* output table name */
printf("MySQL Tables in mysql database:\n");
while ((row = mysql_fetch_row(res)) != NULL)
printf("%s \n", row[0]);

/* close connection */
mysql_free_result(res);
mysql_close(conn);
}

¿Cómo compilar y vincular el programa con las bibliotecas de MySQL?

MySQL viene con un script especial llamado mysql_config. El cual  proporciona información útil para la compilación del cliente de MySQL y de la conexión al servidor de base de datos MySQL. Necesitamos usar las siguientes dos opciones:

1 Pasar la opción --libs - librerías y opciones requeridad para crear un link con la librería de Mysql Client

En mi caso este es el resultado:

demo:~# mysql_config --libs
-L/usr/lib/mysql -lmysqlclient

2 Pasar la opción --cflags - Compiler flags to find include files and critical compiler flags and defines used when compiling the libmysqlclient library

En mi caso este es el resultado:

demo:~# mysql_config --cflags

-I/usr/include/mysql  -DBIG_JOINS=1 -fPIC
Necesitamos antes pasarle la opción al GNU C compiler osea gcc. Asi que compilamos el programa de la siguiente manera

gcc -o output-file $(mysql_config --cflags) mysql-c-api.c $(mysql_config --libs)

En mi caso:

demo:~# gcc -o output-file $(mysql_config --cflags) mysql-c-api.c $(mysql_config --libs)

mysql-c-api.c: In function âmainâ:

mysql-c-api.c:25: warning: incompatible implicit declaration of built-in function âexitâ

mysql-c-api.c:31: warning: incompatible implicit declaration of built-in function âexitâ
Ahora ejecutamos el programa:


demo:~# ./output-file

MySQL Tables in mysql database:

columns_priv

db

func

help_category

help_keyword

help_relation

help_topic

host

proc

procs_priv

tables_priv

time_zone

time_zone_leap_second

time_zone_name

time_zone_transition

time_zone_transition_type

user


Bueno eso sería todo por hoy, ya es tarde y hay que ir a descansar jiji, espero que les sea de ayuda a muchos, además adjunto un link del libro Practical C Programming de Oreylli es la 3ra Edición: link




martes, 23 de febrero de 2010

Nueva versión de Asterisk corrige el dialplan injection

Siguiendo con el tema que postie la semana pasada con respecto al problema de injection en el dialplan, se ha liberado una nueva versión de Asterisk para corregir este falló además de contener una pequeño manual de buenas practicas en el extensions.conf sin más dejó la info:

Imaginemos que utilizamos un terminal IP (o softphone) con una cuenta limitada a extensiones SIP, en principio sólo podríamos llamar a extensiones SIP, pero el bug explica cómo aprovechar una mala programacion del dialplan y poder llamar a donde queramos:

El fallo de seguridad ocurre principalmente si tenemos una línea como esta:
exten=>_X.,1,Dial(SIP/${EXTEN})

De manera que cualquier número que marquemos, intentará llamar por SIP:
Si marcamos 800, en el dialplan se ejecutará: exten=>800,1,Dial(SIP/800)
Si queremos llamar hacia el exterior, marcamos 952123456, y en el dialplan se ejecutará: exten=>952123456,1,Dial(SIP/952123456)

Claro, que si no tenemos una extensión SIP con ese número, no hará nada y colgará la llamada.
Pero como todos ‘deberíamos’ saber, el comodín punto ‘.’ admite cualquier cosa y tantas como queramos (símbolos, letras, etc) por lo que si en lugar de utilizar un terminal IP utilizamos un softphone, podríamos llamar a nombres o a cualquier cosa que podamos escribir:
Si marcamos 3pepota, en el dialplan se ejecutará:
exten=>3pepota,1,Dial(SIP/3pepota)

Tampoco llamará a nadie, ya que la extensión 3pepota no existe.

El fallo de seguridad consiste en que también podemos utilizar signos de puntuación y otros caracteres, por lo que perfectamente podríamos marcar:
Si marcamos 3pepota&DAHDI/g1/952123456, en el dialplán se ejecutará:

exten=>3pepota&DAHDI/g1/952123456,1,Dial(SIP/3pepota&DAHDI/g1/952123456)

Asterisk por lo tanto, al existir el símbolo ‘&’ llamará a ambos sitios simultaneamente:
Llamará  a SIP/3pepota y a  DAHDI/g1/952123456

De forma que si una de las partes contesta, podremos hablar con ella saltándonos todas las prohibiciones.

Sencillo ¿verdad?

Para evitar esto, Olle Johansson propuso un “arreglo” en el dialplan que podeis ver en la web donde describe el problema.

Hay que dejar claro que esto NO ES UN FALLO DE ASTERISK, si no un fallo de la persona que ha programado el dialplan. No obstante, parece que ha salido una versión que dispone de herramientas (aplicaciones y t funciones que ayuda a prevenir esta práctica, aunque la mejor práctica es evitar utilizar el punto tanto como nos sea posible, y que si queremos programar llamadas a extensiones que empiezan en 200 y acaban en 799 deberíamos escribir algo como:
exten=>_[2-7]XX,1,Dial(SIP/${EXTEN})

o como mínimo:

exten=>_XXX,1,Dial(SIP/${EXTEN})

pero nunca jamás:

exten=>_X.,1,Dial(SIP/${EXTEN})

Así que se ha redactado una “guía del buen administrador” para que aquellos que quieran administrar un Asterisk, puedan seguir unos consejos muy interesantes.

Las nuevas versiones con las herramientas y funciones como FILTER().

Además, un consejo gratuito: para las llamadas internacionales que sí utilizan puntos y son bastante “suculentas”, os recomiendo utilizar algo como esto:
exten=>_00XXXX.,1,ExecIF(${REGEX(“&,/|@” ${EXTEN})}?Congestion())
exten=>_00XXXX.,n,Authenticate(1234) ;; Numero pin conocido por todos los usuarios.
exten=>_00XXXX.,n,Dial(SIP/${EXTEN}@proveedorIP)

De esta forma, si hubiese algún fallo por nuestra parte y dejamos desprotegida la entrada de llamadas por SIP para que cualquiera pudiera llamarnos, con capacidad de salto entre contextos internos y permitiésemos en algún momento que alguien remoto sin autentificar pueda llamar a un número internacional a través nuestra, por lo menos tendría que insertar un código PIN nada agradable y que tendría que averiguar.
Una pequeña molestia para las llamadas internacionales, que nos puede ahorrar mucho dinero si pasa lo peor

Fuente: sinologi.net

martes, 16 de febrero de 2010

Atención: Important security advisory for Asterisk => Dialstring injections

Leyendo en voipsa.org me encontré con un artículo publicado este sabado pasado por la gente de asterisk el cual tenía un link más explicativo por su autor Hans Petter Selansky, de antemano un agradecimiento a el por avisar de este problema a los Asterisk developers, el link explicativo esta aquí

Verizon y Skype podrían unirse para ofrecer VoIP en los móviles

Skype se ha tomado muy en serio la idea de ofrecer servicios de VoIP vía terminales móviles, el gran inconveniente de esto es que la mayoría de operadores prohiben mediante contrato el uso de la VoIP en redes 3G y los hot-spots wifi suelen ser en su gran mayoría privados, por lo que Skype podría unificar fuerzas con Verizon para aprovechar la infraestructura Wireless que ya tiene esta empresa desplegado por todo Estados Unidos.


Skype  se han centrado en proveer soluciones para centralitas mediante su puente SIP, llegar a acuerdos con fabricantes como Cisco, Avaya o Digium para crear módulos y soporte especial para sus productos e intentar llegar a los usuarios de móviles (que cada día son más) de forma que utilicen Skype como alternativa a la tarifa habitual del operador, que por lo general suele ser bastante más cara que la VoIP.

El inconveniente de meterse en el mundo de la telefonía móvil (que ya lo intentó con algún que otro modelo) es que los operadores de telefonía tienen el control absoluto de sus usuarios mediante contratos que rozan la legalidad según el defensor del consumidor e imponiendo tarifas abusivas propias de monopolios, por lo tanto Skype no lo tiene fácil para llegar a este mercado y competir en el terreno de quien hoy día es “todopoderoso” y creen que pueden ganar dinero por cualquier cosa.

No obstante, en EEUU los usuarios “disfrutan” de una competitividad entre las distintas empresas que permiten que tanto Skype como otros proveedores de VoIP puedan llegar a estrategias bastante interesantes y que ofrecen servicios que satisfagan a sus usuarios con la ventaja de generar un desarrollo de tecnología realmente envidiable como es el posible acuerdo que ha venido en forma de “rumor” en el Mobile World Congress GSM de Barcelona, durante estos días.

Si Skype quisiera hacer esto mismo en España, se toparía de narices con una rotunda negativa por parte de las principales operadoras que dominan el espectro, pero en cambio seguro que estas mismas operadoras lanzarían un “servicio” similar controlado por ellos, forzando a los usuarios a utilizar una “falsa alternativa” con tarifas tan abusivas que al usuario deje de interesarle eso que en todo el mundo llaman Voz sobre IP.

Más información: http://www.ismashphone.com

FUENTE: SINOLOGIC.NET

lunes, 15 de febrero de 2010

Baja calidad de audio y problemas en audio en musica de espera en Tribox

Si está utilizando Trixbox (o  cualquier otra distribución de Asterisk) con troncales SIP  y el driver dummy DAHDI y experimenta problemas de calidad de audio pobre o problemas con la música de espera, entonces puede valer la pena cambiar el valor de  'internal_timing' a yes en asterisk.conf.

[options]
internal_timing = yes

En algunos casos puede mejor tremendamente la calidad del audio.

Fuente: sysadminman.net