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

quarta-feira, 8 de novembro de 2017

AstLOG de Goran Skular.

Instalar AstLOG:

$ yum install virtualenv
$ virtualenv env/astlog
$ source env/astlog/bin/activate
$ python setup.py develop

Se setup.py falhar por causa do erro SSL:

$ pip install pip==1.2.1      # Desliga a versão mais antiga do pip que funciona em http
$ pip install urwid
$ python setup.py develop

Instalar como script global:

$ ln -s /opt/slsolucije/astlog/env/astlog/bin/astlog /usr/local/bin/astlog

Uso:

Salve o registro do Asterisk com mensagens do Debug e use Aastlog.

usando: astlog [-h] [--cdr-file CDR_FILE] [--from-when FROM_WHEN]
               [--to-when TO_WHEN] [--tail-minutes TAIL_MINUTES]
               [--log-output LOG_OUTPUT] [--use-memory-pct USE_MEMORY_PCT]
               log_file
 
Exemplo: astlog /var/log/asterisk/full

Baixar Fontes:  astlog
 
Fonte: https://github.com/slsolucije




terça-feira, 6 de junho de 2017

Capturar Chamadas

Suporte de capturas de chamadas foram adicionados desde o Asterisk 11. A Captura de chamadas permite que você atenda uma chamada enquanto toca outro telefone ou grupo de telefones (além do telefone em que você está sentado). A captura de uma chamada é feito por dois métodos básicos. Pelo "dialplan" usando as aplicações "pickup" ou "pickupchan". E marcando a extensão definida para "pickupexten" configurada em "features.conf".

As chamadas que podem ser capturadas são determinadas por configuração e "dialplan". Aplicativos e funções de "dialplan". Aplicação de captura. O aplicativo "pickup" possui três maneiras de selecionar chamadas para sua captura.

Aplicação "pickupchan":

O aplicativo "pickupchan" tenta capturar os canais especificados.

Função "channel":

A função "channel" permite que os grupos de levantamento definidos em um canal sejam alterados dos padrões definidos pelo driver do canal quando o canal foi criado.

"callgroup/namedcallgroup": 

A opção "channel" (callgroup/Grupo de chamadas) especifica quais grupos de capturas numéricas que esse canal é membro.


1
 same => n,Set(CHANNEL(callgroup)=1,5-7)

A opção "channel" (namedcallgroup) especifica quais grupos de captura nomeados que esse canal é membro.

2
 same => n,Set(CHANNEL(namedcallgroup)=engineering,sales)

OBS:- Para que esta opção seja efetiva, você deve configurá-la no canal de saída. Há algumas maneiras:

  • Você pode usar a opção "setvar" disponível com vários arquivos de configuração do driver de canal para configurar os grupos de captura.
  • Você pode usar um manipulador de pré-discagem.

"pickupgroup/namedpickupgroup":

A opção "channel" (pickupgroup) especifica quais grupos de capturas numéricas este canal pode capturar.

3
 same => n,Set(CHANNEL(pickupgroup)=1,6-8)

A opção "channel" (namedpickupgroup) especifica quais grupos de captura chamados que este canal pode capturar.

4
 same => n,Set(CHANNEL(namedpickupgroup)=engineering,sales)

OBS:- Para que esta opção seja efetiva, você deve configurá-la no canal antes de executar o aplicativo "pickup" ou chamar "pickupexten".

  • Você pode usar a opção "setvar" disponível com vários arquivos de configuração do driver de canal para configurar os grupos de captura.

Opções de Configuração:

O método de solicitação "pickupexten" seleciona chamadas usando os grupos de chamadas numéricos e nomeados. Os canais de toque têm o grupo de chamadas atribuído quando o canal é criado pelo driver do canal ou configurado pela função "CHANNEL(callgroup)" ou "CHANNEL(namedcallgroup)" no  dialplan.

As chamadas recebidas usando "pickupexten" podem ouvir um arquivo de som opcional para sucesso e falha.

OBS:- Os drivers de canal atuais que suportam chamar "pickupexten" para capturar uma chamada são: "chan_dahdi/analog", "chan_mgcp", "chan_misdn", "chan_sip", "chan_unistim" e "chan_pjsip".


FEATURES.CONF:

5
 pickupexten = *8                  ; Configura a extensão de pickup (O padrão é *8)
 pickupsound = beep             ; Para indicar uma captura bem sucedida (O padrão é sem som)
 pickupfailsound = beeperr  ; Para indicar uma captura mal sucedida (O padrão é sem som) 

Criando grupos de captura de chamadas numéricas:

Um grupo de chamadas numéricas e um grupo de captura podem ser configurados para uma lista separada por vírgulas de intervalos (por exemplo, 1-4) ou números que podem ter um valor de 0 a 63. Lembre-se que existe uma limitação e por isto pode haver no máximo 64 grupos numéricos.

SINTAXE

6
 callgroup = [number[-number][,number[-number],...]]]
 pickupgroup = [number[-number][,number[-number],...]]]
  

