Instalación y configuración de Homer SIP Capture Server v. 3.5

Ya había escrito un articulo dedicado a la instalación de Homer pero como esta nueva versión (todavía en desarrollo), trae muchas novedades, he decidido volverlo a escribir.

A partir de esta versión la integración de Kamailio y Homer es mucho más profunda. Muchas de las estadísticas van directamente de Kamailio a la base de datos de Homer y en el mismo Kamailio la nueva configuración permite detectar toda una serie de ataques y/o tentativos de fraude que luego encontraremos en la interfaz grafica de Homer y podremos recibir alertas a nuestro correo electrónico.

Esta instalación se basa en CentOS 6.5 64 bit, un VPS de Digital Ocean con 2GB de RAM y MariaDB como sistema de base de datos.

Mano a la obra.

Una vez conectados al servidor vías SSH, actualizamos el sistema:

yum update -y

Instalamos el editor nano y wget:

yum install nano wget -y

Se continua con la configuración de la zona horaria (personalizar según su país):

rm /etc/localtime
ln -s /usr/share/zoneinfo/America/Bogota /etc/localtime

El idioma (español):

nano /etc/sysconfig/i18n

se modifica esta línea:

LANG="en_US.UTF-8"

para que quede:

LANG="es_CO.iso88591"

Se guardan los cambios.

Se instala el paquete del network time protocol que se utiliza para tener actualizada la hora del servidor:

yum install ntp -y

Se configura para que arranque en automático:

chkconfig ntpd on

Se inicia:

service ntpd start

Se crea la partición de Swap ya que no viene por defecto:

dd if=/dev/zero of=/swapfile bs=1024 count=512k
mkswap /swapfile
swapon /swapfile

Se configura la partición de swap para que arranque con el sistema:

nano /etc/fstab

al final del archivo se añade la línea que sigue:

/swapfile          swap            swap    defaults        0 0

Se guardan los cambios y se cambian los permisos del archivo recién creado:

chmod 0600 /swapfile

Se configuran los repositorios de MariaDB:

nano /etc/yum.repos.d/MariaDB.repo

Se copian las siguientes líneas:

[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/5.5/centos6-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

Se guardan los cambios. Se desinstala el paquete de las librerías de MySQL:

rpm -e --nodeps mysql-libs

Se instala MariaDB:

yum install MariaDB-server MariaDB-client MariaDB-devel -y

Se inicia el servicio:

service mysql start

Se vuelve el arranque automático:

chkconfig mysql on

Se pone en seguridad:

mysql_secure_installation

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] y
New password:
Re-enter new password:

Password updated successfully!
Reloading privilege tables..
... Success!

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

A lo largo del proceso se configura la contraseña del usuario root de MariaDB (en nuestro caso sesamo)

Se configura la zona horaria en MySQL:

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -psesamo mysql

Se modifica la configuración de MySQL;

nano /etc/my.cnf.d/server.cnf

bajo la etiqueta:

[mariadb-5.5]

se añade:

default-time-zone        = America/Bogota
tmp_table_size                     = 32M
max_heap_table_size                = 1G
query_cache_type                   = 0
query_cache_size                   = 0
max_connections                    = 500
thread_cache_size                  = 50
open_files_limit                   = 65535
table_definition_cache             = 1024  
table_open_cache                   = 2048

#INNODB
innodb_flush_method                = O_DIRECT
innodb_log_files_in_group          = 2
innodb_log_file_size               = 500M
innodb_flush_log_at_trx_commit     = 2
innodb_file_per_table              = 1
innodb_buffer_pool_size            = 1G
innodb_stats_on_metadata           = 0
innodb_file_format                 = barracuda

Desde la versión 3.5, Homer utiliza como ENGINE InnoDB bajo el formato Barracuda. Se reinicia:

service mysql restart

Si aparece este error (o algo parecido):

Shutting down MySQL. SUCCESS!
Starting MySQL. ERROR! The server quit without updating PID file (/var/lib/mysql/sip10.voztovoice.org.pid).

Se borran los dos archivos que siguen:

rm /var/lib/mysql/ib_logfile*
rm: remove regular file `/var/lib/mysql/ib_logfile0'? y
rm: remove regular file `/var/lib/mysql/ib_logfile1'? y

Se inicia nuevamente Homer:

service mysql start

Se crea la base de datos:

mysql -u root -psesamo

MariaDB [(none)]> create database homer_db;

MariaDB [(none)]> grant all privileges on homer_db.* to 'homeruser'@'localhost' identified by 'sesamo';

MariaDB [(none)]> flush privileges;

MariaDB [(none)]> quit

Se instala la nueva versión de la tabla sip_capture:

