miércoles, 14 de noviembre de 2012

CDR en Asterisk con CDR_ADAPTIVE _ODBC

Hola nuevamente, aprovechando que estoy en casa por temas de salud y a pedido del publico voy a hacer un pequeño post de como utilizar el modulo cdr_adaptive_odbc.so para almacenar los registros de las llamadas(CDR) directamente en una base de datos , esto reemplaza al cdr_mysql.so(deprecated).

En este esquema muestra la conexión que hay entre uno y otro  fichero:




Empezaré explicando algo de CDR de asterisk:

Por cada llamada entrante, saliente, entre anexos, etc, Asterisk genera registro detallado de llamadas conocidos como CDR (Call Detail Records). Los registros son almacenados en un archivo de texto separado por comas, también conocido como CSV (comma separated value), en el directorio: /var/log/asterisk/cdr-csv/

El fichero donde se guardan los registros tiene como nombre: Master.csv

Pero Asterisk tambien puede almacenar registros  de CDR en una base de datos MySQL. De ello se encarga el module CDR_ADAPTIVE_ODBC.SO.


Lo que se guarda en el CDR en texto plano(Master.csv) tiene la siguiente estructura:


Tener el claro que el registro no se guarda en tiempo real, se guarda una vez que haya finalizado la llamada.

Procedemos a monitorear el log del CDR es decir el fichero Master.csv:


#tail -f /var/log/asterisk/cdr-csv/Master.csv


