quarta-feira, 15 de novembro de 2017

Guia de Instalação do Homer SIP para monitoramento da Telefonia IP (ToIP)

O Homer é um sistema de captura do protocolo SIP e de monitoria de sistemas de Voz sobre Internet Protocolo (VoIP). Este procedimento mostrará como instalar o Homer em um servidor CentOS v7.

CaptAgent é um agente de protocolo de encapsulamento Homer (HEP). Ele é usado para coletar dados relevantes em um servidor VoIP em sistema operacional Linux, localhost, encapsulá-lo para transporte e enviá-lo para Homer. Este procedimento mostrará como instalá-lo no CentOS v6, v7 e Debian v8.

Sofware:

CentOS v7;
Homer v5;
Kamailio v5
CaptAgent v6

Pré Instalação:

Desabilitando o SE Linux, vamos checar o status do mesmo com o comando abaixo:
# sestatus

Se não estiver desativado, faça o seguinte procedimento e reinicie o servidor:
# sed -i 's/\(^SELINUX=\).*/\SELINUX=disabled/' /etc/selinux/config

Retornando ao sistema operacional execute novamente sestatus e observe a resposta que se encontra desativado. Uma vez estando desativado o SE Linux, vamos desativar o Firewall, lembrando que é recomendado desativar o firewall somente no processo de instalação dos serviços. Após estar com tudo funcional é altamente recomendado fazer uma boa politica de firewall. Para desativa siga com os próximos comando:

# systemctl disable firewalld
# systemctl disable iptables 
# systemctl stop firewalld 
# systemctl stop iptables

Um analisador do tipo Carrier, é importante estar com o Timezone correto. Vamos instalar e setar o Timezone de nosso sistema de monitoria ToIP. Execute os comando abaixo:

# yum install ntp
# systemctl enable ntpd
# systemctl start ntpd

Procurando o Timezone;

# tzselect

Exemplo de como setar o Timezone:

# timedatectl set-timezone America/São_Paulo

NOTA: Caso queira conhecer mais sobre NTP, o site NTP.br é uma ótima fonte de estudos.


Agora vamos proceder com a instalação dos pré requisitos:
# yum -y install epel-release
# yum -y update
# yum -y install git nano gcc httpd mariadb mariadb-server mariadb-devel php php-mysql bison pcre-devel libpcap-devel flex GeoIP-devel

Instalando o Homer:
# cd /usr/src/
# git clone https://github.com/sipcapture/homer-ui.git 
# git clone https://github.com/sipcapture/homer-api.git git 
# clone https://github.com/sipcapture/homer-config.git

Opcionalmente, mude a senha padrão do banco de dados nos seguintes arquivos:
# /usr/src/homer-api/api/configuration_example.php
# /usr/src/homer-api/sql/rotation_kamailio5.ini 
# /usr/src/homer-api/sql/mysql/homer_user.sql 
# /usr/src/homer-config/sipcapture/sipcapture.kamailio5

Copie os arquivos:
# cp -R /usr/src/homer-ui/* /var/www/html
# cp -R /usr/src/homer-api/api /var/www/html/api 

# mkdir /opt/homer cp /usr/src/homer-api/scripts/mysql/* /opt/homer 
# mv -f /opt/homer/rotation_kamailio5.ini /opt/homer/rotation.ini 
# chmod +x /opt/homer/*
Renomeie as preferências e os arquivos de configuração:
# cd /var/www/html/api mv preferences_example.php preferences.php
# mv configuration_example.php configuration.php

Editando as preferências:
# vim /var/www/html/api/preferences.php

Set define('RTCP_TABLE_PARTITIOM', 1);

Mudar o REMOTE_LOG_URL e EXTERNAL_AUTH_URL para o IP do Homer.

Mudar ALARM_FROMEMAIL, ALARM_TOEMAIL e HOMER_TIMEZONE, como necessário.

Altere o diretório do socket MySQL e o nome da compatibilidade com o CentOS v7.

sed -i "s/run\/mysqld\/mysqld.sock/lib\/mysql\/mysql.sock/g" /opt/homer/rotation.ini

Procedimentos com o MariaDB:
# systemctl enable mariadb 
# systemctl restart mariadb

# cd /usr/src/homer-api/sql/mysql

# mysql < homer_databases.sql 
# mysql < homer_user.sql 
# mysql homer_data < schema_data.sql 
# mysql homer_configuration < schema_configuration.sql 
# mysql homer_statistic < schema_statistic.sql

Agora bloqueie o servidor de Banco de Dados.
# mysql_secure_installation

NOTA: Responda Y para tudo!

Vamos criar agora, um script de rotação, vamos configurar ele no CRON para ser diário.
# crontab -e

30 3 * * * root /opt/homer/homer_mysql_rotate > /dev/null 2>&1

O CRON diário deve ser executado antes que o Homer possa começar a capturar dados.

/opt/homer/homer_mysql_rotate


Vamos agora instalar o Kamailio, a instalação de compilação é necessária para usar o módulo GeoIP. Este procedimento de compilação é instalado nos mesmos diretórios que os RPM Kamailio oficiais, portanto, é intercambiável com uma instalação RPM.