Grupo de chamadas - especifica quais grupos de capturas numéricas que esse canal é um membro.

"Pickupgroup" - especifica quais grupos de capturas numéricas este canal pode capturar.

Exemplo de configuração

7
 callgroup = 1,5-7
 pickupgroup = 1

A configuração deve ser suportada em vários drivers de canal, incluindo: "Chan_dahdi.conf", "Misdn.conf", "Mgcp.conf", "Sip.conf", "Unistim.conf", "Pjsip.conf".

"Pjsip.conf" faz uso de "snake case":

Configuração em "pjsip.conf":

8
 call_group = 1,5-7
 pickup_group = 1

Grupos de captura de chamadas nomeados

Um grupo de chamadas chamado e grupo de seleção podem ser configurados para uma lista separada por vírgulas de sequências de caracteres sensíveis a maiúsculas e minúsculas. O número de grupos nomeados é "ilimitado". O número de grupos nomeados que você pode especificar ao mesmo tempo é "limitado" pelo comprimento da linha suportado.

SINTAXE

9
 namedcallgroup=[name[,name[,...]]]
 namedpickupgroup=[name[,name[,...]]]


Namedcallgroup - especifica quais grupos de captura nomeados que esse canal é membro.
Namedpickupgroup - especifica quais grupos de captura nomeados este canal pode ser selecionado.

Exemplo de Configuração

10
 namedcallgroup=engineering,sales,netgroup,protgroup
 namedpickupgroup=sales


A configuração deve ser suportada em vários drivers de canal, incluindo: "Chan_dahdi.conf", "Misdn.conf", "Sip.conf", "Pjsip.conf".

"Pjsip.conf" faz uso de "snake case":

11
 named_call_group=engineering,sales,netgroup,protgroup
 named_pickup_group=sales

OBS:- Você pode usar grupos de captura nomeados em paralelo com grupos de captura numéricos. Por exemplo, o grupo de "pickup" chamado '4' não é o mesmo que o grupo de captura numérico '4'. Os grupos de captura nomeados são novos desde o Asterisk 11.

Fonte: Wiki Asterisk Oficial


Estenda o número máximo de callgroups/pickupgroups no Asterisk.

Atualmente, o número de "callgroups/pickupgroups" é limitado a 63, porque o tipo de variável que contém os bits do grupo é longo.

Aqui está um patch que estende essa variável para uma matriz arbitrária de comprimento (determinado em tempo de compilação). Atualmente, ele define o número máximo de grupos para 1024.

Ele implementa isso para todos os canais, mas eu testei somente SIP e DAHDI.

Algumas pessoas podem se opor a implementar isso como uma ARRAY de INTS, porque ele introduz um LOOP. Mas acho que os pickups de chamadas não são feitos com freqüência suficiente para que isso se torne um problema.

Att.

Guenther Kelleter

Patch: moregroups.pacth

Patch Over: group_contexts.pacth


segunda-feira, 15 de maio de 2017

sábado, 22 de abril de 2017

Asterisk Architecture (Legendado)

Uma excelente Descrição sobre a Arquitetura Asterisk pelo Stuart Feesia, da Alta 3 Research. Agora legendado em Português. Um excelente trabalho do Heder Luiz Tavares da Comunidade Asterisk Libre.

Para habilitar as legendas leia este otimo post da Tech Tudo!

Asterisk Architecture part 1 of 3 (Legendado)

Asterisk Architecture part 2 of 3 (Legendado)

Asterisk Architecture part 3 of 3 (Legendado)





sexta-feira, 21 de abril de 2017

Fundação Asterisk Libre - 2013 a 2017!

Ao completar mais um ano de vida, temos a certeza do dever cumprido, com novas experiências e ótimos momentos vividos. Mas nem sempre tudo sai como o planejado, algumas coisas, inclusive, superam as nossas expectativas.

A chegada de uma nova idade, é sempre uma oportunidade para rever os planos e ampliar as possibilidades de novas conquistas e de sonhos realizados. Esperamos que neste novo ano, a FAL possa continuar a fazer parte dos seus planos e sonhos, e que a nossa parceria também tenha muitos anos de vida.


Que o nosso dia sempre seja carregado de muita felicidade e alegria, e que a sua vida o guie para muitos outros sucessos e novas conquistas. Nossa parceria foi construída de forma muito positiva e só temos a agradecer pela confiança e por sempre trazer com você muita simpatia.

Esperamos que no próximo ano tenha muitos triunfos para compartilhar. Que todas as dificuldades sejam facilmente vencidas e que os nossos laços jamais sejam quebrados.

Receba os melhores votos da equipe FAL!

Parabéns e tenha um ótimo ano!

Att.
Professor Delphini
Idealizador do Projeto Asterisk Libre.
www.asterisklibre.org

Documentos em destaque

Personalização

View more

Dicas e truques

View more

Documentos da imagem

View more

Tutoriais

View more

Documentos legais

View more

Começando

View more