"1234","208","999555999","usuarios","""Ludovico Peluche"" <208>","SIP/0000FFFF0001-00002a8c","SIP/GSM2-00002a8d","Dial","SIP/GSM2/999555999","2012-11-14 21:49:21","2012-11-14 21:49:40","2012-11-14 21:50:13",52,33,"ANSWERED","DOCUMENTATION","1352229761.55511","Celular"



De esta llamada realizado a un celular desde el extensión 208 podemos observar los siguientes valores que se almacenan en el fichero Master.csv:

Accountcode: 1234
Src: 208
Dst: 999555999
Dcontext: usuarios
Clid: Ludovico Peluche <208>
Dchannel: SIP/0000FFFF0001-00002a8c
Dstchannel : SIP/GSM2-00002a8d
Lastapp: Dial
Lastdata: SIP/GSM2/999555999
Start: 2012-11-14 21:49:21
Answer: 2012-11-14 21:49:40
End : 2012-11-14 21:50:13
Duration: 52
Billsec: 33
Dispotition: ANSWERED
Amaflag:DOCUMENTATION
uniqueid: 1352229761.55511
Userfield:Celular

Bueno hasta este punto espero que todo este claro, si no preguntar a SAN GOOGLE mas detalles.

Ahora Procedemos a almacenar dichos registros en la Base de datos MySQL.


Procedemos a crear nuestra Base de Dados y Tabla, donde queremos que se almacene los registros del CDR.

Creamos un fichero cdr.sql, donde tendremos el script que nos crea la tabla:
#vim /opt/cdr.sql

USE asteriskcdr;
CREATE TABLE cdr (
id bigint(20) NOT NULL auto_increment,
calldate datetime NOT NULL default '0000-00-00 00:00:00',
clid varchar(80) NOT NULL default '',
src varchar(80) NOT NULL default '',
dst varchar(80) NOT NULL default '',
dcontext varchar(80) NOT NULL default '',
channel varchar(80) NOT NULL default '',
dstchannel varchar(80) NOT NULL default '',
lastapp varchar(80) NOT NULL default '',
lastdata varchar(80) NOT NULL default '',
duration int(11) NOT NULL default '0',
billsec int(11) NOT NULL default '0',
disposition varchar(45) NOT NULL default '',
amaflags int(11) NOT NULL default '0',
accountcode varchar(20) NOT NULL default '',
peeraccount varchar(20) NOT NULL default '',
uniqueid varchar(32) NOT NULL default '',
linkedid varchar(80) NOT NULL default '',
userfield varchar(255) NOT NULL default '',
PRIMARY KEY (`id`),
KEY callerid (clid)
);

Guardamos los cambios.

Ahora creamos la base de datos asteriskcdr:
#mysql -ps3kr3t
mysql>create dabatase asteriskcdr;
mysql>quit;

#mysql -ps3kr3t  < /opt/cdr.sql

Para validar si efectivamente se ha creado la tabla cdr:
#mysql  -ps3kr3t

mysql> use asteriskcdr;
mysql>show tables;
mysql>describe cdr;


Hasta este punto ya tenemos la tabla donde se guardaran los registros de las llamadas:

Ahora empieza lo que muchos estaban pidiendo: cdr_adaptive_odbc

El CDR_ADAPTIVE_ODBC, permite  crear diferentes tablas donde nosotros podemos guardar los CDR.

Primero tenemos que validar que tengamos el módulo instalado:


*CLI> module show like cdr_adaptive_odbc.so





empecemos revisando el fichero /etc/odbc.ini 

#vim /etc/odbc.ini
[asteriskcdr]

Description = MySQL ODBC CDR
Driver = MySQL
Database = asteriskcdr
Server = localhost
User = root
Password = s3kr3t
Port = 3306
Option = 3



Guardamos los cambios y probamos la conexión entre ODBC y  la base de datos:
#isql asteriskcdr root asteriskcdr










Para salir de SQL, digitamos quit

Nota:

asteriskcdr – etiqueta que da inicio al bloque configurado en odbc.ini
root – nombre del usuario que tiene acceso a la base de datos creada; deberían crear otro usuario con privilegios para lo que se requiere.
s3kr3t – la contraseña de MySQL para el usuario root

Ahora nos toca revisar el fichero res_odbc.conf
#vim /etc/asterisk/res_odbc.conf
[asteriskcdr]

enabled => yes
dsn => asteriskcdr
username => root
password => s3kr3t
pre-connect => yes


Guardamos y cargamos los cambios:
#asterisk -rvvvvvvvv
*CLI>module reload res_odbc.so



Finalmente veamos el fichero cdr_adaptive_odbc.conf
#vim /etc/asterisk/cdr_adaptive_odbc.conf

[asteriskcdr]
connection=asteriskcdr
table=cdr
alias start => calldate

Guardamos y cargamos los cambios
#asterisk -rvvvv
*CLI>module reload cdr_adaptive_odbc.so

Nota:
Cada vez que realicemos llamadas a cualquier destino, podremos ver el el CLI de asterisk la data que se inserta en la base de datos, siempre y cuando tengamos configurado una verbosidad mayor a 20

*CLI>core set verbose 25

Podemos ver algo como esto:



  > [INSERT INTO cdr (calldate,clid,src,dst,dcontext,channel,dstchannel,lastapp,lastdata,duration,billsec,disposition,amaflags,uniqueid,linkedid,userfield) VALUES ({ ts '2012-11-14 17:26:01' },'"Junior Peluche" <216>','216','4320483','usuario','SIP/0000FFFF0002-00002a5e','SIP/troncalSIP-00002a6f','Dial','SIP/troncalSIP/4320483',98,75,'ANSWERED',3,'13523431962.11721','13523431962.11721','Fijo')]


Finalmente, es hora te tomar mi pastilla
Procedemos a revisar la tabla cdr y validar si se guardaron los registros:

#mysql  -ps3kr3t
mysql> use asteriskcdr;
mysql>select * from cdr;


Bueno señores espero que esto les sirva de ayuda, y hasta la próxima... vez que me vuelva a enfermar :-P



Fuentes de ayuda:
http://ofps.oreilly.com/titles/9780596517342/asterisk-DB.html
http://www.voztovoice.org
Recomiendo bajarse el  llibro de Asterisk™: The Definitive Guide y comprar el libro de VoiceTovoice, es muy buena.



Human Hacked

Hola a todos, hace tiempo que no posteo nada, el trabajo y los cursos que dicto me tienen esclavizado.

Bueno aprovechando que hoy no fui a trabajar y tampoco voy a dictar clases por temas de salud, decidí escribir algo, por que estoy re-contra aburrido acá en la cama.



El día de ayer fui hackeado, no mi Computadora si no Yo :-(.

Ayer estaba de los mas tranquilo trabajando en la oficina intercambiando ideas con los colegas del trabajo, yo creo que alguno de ellos tenia un gusano en sus sistema y este gusano ingreso en mi, de seguro que encontró alguna vulnerabilidad en mi y termino de infectarme al punto de tumbarme en la cama.


El virus estaba consumiendo muchos recursos al punto de que el procesador(cabeza) se recalentaba mucho, y los programas(brazos y piernas) se colgaban, no respondían, tuve que ejecutar algunos antivirus (Paracetamol y Naproxeno) para eliminar el virus, pero nada, este virus estaba fuerte, así que decidí ir a mi casa a descansar. En vista que el procesador recalentaba mucho decidí poner un disipador (una toalla húmeda en la frente) para evitar que matara mas neuronas, y ejecute otros antivirus(azitromicina) cada 12 horas.

Voy a tener que parchar mi sistema (alimentarme mejor) y configurar mejor mi Iptables(comer en mis horarios y no a cualquier hora) para evitar futuros ataques. Llego un momento que pensé que Christian me había instalo un troyano el día de su charla (Human Hacker) en LimaHack, mentira eso es broma, pero fuera de broma ese día me psicoseo un poco :-P


Bueno, de qui en adelante voy a tener que hacerme un Human Ethical Hacking, para ver si  tengo vulnerabilidades, y poder hacer los parches correspondientes