Enviado por admin el
Seguramente en algún momento habrán buscado una solución que les permitiera tener una traza de toda la señalización SIP que esté pasando por su PBX. Afortunadamente existe una aplicación que además de ser muy completa y solida, es Open Source. Se llama Homer. Homer es un servidor de captura SIP que permite grabar todo el trafico SIP y visualizarlo cómodamente a través de una interfaz grafica.
¿Cómo funciona?
Para funcionar se apoya a un Proxy SIP (OpenSIPs, Kamailio, Openser) que recolecta toda la señalización SIP que le envía el “Capture Agent” . La ventaja de este tipo de solución es que vamos a tener la posibilidad de ver todo ese tipo de trafico en un sitio web (WebHomer).
La parte de la captura está bien explicada en este grafico:
Todo el trafico procedente de los distintos “dispositivos” (Proxy SIP, SBC, PBX, Capture Agent) se envía al servidor que se encarga de elaborarlo (el Proxy SIP). El Proxy guarda los datos en una base de datos que se puede consultar desde una aplicación Web (WebHomer) con gráficos y estadísticas.
¿Que necesitamos para recolectar el trafico SIP de nuestro Asterisk?
- Un Proxy SIP (en este caso OpenSIPs)
- Un servidor web (en este caso Apache) con el modulo rewrite activado
- El Capture Agent
- Mysql Server versión > 5.1.48
- php-pdo y php-gd
- las librerías pcap
En este caso OpenSIPs, el Capture Agent y la parte Web, se instalarán en el mismo servidor donde está presente Asterisk.
Para empezar instalamos todos los paquetes que se necesitan
yum install subversion php php-pdo php-gd httpd mysql-server mysql-devel libpcap libpcap-devel git
Seguimos bajando la ultima versión disponible de OpenSIPs:
cd /usr/src
svn co https://opensips.svn.sourceforge.net/svnroot/opensips/branches/1.8 opensips_1_8
Entramos en la carpeta:
cd opensips_1_8
y ejecutamos la utilidad para configurar y instalar Opensips:
make menuconfig
Entramos en el menú “Configure Compile Options”
Luego se entra en el menú “Configure Excluded Modules”:
Se selecciona el modulo “db_mysql”. Se regresa al menú anterior con la tecla <--
Se selecciona el menú “Configure Install Prefix”
se pone / y se presiona la tecla envío
Se presiona nuevamente la tecla envío
Se selecciona el menú “Save Changes”
nuevamente la tecla envío. Se regresa al menú anterior con la tecla <--
Se selecciona el menú “Compile And Install OpenSIPs”. Empezará la compilación e instalación de OpenSIPs. Terminada la instalación se regresa al menuconfig:
Se selecciona “Exit & Save All Changes” y se presiona la tecla envío hasta salir del menú. Se continua instalando y configurando el script de arranque:
cd packaging/fedora
nano opensips.init
Cambiamos esta línea:
oser=/usr/sbin/$prog
para que quede
oser=/sbin/$prog
Guardamos los cambios y volvemos ejecutable el archivo:
chmod 755 opensips.init
Terminamos la configuración:
cp opensips.init /etc/init.d/opensips
chkconfig --add opensips
chkconfig opensips on
Como vamos a utilizar OpenSIPs solamente como servidor de captura de los paquetes, modificamos el archivo de configuración opensips.cfg:
cd /etc/opensips
movemos el predefinido:
mv opensips.cfg opensips.cfg.old
y creamos uno nuevo:
nano opensips.cfg
copiamos las líneas que siguen:
####### Global Parameters #########
debug=3
log_stderror=no
log_facility=LOG_LOCAL0
fork=yes
children=5
disable_tcp=yes
db_default_url="mysql://opensips:opensipsrw@localhost/opensips"
listen=udp:1.2.3.4:9060
####### Modules Section ########
#set module path
mpath="/lib/opensips/modules/"
loadmodule "db_mysql.so"
loadmodule "sipcapture.so"
####### Routing Logic ########
modparam("sipcapture", "db_url", "mysql://homer:sesamo@localhost/homer_db")
modparam("sipcapture", "capture_on", 1)
modparam("sipcapture", "table_name", "sip_capture")
modparam("sipcapture", "hep_capture_on", 1)
####### Routing Logic ########
route {
sip_capture();
drop;
}
onreply_route {
sip_capture();
drop;
}
Guardamos los cambios. Las líneas importantes son:
- listen=udp:1.2.3.4:9060 Esta es la dirección IP y el puerto donde OpenSIPs recibirá los paquetes enviados por el “Capture Agent”. Si queremos recibir solamente los paquetes de agentes que están en la misma LAN, ponemos la dirección IP local sino la dirección IP publica. El puerto 9060 es donde el Agente tendrá que enviar los paquetes.
- modparam("sipcapture", "db_url", "mysql://homer:sesamo@localhost/homer_db") En esta línea se define el nombre de la base de datos donde se guardarán los paquetes capturados junto a usuario y contraseña con acceso a la misma
- modparam("sipcapture", "table_name", "sip_capture") En esta línea se define el nombre de la tabla donde se guardarán los paquetes capturados.
Ya podemos crear la base de datos como indicado en la la configuración de OpenSIPs:
service mysqld start
mysql -u root -psesamo
mysql> create database homer_db;
Creamos un usuario que tenga los privilegios para la base de datos:
mysql> grant all privileges on homer_db.* to 'homer'@'localhost' identified by 'sesamo';
Salimos del cliente MySQL:
mysql> quit
creamos la tabla sip_capture
mysql -u root -psesamo homer_db < /usr/src/opensips_1_8/modules/sipcapture/sql/sipcapture.sql
Ahora podemos iniciar OpenSIPs:
/etc/init.d/opensips start
Para continuar bajamos e instalamos el Capture Agent:
cd /usr/src
git clone https://code.google.com/p/captagent/ captagent
cd captagent/captagent4
./configure
make
make install
El agente viene con un archivo de configuración que hay que modificar según la configuración de OpenSIPs:
nano /usr/local/etc/captagent/captagent.xml
se modifica este bloque con los datos del Servidor OpenSIPs:
<configuration name="core_hep.conf" description="HEP Socket">
<settings>
<param name="version" value="2"/>
<param name="capture-host" value="1.2.3.4"/>
<param name="capture-port" value="9060"/>
<param name="capture-proto" value="udp"/>
<param name="capture-id" value="Servidor1"/>
<param name="capture-password" value="sesamo"/>
</settings>
</configuration>
Se guardan los cambios.
Ya se puede hacer una primera prueba. Se inicia el Capture Agent:
captagent
Aparecerá:
Loaded core config
Loaded load_module
Loaded proto_uni
The Captagent is ready
Se efectúa una llamada desde el servidor Asterisk y se cuelga. Se sale del Capture Agent con CTRL-C y se entra en el cliente MySQL:
mysql -u root -psesamo
Se averigua que en la tabla sip_capture estén los paquetes generados por la llamada que se acaba de hacer:
mysql> use homer_db
mysql> select * from sip_capture
Si aparecen los paquetes, el sistema funciona perfectamente. Salimos del cliente MySQL:
mysql> quit
Ya se puede instalar la parte web. Se descarga WebHomer:
cd /usr/src
git clone https://code.google.com/p/homer/
Se entra en la carpeta de la parte Web:
cd homer/webhomer/
Se copian todos los archivos en el servidor Web:
cp -rf * /var/www/html
Se crea la base de datos para la parte web:
mysql -u root -psesamo
mysql> create database homer;
mysql> grant all privileges on homer.* to 'homer'@'localhost' identified by 'sesamo';
mysql> quit
Se cargan los datos predefinidos
mysql -u root -psesamo homer < sql/homer_users.sql
Para activar las estadísticas en la base de datos homer_db:
mysql -u root -psesamo homer_db < sql/statistics.sql
Se entra en la carpeta del servidor:
cd /var/www/html
se modifica el archivo de configuración:
nano configuration_example.php
Se cambia este bloque:
/* Access db of homer */
define('HOST', "localhost");
define('PORT', 3306);
define('USER', "root");
define('PW', "root");
define('DB', "homer_users");
para que quede:
/* Access db of homer */
define('HOST', "localhost");
define('PORT', 3306);
define('USER', "homer");
define('PW', "sesamo");
define('DB', "homer");
Se modifica el segundo bloque:
define('HOMER_HOST', "localhost"); /* DEFAULT. Don't forget insert this host to your DB nodes table */
define('HOMER_PORT', 3306);
define('HOMER_USER', "homer_user");
define('HOMER_PW', "homer_password");
define('HOMER_DB', "homer_db");
define('HOMER_TABLE', "sip_capture");
para que quede:
define('HOMER_HOST', "localhost"); /* DEFAULT. Don't forget insert this host to your DB nodes table */
define('HOMER_PORT', 3306);
define('HOMER_USER', "homer");
define('HOMER_PW', "sesamo");
define('HOMER_DB', "homer_db");
define('HOMER_TABLE', "sip_capture");
Se modifica el ultimo bloque:
define('PCAPDIR',"/var/www/webhomer/tmp/");
define('WEBPCAPLOC',"/webhomer/tmp/");
define('APIURL',"http://localhost");
define('APILOC',"/webhomer/api/");
para que quede:
define('PCAPDIR',"/var/www/html/tmp/");
define('WEBPCAPLOC',"/tmp/");
define('APIURL',"http://localhost");
define('APILOC',"/api/");
Se guardan los cambios y se renombra el archivo:
mv configuration_example.php configuration.php
Para activar las estadísticas se modifica el siguiente archivo:
nano preferences_example.php
Se cambia esta línea:
define('MODULES', 0); /* Set to 1 Enable Statistic Modules */
para que quede:
define('MODULES', 1); /* Set to 1 Enable Statistic Modules */
Se guardan los cambios y se renombra el archivo:
mv preferences_example.php preferences.php
Se cambian los permiso de todos los archivos:
chown -Rf apache:apache *
Para crear las estadísticas hay que ejecutar un script en perl cada N minutos. El script está disponible en las carpeta de webhomer:
cp /usr/src/homer/scripts/statistic.pl /usr/local/bin/
Se abre:
nano /usr/local/bin/statistic.pl
se modifica este bloque:
$version = "0.0.2";
$mysql_table = "sip_capture";
$mysql_dbname = "homer_db";
$mysql_user = "homer_user";
$mysql_password = "homer_password";
$mysql_host = "localhost";
para que quede:
$version = "0.0.2";
$mysql_table = "sip_capture";
$mysql_dbname = "homer_db";
$mysql_user = "homer";
$mysql_password = "sesamo";
$mysql_host = "localhost";
Se vuelve el archivo ejecutable:
chmod +x /usr/local/bin/statistic.pl
Se guardan los cambios y se crea un cronjob para que se recolecte las estadísticas cada 5 minutos:
crontab -e
Se añade la línea que sigue:
*/5 * * * * /usr/local/bin/statistic.pl 2>&1 > /dev/null
Se guardan los cambios y se inicia el Capture Agent en segundo plano:
captagent > /dev/null &
Se inicia el servidor web:
service httpd start
Se accede a la pagina de administración utilizando la IP privado o publica del servidor (según configuración):
En usuario se pone: test@test.com
Contraseña: test123
Primero se entra en el menú Admin y se modifican los nodos presentes (en nuestro caso uno):
Luego se modifica “Aliases” para que quede:
Cambiar 1.2.3.4 con IP publica o privada del servidor.
Se crea un nuevo usuario para acceder a la pagina de administración:
Se elimina el predefinido y se sale de la pagina volviendo a acceder con la nueva cuenta. Se entra al menú “Stats”:
Para ver las los paquetes capturados se entra al menú “Search”, se selecciona la fecha y la hora de inicio y de fin de la búsqueda, el tipo de transacción “Calls” y se presiona el botón “Search Homer”
Aparecerá la lista de todos los paquetes enviados/recibidos. Seleccionamos uno:
Podemos exportar los paquetes a Wireshark con el botón “PCAP”, seleccionar cada línea para ver el paquete SIP completo y/o guardar el dialogo en formato texto.
Seguramente una aplicación muy cómoda para el análisis y resolución de problemas en la señalización SIP.
3 comentarios
problema pagina
Enviado por kevin fuksman (no verificado) el
hola despues de 1 dia entero de prueba y error, al parecer ya logre montar todo. mi problema actual en el cual me quede estancando es que al entrar a la pagina me tira un error , "could not find driver" la imagen alado de la pestaña aparece por lo que veo que algo funciona.
lo que logre investigar es que es algun error de php-pdo pero como dice al principio lo instale. a alguno le paso algo parecido ??
muchas graciass
you should install PDO and
Enviado por Alexandr Dubovikov (no verificado) el
you should install PDO and mysql PDO driver.
wbr,
Alexandr Dubovikov
New Release HOMER 5.01
Enviado por Anónimo (no verificado) el
New Release HOMER 5.01 (repository on GITHUB/SIPCAPTURE)
https://github.com/sipcapture/homer