# cd /usr/src

# git clone -b 5.0 --single-branch https://github.com/kamailio/kamailio.git 
# cd /usr/src/kamailio 
# make include_modules="db_mysql sipcapture pv textops rtimer xlog sqlops htable sl siputils geoip" cfg \ prefix=/usr/ cfg_prefix=/

# make all && make install

Copie e modifique kamailio.cfg

# cp /usr/src/homer-config/sipcapture/sipcapture.kamailio5 /etc/kamailio/kamailio.cfg
# sed -i "s/GeoIP.dat/GeoIPCity.dat/g" /etc/kamailio/kamailio.cfg 
# sed -i "s/lib\/x86_64-linux-gnu/lib64/g" /etc/kamailio/kamailio.cfg

Vamos instala o GeoIP Data:
# mkdir /usr/share/GeoIP
# cd /usr/share/GeoIP/ 
# wget -N -q http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz 
# mv GeoLiteCity.dat.gz GeoIPCity.dat.gz gunzip GeoIPCity.dat.gz

Vamos habilitar o GeoIP:
# vim /etc/kamailio/kamailio.cfg

## Uncomment the following line near the top. So instead of ##, make it #
#!define WITH_HOMER_GEO

Criamos agora o arquivo de inicialização do tipo SystemD:
# vim /etc/systemd/system/kamailio.service

[Unit]
Description=Kamailio - the Open Source SIP Server
After=network-online.target
After=mariadb.service httpd.service

[Service]
Type=forking
Environment='CFGFILE=/etc/kamailio/kamailio.cfg'
EnvironmentFile=/etc/default/kamailio
ExecStartPre=/usr/bin/mkdir -m=2770 -p /var/run/kamailio
ExecStartPre=/usr/bin/chown kamailio:kamailio /var/run/kamailio
PIDFile=/var/run/kamailio.pid
ExecStart=/usr/sbin/kamailio -P /var/run/kamailio.pid -f $CFGFILE -m $SHM_MEMORY -M $PKG_MEMORY -u $USER -g $GROUP
ExecStopPost=/usr/bin/rm -f /var/run/kamailio.pid
Restart=on-abort

[Install]
WantedBy=multi-user.target

Criar o usuário Kamailio:
# useradd kamailio

Copias o arquivo de ambiente do Kamailio:
# cp /usr/src/kamailio/pkg/kamailio/centos/7/kamailio.sysconfig /etc/default/kamailio


Habilitar e Inicializar o Kamailio:
# systemctl enable kamailio
# systemctl start kamailio

Configurar o Apache2 para o projeto:
# chown -R apache. /var/www/html
# vim /etc/httpd/conf.d/homer.conf

<VirtualHost *:80>
  ServerName homer

  # Indexes + Directory Root.
  DirectoryIndex index.php index.html index.htm
  DocumentRoot /var/www/html

  <Directory />
    Options FollowSymLinks
    AllowOverride None
  </Directory>
  <Directory /var/www/html >
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    allow from all
  </Directory>

</VirtualHost>

# systemctl enable httpd
# systemctl restart httpd

Vamos a prova dos nove! http://ip_do_seu_servidor
Usuário: admin
Password: test123

NOTA: Certifique-se de que o intervalo de data/hora no canto superior direito esteja correto na pesquisa.

Politicas do Firewall, importante, substitua x.x.x.x pelo IP do servidor ToIP ou VoIP que vai ser monitorado e repita conforme necessário.

# systemctl enable firewalld
# systemctl start firewalld

# firewall-cmd --permanent --zone=public --add-service={http,https}
# firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="x.x.x.x" accept'

# firewall-cmd --reload

O CaptAgent, Universal Homer Encapsulation Protocol (HEP) é o Agente. Instale em qualquer servidor ToIP ou VoIP que você deseja monitorar. Alternativamente, o Asterisk PJSIP, Freeswitch, Kamailio, OpenSIPS e RTPEngine têm a capacidade de habilitar o suporte HEP nativo. Os clientes nativos podem não suportar todos os recursos. Por exemplo, o Freeswitch v1.6 atualmente não suporta RTCP para estatísticas de QoS. Não se preocupe que o Asterisk SIP só não tem HEP nativo, mais pode ser utilizado com o Agente.

Para usar no Debian 8 (jessie) execute o seguinte comando para instalar os pré requisitos.
# apt-get install build-essential git-core libexpat-dev libpcap-dev libjson0-dev libtool automake flex bison libuv-dev

Para o CentOS v6 ou v7 execute o seguinte comando para instalar os pré requisitos.
# yum -y install epel-release
# yum -y install git gcc json-c-devel expat-devel libpcap-devel flex-devel automake libtool bison flex libuv-devel

Procedendo com a instalação.
# cd /usr/src
# git clone https://github.com/sipcapture/captagent.git
# cd captagent
# ./build.sh
# ./configure
# make && make install

Configurando o socket_pcap.xml. A única alteração necessária é habilitar na seção do RTCP (enable= true). Se não estiver usando a interface de rede eth0, tente alterar o valor "dev" para (value="any")  para ambas as seções.