cd /usr/src

wget https://homer.googlecode.com/git-history/webhomer_3.5/sql/create_sipcapt...

mysql -u root -psesamo homer_db < create_sipcapture_version_2.sql

la tabla de las estadísticas:

wget https://homer.googlecode.com/git-history/webhomer_3.5/sql/statistics.sql

mysql -u root -psesamo homer_db < statistics.sql

Se instala la versión 4.1 de Kamailio:

yum install gcc ncurses-devel make gcc-c++ compat-libtermcap zlib-devel libtool bison -y

yum install bison-devel openssl-devel bzip2-devel wget newt-devel subversion flex git -y

git clone git://git.sip-router.org/kamailio kamailio
cd kamailio
git checkout -b 4.1 origin/4.1
make include_modules="pv db_mysql sipcapture textops rtimer xlog sqlops htable sl siputils" cfg
make all
make install

Se instala el script de arranque para CentOS 6.5:

cd /usr/src/kamailio/pkg/kamailio/centos/6
nano kamailio.sysconfig

Se modifican estas dos líneas:

USER=kamailio
GROUP=kamailio

para que queden:

USER=root
GROUP=root

Se guardan los datos y se continua:

cp kamailio.sysconfig /etc/sysconfig/kamailio

nano kamailio.init

Se modifican estas dos líneas:

KAM=/usr/sbin/kamailio
KAMCFG=/etc/kamailio/kamailio.cfg

Para que queden:

KAM=/usr/local/sbin/kamailio
KAMCFG=/usr/local/etc/kamailio/kamailio.cfg

Se guardan los cambios y se termina con el proceso:

cp kamailio.init /etc/init.d/kamailio
chkconfig --add kamailio
chmod + /etc/init.d/kamailio
chkconfig kamailio on

Se prepara el archivo de configuración de Kamailio:

cd /usr/local/etc/kamailio
mv kamailio.cfg kamailio.cfg.old
nano kamailio.cfg

Se descarga el archivo desde esta pagina:

https://code.google.com/hosting/moved?project=homer

y se copia. Se modifican estas líneas:

listen=udp:10.0.1.77:9060
modparam("sqlops","sqlcon","cb=>mysql://homer_user:123456@127.0.0.1/homer_db")
modparam("sipcapture", "db_url", "mysql://homer_user:123456@localhost/homer_db")

Para que queden (cambiar 1.2.3.4 con la dirección IP de su servidor):

listen=udp:1.2.3.4:9060
modparam("sqlops","sqlcon","cb=>mysql://homeruser:sesamo@127.0.0.1/homer_db")
modparam("sipcapture", "db_url", "mysql://homeruser:sesamo@127.0.0.1/homer_db")

Antes de:

loadmodule "pv.so"

añadir:

loadmodule "tm.so"

Se guardan los cambios y se inicia con la parte Web:

yum install httpd php php-cli php-pdo php-mysql php-gd -y

chkconfig httpd on

nano +338 /etc/httpd/conf/httpd.conf

Se cambia la línea:

AllowOverride None

Con:

AllowOverride All

se averigua que esté presente esta línea:

LoadModule rewrite_module modules/mod_rewrite.so

Se guardan los cambios y se continua con php:

nano +946 /etc/php.ini

Se cambia esta línea:

;date.timezone =

para que quede:

date.timezone = America/Bogota

Se descarga la parte web de Homer:

cd /usr/src

