www.4linux.com.br 2
Só na 4Linux o aluno
aprende
3
1 - Bem-vindo
INSTRUTORES
➢ Felipe R. Pasa
➢ Flávio Henrique Somensi HORÁRIOS
➢ 08:30 as 12:00
➢ Intervalo para cofee-break (15 minutos) ➢ 13:30 as 18:00
4
A Dexter – plano de ação
➢ Ramais ➢ Troncos ➢ Interligação c/ filiais ➢ Interligação c/ operadoras ➢ Chamadas internas ➢ Chamadas externas ➢ Estacionamento ➢ Correio de Voz ➢ Não perturbe ➢ Siga-me ➢ Filas ➢ Segurança ➢ Interface gráfica
5
6
Objetivos da Aula
➢ Conceituar telefonia básica
➢Explicar o que é o Asterisk e a sua relação com outros projetos
➢ Descrever qual o papel da Digium neste ecosistema ➢ Reconhecer a arquitetura do Asterisk
➢ Conceituar VoIP
7
O Asterisk e um toolkit que transforma um PC
ordinário em uma poderosa central telefônica
multi-protocolo com recursos avançados.
8
Porque utilizar o Asterisk
➢ Sistema aberto ➢ Redução de custos ➢ Controle total ➢ Aumento de produtividade ➢ Melhoria no atendimento ➢ Roda no Linux
9
O papel da Digium
➢ Mantenedora oficial do projeto Asterisk
➢ Fundada por Mark Spencer (atual CTO da Empresa) ➢ Desenvolve hardware para Asterisk
➢ Também comercializa versões especiais do Asterisk ➢ Asterisk GPL
➢ Asterisk Business Edition ➢ Asterisk OEM
10
11
Arquitetura do Asterisk
CANAIS
➢ TDM: DAHDI, KHOMP, DGV
➢ IP ou VoIP: SIP, H323, IAX2
➢ ESPECIAIS: Agent, Console, Local
CODEC'S
➢ GSM, G711, G729, iLBC, etc
APLICAÇÕES
12
VoIP
É um conjunto de tecnologias utilizadas em redes IP com o objetivo de realizar comunicação de voz e vídeo.
Principais benefícios:
➢ Redução de custo com infra estrutura ➢ Flexibilidade
13
VoIP - Implementação
DIFICULDADES
➢ Protocolo UDP ➢ Roteamento de Tráfego ➢ Firewalls, NATDESAFIOS
➢ Latência ➢ Perda de Pacotes ➢ Jitter ➢ QoS ➢ Segurança14
Cenários de uso
15
Cenários de uso
16
Cenários de uso
17
Cenários de uso
18
Cenários de uso
19
Cenários de uso
20
Cenários de uso
21
22
Objetivos da Aula
➢ Dimensionar o hardware necessário para o Asterisk ➢ Instalar o Linux e as bibliotecas necessárias
➢ Fazer o download do Asterisk ➢ Compilar o Asterisk
➢ Iniciar o Asterisk na carga do sistema
23
Dimensionar hardware
CANAIS
➢ Quantos e quais telefones serão utilizados? ➢ Quantas linhas externas, qual tipo?
➢ Quantas chamadas simultâneas?
➢ Quais CODECs serão empregados? ➢ Será necessário transcodificação?
24
Dimensionar hardware
RECURSOS
➢ Cancelamento de eco ➢ Correio de voz ➢ Conferência ➢ Gravação ➢ Fax25
Definir hardware
Item Levar em consideração Até 5 canais Até 10 canais Até 15 canais
Processador
- Número de chamadas simultâneas
- Gravação das chamadas - codec's utilizados - Funcionalidades utilizadas x86 400 Mhz x86 1 Ghz x86 3 Ghz Memória RAM - Número de chamadas simultâneas - Gravação de chamadas - codec's utilizados 256Mb 512Mb 1 Gb
Disco Rígido - Gravação de Chamadas - Sem gravação: 10 Gb- Com gravação: 10 Gb para SO e 1,2 Mb por minuto gravado (WAV)
Placa mãe - Placas de telefonia x Slots PCI disponíveis Sistema
26
Sistema Operacional
SISTEMA OPERACIONAL
➢ GNU/Linux, FreeBSD, NetBSD, OpenBSD, Mac OS X, Solaris.
BIBLIOTECAS
➢ As bibliotecas necessárias para a compilação e
instalação do Asterisk dependem dos módulos que se deseja utilizar.
28
Compartilhamento de IRQ
➢ O hardware de telefonia é muito sensível em questões relacionadas a temporização
➢ Caso um dispositivo não consiga acessar um IRQ
dentro de um espaço de tempo determinado, pode haver problemas com a qualidade da voz
➢ É interessante que as placas de telefonia não
29
Compilar e instalar o Asterisk
DOWNLOAD ➢ http://downloads.asterisk.org → /usr/src COMPILAR ➢ cd /usr/src/asterisk ➢ ./configure ➢ make menuselect ➢ make INSTALAR ➢ make install ➢ make config ➢ make samples
30
Iniciando o Asterisk
BACKGROUND
# service asterisk start
FOREGROUND
# asterisk -vvvgc
onde:
➢ c: habilita o modo console
➢ v: Aumenta a verbosidade na CLI
31
Parando o Asterisk
BACKGROUND
# service asterisk stop
gracefully *CLI> core stop now
when convenient
FOREGROUND
gracefully *CLI> core stop now
32
Estrutura do Asterisk
DIRETÓRIOS ➢ /etc/asterisk ➢ /var/log/asterisk ➢ /var/lib/asterisk ➢ /var/spool/asteriskImportante: Estes diretórios são configuráveis no
33
Estrutura do Asterisk
ARQUIVOS (/etc/asterisk) ➢ extensions.conf ➢ sip.conf ➢ iax.conf ➢ features.conf ➢ modules.conf ➢ cdr.conf ➢ voicemail.conf ➢ queues.conf34
Laboratório
➢ Objetivos:
➢ Baixar o Asterisk
➢ Compilar e instalar o Asterisk ➢ Compilar e instalar bibliotecas ➢ Gerenciar o processo
35
36
Objetivos da Aula
➢ Conhecer os tipos de sinalização ➢ Diferenciar interfaces FXS de FXO
➢ Conhecer canais digitais e seus protocolos
37
Tipos de sinalização
SUPERVISÃO ➢ On-hook ➢ Off-hook ➢ Ringing ENDEREÇAMENTO ➢ TOM (dtmf) ➢ PULSO (decádico) INFORMAÇÃO ➢ Tom de discagem ➢ Sinal de ocupado➢ Tom de retorno (ringback)
➢ Congestionamento
➢ Número inválido
38
Interfaces analógicas FX
FXO (foreign exchange office)
➢ Se comunica diretamente com a operadora FXS (foreign exchange station)
39
Canais digitais
Utilizado quando o número de linhas telefônicas necessárias é muito grande ( geralmente > 10 ).
40
Sinalização digital
MFC/R2 ou R2
➢ Também chamada de CAS (sinalização associada ao canal)
➢ Muito comum no Brasil ISDN ou RDSI
➢ Também chamada de CCS (sinalização comum de canal)
➢ Mais rápido - utiliza um canal exclusivo para sinalização
41
Hardwares de telefonia
42
Hardwares de telefonia
43
Hardwares de telefonia
44
Hardwares de telefonia
45
Hardwares de telefonia
46
47
Objetivos da Aula
➢ Entender e editar os arquivos de configuração ➢ Instalar softphones baseados em SIP
➢ Configurar um plano de discagem simples ➢ Discar entre ramais
➢ Discar para uma mensagem gravada ➢ Apresentando a interface gráfica SNEP
48
Plano de Discagem
CONCEITOS
➢Lista de instruções que o Asterisk deve seguir para processar as chamadas
➢ Disparadas a partir dos dígitos recebidos
➢ Configuradas em /etc/asterisk/extensions.conf ➢ Módulos de Planos de Discagem
➢ LUA (pbx_lua.so) ➢ AEL (pbx_ael.so)
49
Plano de discagem
LÓGICA HIERÁRQUICA
Contexto
Extensão
Prioridade
Aplicação
Exemplo: [default] exten => _XXXX,1,Dial(SIP/2000) [default] exten => _XXXX,1,Dial(SIP/2000)50
Plano de discagem
CONTEXTOS
➢ Definem o escopo
➢ Permitem criar diferentes classes de ramais ➢ Estão relacionados diretamente aos canais ➢ São o ponto de entrada de uma chamada
Sintaxe:
51
Plano de discagem
EXTENSÕES
➢ Regras de discagem declaradas dentro do contexto
➢ Podem ser definidas de 3 maneiras:
➢ Numérica → exten => 9052
➢ Numéricas com callerid → exten => 9052/32009000
➢Alfanuméricas → exten => ura32
Máscaras baseadas em ER
52
Plano de discagem
EXPRESSÃO REGULAR
E.R. Função Exemplo
X Qualquer número de 0 a 9 _XX → qualquer número de 00 a 99
Z Qualquer número de 1 a 9 _ZZ → qualquer número de 11 a 99 – exceto (20,30,40,...)
N Qualquer número de 2 a 9 _NN → qualquer número de 22 a 99 – exceto (20,21,30,31,...)
[e] Lista de opções
_[0-9] → um número entre 0 e 9 - é equivalente a X _[15-7] → um número da lista: 1 ou 5 até 7.
_[13457] → um número da lista: 1 ou 3 ou 4 ou 5 ou 7. _[a-zA-Z] → uma letra maiúscula/minúscula do alfabeto. . Qualquer carácter, infinitas vezes _0800. → Expressão regular que vale para qualquer número que inicie com _0800 + qualquer outro carácter,
infinitas vezes.
! Coringa inclusivo _0800! → funciona como um ponto, mas trata de forma diferente, testando todas as outras possibilidades primeiro.
53
Plano de discagem
EXPRESSÃO REGULAR - Exemplo
Antes Depois [ramais] exten => 2000,1,Dial(SIP/2000) exten => 2001,1,Dial(SIP/2001) exten => 2002,1,Dial(SIP/2002) [ramais] exten => _200X,1,Dial(SIP/${EXTEN})
54
Plano de discagem
PRIORIDADES
➢ Definem a ordem de execução de uma extensão ➢ Podem ser: ➢ Numéricas exten => 2000,1,Dial(SIP/2000) exten => 2000,2,Voicemail(2000,u) exten => 2000,3,Hangup() exten => 2000,1,Dial(SIP/2000) exten => 2000,2,Voicemail(2000,u) exten => 2000,3,Hangup()
55
Plano de discagem
PRIORIDADE
➢ Próxima (n – next)
➢ Próxima (n – next) com rótulo
exten => 2000,1,Dial(SIP/2000) exten => 2000,n,Voicemail(2000,u) exten => 2000,n,Hangup() exten => 2000,1,Dial(SIP/2000) exten => 2000,n,Voicemail(2000,u) exten => 2000,n,Hangup() exten => 2000,1,Dial(SIP/2000) exten => 2000,n,GotoIf($[${VAR}=BUSY]?ocupado:desliga) exten => 2000,n(ocupado),Voicemail(2000,b) exten => 2000,n(desliga),Hangup() exten => 2000,1,Dial(SIP/2000) exten => 2000,n,GotoIf($[${VAR}=BUSY]?ocupado:desliga) exten => 2000,n(ocupado),Voicemail(2000,b)
56
Plano de discagem
APLICAÇÕES
➢ É o destino final da execução de uma extensão ➢ Cada aplicação tem uma finalidade EXCLUSIVA ➢ O Asterisk possui mais de 150 aplicações
➢ Exemplos: ➢ Dial
➢ Hangup
➢ MixMonitor ➢ MeetMe
57
Canais SIP
CONCEITOS
➢ Um canal pode ser interpretado como um uma conexão de E/S de uma chamada no Asterisk
➢ SIP é o canal mais comum dentre os canais IP ➢ É configurado em /etc/asterisk/sip.conf
58
/etc/asterisk/sip.conf
[general] udpbindaddr=0.0.0.0:5060 context=default disallow=all allow=ulaw,alaw,gsm directmedia=no ;---;Comentarios iniciam com “;” ;---[2000] type=friend secret=2000 dtmfmode=rfc2833 host=dynamic [general] udpbindaddr=0.0.0.0:5060 context=default disallow=all allow=ulaw,alaw,gsm directmedia=no ;---;Comentarios iniciam com “;” ;---[2000] type=friend secret=2000 dtmfmode=rfc2833 host=dynamic59
Laboratório
➢ Objetivos:
➢ Configurar ramais SIP
➢ Criar um plano de discagem
60
Interface Gráfica SNEP
CONCEITUALMENTE
É um PBX IP completo de grande porte e recursos que fornece Suporte à Telefonia Convencional e Telefonia IP e é baseado em GNU/Linux e Asterisk.
TECNICAMENTE
É um Interface de administração, configuração e monitoramento que agrega Inteligência ao Asterisk.
61
Interface Gráfica SNEP
ESTRUTURA LÓGICA:
A instalação do SNEP sempre está baseada em um “Core”, ou sistema base, e a ela são adicionados módulos que dão ao “Core” funcionalidades adicionais. Este “core” é o Snep Livre.
SNEP
Módulo A Módulo B Módulo C
62
Interface Gráfica SNEP
RAMAIS
Os Ramais definem os membros dos sistemas SNEP que estarão habilitados ou não a fazer / receber chamadas.
O SNEP também usa como conceito que: ”todo ramal é igualmente um “usuário” da Interface e tem suas permissões/restrições definidas pelo Administrador do Sistema”. Ramais podem usar tecnologia:
➢ IP ( SIP / IAX )
➢ Virtual
63
Interface Gráfica SNEP
EBS-FXS Ramais Khomp Ramais Khomp Ramais Virtuais Ramais Virtuais Conexão LAN Conexão WAN Conexão Cabo
64
Laboratório
➢ Objetivos:
➢ Baixar e instalar o SNEP
65
66
Objetivos da Aula
➢ Entender arquitetura de redes voltadas a VoIP ➢ Conhecer os protocolos VoIP
➢ Conhecer e analisar a aplicação de Codec's ➢ Entender os tipos de registros SIP/IAX
67
Análise de rede
➢ Até o começo da década de 1990 haviam dois tipos bem distintos de rede pública :
➢ Rede de telefonia (PSTN)
➢ Rede de computadores (Internet)
68
69
Definindo um protocolo
SIP
➢ Pontos fortes: padrão da IETF, larga adoção do mercado
➢ Pontos fracos: problemas no uso do NAT, uso da banda com
RTP é alto
IAX2
➢ Pontos fortes: eficiência em banda passante, segurança e facilidade com NAT
70
Definindo um protocolo
H323
➢ Pontos fortes: larga adoção do mercado, padronização pela
ITU
➢ Pontos fracos: complexo, pouco adotado em telefonia IP em
71
Definindo um protocolo
Quadro comparativo
Protocolo Mantenedor Utilização
IAX2 Digium - Troncos entre servidores Asterisk- Terminais atrás de NAT - Conexão com provedores de serviço
SIP IETF - Telefones IP- Conexão com provedores de serviço
H323 ITU-T - Telefones H323- Gateways H323
72
Definindo um CODEC
➢ São utilizados para codificar / decodificar um sinal analógico em digital
➢ São originados a partir do PCM (Pulse Code Modulation) ➢ Diferentes equipamentos utilizam diferentes CODEC's
➢ Ao estabelecer uma sessão estes equipamentos negociam um CODEC entre si
TRANSCODIFICAÇÃO
➢ Conversão dos pacotes de voz de um CODEC para outro.
73
CODEC's
G.711 G.729 G.723 GSM iLBC Largura de Banda (Kbps) 64 8 5,3 ou 6,3 13 13,3 ou 15 Complexidade (Mips) 0,35 13 19 5 18 Resistência a perda de pacotes ——- 3% 3% 3% 5% ou 7% MOS 4,41 4,14 3,79 3.7 4,07 QUADRO COMPARATIVO74
Overhead, payload e banda
OVERHEAD
➢ É a soma dos cabeçalhos dos pacotes PAYLOAD
➢ Quantidade de media inserida em um determinado pacote
CÁLCULO DE BANDA
75
Cálculo de banda
Codec Link Cálculo Resultado
G.711
Ethernet Ethernet + IP + UDP + RTP + g.711 95.2 Kbps (x1.48) PPP PPP + IP + UDP + RTP + g.711 82.4 Kbps (x1.28) Frame Relay FR + IP + UDP + RTP + g.711 82.8 Kbps (x1.29)
G.729
Ethernet Ethernet + IP + UDP + RTP + g.729 39.2 Kbps (x4.9) PPP PPP + IP + UDP + RTP + g.729 26.4 Kbps (x3.3) Frame Relay FR + IP + UDP + RTP + g.729 26.8 Kbps (x3.35)
76
77
Laboratório
➢ Objetivos:
78
79
Objetivos da Aula
➢ Conhecer os métodos de autenticação ➢ Visualizar alguns cenários de uso
➢ Utilizar o IAX2 em modo trunked
➢ Determinar a banda passante utilizada pelo IAX ➢ Configurar o iax.conf
80
IAX2 - Conceitos
➢ É um protocolo desenvolvido pela Digium com o objetivo de estabelecer comunicação entre servidores Asterisk
➢ Definido na RFC 5456
➢ Transporta sinalização e media e uma única porta : 4569 ➢ IAX2 é a segunda versão do protocolo IAX
➢ Provê transparência ao NAT ➢ Suporta o modo trunked
81
IAX2 – Métodos de Autenticação
➢ plaintext – Texto puro, esse método é o padrão e oferece pouca segurança pelo fato da senha passar em texto puro na rede e que pode ser facilmente identificado
➢ md5 – Hash MD5 oferece uma segurança extra, ele opera de forma semelhante ao SIP, fazendo um processo conhecido como Three-Way-handshake
➢ rsa – Par de chaves de criptografia RSA. É método mais seguro pois utiliza as chaves para autenticação. Necessita de configuração em ambos servidores
82
O arquivo /etc/asterisk/iax.conf
[general] bindport=4569 bindaddr=0.0.0.0 disallow=all allow=ulaw,alaw,g729 ;---;Primeira filial ;---[filial-01] type=user context=from-filiais secret=filial-01 callerid=”Filial-01” <1000> trunk=yes [general] bindport=4569 bindaddr=0.0.0.0 disallow=all allow=ulaw,alaw,g729 ;---;Primeira filial ;---[filial-01] type=user context=from-filiais secret=filial-01 callerid=”Filial-01” <1000> trunk=yes83
IAX2 – Cenários de uso
CLIENTE IAX
➢ Asterisk suportando conexões de telefones via protocolo IAX.
➢ Exemplo de configuração no iax.conf: [8035] type=friend context=default auth=md5 secret=senha notransfer=0 callerid=<8035> host=dynamic allow=gsm [8035] type=friend context=default auth=md5 secret=senha notransfer=0 callerid=<8035> host=dynamic allow=gsm
84
IAX2 – Cenários de uso
PROVEDOR IAX
85
IAX2 – Cenários de uso
ENTRONCAMENTO IAX
➢ Servidores Asterisk se conectando através do protocolo IAX.
86
IAX2 – Comandos da CLI>
Comando Finalidade
iax2 show netstats Exibe estatísticas sobre os pacotes IAX
iax2 show peers Exibe uma lista de todos os “peers” IAX2 configurados no sistema (troncos e ramais)
iax2 show channels Exibe uma lista de todos os “canais” IAX2 no servidor
iax2 show registry Exibe todos os registros feitos pelo servidor
87
Laboratório
➢ Objetivos:
➢ Entrocar pelo menos uma filial usando IAX ➢ Discar para o ramal da filial
88
Interface Gráfica SNEP
TRONCOS
➢ Os Troncos definem as rotas de Entrada e Saída das ligações que passam pelo SNEP.
➢ Podem ser considerados Troncos: ➢ Link E1 Digital
➢ Linha Analógica
➢ CHIP de Operadora GSM
➢ Conta em um Provedor VOIP
89
Laboratório
➢ Objetivos:
90
91
Objetivos da Aula
➢ Entender a teoria de operação do SIP ➢ Entender as características do protocolo ➢ Entender o fluxo das mensagens SIP
➢ Conhecer os tipos de NAT (problemas e soluções) ➢ Configurar um tronco com uma operadora VoIP ➢ Entender o processo de registro do SIP
92
Protocolo SIP
PONTOS FORTES
➢ Protocolo maduro e padronizado
➢ É o protocolo padrão do mercado
➢ SIP Proxies tem grande escalabilidade
➢ Sinalização e mídia são tratados separadamente
PONTOS FRACOS
➢ Dificuldades com travessia de NAT
➢ Dificuldades com bilhetagem
➢ Uso de banda
93
94
95
96
SIP com B2BUA
97
SIP com B2BUA
98
SIP e NAT
NAT FULL CONE
➢ O mapeamento é bem estabelecido e qualquer um da Internet pública que queira alcançar um cliente atrás do NAT, precisa apenas saber o esquema de mapeamento de forma a mandar pacotes para ele.
99
SIP e NAT
NAT PORT RESTRICTED
➢ É quase idêntico ao “Restricted Cone”, mas neste caso o NAT irá bloquear todos os pacotes a menos que o cliente tenha
previamente enviado um pacote para o IP e porta que está enviando para o NAT.
100
SIP e NAT
NAT CONE RESTRICTED
➢ O par IP/Porta externo só é aberto uma vez que o computador interno envie dados para o endereço de destino IP específico.
101
SIP e NAT
NAT SIMÉTRICO
➢ Um mapeamento específico do IP:Porta para um NAT público IP:Porta é dependente do endereço de destino para o qual o pacote é enviado.
102
SIP e NAT - Soluções
ASTERISK ATRÁS DE NAT
/etc/asterisk/sip.conf [general] externip = 200.84.7.1 localnet = 192.168.1.0/255.255.255.0 [general] externip = 200.84.7.1 localnet = 192.168.1.0/255.255.255.0
CLIENTE ATRÁS DE NAT
/etc/asterisk/sip.conf [2000] nat = yes directmedia = no qualify = yes [2000] nat = yes directmedia = no qualify = yes
103
SIP e dtmf
➢ info: Os dígitos serão enviados dentro do pacote SIP ➢ rfc2833: Os dígitos são enviados dentro do cabeçalho
do pacote RTP
➢ inband: Os dígitos são enviados dentro do payload de voz
➢ auto: O Asterisk tenta enviar os dígitos via rfc2833, em caso de falha envia inband
104
/etc/asterisk/sip.conf
[general] register => asteriskNN:senhaNN@EnderecoIPdoProvedorVoIP [operadora_voip] type=peer fromuser=usuario fromdomain=IPdoServidor defaultuser=asteriskNN secret=senhaNN context=default host=IPdoServidor dtmfmode=rfc2833 directmedia=no insecure=port,invite qualify=yes [general] register => asteriskNN:senhaNN@EnderecoIPdoProvedorVoIP [operadora_voip] type=peer fromuser=usuario fromdomain=IPdoServidor defaultuser=asteriskNN secret=senhaNN context=default host=IPdoServidor dtmfmode=rfc2833 directmedia=no insecure=port,invite qualify=yes105
SIP - Comandos da CLI>
Comando Finalidade
sip show peers Exibe todas as contas do tipo peer incluindo friends sip show registry Exibe o estado de registro do servidor
sip set debug Habilita o debug SIP
sip reload Recarrega o módulo SIP do Asterisk sip show settings Exibe as configurações
106
Laboratório
➢ Objetivos:
➢ Entrocar com um provedor VoIP ➢ Fazer chamadas externas
107
108
Objetivos da Aula
➢ Reconhecer e aprender a trabalhar com o arquivo extensions.conf
➢ Configurar um plano de discagem simples
➢ Compreender os padrões (máscaras) utilizadas em um plano de discagem
➢ Descrever variáveis, funções e aplicações ➢ Compreender Macros
109
/etc/asterisk/extensions.conf
SEÇÃO: [general] ➢ static ➢ writeprotect ➢ extenpatternmatchnew ➢ autofallthrough ➢ clearglobalvars Exemplo: [general] static=yes writeprotect=no [general] static=yes writeprotect=no110
/etc/asterisk/extensions.conf
SEÇÃO: [globals]
➢ Onde são declaradas as variáveis globais, que também podem ser declaradas através da função GLOBAL.
➢ Variáveis globais podem ser acessadas a partir de qualquer ponto do plano de discagem
Exemplo: [globals] ENTRADA=DAHDI/g1 TELEFONISTA=SIP/4000 [globals] ENTRADA=DAHDI/g1 TELEFONISTA=SIP/4000
111
/etc/asterisk/extensions.conf
EXTENSÕES
➢ São responsáveis por disparar um evento no Asterisk, determinando o fluxo das chamadas. No arquivo de
configuração possuem basicamente o formato:
➢ Podem ser:
➢ Numéricas: exten => 0800 ...
➢ Expressões regulares exten => _0[38]XX. …
➢ Conter símbolos exten => 12#89*
exten=> numero(nome), prioridade, aplicacao.
112
/etc/asterisk/extensions.conf
EXTENSÕES ESPECIAIS
➢ i (invalid): Quando um cliente pressiona uma tecla inválida dentro
do comando background() ou waitExten() é direcionado para esta extensão
➢ s (start): Usado quando o Asterisk não recebe o número de B
➢ h (hangup): Executada quando a chamada é encerrada
➢ t (timeout): Executada quando ocorre o timeout nas aplicações
background() ou waitExten()
➢ T (absolute timeout): Executada quando ocorre o timeout de uma chamada
113
/etc/asterisk/extensions.conf
VARIÁVEIS DE CANAL
➢ Estão associadas a um canal e só podem ser acessadas a partir do mesmo
➢ Para visualizar as variáveis associadas a um canal podemos utilizar a aplicação DumpChan()
➢ Algumas aplicações preenchem variáveis de canais quando o seu processamento é encerrado, dentre elas podemos citar: queue()e dial()
114
/etc/asterisk/extensions.conf
VARIÁVEIS DE AMBIENTE
➢ O Asterisk pode acessar variáveis de ambiente do sistema operacional
➢ Para acessar uma variável utilizamos a função ENV()
Exemplo:
exten=> _4XXX,1,set(ENV(LANG)=en_US)
115
/etc/asterisk/extensions.conf
EXPRESSÕES
➢ São declaradas da seguinte maneira:
➢ $[var1 oper var2]
➢ Os operadores possíveis são:
➢ Matemáticos: +, ‐, *, / e % (modulo)
➢ Lógicos: & (and), | (or), ! (negação)
➢ Comparação: =, <, >, >=, <=, !=
➢ Operação condicional: $[expr1? expr2: expr3]
exten => 2000,n,GotoIf($[${VAR}=BUSY]?ocupado:desliga)
116
/etc/asterisk/extensions.conf
MANIPULAÇÃO DE STRINGS
➢ Retornar o comprimento de uma string:
${LEN(<string>)}
➢ Operar uma substring:
${<String>[:index][:length]} ➢ Exemplos: var1=1234567890; ${var1:5} => retorna: 67890 ${var1:4:2} => retorna: 56 ${var1: 4} => retorna: 7890 var1=1234567890; ${var1:5} => retorna: 67890 ${var1:4:2} => retorna: 56 ${var1: 4} => retorna: 7890
117
/etc/asterisk/extensions.conf
FUNÇÕES
➢ Permitem um processamento mais sofisticado de variáveis
➢ Podem ser visualizadas através do comando:
*CLI> core show functions
➢ Exemplos:
exten => 100,1,NoOp(${LEN(Fruta)})
exten => s,1,Set(foo=${IFTIME(*|mon|8-15|nov?Bom:Ruim)})
exten => 100,1,NoOp(${LEN(Fruta)})
118
/etc/asterisk/extensions.conf
APLICAÇÕES BÁSICAS
➢ set(): Atribui um valor a uma variável
➢ NoOp(): Imprime o valor do argumento na CLI do Asterisk
➢ hangup(): Encerra a chamada
➢ gotoIf(): goto condicional
➢ disa(): Gera um segundo tom de discagem para o usuário
119
/etc/asterisk/extensions.conf
INCLUSÃO DE CONTEXTOS
➢ São responsáveis pela organização e segurança do dialplan
➢ Permitem separar partes diferentes do plano de discagem
➢ Estão ligados diretamente aos canais
[2000] context = ramais ... [2001] context = fixo ... [2002] context = celular ... [ramais] exten => 20XX,1,Dial(${EXTEN},60,tT) [fixo] exten => _[2-5]XXXXXXX,1,Dial(SIP/VONO),60,T) include => ramais [celular] exten => _[6-9]XXXXXXX,1,Dial(SIP/VONO),60,T) include => fixo sip.conf extensions.conf
120
/etc/asterisk/extensions.conf
ROTEAMENTO BASEADO EM HORÁRIO ; horario comercial
[ENTRADA]
include =>aberto|08:00-18:00|mon-fri|*|* ; depois do horario comercial
include=>fechado|18:01-23:59|*|*|* include=>fechado|00:00-07:59|*|*|* include=>fechado|*|sat-sun|*|* [aberto] exten=s,1,goto(ura,s,1) [fechado] exten=s,1,Playback(afterhoursmessage) exten=s,n,Dial(SIP/${SECURITY}) exten=s,n,Voicemail(u${OPERATOR}) ; horario comercial [ENTRADA] include =>aberto|08:00-18:00|mon-fri|*|* ; depois do horario comercial
include=>fechado|18:01-23:59|*|*|* include=>fechado|00:00-07:59|*|*|* include=>fechado|*|sat-sun|*|* [aberto] exten=s,1,goto(ura,s,1) [fechado] exten=s,1,Playback(afterhoursmessage) exten=s,n,Dial(SIP/${SECURITY}) exten=s,n,Voicemail(u${OPERATOR})
121
Laboratório
➢ Objetivos:
➢ Testar aplicações e funções
➢ Fazer chamadas para números externos
122
/etc/asterisk/extensions.conf
MACROS
➢ Macros são declaradas dentro do plano de discagem, como um contexto.
➢ A declaração da macro deve ser feita da seguinte maneira:
[macro-NomeDaMacro]
➢ Para disparar uma macro utilizamos a aplicação macro()
➢ Podemos passar argumentos para a macro:
exten=>_4XXX,1,macro(teste,1234,teste)
123
/etc/asterisk/extensions.conf
MACROS - VARIÁVEIS
➢ Podemos acessar as seguintes variáveis dentro de uma macro:
➢ MACRO_CONTEXT ➢ MACRO_EXTEN
➢ MACRO_OFFSET ➢ MACRO_PRIORITY
124
/etc/asterisk/extensions.conf
MACROS - EXEMPLO [interno] ... [ramais] exten=> _4XXX,1,macro(disca,SIP/${EXTEN},20,tT) ... [macro-disca] exten=> s,1,dial(${ARG1},${ARG2},${ARG3}) exten=> s,n,goto(${DIALSTATUS}) exten=> s,n,hangup() exten=> s,n(BUSY),voicemail(${MACRO_EXTEN},b) [interno] ... [ramais] exten=> _4XXX,1,macro(disca,SIP/${EXTEN},20,tT) ... [macro-disca] exten=> s,1,dial(${ARG1},${ARG2},${ARG3}) exten=> s,n,goto(${DIALSTATUS}) exten=> s,n,hangup() exten=> s,n(BUSY),voicemail(${MACRO_EXTEN},b)125
AstDB
➢ Base de dados padrão Berkley DB
➢ Pode ser usado para armazenar dados temporários do Asterisk
➢ Os dados são agrupados em famílias e identificados com uma chave
Família
Chave = Valor Chave = Valor
126
AstDB
FUNÇÕESDB Escreve e lê dados em uma determinada família/chave DB_DELETE Apaga dados de uma determinada chave DB_EXISTS Verifica se existe um valor dentro de uma família/chave
APLICAÇÕES DBdeltree Remove uma família ou uma árvore inteira de chaves
COMANDOS DA *CLI>
database del Apaga dados de uma determinada chave database deltree Remove uma família ou uma árvore inteira de chaves database put Adiciona ou atualiza uma entrada em uma
família/chave
database show Exibe todas as informações do AstDB e seus valores database showkey Exibe o valor de uma família/chave
127
Laboratório
➢ Objetivos:
➢ Criar uma macro para
128
129
Objetivos da Aula
➢ Implementar uma URA para recepção de chamadas; ➢ Implementar o voicemail
➢ Implementar siga‐me
➢ Implementar não perturbe
➢ Implementar estacionamento
➢ Implementar captura de chamadas
130
URA
APLICAÇÕES
➢ answer()
➢ Atende o canal e sincroniza o audio entre servidor e cliente
➢ Background(arquivo, opções)
➢ Toca um áudio e aguarda por um entrada DTMF
➢ waitExten(<sec>)
➢ Aguarda <sec> segundos por uma entrada do usuário
➢ Goto (contexto, extensão, prioridade)
➢ Desvia a chamada para um deterinado ponto no plano de discagem
131
URA
EXEMPLO [entrada] exten => s,1,goto(menu,s,1) [menu] exten=> s,1,background(menu) exten=> s,n,waitExten(3) exten=> 1,1,goto(vendas,s,1) exten=> 2,1,goto(suporte,s,1) exten=> 3,1,goto(treinamento,s,1) exten=> i,1,playback(invalid) exten=> I,n,goto(s,1) exten=> t,1,dial(${TELEFONISTA},20) [vendas] exten=> s,1,dial(${VENDAS}) [suporte] exten=> s,1,dial(${SUPORTE}) [treinamento] exten=> s,1,dial(${TREINAMENTO})132
Estacionamento
ONDE CONFIGURAR ➢ /etc/asterisk/features.conf ➢ /etc/asterisk/extensions.conf parkext=>700 parkpos = >701 -720 context=>parkedcalls parkingtime=>45 [ramais] include=>parkedcalls133
Transferências
DIRETA
➢ Quando o usuário só transfere a ligação e não há interação. Por padrão o dígito # realiza esta transferência.
ONDE CONFIGURAR
➢/etc/asterisk/features.conf
ou
blindxfer => #
134
Transferências
ASSISTIDA ➢ Quando há interação do usuário que vai receber a ligação. ONDE CONFIGURAR ➢/etc/asterisk/features.conf atxxfer => *2135
Transferências
PLANO DE DISCAGEM
➢ É necessário habilitar a transferência nos canais de comunicação, colocando as opções t e/ou T.
➢ t - habilita a transferência para o lado destino da chamada.
➢ T - habilita a transferência para o lado originador da chamada.
ONDE CONFIGURAR
➢/etc/asterisk/extensions.conf
136
Voicemail
➢ As configurações relativas ao voicemail são feitas no arquivo voicemail.conf
➢ As aplicações relacionadas ao voicemail são:
➢ voicemail(<mbox1>[@ctx1][&mbox2] [@<ctx2],opt)
137
/etc/asterisk/voicemail.conf
[general] format=wav49|gsm|wav attach=yes delete=no serveremail=asteriskemailsubject=[Voip 4Linux]: Nova Mensagem ${VM_MSGNUM} na caixa postal ${VM_MAILBOX}
emailbody=Caro(a) ${VM_NAME}:\n\nvoce tem nova mensagem de voz.\nDuracao:${VM_DUR}.\nEnviado por: ${VM_CALLERID}, em $ {VM_DATE}.\n Para ouvir sua caixa postal disque para
9900.\n\nObrigado!\n\n\tDexter\n\twww.dexter.com.br\n\t\n\n emaildateformat=%A, %B %d, %Y at %r
[default]
9001 => 1234,Dexter Clem,root@localhost, delete=yes
138
/etc/asterisk/voicemail.conf
CAIXAS DE VOZ
➢ Podemos associar um canal com uma caixa de voz com o parâmetro mailbox nos arquivos de canal
➢ A sintaxe para a definição das caixas de voz é a seguinte:
139
Conferência
➢ Permite que 3 ou mais ramais conversem simultaneamente
➢ Utiliza a aplicação MeetMe
ONDE CONFIGURAR /etc/asterisk/meetme.conf /etc/asterisk/extensions.conf [general] audiobuffers =32 [rooms] conf => 5001 conf => 5002 ,123456 exten=>5001,1,MeetMe(5001)
140
Captura
➢ Permite capturar uma chamada de um colega no mesmo grupo de chamadas. ONDE CONFIGURAR /etc/asterisk/features.conf /etc/asterisk/sip.conf /etc/asterisk/extensions.conf pickupexten=>*8 callgroup = xx pickupgroup = xx exten => _33900X,1,Pickup(${EXTEN:2}@treinamento)
141
DND – Não perturbe
;---;ATIVAR o DND ;---exten => *41*,1,Set(DB(dnd/${CALLERID(num)})=${EXTEN:4}) exten => *41*,n,playback(dndEnabled) exten => *41*,n,Hangup() ;---;CANCELAR o DND ;---exten => *42*,1,DBdel(dnd/${CALLERID(num)}) exten => *42*,n,playback(dndDisabled) exten => *42*,n,Hangup()142
Siga-me imediato
;---;ATIVAR o SIGA-ME ;---exten => _*21*XXXX,1,Set(DB(CFIM/${CALLERID(num)})=$ {EXTEN:4}) exten =>_*21*XXXX,n,playback(callForwardEnabled) exten => _*21*XXXX,n,saydigits(${EXTEN:4}) exten => _*21*XXXX,n,Hangup() ;---;CANCELAR o SIGA-ME ;---exten => *22*,1,DBdel(CFIM/${CALLERID(num)}) exten => *22*,n,playback(callForwardDisabled) exten => *22*,n,Hangup()143
Siga-me se Ocupado
;---;ATIVAR o SIGA-ME ;---exten => _*31*XXXX,1,Set(DB(CFBS/${CALLERID(num)})=$ {EXTEN:4}) exten => _*31*XXXX,n,playback(callForwardBusyEnabled) exten => _*31*XXXX,n,saydigits(${EXTEN:4}) exten => _*31*XXXX,n,Hangup() ;---;CANCELAR o SIGA-ME ;---exten => *32*,1,DBdel(CFBS/${CALLERID(num)}) exten => *32*,n,playback(callForwardBusyDisabled) exten => *32*,n,Hangup()144
Siga-me / DND - Implementando
[macro-stdexten] exten=> s,1,gotoIf(${DB_EXISTS(dnd/${ARG1})}?dnd) exten=> s,n,gotoIf(${DB_EXISTS(CFIM/${ARG1})}?cfim) exten=> s,n(dial),dial(SIP/${ARG1},20) exten=> s,n,goto(${DIALSTATUS}) exten=> s,n,hangup() exten=> s,n(BUSY),gotoIf(${DB_EXISTS(CFBS/$ {ARG1})}?cfbs:end) exten=> s,n(cfbs),dial(SIP/${DB(CFBS/${ARG1})},20) exten=> s,n,hangup() exten=> s,n(cfim),dial(SIP/${DB(CFIM/${ARG1})},20) exten=> s,n,hangup() exten=> s,n(dnd),playback(doNotDisturb) exten=> s,n(end),hangup()145
146
Objetivos da Aula
➢ Entender os conceitos do DAC
➢ Conhecer as estratégias de distribuição ➢ Diferenciar agentes de ramais
147
Princípio de funcionamento
➢ As chamadas de entrada são colocadas na fila
➢ Uma estratégia de distribuição de chamadas é acionada ➢ Membros da fila atendem
➢ O usuário ouve uma música enquanto espera ➢ São feitos anúncios para usuários e atendentes
148
DAC - Filas
➢ São definidas no arquivo queues.conf
➢ Os agentes fazem login na fila para poder receber as chamadas destinadas a mesma
➢ A estratégia de distribuição é definida no parâmetro strategy
➢ São úteis para:
➢ Call Centers receptivos
➢ Serviço de Atendimento ao Consumidor
➢ Estatísticas de atendimento: TMA, TME, TMC
149
DAC - Estratégias de distribuição
➢ Ringall - todos os telefones tocam ao mesmo tempo
➢ Leastrecent – enviada para o agente que recebeu a chamada mais antiga
➢ Fewestcalls – para o agente que recebeu menos chamadas
➢ Random – de forma aleatória
➢ Rrmemory – de forma igual para todos
➢Rrordered – idem ao rrmemory, respeitando no arquivo de
configuração
➢ Linear – na ordem em está no arquivo de configuração, exceto
quando os membros são dinâmicos – ordem e login
150
DAC - Configurando
GRAVAÇÃO DE CHAMADAS
➢Para realizar a gravação das chamadas é necessário configurar os parâmetros monitor-format, monitor-type
AGENTES
➢ Os agentes são definidos no arquivo agents.conf
➢ A sintaxe é agent => id,pass[,name]
➢Agentes são um canal de proxy
PENALTY
➢ Da prioridade de atendimento a um certo grupo de membros.
➢ No queue.conf : member=TEC[,penalty][,nome];
151
Aplicação queue()
➢Coloca a chamada dentro de uma fila ➢Tem a seguinte sintaxe:
queue(qname[|opt[|url]][|override][|timeout][|AGI])
➢ O parâmetro opt é uma string que recebe uma série de opções
➢Se URL for definida, ela será enviada ao agente que receberá a chamada; ➢override sobreescreve o anúncio default da fila
➢timeout é o timeout da fila;
➢AGI define um script AGI para ser executado quando a ligação for atendida
por um agente
➢Quando a aplicação termina é atribuída à $QUEUE um dos seguintes valores: TIMEOUT, FULL, JOINEMPTY, LEAVEEMPTY, JOINUNAVAIL e LEAVEUNAVAIL.
152
Agentes e Filas
LOGIN DO AGENTE
➢ Aplicação: agentLogin() ➢ Tem a seguinte sintaxe:
agentLogin([agentId][|opt])
ADICIONAR MEMBROS NA FILA
➢ Adiciona uma interface (SIP, IAX2, DAHDI, etc) a uma fila; ➢ Tem a seguinte sintaxe:
addQueueMember([qName]|[interface][|penalty]
REMOVER MEMBRO DA FILA
➢ Remove uma interface (SIP, IAX2, DAHDI, etc) de uma fila ➢ Tem a seguinte sintaxe
153
154
Objetivos da Aula
➢ Conhecer as melhores práticas na configuração de um PABX-IP
➢ Ajustar permissões de arquivos e diretórios ➢ Implementando o Fail2ban
155
Processo do Asterisk
➢ Padrão
➢ Usuário : root
➢ Grupo de Usuário: root ➢ Melhor prática
➢ Usuário : asterisk
156
Permissões
➢ Diretórios (755)
➢ Dono: Ler, escrever e executar (7)
➢ Grupo: Ler e executar (5)
➢ Outros: Ler e executar (5)
➢ Arquivos (644)
➢ Dono: Ler, escrever (6)
➢ Grupo: Ler (4)
157
Rejeitar autenticação
➢ Padrão
➢ O asterisk aceita chamadas vindas de qualquer peer
➢ Melhor prática ➢ /etc/asterisk/sip.conf [general] Allowguest=no Autocreatepeer=no alwaysauthreject = yes call-limit=1 deny =0.0.0.0/0.0.0.0 permit =192.168.0.0/255.255.255.0 alwaysauthreject=yes realm=sip.4linux.com.br domain=sip.4linux.com.br
158
Fail2Ban
➢ Monitora os logs de diversos serviços
➢ Cria regras de controle sobre serviços
➢ Diversas tentativas de acesso em um determinado serviço são bloqueadas de acordo com as regras criadas
➢ Mantém uma black-list dos IP's que tentaram acessar serviços e não tiveram sucesso
➢ Utiliza o iptables do linux como ferramenta para criar os bloqueios
159
Recomendações
● Criptografia ● SIP : siptls ● RTP: srtp ● Testes de invasão ● http://blog.sipvicious.org160