# vim /usr/local/captagent/etc/captagent/socket_pcap.xml

<?xml version="1.0"?>
<document type="captagent_module/xml">
    <module name="socket_pcap" description="HEP Socket" serial="2014010402">
    <profile name="socketspcap_sip" description="HEP Socket" enable="true" serial="2014010402">
        <settings>
        <param name="dev" value="any"/>
        <param name="promisc" value="true"/>
        <param name="reasm" value="false"/>
        <param name="tcpdefrag" value="false"/>
        <param name="capture-plan" value="sip_capture_plan.cfg"/>
        <param name="filter">
            <value>portrange 5060-5091</value>
        </param>
        </settings>
    </profile>
    <profile name="socketspcap_rtcp" description="RTCP Socket" enable="true" serial="2014010402">
        <settings>
        <param name="dev" value="any"/>
        <param name="promisc" value="true"/>
        <param name="reasm" value="false"/>
        <!-- size in MB -->
        <param name="ring-buffer" value="20"/>
        <!-- for rtp && rtcp < 250 -->
        <param name="snap-len" value="256"/>
        <param name="capture-filter" value="rtcp"/>
        <param name="capture-plan" value="rtcp_capture_plan.cfg"/>
        <param name="filter">
            <value>portrange 5060-50000 and len >=50 </value>
        </param>
        </settings>
    </profile>
    </module>
</document>

Agora vamos configurar transport_hel.xml
# vim /usr/local/captagent/etc/captagent/transport_hep.xml

NOTA: Altere x.x.x.x para o endereço IP do seu servidor de monitoramento Homer e altere a porta para 9060. Opcionalmente, altere o número de identificação de captura para identificar de forma exclusiva esta instância do CaptAgent.

<?xml version="1.0"?>
<document type="captagent_module/xml">
    <module name="transport_hep" description="HEP Protocol" serial="2014010402">
    <profile name="hepsocket" description="Transport HEP" enable="true" serial="2014010402">
        <settings>
        <param name="version" value="3"/>
        <param name="capture-host" value="x.x.x.x"/>
        <param name="capture-port" value="9060"/>
        <param name="capture-proto" value="udp"/>
        <param name="capture-id" value="100"/>
        <param name="capture-password" value="myhep"/>
        <param name="payload-compression" value="false"/>
        </settings>
    </profile>
    </module>
</document>

Neste pondo vamos configurar o sip_capture_plan.cfg

NOTA: Descomente a seção if (sip_has_sdp ())

# vim /usr/local/captagent/etc/captagent/captureplans/sip_capture_plan.cfg

capture[pcap] {

    # here we can check source/destination IP/port, message size
    if(msg_check("size", "100")) {

        #Do parsing
        if(parse_sip()) {
        #Can be defined many profiles in transport_hep.xml  
        
        if(!send_hep("hepsocket")) {
            clog("ERROR", "Error sending HEP!!!!");
        }
        
        if(sip_has_sdp())
        {
          #Activate it for RTCP checks
          if(!check_rtcp_ipport())
            {
              clog("ERROR", "ALREADY EXIST");
            }
        }

        #Duplicate all INVITEs to JSON transport
        # if(sip_is_method() && sip_check("method","INVITE")) {
        #    #Can be defined many profiles in transport_json.xml
        #    if(!send_json("jsonsocket")) {
        #   clog("ERROR", "Error sending JSON!!!");
        #    }
        # }
        }
    }
    drop;
}

Configurando o Init ou SystemD e o Defaul.

Debian v8
# cp /usr/src/captagent/init/deb/jessie/captagent.service /etc/systemd/system/
# cp /usr/src/captagent/init/deb/debian/captagent.default /etc/default/captagent
# systemctl daemon-reload
# systemctl enable captagent
# systemctl start captagent

CentOS v7
# cp /usr/src/captagent/init/el/7/captagent.service /etc/systemd/system/
# cp /usr/src/captagent/init/el/captagent.sysconfig /etc/sysconfig/captagent
# systemctl daemon-reload
# systemctl enable captagent
# systemctl start captagent

CentOS v6
# cp /usr/src/captagent/init/el/6/captagent.init /etc/init.d/captagent 
# cp /usr/src/captagent/init/el/captagent.sysconfig /etc/sysconfig/captagent

Faça as alterações em init.d do nome do diretorio "bin" para "sbin"
# vim /etc/init.d/captagent
# APP_FILE=/usr/local/captagent/sbin/$prog

# chmod 755 /etc/init.d/captagent
# chkconfig --add captagent
# chkconfig captagent on
# service captagent start

Screenshots

Fonte: PowerPBX.org

Angelo de Barros Delphini

Autor & Editor

Professor Convidado CT Novatec.

Gerente de TIC/P&D na Delphini systems

Desenvolvedor Digium™ The Asterisk® Communications Framework Sênior.

Digium™ Certificate: dCAA, dCAI, dCAI-TPT, dCSE-C, dCSP-C, dSSE

Linux User # 472499 - Ubuntu User # 22452 - ICQ User # 86119719

0 comentários:

Postar um comentário

Manual Categories