git clone https://code.google.com/p/homer/
cd homer
git checkout -b webhomer_3.5 origin/webhomer_3.5
mkdir /var/www/html/homer
cp -r webhomer/* /var/www/html/homer
chown -R apache:apache /var/www/html/homer

Se entra en la carpeta creada y se renombran los archivos de configuración:

cd /var/www/html/homer/

cp preferences_example.php preferences.php
cp configuration_example.php configuration.php

Se modifica el primero:

nano configuration.php

Se modifica el primer bloque:

define('HOST', "localhost");
define('PORT', 3306);
define('USER', "root");
define('PW', "root");
define('DB', "homer_users");

para que quede:

define('HOST', "127.0.0.1");
define('PORT', 3306);
define('USER', "homeruser");
define('PW', "sesamo");
define('DB', "homer_db");

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', "127.0.0.1");
define('HOMER_PORT', 3306);
define('HOMER_USER', "homeruser");
define('HOMER_PW', "sesamo");
define('HOMER_DB', "homer_db");
define('HOMER_TABLE', "sip_capture");

Se modifica el tercer 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/homer/tmp/");
define('WEBPCAPLOC',"/homer/tmp/");
define('APIURL',"http://localhost");
define('APILOC',"/homer/api/");

Se pasa al segundo Archivo:

nano preferences.php

Se modifican estas líneas:

define('HOMER_TIMEZONE', "America/Detroit");
define('MODULES', 0);
define('ADMIN_DBSTAT', 0);
define('ADMIN_NETSTAT', 0)
define('ALARM_FROMEMAIL',"homer@example.com");
define('ALARM_TOEMAIL',"admin@example.com");
define('GEOIP_LINK', 0);

para que queden (personalizar los datos del correo electrónico):

define('HOMER_TIMEZONE', "America/Bogota");
define('MODULES', 1);
define('ADMIN_DBSTAT', 1);
define('ADMIN_NETSTAT', 1)
define('ALARM_FROMEMAIL',"homer@voztovoice.org");
define('ALARM_TOEMAIL',"fulano@gmail.com");
define('GEOIP_LINK', 1);

Se carga la tabla de los usuario en la base de datos de Homer:

mysql -u root -psesamo homer_db < /usr/src/homer/webhomer/sql/homer_users.sql

Se descarga el script en Perl que se encargará rotar la partición de la base de datos:

cd /usr/sbin
wget https://homer.googlecode.com/git-history/webhomer_3.5/scripts/partrotate...

nano partrotate_unixtimestamp.pl

Se modifican estas líneas:

$mysql_user = "mysql_login";
$mysql_password = "mysql_password";
$mysql_host = "localhost";

Para que queden:

$mysql_user = "homeruser";
$mysql_password = "sesamo";
$mysql_host = "127.0.0.1";

En este parametro:

$maxparts = 6

Se define el numero por cuantos días se quiere mantener los datos de la captura SIP en la base de datos. Se guardan los cambios y se inicia Kamailio y luego Apache:

service kamailio start

Si sale este error:

env: /etc/init.d/kamailio: Permission denied

chmod +x /etc/init.d/kamailio

y luego se inicia nuevamente:

service kamailio start

service httpd start

FREESWITCH

Para enviar los datos al nodo de captura, se modifica este archivo:

nano /usr/local/freeswitch/conf/autoload_configs/sofia.conf.xml

en Global Settings se añade la línea que sigue:

<param name="capture-server" value="udp:1.2.3.4:9060"/>

1.2.3.4 es la IP de su servidor de captura. Se continua con:

nano /usr/local/freeswitch/conf/sip_profiles/internal.xml

Se modifica esta línea:

<param name="sip-capture" value="no"/>

para que quede:

<param name="sip-capture" value="yes"/>

Se continua con el perfil external:

nano /usr/local/freeswitch/conf/sip_profiles/external.xml

<param name="sip-capture" value="no"/>

Se cambia:

<param name="sip-capture" value="yes"/>

Asterisk PBX

En Asterisk hay que instalar el agente de captura que se encargará de enviar los datos al nodo de captura:

yum install libpcap libpcap-devel

cd /usr/src

git clone http://code.google.com/p/captagent/
cd captagent/captagent/
./build.sh
./configure
make
make install

Se modifica el archivo de configuración de captagent:

mv /usr/local/etc/captagent/captagent.xml /usr/local/etc/captagent/captagent.xml.old

nano /usr/local/etc/captagent/captagent.xml

Se copian las líneas que siguen:

<configuration name="core_hep.conf" description="HEP Socket">
          <settings>
            <param name="version" value="3"/>
            <param name="capture-host" value="capture.homercloud.org"/>
            <param name="capture-port" value="9000"/>
            <param name="capture-proto" value="udp"/>
            <param name="capture-id" value="2001"/>
            <param name="capture-password" value="myHep"/>
            <param name="payload-compression" value="false" />
          </settings>
        </configuration>

<configuration name="core_hep.conf" description="HEP Socket">
          <settings>
            <param name="version" value="3"/>
            <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="PBX1"/>
            <param name="capture-password" value="myHep"/>
            <param name="payload-compression" value="false" />
          </settings>
        </configuration>

<param name="port" value="5060"/>
<param name="dev"  value="eth0"/>

1.2.3.4 es la IP del nodo de captura. Se inicia Captagent:

/usr/local/bin/captagent -d 2>/dev/null

Se accede a la pagina de Homer:

http://1.2.3.4/homer

homer1

usuario: test@test.com
contraseña: test123

En admin -> DB NODES se configura el nodo de captura. Luego falta solo esperar que lleguen los datos:

Homer2

Vota el Articulo: 

Sin votos (todavía)
Evalúa la calidad del articulo
Suscribirse a Comentarios de "Instalación y configuración de Homer SIP Capture Server v. 3.5" Suscribirse a VozToVoice - Todos los comentarios