Curso Linux e Asterisk

Administração de Servidores e Telefonia IP

Aula 1

Introdução ao Linux e Ambiente de Servidores

Objetivo da Aula

Apresentar o ambiente de servidores Linux, explicar por que ele é a base para sistemas como o Asterisk e realizar o primeiro acesso remoto seguro via SSH. Compreender os fundamentos da arquitetura cliente-servidor e os benefícios do Linux em ambientes corporativos.

Resumo do Conteúdo

Uma introdução conceitual ao que é um servidor, o que é o Linux e suas distribuições. O foco é desmistificar o ambiente de linha de comando e estabelecer a conexão inicial com o servidor. Abordaremos também os conceitos de virtualização, containers e a importância da estabilidade em sistemas de produção.

Tópicos Técnicos e Conceituais

  • O que é um Servidor: Hardware dedicado vs. Virtual Machines vs. Containers
  • Sistema Operacional de Servidor: Diferenças entre Desktop e Server
  • Linux: Kernel, Shell e Distribuições:
    • CentOS vs. Rocky Linux vs. Ubuntu Server
    • Red Hat Enterprise Linux (RHEL) e derivados
    • Ciclo de vida e suporte das distribuições
  • Interface de Linha de Comando (CLI) vs. Interface Gráfica (GUI):
    • Vantagens da CLI: eficiência, automação, menor consumo de recursos
    • Shells disponíveis: bash, zsh, fish
  • Conceito de acesso remoto e o protocolo SSH:
    • Criptografia assimétrica e chaves públicas/privadas
    • Autenticação por senha vs. autenticação por chave
    • Túneis SSH e port forwarding
  • Arquitetura de Rede: IP, portas, firewalls básicos

Comandos e Procedimentos Práticos

ssh usuario@ip_do_servidor
Conecta-se remotamente ao servidor.
Propósito: Acessar o terminal do servidor de forma segura a partir de qualquer máquina na rede.
Resultado Esperado: Um prompt de login solicitando a senha do usuário, seguido por um prompt de comando bem-sucedido (ex: [usuario@servidor ~]$).

ssh -p 2222 usuario@servidor
Conecta usando uma porta não padrão (exemplo: 2222).

ssh -v usuario@servidor
Conecta com modo verbose para debug de conexão.

ssh-keygen -t rsa -b 4096
Gera um par de chaves SSH RSA de 4096 bits.

ssh-copy-id usuario@servidor
Copia a chave pública para o servidor (autenticação sem senha).

exit ou logout
Desconecta da sessão SSH.

Exemplos Aplicados Detalhados

Exemplo 1: Primeira Conexão SSH

  1. Abrir um terminal (no Linux/macOS) ou um cliente SSH como o PuTTY (no Windows)
  2. Digitar ssh root@192.168.1.100 (substituindo pelo IP e usuário corretos)
  3. Na primeira conexão, aparecerá uma mensagem sobre a autenticidade do host:
    The authenticity of host '192.168.1.100 (192.168.1.100)' can't be established. ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. Are you sure you want to continue connecting (yes/no)?
    Digite yes para aceitar
  4. Digitar a senha para obter acesso ao terminal do servidor
  5. Verificar se a conexão foi bem-sucedida observando o prompt: [root@servidor ~]#

Exemplo 2: Configuração de Chaves SSH (Mais Seguro)

  1. No computador cliente, gerar um par de chaves:
    ssh-keygen -t rsa -b 4096 -C "seu_email@exemplo.com"
  2. Pressionar Enter para aceitar o local padrão (~/.ssh/id_rsa)
  3. Definir uma passphrase (opcional, mas recomendado)
  4. Copiar a chave pública para o servidor:
    ssh-copy-id usuario@192.168.1.100
  5. Testar a conexão sem senha:
    ssh usuario@192.168.1.100

Exemplo 3: Usando Diferentes Clientes SSH

Windows:
  • PuTTY: Interface gráfica, configuração salva em sessões
  • Windows Terminal + OpenSSH: Nativo no Windows 10/11
  • MobaXterm: Terminal avançado com X11 forwarding
Linux/macOS:
  • Terminal nativo: ssh comando built-in
  • Terminator: Terminal com múltiplas abas
  • iTerm2 (macOS): Terminal avançado

Configurações Avançadas de SSH

Arquivo ~/.ssh/config (Cliente):
Permite criar aliases e configurações personalizadas:

Host meuservidor HostName 192.168.1.100 User root Port 22 IdentityFile ~/.ssh/id_rsa ServerAliveInterval 60
Uso: ssh meuservidor

Arquivo /etc/ssh/sshd_config (Servidor):
Configurações de segurança importantes:
- PermitRootLogin no (desabilitar login root direto)
- PasswordAuthentication no (forçar uso de chaves)
- Port 2222 (mudar porta padrão)
- AllowUsers usuario1 usuario2 (limitar usuários)

Verificação e Troubleshooting Avançado

Problema: Connection refused.
Possíveis Causas:
  • Servidor desligado ou inacessível na rede
  • Serviço SSH não está rodando: systemctl status sshd
  • Firewall bloqueando porta 22: firewall-cmd --list-ports
  • IP ou porta incorretos
Diagnóstico:
# Testar conectividade básica ping 192.168.1.100 # Testar se a porta SSH está aberta telnet 192.168.1.100 22 # ou nmap -p 22 192.168.1.100 # Verificar logs do servidor tail -f /var/log/secure
Problema: Permission denied (publickey,password).
Possíveis Causas:
  • Senha incorreta
  • Usuário não existe no servidor
  • Servidor configurado apenas para chaves SSH
  • Chave SSH incorreta ou corrompida
Diagnóstico:
# Conectar com debug verbose ssh -vvv usuario@servidor # Verificar se o usuário existe id usuario # Testar diferentes métodos de autenticação ssh -o PreferredAuthentications=password usuario@servidor ssh -o PreferredAuthentications=publickey usuario@servidor
Problema: Connection timeout.
Diagnóstico:
  • Verificar rota de rede: traceroute 192.168.1.100
  • Verificar DNS: nslookup servidor.exemplo.com
  • Testar com IP direto em vez de hostname
  • Verificar configurações de proxy/VPN

Comandos de Informação do Sistema

whoami - Mostra o usuário atual
hostname - Mostra o nome do servidor
uname -a - Informações completas do sistema
cat /etc/os-release - Versão da distribuição Linux
uptime - Tempo de atividade do servidor
who - Usuários conectados no momento
last - Histórico de logins recentes
date - Data e hora atual do sistema

Resumo e Exercícios Práticos Expandidos

Revisão: Vimos o que é um servidor Linux, compreendemos a arquitetura cliente-servidor, aprendemos sobre diferentes distribuições Linux e como acessá-lo remotamente via SSH, que é a ferramenta fundamental para toda a administração. Também exploramos métodos de autenticação e configurações de segurança básicas.

Exercício 1 (Básico): Conecte e desconecte do seu servidor de laboratório três vezes para se familiarizar com o processo de login via SSH. Anote o tempo de cada conexão.

Exercício 2 (Intermediário): Configure um alias SSH no arquivo ~/.ssh/config para seu servidor, incluindo usuário, porta e chave SSH. Teste a conexão usando o alias.

Exercício 3 (Avançado): Gere um par de chaves SSH, configure a autenticação por chave no servidor e desabilite a autenticação por senha. Documente cada passo realizado.

Exercício 4 (Diagnóstico): Simule um problema de conexão (mudando a porta SSH ou desabilitando o serviço) e pratique o troubleshooting usando os comandos apresentados.

Recursos Adicionais e Próximos Passos

Documentação Recomendada:
  • Manual do SSH: man ssh e man ssh_config
  • Guia de segurança SSH do NIST
  • Documentação oficial das distribuições (CentOS/Rocky Linux)
Ferramentas Complementares:
  • tmux/screen: Multiplexadores de terminal para sessões persistentes
  • rsync: Sincronização de arquivos via SSH
  • scp/sftp: Transferência segura de arquivos
  • ssh-agent: Gerenciamento de chaves SSH
Preparação para Próxima Aula:

Na próxima aula, exploraremos a estrutura de diretórios do Linux e comandos essenciais de manipulação de arquivos. Certifique-se de que consegue se conectar consistentemente ao seu servidor via SSH.

Aula 2

Estrutura e Comandos Essenciais do Linux

Objetivo da Aula

Capacitar o aluno a navegar pela estrutura de diretórios do Linux e a manipular arquivos e pastas usando os comandos mais essenciais. Compreender o sistema de permissões, links simbólicos e técnicas avançadas de busca e manipulação de texto.

Resumo do Conteúdo

Exploraremos o Filesystem Hierarchy Standard (FHS) para entender onde as coisas ficam guardadas. A prática se concentrará em criar, mover, copiar, visualizar e deletar arquivos e diretórios. Também abordaremos conceitos avançados como permissões, propriedade de arquivos, links e redirecionamento de entrada/saída.

Tópicos Técnicos e Conceituais

  • A estrutura de diretórios raiz (/):
    • /bin - Binários essenciais do sistema
    • /sbin - Binários de sistema (super usuário)
    • /usr - Programas e dados de usuário
    • /opt - Software opcional/terceiros
  • Diretórios importantes:
    • /etc - Arquivos de configuração do sistema
    • /var - Dados variáveis (logs, cache, spool)
    • /home - Diretórios pessoais dos usuários
    • /tmp - Arquivos temporários
    • /proc - Sistema de arquivos virtual (informações do kernel)
    • /sys - Interface para o kernel (sysfs)
  • Conceitos fundamentais:
    • Caminhos absolutos vs. relativos
    • Sistema de permissões Unix (rwx)
    • Propriedade de arquivos (owner, group, others)
    • Links simbólicos vs. links físicos
    • Redirecionamento e pipes
  • Uso do sudo: Privilégios de administrador e segurança

Comandos e Procedimentos Práticos

Navegação e Listagem:

ls -lha - Lista arquivos com detalhes, incluindo ocultos e tamanhos legíveis
ls -ltr - Lista por data de modificação (mais recentes por último)
ls -R - Lista recursivamente (subdiretórios)
cd [diretorio] - Navega entre diretórios
cd ~ - Vai para o diretório home do usuário
cd - - Volta para o diretório anterior
pwd - Mostra o diretório atual (Print Working Directory)
tree - Mostra estrutura de diretórios em árvore (se instalado)

Criação e Manipulação:

mkdir [nome] - Cria um diretório
mkdir -p path/to/deep/directory - Cria diretórios aninhados
touch [arquivo] - Cria arquivo vazio ou atualiza timestamp
cp [origem] [destino] - Copia arquivos
cp -r [origem] [destino] - Copia diretórios recursivamente
cp -p [origem] [destino] - Preserva permissões e timestamps
mv [origem] [destino] - Move ou renomeia arquivos/diretórios
rm [arquivo] - Remove arquivos
rm -r [diretorio] - Remove diretórios recursivamente
rm -f [arquivo] - Remove forçadamente (sem confirmação)
rmdir [diretorio] - Remove diretório vazio

Visualização e Edição:

cat [arquivo] - Exibe conteúdo completo do arquivo
less [arquivo] - Visualiza arquivo com paginação (q para sair)
more [arquivo] - Visualiza arquivo página por página
head -n 10 [arquivo] - Mostra primeiras 10 linhas
tail -n 10 [arquivo] - Mostra últimas 10 linhas
tail -f [arquivo] - Acompanha arquivo em tempo real
nano [arquivo] - Editor de texto simples
vim [arquivo] - Editor de texto avançado
wc -l [arquivo] - Conta linhas do arquivo

Busca e Localização:

find /path -name "*.txt" - Busca arquivos por nome
find /path -type f -size +100M - Busca arquivos maiores que 100MB
find /path -mtime -7 - Arquivos modificados nos últimos 7 dias
locate [arquivo] - Busca rápida por nome (requer updatedb)
which [comando] - Mostra localização de um comando
whereis [comando] - Mostra binário, fonte e manual
grep "texto" [arquivo] - Busca texto dentro de arquivos
grep -r "texto" /path - Busca recursiva em diretórios

Permissões e Propriedade:

chmod 755 [arquivo] - Altera permissões (rwxr-xr-x)
chmod +x [arquivo] - Adiciona permissão de execução
chmod -w [arquivo] - Remove permissão de escrita
chown usuario:grupo [arquivo] - Altera proprietário
chgrp grupo [arquivo] - Altera grupo
umask - Mostra/define máscara de permissões padrão

Links e Redirecionamento:

ln -s /path/original /path/link - Cria link simbólico
ln /path/original /path/hardlink - Cria link físico
comando > arquivo - Redireciona saída para arquivo (sobrescreve)
comando >> arquivo - Redireciona saída para arquivo (anexa)
comando < arquivo - Usa arquivo como entrada
comando1 | comando2 - Pipe: saída do comando1 vira entrada do comando2

Exemplos Aplicados Detalhados

Exemplo 1: Navegação e Exploração Básica

  1. Verificar diretório atual: pwd
  2. Listar conteúdo detalhado: ls -lha
  3. Navegar para raiz: cd /
  4. Explorar estrutura: ls -l
  5. Ir para /etc: cd /etc
  6. Ver arquivos de configuração: ls | head -20
  7. Voltar para home: cd ~
  8. Verificar espaço em disco: df -h

Exemplo 2: Criação de Estrutura de Diretórios

  1. Navegar para /tmp: cd /tmp
  2. Criar estrutura complexa: mkdir -p projeto/{src,docs,tests}/{linux,asterisk}
  3. Verificar estrutura criada: tree projeto (ou find projeto -type d)
  4. Criar arquivos de exemplo:
    touch projeto/src/linux/main.c touch projeto/src/asterisk/dialplan.conf touch projeto/docs/README.md touch projeto/tests/test_suite.sh
  5. Listar tudo recursivamente: find projeto -type f

Exemplo 3: Manipulação Avançada de Arquivos

  1. Criar arquivo com conteúdo:
    cat > exemplo.txt << EOF Esta é a linha 1 Esta é a linha 2 Esta é a linha 3 EOF
  2. Visualizar de diferentes formas:
    cat exemplo.txt # Conteúdo completo head -2 exemplo.txt # Primeiras 2 linhas tail -1 exemplo.txt # Última linha wc -l exemplo.txt # Contar linhas
  3. Fazer cópias com diferentes opções:
    cp exemplo.txt backup1.txt # Cópia simples cp -p exemplo.txt backup2.txt # Preserva atributos cp exemplo.txt backup_$(date +%Y%m%d).txt # Com timestamp
  4. Criar link simbólico: ln -s exemplo.txt link_exemplo.txt
  5. Verificar links: ls -l *exemplo*

Exemplo 4: Trabalhando com Permissões

  1. Criar script de exemplo:
    cat > meu_script.sh << 'EOF' #!/bin/bash echo "Olá, mundo!" date EOF
  2. Verificar permissões: ls -l meu_script.sh
  3. Tentar executar: ./meu_script.sh (deve dar erro)
  4. Dar permissão de execução: chmod +x meu_script.sh
  5. Executar: ./meu_script.sh
  6. Alterar permissões numericamente: chmod 754 meu_script.sh
  7. Verificar mudança: ls -l meu_script.sh

Conceitos Avançados

Sistema de Permissões Unix:

Formato: rwxrwxrwx (owner group others)
r = read (4), w = write (2), x = execute (1)

Exemplos comuns:
755 = rwxr-xr-x (proprietário: tudo, outros: ler e executar)
644 = rw-r--r-- (proprietário: ler/escrever, outros: apenas ler)
600 = rw------- (apenas proprietário pode ler/escrever)
777 = rwxrwxrwx (todos podem tudo - PERIGOSO!)

Redirecionamento e Pipes:

Redirecionamento de saída:
comando > arquivo (sobrescreve)
comando >> arquivo (anexa)
comando 2> erro.log (redireciona erros)
comando &> tudo.log (saída e erros)

Pipes úteis:
ls -la | grep "^d" (apenas diretórios)
cat arquivo | sort | uniq (ordenar e remover duplicatas)
ps aux | grep processo | awk '{print $2}' (extrair PID)

Verificação e Troubleshooting Avançado

Problema: Permission denied ao tentar editar arquivo.
Diagnóstico:
  • Verificar permissões: ls -l arquivo
  • Verificar proprietário: stat arquivo
  • Verificar se é root: whoami
Soluções:
  • Usar sudo: sudo nano arquivo
  • Alterar permissões: chmod 644 arquivo
  • Alterar proprietário: sudo chown $USER arquivo
Problema: No such file or directory.
Diagnóstico:
  • Verificar diretório atual: pwd
  • Listar arquivos: ls -la
  • Verificar se é caminho absoluto ou relativo
  • Buscar arquivo: find / -name "arquivo" 2>/dev/null
Problema: Disco cheio (No space left on device).
Diagnóstico:
df -h # Verificar uso de disco du -sh /var/log/* # Verificar logs grandes find /tmp -size +100M # Arquivos grandes em /tmp lsof | grep deleted # Arquivos deletados mas ainda abertos

Resumo e Exercícios Práticos Expandidos

Revisão: Aprendemos a navegar no sistema de arquivos Linux, compreendemos a estrutura FHS, dominamos comandos essenciais de manipulação de arquivos, entendemos o sistema de permissões Unix e exploramos técnicas avançadas de busca e redirecionamento. Esta é a base fundamental para editar os arquivos de configuração do Asterisk e administrar o sistema.

Exercício 1 (Básico): No seu diretório home (cd ~), crie a seguinte estrutura:
asterisk_lab/ ├── configs/ │ ├── backup/ │ └── templates/ ├── logs/ └── scripts/
Em seguida, copie o arquivo /etc/hosts para asterisk_lab/configs/backup/.

Exercício 2 (Intermediário): Crie um script chamado system_info.sh que colete e salve as seguintes informações em um arquivo:
  • Data e hora atual
  • Usuário logado
  • Diretório atual
  • Espaço em disco disponível
  • Últimos 5 logins
Torne o script executável e execute-o.

Exercício 3 (Avançado): Usando apenas comandos de linha, encontre:
  • Todos os arquivos .conf no sistema (use find)
  • Os 10 maiores arquivos em /var
  • Arquivos modificados nas últimas 24 horas em /etc
  • Linhas contendo "ssh" em arquivos de /etc
Salve os resultados em arquivos separados usando redirecionamento.
Aula 3

Rede, Usuários e Serviços

Objetivo da Aula

Configurar aspectos avançados de rede, implementar gerenciamento completo de usuários e grupos, dominar o controle de serviços com systemd, e estabelecer políticas de segurança robustas. Preparar o ambiente de forma profissional para a instalação e operação segura do Asterisk.

Resumo do Conteúdo

Abordaremos configuração avançada de rede (IP estático, roteamento, DNS), implementação de firewall com zonas e regras específicas, criação e gerenciamento completo de usuários e grupos com políticas de segurança, controle avançado de serviços com systemd, monitoramento de logs, e configuração de SSH seguro. Estes são pré-requisitos fundamentais para uma instalação profissional e segura do Asterisk.

Tópicos Técnicos e Conceituais Avançados

  • Configuração de Rede Avançada:
    • NetworkManager vs. configuração manual
    • IP estático vs. DHCP: quando usar cada um
    • Configuração de múltiplas interfaces de rede
    • Roteamento estático e tabelas de rota
    • VLANs e configuração de trunks
    • Bonding de interfaces (redundância)
  • DNS e Resolução de Nomes:
    • Configuração de servidores DNS primário e secundário
    • Cache DNS local e otimização
    • Arquivo /etc/hosts para resolução local
    • Troubleshooting de DNS com dig, nslookup, host
  • Firewall Avançado com firewalld:
    • Conceito de zonas (public, internal, dmz, trusted)
    • Regras permanentes vs. temporárias
    • Port forwarding e NAT
    • Rich rules para controle granular
    • Logging e auditoria de firewall
  • Gerenciamento Avançado de Usuários:
    • Políticas de senha e expiração
    • Grupos primários e secundários
    • Sudo e controle de privilégios granular
    • Quotas de disco por usuário
    • Auditoria de ações de usuários
  • Systemd e Gerenciamento de Serviços:
    • Units, targets e dependências
    • Criação de serviços customizados
    • Timers (substituto do cron)
    • Logs estruturados com journald
    • Análise de performance e troubleshooting

Comandos e Procedimentos Práticos Detalhados

Configuração e Diagnóstico de Rede:

ip addr show - Mostra todas as interfaces e IPs
ip addr add 192.168.1.100/24 dev eth0 - Adiciona IP temporário
ip route show - Mostra tabela de roteamento
ip route add default via 192.168.1.1 - Define gateway padrão
nmcli con show - Lista conexões NetworkManager
nmcli con modify eth0 ipv4.addresses 192.168.1.100/24 - IP estático
nmcli con modify eth0 ipv4.gateway 192.168.1.1 - Define gateway
nmcli con modify eth0 ipv4.dns "8.8.8.8 8.8.4.4" - Define DNS
nmcli con modify eth0 ipv4.method manual - Desabilita DHCP
nmcli con up eth0 - Ativa conexão
ss -tuln - Mostra portas abertas (substituto do netstat)
ss -tuln | grep :22 - Verifica se SSH está ouvindo

Testes de Conectividade e DNS:

ping -c 4 8.8.8.8 - Testa conectividade (4 pacotes)
traceroute google.com - Mostra rota até destino
mtr google.com - Traceroute contínuo com estatísticas
nslookup google.com - Resolução DNS básica
dig google.com - Consulta DNS detalhada
dig @8.8.8.8 google.com - Consulta DNS em servidor específico
host -t MX google.com - Consulta registros MX
systemd-resolve --status - Status do resolvedor DNS
systemd-resolve --flush-caches - Limpa cache DNS

Firewall Avançado:

firewall-cmd --get-zones - Lista zonas disponíveis
firewall-cmd --get-default-zone - Mostra zona padrão
firewall-cmd --list-all - Lista regras da zona ativa
firewall-cmd --list-all-zones - Lista regras de todas as zonas
firewall-cmd --zone=public --add-port=5060/udp --permanent - Abre porta SIP
firewall-cmd --zone=public --add-port=10000-20000/udp --permanent - Faixa RTP
firewall-cmd --zone=public --add-service=ssh --permanent - Adiciona serviço
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" accept' --permanent - Rich rule
firewall-cmd --reload - Recarrega configuração
firewall-cmd --runtime-to-permanent - Torna regras temporárias permanentes

Gerenciamento Completo de Usuários:

useradd -m -s /bin/bash -c "Usuario Asterisk" asterisk - Cria usuário completo
useradd -r -s /sbin/nologin asterisk - Usuário de sistema (sem login)
usermod -aG wheel asterisk - Adiciona ao grupo sudo
usermod -L asterisk - Bloqueia conta de usuário
usermod -U asterisk - Desbloqueia conta de usuário
passwd asterisk - Define/altera senha
chage -l asterisk - Mostra informações de expiração
chage -M 90 asterisk - Senha expira em 90 dias
groupadd pbx-users - Cria grupo
gpasswd -a asterisk pbx-users - Adiciona usuário ao grupo
id asterisk - Mostra UID, GID e grupos do usuário
who - Usuários logados atualmente
last - Histórico de logins
lastlog - Último login de cada usuário

Controle Avançado de Serviços:

systemctl status sshd - Status detalhado do serviço
systemctl start sshd - Inicia serviço
systemctl stop sshd - Para serviço
systemctl restart sshd - Reinicia serviço
systemctl reload sshd - Recarrega configuração sem parar
systemctl enable sshd - Habilita na inicialização
systemctl disable sshd - Desabilita na inicialização
systemctl is-active sshd - Verifica se está ativo
systemctl is-enabled sshd - Verifica se está habilitado
systemctl list-units --type=service - Lista todos os serviços
systemctl list-units --failed - Lista serviços com falha
systemctl daemon-reload - Recarrega configurações do systemd

Monitoramento e Logs:

journalctl -u sshd - Logs de um serviço específico
journalctl -f - Acompanha logs em tempo real
journalctl --since "1 hour ago" - Logs da última hora
journalctl --until "2023-12-01" - Logs até uma data
journalctl -p err - Apenas logs de erro
journalctl --disk-usage - Uso de disco dos logs
journalctl --vacuum-time=7d - Remove logs mais antigos que 7 dias

Exemplos Aplicados Detalhados

Exemplo 1: Configuração Completa de Rede Estática

  1. Verificar interfaces disponíveis: ip link show
  2. Verificar configuração atual: ip addr show
  3. Listar conexões NetworkManager: nmcli con show
  4. Configurar IP estático:
    nmcli con modify "System eth0" ipv4.addresses 192.168.1.100/24 nmcli con modify "System eth0" ipv4.gateway 192.168.1.1 nmcli con modify "System eth0" ipv4.dns "8.8.8.8,8.8.4.4" nmcli con modify "System eth0" ipv4.method manual
  5. Ativar configuração: nmcli con up "System eth0"
  6. Verificar conectividade: ping -c 4 8.8.8.8
  7. Testar DNS: nslookup google.com
  8. Verificar rota padrão: ip route show

Exemplo 2: Configuração Avançada de Firewall para Asterisk

  1. Verificar zona ativa: firewall-cmd --get-active-zones
  2. Listar configuração atual: firewall-cmd --list-all
  3. Configurar portas para Asterisk:
    # Porta SIP firewall-cmd --zone=public --add-port=5060/udp --permanent firewall-cmd --zone=public --add-port=5060/tcp --permanent # Faixa RTP para áudio firewall-cmd --zone=public --add-port=10000-20000/udp --permanent # Porta para AMI (Asterisk Manager Interface) firewall-cmd --zone=public --add-port=5038/tcp --permanent
  4. Criar regra para rede interna:
    firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="5038" accept' --permanent
  5. Recarregar firewall: firewall-cmd --reload
  6. Verificar regras aplicadas: firewall-cmd --list-all
  7. Testar portas abertas: ss -tuln | grep -E "(5060|5038)"

Exemplo 3: Criação de Usuário Asterisk com Segurança

  1. Criar usuário de sistema para Asterisk:
    sudo useradd -r -d /var/lib/asterisk -s /sbin/nologin -c "Asterisk PBX" asterisk
  2. Criar grupo para usuários PBX: sudo groupadd pbx-users
  3. Criar usuário administrativo:
    sudo useradd -m -s /bin/bash -c "Administrador PBX" -G pbx-users pbxadmin sudo passwd pbxadmin
  4. Configurar sudo para pbxadmin:
    echo "pbxadmin ALL=(asterisk) NOPASSWD: /usr/sbin/asterisk" | sudo tee /etc/sudoers.d/pbxadmin
  5. Criar diretórios necessários:
    sudo mkdir -p /var/lib/asterisk/{agi-bin,keys,mohmp3,sounds,images} sudo mkdir -p /var/log/asterisk/cdr-csv sudo mkdir -p /var/spool/asterisk/{dictate,meetme,monitor,outgoing,tmp,voicemail} sudo chown -R asterisk:asterisk /var/lib/asterisk /var/log/asterisk /var/spool/asterisk
  6. Verificar criação: id asterisk && id pbxadmin

Exemplo 4: Configuração e Monitoramento de Serviços

  1. Verificar serviços essenciais:
    systemctl status sshd systemctl status firewalld systemctl status NetworkManager
  2. Criar serviço customizado para monitoramento:
    sudo tee /etc/systemd/system/network-monitor.service << 'EOF' [Unit] Description=Network Connectivity Monitor After=network.target [Service] Type=simple ExecStart=/bin/bash -c 'while true; do ping -c 1 8.8.8.8 > /dev/null || logger "Network connectivity lost"; sleep 60; done' Restart=always User=nobody [Install] WantedBy=multi-user.target EOF
  3. Habilitar e iniciar o serviço:
    sudo systemctl daemon-reload sudo systemctl enable network-monitor.service sudo systemctl start network-monitor.service
  4. Monitorar logs: journalctl -u network-monitor -f
  5. Verificar serviços com falha: systemctl --failed

Configurações Avançadas de Segurança

Hardening do SSH:

Arquivo /etc/ssh/sshd_config - Configurações recomendadas:
Port 2222 (mudar porta padrão)
PermitRootLogin no
PasswordAuthentication no (após configurar chaves)
PubkeyAuthentication yes
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2
AllowUsers pbxadmin
Protocol 2

Configuração de Fail2ban:

Instalação e configuração básica:
sudo dnf install fail2ban -y
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

Arquivo /etc/fail2ban/jail.local:
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 3

[sshd]
enabled = true
port = 2222

Verificação e Troubleshooting Avançado

Problema: Sem conectividade de rede após configuração.
Diagnóstico Sistemático:
  1. Verificar interface física: ip link show
  2. Verificar configuração IP: ip addr show
  3. Testar conectividade local: ping 127.0.0.1
  4. Testar gateway: ping $(ip route | grep default | awk '{print $3}')
  5. Verificar DNS: cat /etc/resolv.conf
  6. Testar DNS: nslookup 8.8.8.8
  7. Verificar logs: journalctl -u NetworkManager --since "10 minutes ago"
Soluções Comuns:
  • Reiniciar NetworkManager: sudo systemctl restart NetworkManager
  • Reconfigurar interface: nmcli con down eth0 && nmcli con up eth0
  • Verificar cabo/switch de rede
Problema: Firewall bloqueando conexões necessárias.
Diagnóstico:
# Verificar logs do firewall journalctl -u firewalld --since "1 hour ago" # Verificar regras ativas firewall-cmd --list-all-zones # Testar conectividade específica telnet servidor.com 5060 # Verificar se porta está ouvindo ss -tuln | grep :5060
Soluções:
  • Adicionar regra temporária para teste: firewall-cmd --add-port=5060/udp
  • Verificar logs de negação: dmesg | grep -i "dropped"
  • Usar rich rules para controle granular
Problema: Serviço não inicia ou falha constantemente.
Diagnóstico Completo:
# Status detalhado systemctl status nome-servico.service # Logs específicos do serviço journalctl -u nome-servico.service --since today # Verificar dependências systemctl list-dependencies nome-servico.service # Verificar arquivos de configuração systemd-analyze verify /etc/systemd/system/nome-servico.service

Resumo e Exercícios Práticos Avançados

Revisão: Dominamos configuração avançada de rede com IP estático e DNS, implementamos firewall robusto com zonas e regras específicas para Asterisk, criamos usuários e grupos com políticas de segurança, configuramos controle completo de serviços com systemd, e estabelecemos monitoramento de logs. O sistema está profissionalmente preparado para receber o Asterisk com máxima segurança e confiabilidade.

Exercício 1 (Intermediário): Configure um ambiente de rede completo:
  • Configure IP estático 192.168.1.50/24 com gateway 192.168.1.1
  • Configure DNS primário 8.8.8.8 e secundário 8.8.4.4
  • Teste conectividade com ping e traceroute
  • Configure firewall com portas 22 (SSH), 5060 (SIP), e 10000-20000 (RTP)
  • Crie regra rich rule permitindo acesso SSH apenas da rede 192.168.1.0/24

Exercício 2 (Avançado): Implemente gerenciamento completo de usuários:
  • Crie usuário de sistema "asterisk" sem login
  • Crie usuário administrativo "pbxadmin" com acesso sudo limitado
  • Configure política de senha: expiração em 90 dias, mínimo 8 caracteres
  • Crie grupo "pbx-operators" e adicione pbxadmin
  • Configure sudoers para permitir pbxadmin gerenciar apenas serviços relacionados ao Asterisk

Exercício 3 (Expert): Implemente monitoramento e segurança avançada:
  • Configure SSH na porta 2222 com autenticação por chave apenas
  • Instale e configure Fail2ban para SSH e futuras tentativas SIP
  • Crie serviço systemd customizado para monitorar conectividade
  • Configure rotação de logs com journald (manter apenas 7 dias)
  • Implemente script de backup automático das configurações de rede

Validação Final: Execute os seguintes comandos para validar a configuração:
# Teste de conectividade completo ping -c 4 8.8.8.8 && echo "Internet OK" nslookup google.com && echo "DNS OK" # Verificação de segurança firewall-cmd --list-all | grep -E "(5060|10000-20000)" ss -tuln | grep :22 # Verificação de usuários id asterisk && id pbxadmin sudo -l -U pbxadmin # Verificação de serviços systemctl is-active sshd firewalld NetworkManager
Aula 4

Instalação Completa e Preparação Profissional do Asterisk

Objetivos Expandidos da Aula

Dominar o processo completo de instalação do Asterisk desde a preparação do sistema até a configuração inicial profissional. Incluindo múltiplos métodos de instalação (repositórios, compilação, containers), configuração de dependências avançadas, otimização de performance, e implementação de monitoramento robusto.

Resumo Abrangente do Conteúdo

Implementaremos uma instalação enterprise-grade do Asterisk, cobrindo preparação completa do sistema, múltiplas opções de instalação, configuração de segurança avançada, otimização de performance, monitoramento proativo, e procedimentos de backup/recovery. O sistema resultante será robusto, seguro e pronto para produção.

Tópicos Técnicos e Conceituais Avançados

Fundamentos de Instalação:

  • Métodos de Instalação: Repositórios oficiais vs. EPEL vs. compilação from source vs. containers
  • Gerenciadores de Pacotes: yum/dnf (RHEL/CentOS), apt (Debian/Ubuntu), zypper (SUSE)
  • Dependências Críticas: Bibliotecas de desenvolvimento, codecs de áudio, drivers de hardware
  • Versões do Asterisk: LTS vs. Standard, compatibilidade com distribuições

Arquitetura e Componentes:

  • Core do Asterisk: PBX engine, channel drivers, applications, functions
  • Módulos Essenciais: chan_sip, chan_pjsip, app_dial, app_voicemail, res_musiconhold
  • Protocolos Suportados: SIP, IAX2, H.323, MGCP, Skinny/SCCP
  • Codecs de Áudio: G.711 (ulaw/alaw), G.722, G.729, Opus, GSM

Segurança e Performance:

  • Isolamento de Processos: Usuário dedicado, chroot, SELinux/AppArmor
  • Limites de Sistema: ulimits, systemd limits, kernel parameters
  • Otimização de Rede: Buffer sizes, QoS, DSCP marking
  • Monitoramento Proativo: SNMP, AMI, ARI, Prometheus integration

Comandos e Procedimentos Práticos Detalhados

Preparação Completa do Sistema:

# Atualização e preparação base
sudo dnf update -y
sudo dnf groupinstall -y "Development Tools"
sudo dnf install -y epel-release

# Dependências essenciais para compilação
sudo dnf install -y gcc gcc-c++ make cmake
sudo dnf install -y libxml2-devel libxslt-devel
sudo dnf install -y sqlite-devel libuuid-devel
sudo dnf install -y ncurses-devel readline-devel
sudo dnf install -y openssl-devel zlib-devel

# Dependências de áudio e codecs
sudo dnf install -y alsa-lib-devel
sudo dnf install -y speex-devel speexdsp-devel
sudo dnf install -y libogg-devel libvorbis-devel
sudo dnf install -y opus-devel

# Ferramentas de rede e monitoramento
sudo dnf install -y net-tools tcpdump wireshark-cli
sudo dnf install -y htop iotop nethogs
sudo dnf install -y logrotate rsyslog

Instalação via Repositórios (Método Recomendado):

# Adicionar repositório oficial Asterisk
sudo dnf config-manager --add-repo https://packages.asterisk.org/centos/asterisk-18/x86_64/RPMS/

# Instalar Asterisk e módulos essenciais
sudo dnf install -y asterisk asterisk-configs
sudo dnf install -y asterisk-sounds-core-en
sudo dnf install -y asterisk-sounds-moh-opsound-wav
sudo dnf install -y asterisk-voicemail asterisk-calendar

# Módulos adicionais opcionais
sudo dnf install -y asterisk-dahdi asterisk-mysql
sudo dnf install -y asterisk-postgresql asterisk-odbc

Configuração Avançada do Sistema:

# Configurar limites do sistema para Asterisk
echo "asterisk soft nofile 65536" | sudo tee -a /etc/security/limits.conf
echo "asterisk hard nofile 65536" | sudo tee -a /etc/security/limits.conf
echo "asterisk soft nproc 32768" | sudo tee -a /etc/security/limits.conf
echo "asterisk hard nproc 32768" | sudo tee -a /etc/security/limits.conf

# Otimizações de kernel para VoIP
echo "net.core.rmem_max = 16777216" | sudo tee -a /etc/sysctl.conf
echo "net.core.wmem_max = 16777216" | sudo tee -a /etc/sysctl.conf
echo "net.ipv4.udp_mem = 102400 873800 16777216" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

# Configurar systemd para Asterisk
sudo mkdir -p /etc/systemd/system/asterisk.service.d
sudo tee /etc/systemd/system/asterisk.service.d/override.conf << 'EOF'
[Service]
LimitNOFILE=65536
LimitNPROC=32768
PrivateTmp=yes
ProtectSystem=strict
ReadWritePaths=/var/lib/asterisk /var/log/asterisk /var/spool/asterisk
EOF

CLI e Comandos de Diagnóstico:

# Conexão e comandos básicos da CLI
sudo asterisk -rvvv
core show version
core show uptime
core show channels
core show settings

# Comandos de módulos
module show
module show like sip
module reload
module load app_dial.so

# Comandos de diagnóstico avançado
core show locks
core show threads
core show taskprocessors
memory show summary
timing show

# Comandos de rede e SIP
sip show peers
sip show registry
sip show channels
rtp show stats
core show hint

Exemplos Aplicados Detalhados

Exemplo 1: Instalação Completa via Repositório (Método Profissional)

  1. Preparar sistema base:
    # Atualizar sistema sudo dnf update -y # Instalar repositórios necessários sudo dnf install -y epel-release sudo dnf config-manager --set-enabled powertools # Verificar versão do sistema cat /etc/os-release
  2. Instalar dependências completas:
    # Ferramentas de desenvolvimento sudo dnf groupinstall -y "Development Tools" # Bibliotecas essenciais sudo dnf install -y libxml2-devel sqlite-devel ncurses-devel \ openssl-devel libuuid-devel readline-devel zlib-devel \ speex-devel speexdsp-devel opus-devel
  3. Configurar usuário e diretórios:
    # Criar usuário asterisk se não existir sudo useradd -r -d /var/lib/asterisk -s /sbin/nologin asterisk # Criar estrutura de diretórios sudo mkdir -p /var/lib/asterisk/{agi-bin,keys,mohmp3,sounds,images} sudo mkdir -p /var/log/asterisk/cdr-csv sudo mkdir -p /var/spool/asterisk/{dictate,meetme,monitor,outgoing,tmp,voicemail} sudo mkdir -p /etc/asterisk # Definir permissões sudo chown -R asterisk:asterisk /var/lib/asterisk /var/log/asterisk /var/spool/asterisk sudo chown -R asterisk:asterisk /etc/asterisk
  4. Instalar Asterisk:
    # Instalar via repositório EPEL sudo dnf install -y asterisk asterisk-configs asterisk-sounds-core-en # Ou compilar from source (método avançado) cd /usr/src sudo wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-18-current.tar.gz sudo tar -xzf asterisk-18-current.tar.gz cd asterisk-18.* sudo ./configure --with-pjproject-bundled sudo make menuselect # Selecionar módulos desejados sudo make && sudo make install && sudo make samples
  5. Configurar e iniciar serviços:
    # Configurar systemd sudo systemctl daemon-reload sudo systemctl enable asterisk sudo systemctl start asterisk # Verificar status sudo systemctl status asterisk sudo asterisk -rx "core show version"

Exemplo 2: Configuração de Segurança e Performance

  1. Implementar hardening de segurança:
    # Configurar SELinux para Asterisk sudo setsebool -P asterisk_can_network_connect 1 sudo semanage port -a -t asterisk_port_t -p udp 5060 sudo semanage port -a -t asterisk_port_t -p udp 10000-20000 # Configurar firewall específico sudo firewall-cmd --new-zone=asterisk --permanent sudo firewall-cmd --zone=asterisk --add-port=5060/udp --permanent sudo firewall-cmd --zone=asterisk --add-port=5060/tcp --permanent sudo firewall-cmd --zone=asterisk --add-port=10000-20000/udp --permanent sudo firewall-cmd --reload
  2. Otimizar performance do sistema:
    # Configurar limites de recursos sudo tee /etc/systemd/system/asterisk.service.d/limits.conf << 'EOF' [Service] LimitNOFILE=65536 LimitNPROC=32768 LimitMEMLOCK=infinity Nice=-10 IOSchedulingClass=1 IOSchedulingPriority=4 EOF # Aplicar configurações de kernel sudo tee -a /etc/sysctl.d/99-asterisk.conf << 'EOF' # Otimizações para VoIP net.core.rmem_default = 262144 net.core.rmem_max = 16777216 net.core.wmem_default = 262144 net.core.wmem_max = 16777216 net.ipv4.udp_rmem_min = 8192 net.ipv4.udp_wmem_min = 8192 EOF sudo sysctl -p /etc/sysctl.d/99-asterisk.conf
  3. Configurar monitoramento:
    # Instalar ferramentas de monitoramento sudo dnf install -y htop iotop nethogs tcpdump # Configurar logrotate para Asterisk sudo tee /etc/logrotate.d/asterisk << 'EOF' /var/log/asterisk/*.log { daily rotate 30 compress delaycompress missingok notifempty create 0640 asterisk asterisk postrotate /usr/sbin/asterisk -rx "logger reload" > /dev/null 2>&1 || true endscript } EOF

Exemplo 3: Configuração Inicial e Validação

  1. Configurar arquivos básicos do Asterisk:
    # Backup das configurações originais sudo cp -r /etc/asterisk /etc/asterisk.backup.$(date +%Y%m%d) # Configuração mínima do asterisk.conf sudo tee /etc/asterisk/asterisk.conf << 'EOF' [directories] astetcdir => /etc/asterisk astmoddir => /usr/lib64/asterisk/modules astvarlibdir => /var/lib/asterisk astdbdir => /var/lib/asterisk astkeydir => /var/lib/asterisk astdatadir => /var/lib/asterisk astagidir => /var/lib/asterisk/agi-bin astspooldir => /var/spool/asterisk astrundir => /var/run/asterisk astlogdir => /var/log/asterisk [options] verbose = 3 debug = 1 runuser = asterisk rungroup = asterisk EOF
  2. Configurar logging detalhado:
    # Configurar logger.conf sudo tee /etc/asterisk/logger.conf << 'EOF' [general] dateformat=%F %T [logfiles] console => notice,warning,error,debug,verbose messages => notice,warning,error full => notice,warning,error,debug,verbose,dtmf,fax security => security EOF
  3. Validar instalação completa:
    # Reiniciar Asterisk com nova configuração sudo systemctl restart asterisk # Conectar à CLI e verificar sudo asterisk -rvvv # Na CLI do Asterisk: core show version core show uptime module show core show channels logger show channels # Verificar logs sudo tail -f /var/log/asterisk/full # Verificar recursos do sistema sudo ss -tuln | grep -E "(5060|5038)" sudo ps aux | grep asterisk sudo systemctl status asterisk

Exemplo 4: Implementação de Backup e Recovery

  1. Criar script de backup automatizado:
    # Criar script de backup sudo tee /usr/local/bin/asterisk-backup.sh << 'EOF' #!/bin/bash BACKUP_DIR="/var/backups/asterisk" DATE=$(date +%Y%m%d_%H%M%S) BACKUP_FILE="asterisk_backup_${DATE}.tar.gz" mkdir -p $BACKUP_DIR # Backup das configurações tar -czf ${BACKUP_DIR}/${BACKUP_FILE} \ /etc/asterisk \ /var/lib/asterisk \ /var/spool/asterisk/voicemail \ --exclude=/var/lib/asterisk/sounds/en \ --exclude=/var/lib/asterisk/moh # Manter apenas os últimos 7 backups find $BACKUP_DIR -name "asterisk_backup_*.tar.gz" -mtime +7 -delete echo "Backup criado: ${BACKUP_DIR}/${BACKUP_FILE}" EOF sudo chmod +x /usr/local/bin/asterisk-backup.sh
  2. Configurar backup automático:
    # Adicionar ao crontab echo "0 2 * * * /usr/local/bin/asterisk-backup.sh" | sudo crontab -u root - # Testar backup manual sudo /usr/local/bin/asterisk-backup.sh

Verificação e Troubleshooting Avançado

Problema: Asterisk não inicia após instalação.
Diagnóstico Sistemático:
  1. Verificar status do serviço: sudo systemctl status asterisk -l
  2. Verificar logs de inicialização: sudo journalctl -u asterisk --since "5 minutes ago"
  3. Verificar logs do Asterisk: sudo tail -50 /var/log/asterisk/messages
  4. Testar configuração: sudo asterisk -T -C /etc/asterisk/asterisk.conf
  5. Verificar permissões: sudo ls -la /var/run/asterisk/
  6. Verificar usuário: id asterisk
Soluções Comuns:
  • Corrigir permissões: sudo chown -R asterisk:asterisk /var/lib/asterisk /var/log/asterisk
  • Verificar sintaxe: sudo asterisk -rx "dialplan reload"
  • Recriar diretórios: sudo mkdir -p /var/run/asterisk && sudo chown asterisk:asterisk /var/run/asterisk
Problema: Performance ruim ou áudio cortado.
Diagnóstico de Performance:
# Verificar carga do sistema htop iotop -a # Verificar uso de rede nethogs ss -tuln | grep asterisk # Verificar timing do Asterisk sudo asterisk -rx "timing show" # Verificar estatísticas RTP sudo asterisk -rx "rtp show stats" # Verificar locks e threads sudo asterisk -rx "core show locks" sudo asterisk -rx "core show threads"
Otimizações:
  • Ajustar prioridade: sudo renice -10 $(pgrep asterisk)
  • Verificar codecs: sudo asterisk -rx "core show codecs"
  • Otimizar RTP: Configurar jitterbuffer e DSCP marking
Problema: Módulos não carregam ou falham.
Diagnóstico de Módulos:
# Listar módulos carregados sudo asterisk -rx "module show" # Verificar módulos com falha sudo asterisk -rx "module show like failed" # Tentar carregar módulo específico sudo asterisk -rx "module load chan_sip.so" # Verificar dependências ldd /usr/lib64/asterisk/modules/chan_sip.so
Soluções:
  • Instalar dependências faltantes
  • Recompilar módulos se necessário
  • Verificar compatibilidade de versões

Resumo e Exercícios Práticos Avançados

Revisão Abrangente: Dominamos a instalação enterprise-grade do Asterisk, incluindo preparação completa do sistema, configuração de segurança avançada, otimização de performance, implementação de monitoramento robusto, e procedimentos de backup/recovery. O sistema está profissionalmente preparado para produção com máxima confiabilidade e segurança.

Exercício 1 (Básico): Instalação e configuração inicial:
  • Instale o Asterisk via repositório oficial
  • Configure usuário e permissões adequadas
  • Inicie o serviço e conecte à CLI
  • Execute comandos básicos: core show version, module show, core show uptime
  • Verifique logs em /var/log/asterisk/messages

Exercício 2 (Intermediário): Configuração de segurança e performance:
  • Configure limites de sistema (ulimits) para o usuário asterisk
  • Implemente otimizações de kernel para VoIP
  • Configure firewall com zonas específicas para Asterisk
  • Configure SELinux/AppArmor para Asterisk
  • Implemente logrotate para gerenciamento de logs

Exercício 3 (Avançado): Monitoramento e backup enterprise:
  • Configure monitoramento de performance com htop, iotop, nethogs
  • Implemente script de backup automatizado
  • Configure cron para backups diários
  • Teste procedimento de recovery completo
  • Configure alertas para falhas de serviço
  • Implemente monitoramento de recursos via SNMP

Validação Final Completa: Execute a seguinte bateria de testes:
# Verificação de instalação sudo systemctl status asterisk sudo asterisk -rx "core show version" sudo asterisk -rx "core show uptime" # Verificação de módulos sudo asterisk -rx "module show" | wc -l sudo asterisk -rx "module show like sip" # Verificação de performance sudo asterisk -rx "core show threads" sudo asterisk -rx "timing show" # Verificação de segurança sudo ss -tuln | grep -E "(5060|5038)" sudo firewall-cmd --list-all | grep -E "(5060|10000-20000)" # Verificação de logs sudo tail -10 /var/log/asterisk/messages sudo journalctl -u asterisk --since "1 hour ago" | tail -10 # Teste de backup sudo /usr/local/bin/asterisk-backup.sh ls -la /var/backups/asterisk/
Aula 5

Estrutura de Diretórios e Arquivos do Asterisk

Objetivos da Aula

Objetivo Principal: Dominar completamente a estrutura de diretórios e arquivos do Asterisk, compreendendo a função de cada componente, implementando práticas de backup e versionamento de configurações, e estabelecendo procedimentos de manutenção profissional.

Objetivos Específicos: Navegar com confiança pela hierarquia de diretórios do Asterisk, identificar e configurar arquivos críticos, implementar estratégias de backup automatizado, estabelecer controle de versão para configurações, configurar rotação de logs avançada, e dominar técnicas de troubleshooting baseadas em análise de arquivos.

Resumo do Conteúdo

Visão Geral: Esta aula oferece um tour completo e profissional pela arquitetura de arquivos do Asterisk, desde a compreensão básica da estrutura até a implementação de práticas enterprise de gerenciamento de configurações. Abordaremos não apenas onde os arquivos estão localizados, mas como gerenciá-los de forma profissional, incluindo backup automatizado, controle de versão, monitoramento de mudanças, e estratégias de recovery. O foco está em preparar o aluno para ambientes de produção onde a gestão adequada de configurações é crítica para a operação confiável do sistema.

Tópicos Técnicos e Conceituais Avançados

Estrutura Completa de Diretórios:

  • Diretório de Configuração (/etc/asterisk):
    • Arquivos principais: asterisk.conf, modules.conf, logger.conf
    • Configurações de canais: sip.conf, pjsip.conf, iax.conf, dahdi.conf
    • Dialplan e aplicações: extensions.conf, features.conf, queues.conf
    • Segurança e autenticação: manager.conf, http.conf, res_stun_monitor.conf
    • Codecs e mídia: codecs.conf, rtp.conf, musiconhold.conf
  • Diretório de Logs (/var/log/asterisk):
    • full: Log completo com todas as mensagens
    • messages: Log de mensagens gerais do sistema
    • error: Log específico de erros
    • debug: Log de debug detalhado
    • security: Log de eventos de segurança
    • cdr-csv/: Registros de chamadas em CSV
  • Diretório de Dados (/var/lib/asterisk):
    • sounds/: Arquivos de áudio do sistema
    • mohmp3/: Música de espera
    • agi-bin/: Scripts AGI (Asterisk Gateway Interface)
    • keys/: Chaves de criptografia
    • astdb: Banco de dados interno do Asterisk
  • Diretório de Spool (/var/spool/asterisk):
    • voicemail/: Mensagens de correio de voz
    • outgoing/: Arquivos de chamadas automáticas
    • tmp/: Arquivos temporários

Arquivos de Configuração Críticos:

  • asterisk.conf: Configurações globais, diretórios, usuário de execução
  • modules.conf: Controle de carregamento de módulos
  • logger.conf: Configuração detalhada de logs
  • sip.conf vs pjsip.conf: Stacks SIP legado vs moderno
  • extensions.conf: Dialplan - lógica de roteamento de chamadas
  • voicemail.conf: Sistema de correio de voz
  • manager.conf: Interface de gerenciamento AMI
  • http.conf: Servidor web integrado e ARI

Conceitos Avançados de Gerenciamento:

  • Versionamento de Configurações: Git para controle de versão
  • Backup Estratégico: Backup diferencial e incremental
  • Rotação de Logs: Logrotate personalizado para Asterisk
  • Monitoramento de Mudanças: inotify para detecção de alterações
  • Validação de Configurações: Testes automatizados de sintaxe

Comandos e Procedimentos Práticos Detalhados

Exploração e Análise de Estrutura:

# Análise completa da estrutura de diretórios find /etc/asterisk -type f -name "*.conf" | head -20 find /var/log/asterisk -type f | head -10 find /var/lib/asterisk -type d | head -10 # Análise de tamanhos e permissões ls -lah /etc/asterisk/ | head -20 du -sh /var/log/asterisk/* du -sh /var/lib/asterisk/* # Verificação de propriedade e permissões ls -la /etc/asterisk/ | grep -E "(sip|extensions|asterisk)\.conf" stat /etc/asterisk/asterisk.conf # Análise de dependências entre arquivos grep -r "include" /etc/asterisk/ | head -10 grep -r "#include" /etc/asterisk/ | head -5

Backup e Versionamento Avançado:

# Backup completo com timestamp sudo tar -czf /var/backups/asterisk-config-$(date +%Y%m%d-%H%M%S).tar.gz /etc/asterisk/ # Inicializar repositório Git para versionamento cd /etc/asterisk sudo git init sudo git add *.conf sudo git commit -m "Initial Asterisk configuration" # Backup diferencial baseado em mudanças sudo rsync -av --delete /etc/asterisk/ /var/backups/asterisk-config-current/ # Verificação de integridade de backups sudo tar -tzf /var/backups/asterisk-config-*.tar.gz | head -10

Monitoramento e Análise de Logs:

# Análise de logs em tempo real sudo tail -f /var/log/asterisk/full | grep -E "(ERROR|WARNING|NOTICE)" # Análise de padrões de erro sudo grep -E "ERROR|CRITICAL" /var/log/asterisk/messages | tail -20 # Estatísticas de logs sudo wc -l /var/log/asterisk/* sudo grep -c "ERROR" /var/log/asterisk/messages # Análise de logs por período sudo journalctl -u asterisk --since "1 hour ago" | tail -20

Validação e Testes de Configuração:

# Teste de sintaxe de configurações sudo asterisk -rx "core reload" sudo asterisk -rx "dialplan reload" sudo asterisk -rx "sip reload" # Verificação de módulos carregados sudo asterisk -rx "module show" | grep -E "(sip|pjsip|chan)" # Teste de conectividade de arquivos sudo asterisk -rx "core show file formats" sudo asterisk -rx "core show codecs"

Exemplos Aplicados Detalhados

Exemplo 1: Setup Completo de Estrutura e Backup

Objetivo: Configurar estrutura profissional de diretórios com backup automatizado
  1. Análise inicial da estrutura:
    # Verificar estrutura atual sudo find /etc/asterisk -name "*.conf" | wc -l sudo ls -la /etc/asterisk/ | grep -E "\.(conf|inc)$" # Verificar espaço disponível df -h /etc /var/log /var/lib /var/spool # Verificar permissões atuais sudo ls -la /etc/asterisk/asterisk.conf sudo ls -la /var/log/asterisk/
  2. Criar estrutura de backup:
    # Criar diretórios de backup sudo mkdir -p /var/backups/asterisk/{config,logs,data} sudo mkdir -p /var/backups/asterisk/config/{daily,weekly,monthly} # Configurar permissões adequadas sudo chown -R asterisk:asterisk /var/backups/asterisk/ sudo chmod 750 /var/backups/asterisk/
  3. Implementar backup inicial:
    # Backup completo inicial sudo tar -czf /var/backups/asterisk/config/initial-backup-$(date +%Y%m%d).tar.gz /etc/asterisk/ # Backup de dados críticos sudo cp -r /var/lib/asterisk/astdb /var/backups/asterisk/data/ sudo cp -r /var/spool/asterisk/voicemail /var/backups/asterisk/data/ # Verificar integridade sudo tar -tzf /var/backups/asterisk/config/initial-backup-*.tar.gz | head -10
  4. Configurar versionamento Git:
    # Inicializar repositório cd /etc/asterisk sudo git init sudo git config user.name "Asterisk Admin" sudo git config user.email "admin@empresa.com" # Adicionar arquivos principais sudo git add asterisk.conf extensions.conf sip.conf pjsip.conf sudo git add logger.conf modules.conf manager.conf sudo git commit -m "Initial Asterisk configuration setup"

Exemplo 2: Configuração Avançada de Logs e Monitoramento

Objetivo: Implementar sistema robusto de logs com rotação e monitoramento
  1. Configurar logger.conf avançado:
    # Editar configuração de logs sudo nano /etc/asterisk/logger.conf # Conteúdo sugerido: [general] dateformat=%F %T.%3q use_callids=yes [logfiles] console => notice,warning,error,debug,verbose messages => notice,warning,error full => notice,warning,error,debug,verbose,dtmf,fax security => security errors => error debug => debug verbose => verbose
  2. Configurar logrotate personalizado:
    # Criar configuração de rotação sudo nano /etc/logrotate.d/asterisk # Conteúdo: /var/log/asterisk/*.log /var/log/asterisk/messages { daily missingok rotate 30 compress delaycompress notifempty create 0640 asterisk asterisk postrotate /usr/sbin/asterisk -rx 'logger reload' > /dev/null 2>&1 || true endscript }
  3. Implementar monitoramento de mudanças:
    # Instalar inotify-tools sudo dnf install -y inotify-tools # Criar script de monitoramento sudo nano /usr/local/bin/asterisk-config-monitor.sh # Script básico: #!/bin/bash inotifywait -m -r -e modify,create,delete /etc/asterisk/ | while read path action file; do echo "$(date): $action detected on $path$file" >> /var/log/asterisk/config-changes.log cd /etc/asterisk && git add . && git commit -m "Auto-commit: $action on $file" done

Exemplo 3: Análise e Otimização de Performance de Arquivos

Objetivo: Otimizar acesso a arquivos e performance do sistema
  1. Análise de performance de I/O:
    # Monitorar I/O de arquivos do Asterisk sudo iotop -a -o -d 1 | grep asterisk # Verificar arquivos mais acessados sudo lsof -p $(pgrep asterisk) | grep -E "\.(conf|log)$" # Análise de fragmentação sudo filefrag /var/log/asterisk/full sudo filefrag /etc/asterisk/*.conf
  2. Otimizar configurações de sistema:
    # Configurar noatime para logs (em /etc/fstab) # /var/log ext4 defaults,noatime 0 2 # Configurar tmpfs para arquivos temporários echo "tmpfs /var/spool/asterisk/tmp tmpfs defaults,size=100M 0 0" | sudo tee -a /etc/fstab # Aplicar otimizações sudo mount -o remount /var/log sudo mount /var/spool/asterisk/tmp
  3. Implementar cache de configurações:
    # Verificar cache do Asterisk sudo asterisk -rx "core show settings" | grep -i cache # Configurar cache de DNS echo "nameserver 8.8.8.8" | sudo tee -a /etc/resolv.conf echo "nameserver 8.8.4.4" | sudo tee -a /etc/resolv.conf # Otimizar acesso a arquivos de som sudo find /var/lib/asterisk/sounds -name "*.wav" -exec chmod 644 {} \;

Exemplo 4: Recovery e Disaster Recovery

Objetivo: Implementar procedimentos de recovery completos
  1. Criar script de backup automatizado:
    # Criar script de backup completo sudo nano /usr/local/bin/asterisk-full-backup.sh #!/bin/bash BACKUP_DIR="/var/backups/asterisk" DATE=$(date +%Y%m%d-%H%M%S) # Parar Asterisk temporariamente systemctl stop asterisk # Backup de configurações tar -czf "$BACKUP_DIR/config/asterisk-config-$DATE.tar.gz" /etc/asterisk/ # Backup de dados tar -czf "$BACKUP_DIR/data/asterisk-data-$DATE.tar.gz" /var/lib/asterisk/ /var/spool/asterisk/ # Backup de logs recentes tar -czf "$BACKUP_DIR/logs/asterisk-logs-$DATE.tar.gz" /var/log/asterisk/ # Reiniciar Asterisk systemctl start asterisk # Limpar backups antigos (manter 30 dias) find "$BACKUP_DIR" -name "*.tar.gz" -mtime +30 -delete
  2. Testar procedimento de recovery:
    # Simular falha (backup de segurança primeiro) sudo cp -r /etc/asterisk /etc/asterisk.backup # Restaurar de backup sudo systemctl stop asterisk sudo rm -rf /etc/asterisk/* sudo tar -xzf /var/backups/asterisk/config/asterisk-config-*.tar.gz -C / sudo systemctl start asterisk # Verificar integridade sudo asterisk -rx "core show version" sudo asterisk -rx "dialplan show"

Verificação e Troubleshooting Avançado

Problema: Asterisk não carrega configurações após edição.
Diagnóstico Avançado:
# Verificar sintaxe de configuração sudo asterisk -rx "core reload" sudo asterisk -rx "dialplan reload" # Verificar logs de erro específicos sudo grep -A 5 -B 5 "ERROR" /var/log/asterisk/messages | tail -20 # Testar configuração sem reiniciar sudo asterisk -T -C /etc/asterisk/asterisk.conf # Verificar permissões de arquivos sudo ls -la /etc/asterisk/ | grep -E "(sip|extensions)\.conf"
Soluções:
  • Verificar sintaxe com asterisk -T
  • Restaurar de backup Git: sudo git checkout HEAD~1 arquivo.conf
  • Verificar permissões: sudo chown asterisk:asterisk /etc/asterisk/*.conf
Problema: Logs crescendo excessivamente e consumindo espaço.
Diagnóstico de Logs:
# Verificar tamanho de logs sudo du -sh /var/log/asterisk/* sudo ls -lah /var/log/asterisk/ | sort -k5 -hr # Identificar logs mais ativos sudo lsof /var/log/asterisk/* | grep -v deleted # Verificar configuração de rotação sudo logrotate -d /etc/logrotate.d/asterisk # Análise de crescimento sudo find /var/log/asterisk -name "*.log" -mtime -1 -exec ls -lah {} \;
Soluções:
  • Configurar logrotate adequadamente
  • Ajustar níveis de verbosidade no logger.conf
  • Implementar limpeza automática de logs antigos
Problema: Performance degradada por acesso excessivo a arquivos.
Diagnóstico de Performance:
# Monitorar I/O do Asterisk sudo iotop -a -p $(pgrep asterisk) # Verificar arquivos abertos sudo lsof -p $(pgrep asterisk) | wc -l sudo lsof -p $(pgrep asterisk) | grep -E "\.(conf|log)$" | wc -l # Análise de cache de sistema sudo cat /proc/meminfo | grep -E "(Cached|Buffers)" # Verificar fragmentação de arquivos sudo filefrag /var/log/asterisk/full
Soluções:
  • Configurar noatime em /var/log
  • Usar tmpfs para arquivos temporários
  • Otimizar configuração de cache do kernel
  • Desfragmentar arquivos de log grandes

Resumo e Exercícios Práticos Avançados

Revisão Abrangente: Dominamos completamente a estrutura de arquivos do Asterisk, desde a navegação básica até a implementação de práticas enterprise de gerenciamento, backup, versionamento e monitoramento. O sistema está preparado para operação profissional com máxima confiabilidade e rastreabilidade de mudanças.

Exercício 1 (Básico): Exploração e documentação da estrutura:
  • Navegue e documente todos os diretórios principais do Asterisk
  • Identifique os 10 arquivos de configuração mais importantes
  • Crie um mapa visual da estrutura de diretórios
  • Verifique permissões e propriedade de arquivos críticos
  • Execute comandos de análise de tamanho e uso de espaço

Exercício 2 (Intermediário): Implementação de backup e versionamento:
  • Configure repositório Git para versionamento de configurações
  • Implemente script de backup automatizado com rotação
  • Configure logrotate personalizado para logs do Asterisk
  • Teste procedimentos de recovery completo
  • Configure monitoramento de mudanças com inotify

Exercício 3 (Avançado): Otimização e monitoramento enterprise:
  • Implemente monitoramento de performance de I/O
  • Configure otimizações de sistema de arquivos
  • Crie dashboard de monitoramento de logs
  • Implemente alertas automáticos para problemas de configuração
  • Configure backup diferencial e incremental
  • Teste cenários de disaster recovery completos

Validação Final Completa: Execute a seguinte bateria de testes:
# Verificação de estrutura find /etc/asterisk -name "*.conf" | wc -l find /var/log/asterisk -type f | wc -l du -sh /var/lib/asterisk/* # Verificação de backup ls -la /var/backups/asterisk/config/ | tail -5 tar -tzf /var/backups/asterisk/config/asterisk-config-*.tar.gz | head -10 # Verificação de versionamento cd /etc/asterisk && git log --oneline | head -5 cd /etc/asterisk && git status # Verificação de logs sudo tail -10 /var/log/asterisk/messages sudo logrotate -d /etc/logrotate.d/asterisk # Verificação de performance sudo lsof -p $(pgrep asterisk) | grep -E "\.(conf|log)$" | wc -l sudo iotop -a -o -d 1 -n 3 | grep asterisk # Teste de recovery sudo asterisk -T -C /etc/asterisk/asterisk.conf sudo asterisk -rx "core reload"
Aula 6

Configuração de Ramais e Plano de Discagem

Objetivo da Aula

Ensinar o aluno a configurar dois ramais SIP básicos e a criar um plano de discagem (Dialplan) simples que permita que um ramal ligue para o outro.

Resumo do Conteúdo

Esta é a aula mais importante. Vamos editar o sip.conf para criar as "contas" dos telefones e o extensions.conf para criar a lógica de chamada, o coração de qualquer sistema de telefonia.

Tópicos Técnicos e Conceituais

  • Conceito de um Peer SIP (Ramal)
  • Estrutura do sip.conf: seções [general] e [ramal]
  • Estrutura do extensions.conf: Contexto, Extensão, Prioridade e Aplicação
  • A aplicação Dial()

Comandos e Procedimentos Práticos

nano /etc/asterisk/sip.conf - Para configurar os ramais
nano /etc/asterisk/extensions.conf - Para configurar o plano de discagem

Na CLI do Asterisk:
sip reload - Recarrega apenas as configurações SIP
dialplan reload - Recarrega apenas o plano de discagem
sip show peers - Mostra os ramais configurados e seu status

Exemplo Aplicado

Editar sip.conf:

[general] context=interno ; Contexto padrão para ramais allowguest=no udpbindaddr=0.0.0.0 [100] type=friend secret=senha123 host=dynamic [101] type=friend secret=senha123 host=dynamic

Editar extensions.conf:

[general] static=yes writeprotect=no [interno] exten => 100,1,Dial(SIP/100,20) exten => 101,1,Dial(SIP/101,20)

Na CLI do Asterisk: Executar sip reload e dialplan reload.

Verificação e Troubleshooting

Problema Comum: Ramal não registra (status "Unreachable" em sip show peers).
Diagnóstico: Verificar se o softphone está apontando para o IP correto do servidor, se a senha está correta e se não há um firewall bloqueando a porta 5060/UDP.
Problema Comum: Chamada não completa.
Diagnóstico: Olhar a saída do CLI (asterisk -rvvv) durante a chamada. Erros comuns incluem "404 Not Found" (ramal não existe no dialplan) ou "No route to host".

Resumo e Exercício Prático

Revisão: Configuramos com sucesso dois ramais SIP e criamos a lógica no dialplan para que eles possam se comunicar. Este é o primeiro passo para um PBX funcional.

Exercício: Crie um terceiro ramal, de número 102, com uma senha diferente. Adicione a lógica correspondente no extensions.conf para que ele também possa ser chamado.
Aula 7

Testes Avançados de Chamadas e Troubleshooting Profissional

Objetivos da Aula

Objetivo Principal: Dominar completamente os testes de chamadas em ambientes profissionais, implementar troubleshooting avançado com ferramentas especializadas, configurar monitoramento em tempo real de qualidade de chamadas, e estabelecer procedimentos de diagnóstico sistemático para resolução rápida de problemas em sistemas de telefonia IP.

Objetivos Específicos: Configurar e usar softphones profissionais com parâmetros otimizados, implementar testes automatizados de qualidade de chamadas, dominar ferramentas de debug avançado do Asterisk, configurar monitoramento de RTP e qualidade de áudio, estabelecer procedimentos de troubleshooting sistemático, e implementar alertas proativos para problemas de telefonia.

Resumo do Conteúdo

Visão Geral: Esta aula representa a transição de um ambiente de laboratório para operação profissional. Abordaremos testes rigorosos de qualidade, troubleshooting sistemático, e monitoramento proativo. O foco está em garantir que o sistema não apenas funcione, mas opere com qualidade enterprise, detectando e resolvendo problemas antes que afetem os usuários. Exploraremos ferramentas avançadas de diagnóstico, análise de tráfego SIP/RTP, e implementação de métricas de qualidade de serviço.

Tópicos Técnicos e Conceituais Avançados

Arquitetura de Testes de Telefonia IP:

  • Tipos de Testes:
    • Testes de Conectividade: Registro, ping SIP, qualificação
    • Testes de Qualidade: MOS, jitter, latência, perda de pacotes
    • Testes de Carga: Chamadas simultâneas, stress testing
    • Testes de Funcionalidade: Transferência, conferência, correio de voz
  • Métricas de Qualidade (QoS):
    • MOS (Mean Opinion Score): 1-5 (4+ = boa qualidade)
    • Jitter: Variação de delay (<30ms = aceitável)
    • Latência: Delay de ida e volta (<150ms = boa)
    • Perda de Pacotes: <1% = aceitável, <0.1% = excelente
  • Protocolos de Diagnóstico:
    • RTCP: Relatórios de qualidade RTP
    • SIP OPTIONS: Verificação de conectividade
    • STUN/TURN: Resolução de NAT
    • SNMP: Monitoramento de rede

Ferramentas Avançadas de Debug:

  • Debug Nativo do Asterisk:
    • Verbosidade granular por módulo
    • Debug específico de protocolos (SIP, RTP, PJSIP)
    • Logging estruturado com timestamps
    • Core dumps para análise de crashes
  • Ferramentas de Rede:
    • tcpdump/Wireshark: Captura e análise de pacotes
    • ngrep: Análise de texto em tempo real
    • iftop: Monitoramento de largura de banda
    • ss/netstat: Análise de conexões
  • Ferramentas de Sistema:
    • strace: Rastreamento de system calls
    • gdb: Debug de processos
    • valgrind: Análise de memória
    • perf: Profiling de performance

Conceitos de Troubleshooting Sistemático:

  • Metodologia de Diagnóstico:
    • Identificação: Sintomas e escopo do problema
    • Isolamento: Camada OSI afetada
    • Análise: Coleta de evidências
    • Resolução: Implementação de correção
    • Verificação: Confirmação da solução
    • Documentação: Registro para futura referência
  • Categorização de Problemas:
    • Camada 1-2: Conectividade física/enlace
    • Camada 3: Roteamento IP
    • Camada 4: TCP/UDP, portas
    • Camada 5-7: SIP, RTP, aplicação

Monitoramento Proativo e Alertas:

  • Métricas de Sistema: CPU, memória, I/O, rede
  • Métricas de Asterisk: Canais ativos, registros, qualidade de chamadas
  • Métricas de Rede: Latência, jitter, perda de pacotes
  • Alertas Inteligentes: Thresholds dinâmicos, correlação de eventos

Comandos e Procedimentos Práticos Detalhados

Debug Avançado do Asterisk:

# Debug granular por módulo sudo asterisk -rx "core set verbose 5" sudo asterisk -rx "core set debug 3 chan_sip.c" sudo asterisk -rx "core set debug 3 chan_pjsip.c" # Debug específico de protocolos sudo asterisk -rx "sip set debug on" sudo asterisk -rx "pjsip set logger on" sudo asterisk -rx "rtp set debug on" sudo asterisk -rx "rtcp set debug on" # Logging estruturado sudo asterisk -rx "logger add channel /tmp/debug-session.log notice,warning,error,debug,verbose" sudo asterisk -rx "logger show channels" # Análise de performance em tempo real sudo asterisk -rx "core show taskprocessors" sudo asterisk -rx "core show locks" sudo asterisk -rx "core show threads"

Testes de Conectividade e Qualidade:

# Testes de conectividade SIP sudo asterisk -rx "sip qualify peer 100" sudo asterisk -rx "pjsip qualify endpoint 200" sudo asterisk -rx "sip show peer 100" # Testes de qualidade de chamadas sudo asterisk -rx "rtp show stats" sudo asterisk -rx "core show channels verbose" sudo asterisk -rx "rtcp show stats" # Testes automatizados sudo asterisk -rx "originate SIP/100 extension echo@test-context" sudo asterisk -rx "originate Local/100@interno extension 101@interno" # Verificação de codecs e transcodificação sudo asterisk -rx "core show translation" sudo asterisk -rx "core show codecs" sudo asterisk -rx "core show codec g711"

Análise de Tráfego de Rede:

# Captura de tráfego SIP sudo tcpdump -i any -n -s 0 port 5060 -w sip-capture.pcap sudo ngrep -q -W byline port 5060 # Captura de tráfego RTP sudo tcpdump -i any -n portrange 10000-20000 -w rtp-capture.pcap # Análise de largura de banda sudo iftop -i eth0 -P -n -N sudo nethogs eth0 # Monitoramento de conexões sudo ss -tuln | grep -E "(5060|10000)" sudo netstat -tuln | grep asterisk

Monitoramento de Sistema e Performance:

# Monitoramento de recursos do Asterisk sudo top -p $(pgrep asterisk) sudo htop -p $(pgrep asterisk) sudo iotop -a -p $(pgrep asterisk) # Análise de memória sudo pmap -x $(pgrep asterisk) sudo cat /proc/$(pgrep asterisk)/status | grep -E "(VmSize|VmRSS|VmData)" # Análise de file descriptors sudo lsof -p $(pgrep asterisk) | wc -l sudo ls -la /proc/$(pgrep asterisk)/fd | wc -l # Monitoramento de I/O sudo iostat -x 1 5 sudo pidstat -d 1 5 -p $(pgrep asterisk)

Exemplos Aplicados Detalhados

Exemplo 1: Configuração de Softphones Profissionais e Testes de Qualidade

Objetivo: Configurar softphones com parâmetros otimizados e implementar testes rigorosos
  1. Configurar softphones com parâmetros avançados:
    # Parâmetros recomendados para softphones profissionais: # Zoiper (arquivo de configuração) [Account1] Username=100 Password=Str0ng_P@ssw0rd_100 Domain=192.168.1.100 Proxy=192.168.1.100:5060 Transport=UDP DTMF=RFC2833 Codec1=PCMU Codec2=PCMA Codec3=GSM VAD=No CNG=No EchoCancellation=Yes NoiseReduction=Yes AGC=Yes # Configurações de QoS DSCP=46 RTPTimeout=30 SIPTimeout=32 KeepAlive=25 # Linphone (linphonerc) [sip] default_proxy=0 register_only_when_network_is_up=1 register_only_when_upnp_is_ok=1 [proxy_0] reg_proxy=sip:192.168.1.100:5060 reg_identity=sip:100@192.168.1.100 reg_password=Str0ng_P@ssw0rd_100 reg_expires=3600 quality_reporting_enabled=1 quality_reporting_interval=5
  2. Implementar testes automatizados de qualidade:
    # Script de teste de qualidade de chamadas sudo nano /usr/local/bin/call-quality-test.sh #!/bin/bash # Teste automatizado de qualidade de chamadas LOG_FILE="/var/log/asterisk/quality-test.log" DATE=$(date '+%Y-%m-%d %H:%M:%S') # Função para log log_test() { echo "[$DATE] $1" >> $LOG_FILE } # Teste 1: Conectividade SIP log_test "=== INICIANDO TESTE DE QUALIDADE ===" SIP_STATUS=$(asterisk -rx "sip show peers" | grep "100" | awk '{print $6}') log_test "Status SIP Ramal 100: $SIP_STATUS" # Teste 2: Qualificação de ramais QUALIFY_100=$(asterisk -rx "sip qualify peer 100" 2>&1) log_test "Qualificação 100: $QUALIFY_100" # Teste 3: Chamada de teste automatizada log_test "Iniciando chamada de teste..." asterisk -rx "originate SIP/100 extension *43@interno" & CALL_PID=$! sleep 10 # Teste 4: Análise de qualidade RTP RTP_STATS=$(asterisk -rx "rtp show stats" | grep -A 10 -B 2 "100") log_test "Estatísticas RTP: $RTP_STATS" # Teste 5: Verificar canais ativos ACTIVE_CHANNELS=$(asterisk -rx "core show channels" | grep "active call") log_test "Canais ativos: $ACTIVE_CHANNELS" # Finalizar chamada de teste kill $CALL_PID 2>/dev/null asterisk -rx "soft hangup SIP/100-*" 2>/dev/null log_test "=== TESTE CONCLUÍDO ==="
  3. Configurar monitoramento contínuo:
    # Script de monitoramento contínuo sudo nano /usr/local/bin/continuous-quality-monitor.sh #!/bin/bash # Monitor contínuo de qualidade while true; do # Coletar métricas de qualidade TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S') # Métricas de sistema CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1) MEM_USAGE=$(free | grep Mem | awk '{printf "%.1f", $3/$2 * 100.0}') # Métricas de Asterisk ACTIVE_CALLS=$(asterisk -rx "core show channels" | grep "active call" | awk '{print $1}') SIP_PEERS=$(asterisk -rx "sip show peers" | grep "OK" | wc -l) # Log das métricas echo "$TIMESTAMP,CPU:$CPU_USAGE,MEM:$MEM_USAGE,CALLS:$ACTIVE_CALLS,PEERS:$SIP_PEERS" >> /var/log/asterisk/quality-metrics.csv # Alertas automáticos if (( $(echo "$CPU_USAGE > 80" | bc -l) )); then echo "$TIMESTAMP - ALERTA: CPU alta - $CPU_USAGE%" >> /var/log/asterisk/alerts.log fi if [ "$ACTIVE_CALLS" -gt 50 ]; then echo "$TIMESTAMP - ALERTA: Muitas chamadas ativas - $ACTIVE_CALLS" >> /var/log/asterisk/alerts.log fi sleep 30 done

Exemplo 2: Troubleshooting Sistemático de Problemas de Áudio

Objetivo: Implementar diagnóstico sistemático para problemas de qualidade de áudio
  1. Diagnóstico de problemas de áudio unidirecional:
    # Script de diagnóstico de áudio sudo nano /usr/local/bin/audio-troubleshoot.sh #!/bin/bash # Diagnóstico sistemático de problemas de áudio echo "=== DIAGNÓSTICO DE ÁUDIO ===" echo "Data/Hora: $(date)" echo # Passo 1: Verificar configuração de NAT echo "1. Verificando configuração de NAT..." grep -E "(externip|localnet|nat)" /etc/asterisk/sip.conf echo # Passo 2: Verificar portas RTP echo "2. Verificando configuração de portas RTP..." grep -E "rtpstart|rtpend" /etc/asterisk/rtp.conf echo # Passo 3: Verificar firewall echo "3. Verificando regras de firewall..." sudo firewall-cmd --list-ports | grep -E "(5060|10000-20000)" sudo iptables -L | grep -E "(5060|10000:20000)" echo # Passo 4: Testar conectividade RTP echo "4. Testando conectividade RTP..." sudo netstat -tuln | grep -E ":1[0-9]{4}" echo # Passo 5: Verificar codecs em uso echo "5. Verificando codecs..." asterisk -rx "core show translation" echo # Passo 6: Análise de tráfego em tempo real echo "6. Iniciando captura de tráfego (30 segundos)..." timeout 30 sudo tcpdump -i any -n portrange 10000-20000 -c 100 > /tmp/rtp-analysis.txt 2>&1 & echo "Faça uma chamada de teste agora..." wait echo "Pacotes RTP capturados:" wc -l /tmp/rtp-analysis.txt
  2. Análise avançada de qualidade RTP:
    # Script de análise de qualidade RTP sudo nano /usr/local/bin/rtp-quality-analysis.sh #!/bin/bash # Análise detalhada de qualidade RTP echo "=== ANÁLISE DE QUALIDADE RTP ===" # Capturar estatísticas RTP durante chamada ativa if asterisk -rx "core show channels" | grep -q "active call"; then echo "Chamada ativa detectada. Coletando estatísticas..." # Coletar estatísticas múltiplas vezes for i in {1..5}; do echo "--- Coleta $i/5 ---" asterisk -rx "rtp show stats" | grep -A 20 -B 5 "SSRC" sleep 2 done # Análise de RTCP echo "=== Relatórios RTCP ===" asterisk -rx "rtcp show stats" # Verificar transcodificação echo "=== Verificação de Transcodificação ===" asterisk -rx "core show translation" | grep -E "(ulaw|alaw|gsm)" else echo "Nenhuma chamada ativa. Iniciando chamada de teste..." asterisk -rx "originate SIP/100 extension *43@interno" & sleep 5 # Repetir análise $0 fi
  3. Implementar correções automáticas:
    # Script de correções automáticas sudo nano /usr/local/bin/audio-auto-fix.sh #!/bin/bash # Correções automáticas para problemas de áudio echo "=== APLICANDO CORREÇÕES AUTOMÁTICAS ===" # Correção 1: Otimizar configuração de NAT echo "1. Otimizando configuração de NAT..." if ! grep -q "nat=force_rport,comedia" /etc/asterisk/sip.conf; then sudo sed -i '/\[general\]/a nat=force_rport,comedia' /etc/asterisk/sip.conf echo " - Configuração NAT adicionada" fi # Correção 2: Configurar externip automaticamente EXTERNAL_IP=$(curl -s ifconfig.me) if [ ! -z "$EXTERNAL_IP" ]; then if ! grep -q "externip=" /etc/asterisk/sip.conf; then sudo sed -i "/\[general\]/a externip=$EXTERNAL_IP" /etc/asterisk/sip.conf echo " - IP externo configurado: $EXTERNAL_IP" fi fi # Correção 3: Otimizar portas RTP echo "2. Otimizando configuração RTP..." sudo tee /etc/asterisk/rtp.conf > /dev/null << EOF [general] rtpstart=10000 rtpend=20000 rtpchecksums=no dtmftimeout=3000 rtphold=yes EOF # Correção 4: Aplicar configurações echo "3. Aplicando configurações..." asterisk -rx "sip reload" asterisk -rx "rtp reload" echo "=== CORREÇÕES APLICADAS ===" echo "Teste uma chamada para verificar a melhoria."

Exemplo 3: Monitoramento Avançado com Alertas Inteligentes

Objetivo: Implementar sistema de monitoramento proativo com alertas automáticos
  1. Configurar coleta de métricas avançadas:
    # Script de coleta de métricas sudo nano /usr/local/bin/advanced-metrics-collector.sh #!/bin/bash # Coletor avançado de métricas do Asterisk METRICS_DIR="/var/log/asterisk/metrics" mkdir -p $METRICS_DIR # Timestamp TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S') EPOCH=$(date +%s) # Métricas de sistema CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1) MEM_USAGE=$(free | grep Mem | awk '{printf "%.2f", $3/$2 * 100.0}') DISK_USAGE=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//') LOAD_AVG=$(uptime | awk -F'load average:' '{print $2}' | awk '{print $1}' | sed 's/,//') # Métricas de Asterisk ACTIVE_CALLS=$(asterisk -rx "core show channels" | grep "active call" | awk '{print $1}') SIP_PEERS_OK=$(asterisk -rx "sip show peers" | grep -c "OK") SIP_PEERS_TOTAL=$(asterisk -rx "sip show peers" | grep -c "^[0-9]") PJSIP_ENDPOINTS=$(asterisk -rx "pjsip show endpoints" | grep -c "Avail") # Métricas de qualidade if [ "$ACTIVE_CALLS" -gt 0 ]; then RTP_PACKETS_LOST=$(asterisk -rx "rtp show stats" | grep -o "Lost: [0-9]*" | awk '{sum+=$2} END {print sum+0}') RTP_JITTER=$(asterisk -rx "rtp show stats" | grep -o "Jitter: [0-9.]*" | awk '{sum+=$2; count++} END {if(count>0) print sum/count; else print 0}') else RTP_PACKETS_LOST=0 RTP_JITTER=0 fi # Salvar métricas em formato CSV echo "$EPOCH,$TIMESTAMP,$CPU_USAGE,$MEM_USAGE,$DISK_USAGE,$LOAD_AVG,$ACTIVE_CALLS,$SIP_PEERS_OK,$SIP_PEERS_TOTAL,$PJSIP_ENDPOINTS,$RTP_PACKETS_LOST,$RTP_JITTER" >> $METRICS_DIR/metrics.csv # Salvar métricas em formato JSON para APIs cat > $METRICS_DIR/current-metrics.json << EOF { "timestamp": "$TIMESTAMP", "epoch": $EPOCH, "system": { "cpu_usage": $CPU_USAGE, "memory_usage": $MEM_USAGE, "disk_usage": $DISK_USAGE, "load_average": $LOAD_AVG }, "asterisk": { "active_calls": $ACTIVE_CALLS, "sip_peers_ok": $SIP_PEERS_OK, "sip_peers_total": $SIP_PEERS_TOTAL, "pjsip_endpoints": $PJSIP_ENDPOINTS }, "quality": { "rtp_packets_lost": $RTP_PACKETS_LOST, "rtp_jitter": $RTP_JITTER } } EOF
  2. Implementar sistema de alertas inteligentes:
    # Sistema de alertas inteligentes sudo nano /usr/local/bin/intelligent-alerts.sh #!/bin/bash # Sistema de alertas inteligentes ALERTS_LOG="/var/log/asterisk/alerts.log" METRICS_FILE="/var/log/asterisk/metrics/current-metrics.json" # Função para enviar alerta send_alert() { local severity=$1 local message=$2 local timestamp=$(date '+%Y-%m-%d %H:%M:%S') echo "[$timestamp] [$severity] $message" >> $ALERTS_LOG # Enviar por email (configurar sendmail/postfix) # echo "$message" | mail -s "Asterisk Alert [$severity]" admin@empresa.com # Enviar para syslog logger -p local0.$severity "Asterisk: $message" # Webhook para sistemas de monitoramento # curl -X POST -H "Content-Type: application/json" \ # -d "{\"severity\":\"$severity\",\"message\":\"$message\"}" \ # http://monitoring-system/webhook } # Ler métricas atuais if [ -f "$METRICS_FILE" ]; then CPU_USAGE=$(jq -r '.system.cpu_usage' $METRICS_FILE) MEM_USAGE=$(jq -r '.system.memory_usage' $METRICS_FILE) ACTIVE_CALLS=$(jq -r '.asterisk.active_calls' $METRICS_FILE) SIP_PEERS_OK=$(jq -r '.asterisk.sip_peers_ok' $METRICS_FILE) RTP_PACKETS_LOST=$(jq -r '.quality.rtp_packets_lost' $METRICS_FILE) RTP_JITTER=$(jq -r '.quality.rtp_jitter' $METRICS_FILE) else echo "Arquivo de métricas não encontrado!" exit 1 fi # Alertas de sistema if (( $(echo "$CPU_USAGE > 80" | bc -l) )); then send_alert "warning" "CPU usage high: ${CPU_USAGE}%" fi if (( $(echo "$MEM_USAGE > 90" | bc -l) )); then send_alert "critical" "Memory usage critical: ${MEM_USAGE}%" fi # Alertas de telefonia if [ "$SIP_PEERS_OK" -eq 0 ]; then send_alert "critical" "No SIP peers registered!" fi if [ "$ACTIVE_CALLS" -gt 100 ]; then send_alert "warning" "High call volume: $ACTIVE_CALLS active calls" fi # Alertas de qualidade if (( $(echo "$RTP_JITTER > 50" | bc -l) )); then send_alert "warning" "High RTP jitter detected: ${RTP_JITTER}ms" fi if [ "$RTP_PACKETS_LOST" -gt 100 ]; then send_alert "warning" "RTP packet loss detected: $RTP_PACKETS_LOST packets" fi # Verificar tendências (últimas 5 medições) RECENT_CPU=$(tail -5 /var/log/asterisk/metrics/metrics.csv | awk -F',' '{sum+=$3; count++} END {print sum/count}') if (( $(echo "$RECENT_CPU > 70" | bc -l) )); then send_alert "info" "CPU usage trending high: average ${RECENT_CPU}% over last 5 measurements" fi
  3. Configurar dashboard de monitoramento:
    # Script para gerar dashboard HTML sudo nano /usr/local/bin/generate-dashboard.sh #!/bin/bash # Gerador de dashboard HTML DASHBOARD_FILE="/var/www/html/asterisk-dashboard.html" METRICS_FILE="/var/log/asterisk/metrics/current-metrics.json" # Criar diretório se não existir sudo mkdir -p /var/www/html # Gerar HTML cat > $DASHBOARD_FILE << 'EOF' Asterisk Monitoring Dashboard

    Asterisk Monitoring Dashboard

    Last Update:

    EOF # Copiar métricas para servir via web sudo cp $METRICS_FILE /var/www/html/asterisk-metrics.json echo "Dashboard gerado em: $DASHBOARD_FILE"

Exemplo 4: Testes de Carga e Performance

Objetivo: Implementar testes de carga para validar capacidade do sistema
  1. Configurar ambiente de teste de carga:
    # Script de teste de carga sudo nano /usr/local/bin/load-test.sh #!/bin/bash # Teste de carga do Asterisk CONCURRENT_CALLS=${1:-10} CALL_DURATION=${2:-30} TEST_EXTENSION="*43" # Echo test echo "=== TESTE DE CARGA ASTERISK ===" echo "Chamadas simultâneas: $CONCURRENT_CALLS" echo "Duração por chamada: $CALL_DURATION segundos" echo "Iniciando em 5 segundos..." sleep 5 # Criar arquivo de log para o teste TEST_LOG="/var/log/asterisk/load-test-$(date +%Y%m%d-%H%M%S).log" echo "Log do teste: $TEST_LOG" # Função para iniciar uma chamada start_call() { local call_id=$1 local start_time=$(date +%s) echo "[$call_id] Iniciando chamada..." >> $TEST_LOG # Originar chamada asterisk -rx "originate Local/100@interno extension $TEST_EXTENSION@interno" >> $TEST_LOG 2>&1 & local pid=$! # Aguardar duração da chamada sleep $CALL_DURATION # Finalizar chamada asterisk -rx "soft hangup Local/100@interno-*" >> $TEST_LOG 2>&1 local end_time=$(date +%s) local duration=$((end_time - start_time)) echo "[$call_id] Chamada finalizada após $duration segundos" >> $TEST_LOG } # Iniciar chamadas simultâneas echo "Iniciando $CONCURRENT_CALLS chamadas simultâneas..." for i in $(seq 1 $CONCURRENT_CALLS); do start_call $i & sleep 0.5 # Pequeno delay entre chamadas done # Monitorar durante o teste echo "Monitorando sistema durante o teste..." for i in $(seq 1 $CALL_DURATION); do ACTIVE_CALLS=$(asterisk -rx "core show channels" | grep "active call" | awk '{print $1}') CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1) MEM_USAGE=$(free | grep Mem | awk '{printf "%.1f", $3/$2 * 100.0}') echo "[$i/$CALL_DURATION] Calls: $ACTIVE_CALLS, CPU: $CPU_USAGE%, MEM: $MEM_USAGE%" | tee -a $TEST_LOG sleep 1 done # Aguardar finalização de todas as chamadas wait echo "=== TESTE CONCLUÍDO ===" echo "Verifique o log: $TEST_LOG" # Gerar relatório echo "=== RELATÓRIO DO TESTE ===" >> $TEST_LOG echo "Chamadas configuradas: $CONCURRENT_CALLS" >> $TEST_LOG echo "Duração configurada: $CALL_DURATION segundos" >> $TEST_LOG echo "Pico de CPU: $(grep "CPU:" $TEST_LOG | awk -F'CPU: ' '{print $2}' | awk -F'%' '{print $1}' | sort -n | tail -1)%" >> $TEST_LOG echo "Pico de Memória: $(grep "MEM:" $TEST_LOG | awk -F'MEM: ' '{print $2}' | awk -F'%' '{print $1}' | sort -n | tail -1)%" >> $TEST_LOG
  2. Implementar teste de stress com SIPp:
    # Instalar SIPp para testes avançados sudo dnf install -y epel-release sudo dnf install -y sipp # Script de teste com SIPp sudo nano /usr/local/bin/sipp-stress-test.sh #!/bin/bash # Teste de stress com SIPp ASTERISK_IP="127.0.0.1" CALLS_PER_SECOND=${1:-1} MAX_CONCURRENT=${2:-10} DURATION=${3:-60} echo "=== TESTE DE STRESS COM SIPP ===" echo "Servidor: $ASTERISK_IP" echo "Chamadas/segundo: $CALLS_PER_SECOND" echo "Máximo simultâneo: $MAX_CONCURRENT" echo "Duração: $DURATION segundos" # Criar cenário SIPp básico cat > /tmp/uac_scenario.xml << 'EOF' ;tag=[pid]SIPpTag00[call_number] To: 100 Call-ID: [call_id] CSeq: 1 INVITE Contact: sip:sipp@[local_ip]:[local_port] Max-Forwards: 70 Subject: Performance Test Content-Type: application/sdp Content-Length: [len] v=0 o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip] s=- c=IN IP[local_ip_type] [local_ip] t=0 0 m=audio [auto_media_port] RTP/AVP 0 a=rtpmap:0 PCMU/8000 ]]> ;tag=[pid]SIPpTag00[call_number] To: 100 [peer_tag_param] Call-ID: [call_id] CSeq: 1 ACK Contact: sip:sipp@[local_ip]:[local_port] Max-Forwards: 70 Subject: Performance Test Content-Length: 0 ]]> ;tag=[pid]SIPpTag00[call_number] To: 100 [peer_tag_param] Call-ID: [call_id] CSeq: 2 BYE Contact: sip:sipp@[local_ip]:[local_port] Max-Forwards: 70 Subject: Performance Test Content-Length: 0 ]]> EOF # Executar teste SIPp echo "Iniciando teste SIPp..." sipp -sf /tmp/uac_scenario.xml \ -i $ASTERISK_IP \ -p 5061 \ -r $CALLS_PER_SECOND \ -l $MAX_CONCURRENT \ -d $DURATION \ -trace_msg \ -trace_stat \ $ASTERISK_IP:5060 echo "Teste SIPp concluído!" echo "Verifique os arquivos de trace gerados."

Verificação e Troubleshooting Avançado

Problema: Áudio unidirecional (one-way audio) persistente.
Diagnóstico Sistemático:
# Diagnóstico completo de áudio unidirecional echo "=== DIAGNÓSTICO DE ÁUDIO UNIDIRECIONAL ===" # 1. Verificar configuração de NAT echo "1. Configuração de NAT:" grep -E "(nat|externip|localnet)" /etc/asterisk/sip.conf # 2. Verificar portas RTP echo "2. Portas RTP:" grep -E "(rtpstart|rtpend)" /etc/asterisk/rtp.conf sudo netstat -tuln | grep -E ":1[0-9]{4}" # 3. Capturar tráfego RTP durante chamada echo "3. Capturando tráfego RTP (faça uma chamada agora):" timeout 30 sudo tcpdump -i any -n portrange 10000-20000 -c 50 # 4. Verificar firewall echo "4. Regras de firewall:" sudo firewall-cmd --list-ports sudo iptables -L -n | grep -E "(5060|10000:20000)" # 5. Testar conectividade bidirecional echo "5. Teste de conectividade:" asterisk -rx "rtp set debug on" # Fazer chamada de teste asterisk -rx "originate SIP/100 extension *43@interno" sleep 10 asterisk -rx "rtp show stats" asterisk -rx "soft hangup SIP/100-*"
Soluções Avançadas:
  • Configurar STUN server para resolução automática de NAT
  • Implementar ICE (Interactive Connectivity Establishment)
  • Usar TURN server para casos complexos de NAT
  • Configurar media proxy/relay interno
  • Otimizar configurações de codec para reduzir latência
Problema: Degradação de qualidade com múltiplas chamadas simultâneas.
Diagnóstico de Performance:
# Diagnóstico de performance sob carga echo "=== DIAGNÓSTICO DE PERFORMANCE ===" # 1. Monitorar recursos durante carga echo "1. Recursos do sistema:" top -bn1 | head -20 free -h iostat -x 1 3 # 2. Análise específica do Asterisk echo "2. Performance do Asterisk:" asterisk -rx "core show taskprocessors" asterisk -rx "core show locks" asterisk -rx "core show threads" # 3. Análise de transcodificação echo "3. Transcodificação:" asterisk -rx "core show translation" asterisk -rx "core show codecs" # 4. Análise de I/O echo "4. I/O do processo:" sudo iotop -a -p $(pgrep asterisk) -n 5 # 5. Análise de rede echo "5. Tráfego de rede:" sudo iftop -i eth0 -t -s 10
Otimizações de Performance:
  • Otimizar configuração de codecs (evitar transcodificação)
  • Configurar thread pools adequadamente
  • Implementar QoS na rede
  • Otimizar configurações de kernel (ulimits, tcp buffers)
  • Usar SSD para logs e configurações
Problema: Falhas intermitentes de registro de ramais.
Diagnóstico de Conectividade:
# Diagnóstico de problemas de registro echo "=== DIAGNÓSTICO DE REGISTRO ===" # 1. Monitorar tentativas de registro echo "1. Monitorando registros SIP:" asterisk -rx "sip set debug on" tail -f /var/log/asterisk/messages | grep -i register & TAIL_PID=$! # 2. Verificar configuração de peers echo "2. Configuração de peers:" asterisk -rx "sip show peers" asterisk -rx "sip show registry" # 3. Análise de conectividade de rede echo "3. Conectividade de rede:" sudo ss -tuln | grep :5060 sudo netstat -i ping -c 5 IP_DO_CLIENTE # 4. Verificar logs de autenticação echo "4. Logs de autenticação:" grep -i "authentication\|registration" /var/log/asterisk/messages | tail -20 # 5. Teste de qualificação echo "5. Teste de qualificação:" asterisk -rx "sip qualify peer 100" # Parar monitoramento sleep 30 kill $TAIL_PID
Soluções de Conectividade:
  • Configurar keep-alive adequado (qualify=yes)
  • Ajustar timeouts de registro
  • Implementar redundância de rede
  • Configurar retry automático
  • Monitorar qualidade de link

Resumo e Exercícios Práticos Avançados

Revisão Abrangente: Dominamos completamente os testes avançados de chamadas, troubleshooting sistemático, monitoramento proativo e análise de performance. O sistema está preparado para operação enterprise com diagnóstico automatizado, alertas inteligentes e resolução rápida de problemas. Implementamos ferramentas profissionais de análise de qualidade e performance.

Exercício 1 (Básico): Testes fundamentais de qualidade:
  • Configure 2 softphones com parâmetros otimizados
  • Execute testes de conectividade e registro
  • Realize chamadas de teste com análise de qualidade
  • Configure debug avançado e analise logs
  • Implemente monitoramento básico de métricas

Exercício 2 (Intermediário): Troubleshooting sistemático:
  • Simule problemas de áudio unidirecional e resolva
  • Configure captura de tráfego SIP/RTP
  • Implemente scripts de diagnóstico automático
  • Configure alertas para problemas de qualidade
  • Teste cenários de falha e recovery

Exercício 3 (Avançado): Sistema de monitoramento enterprise:
  • Implemente coleta avançada de métricas
  • Configure dashboard de monitoramento em tempo real
  • Execute testes de carga com múltiplas chamadas
  • Configure alertas inteligentes com correlação
  • Implemente testes automatizados com SIPp
  • Configure análise preditiva de problemas

Validação Final Completa: Execute a seguinte bateria de testes:
# Verificação de conectividade sudo asterisk -rx "sip show peers" sudo asterisk -rx "pjsip show endpoints" sudo asterisk -rx "sip qualify peer 100" # Testes de qualidade sudo asterisk -rx "rtp show stats" sudo asterisk -rx "core show channels verbose" sudo asterisk -rx "rtcp show stats" # Testes de carga /usr/local/bin/load-test.sh 5 30 /usr/local/bin/call-quality-test.sh # Verificação de monitoramento /usr/local/bin/advanced-metrics-collector.sh /usr/local/bin/intelligent-alerts.sh cat /var/log/asterisk/metrics/current-metrics.json # Testes de troubleshooting /usr/local/bin/audio-troubleshoot.sh sudo tcpdump -i any -n port 5060 -c 10 # Verificação de performance sudo top -p $(pgrep asterisk) -n 3 sudo iotop -a -p $(pgrep asterisk) -n 3 asterisk -rx "core show taskprocessors" # Testes de stress (opcional) # /usr/local/bin/sipp-stress-test.sh 2 10 60 # Verificação de logs e alertas sudo tail -20 /var/log/asterisk/messages sudo tail -10 /var/log/asterisk/alerts.log sudo tail -5 /var/log/asterisk/quality-metrics.csv
Aula 8

Práticas Avançadas de Segurança, Monitoramento e Otimização

Objetivos Expandidos da Aula

Objetivo Principal: Implementar práticas avançadas de segurança para proteger sistemas Asterisk em produção, configurar monitoramento proativo com alertas inteligentes, e otimizar performance para ambientes de alta demanda.

  • Segurança Avançada: Implementar múltiplas camadas de proteção (firewall avançado, IDS/IPS, autenticação forte, criptografia)
  • Monitoramento Proativo: Configurar sistemas de monitoramento em tempo real com alertas automáticos e dashboards
  • Otimização de Performance: Ajustar parâmetros do sistema e Asterisk para máxima eficiência
  • Auditoria e Compliance: Estabelecer logs de auditoria e procedimentos de conformidade
  • Backup e Recuperação: Implementar estratégias robustas de backup e disaster recovery

Resumo Técnico Avançado

Em ambientes de produção, a segurança, monitoramento e otimização são críticos para garantir disponibilidade, performance e proteção contra ameaças. Esta aula aborda implementação de segurança em camadas, monitoramento proativo com métricas avançadas, otimização de sistema operacional e Asterisk, e estabelecimento de procedimentos operacionais para ambientes empresariais.

Tópicos Técnicos e Conceituais Avançados

🔒 Arquitetura de Segurança Multicamada

  • Segurança de Rede: Firewall avançado (iptables/nftables), VPN, segmentação de rede, DMZ
  • Segurança de Aplicação: Hardening do Asterisk, autenticação forte, criptografia TLS/SRTP
  • Detecção de Intrusão: IDS/IPS (Suricata, Snort), análise comportamental, honeypots
  • Proteção contra Fraude: Rate limiting, geoblocking, análise de padrões de chamadas

📊 Monitoramento e Observabilidade

  • Métricas de Sistema: CPU, memória, I/O, rede, processos (Prometheus, Grafana)
  • Métricas de Asterisk: Chamadas ativas, qualidade RTP, registros SIP, CDR analytics
  • Alertas Inteligentes: Thresholds dinâmicos, correlação de eventos, escalação automática
  • Análise de Logs: Centralização (ELK Stack), parsing inteligente, detecção de anomalias

⚡ Otimização de Performance

  • Kernel Tuning: Parâmetros de rede, scheduler, memory management
  • Asterisk Optimization: Threading, codecs, buffer sizes, connection pooling
  • Hardware Optimization: CPU affinity, NUMA, storage I/O, network interfaces
  • Capacity Planning: Load testing, resource forecasting, scaling strategies

🛡️ Auditoria e Compliance

  • Logging de Auditoria: Acesso, configurações, chamadas, eventos de segurança
  • Compliance: GDPR, HIPAA, PCI-DSS, retenção de dados
  • Forensics: Preservação de evidências, análise post-incident

Comandos e Procedimentos Práticos Detalhados

🔥 Firewall Avançado e Segurança de Rede

# Configuração avançada de firewall com iptables
sudo iptables -A INPUT -p udp --dport 5060 -m state --state NEW -m recent --set --name SIP_ATTEMPTS
sudo iptables -A INPUT -p udp --dport 5060 -m recent --update --seconds 60 --hitcount 10 --name SIP_ATTEMPTS -j DROP
sudo iptables -A INPUT -p udp --dport 5060:5061 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 10000:20000 -j ACCEPT

# Proteção contra SIP scanning
sudo iptables -A INPUT -p udp --dport 5060 -m string --string "friendly-scanner" --algo bm -j DROP
sudo iptables -A INPUT -p udp --dport 5060 -m string --string "sipcli" --algo bm -j DROP

# Rate limiting para SIP REGISTER
sudo iptables -A INPUT -p udp --dport 5060 -m string --string "REGISTER" --algo bm -m limit --limit 5/min -j ACCEPT
sudo iptables -A INPUT -p udp --dport 5060 -m string --string "REGISTER" --algo bm -j DROP

# Salvar regras permanentemente
sudo iptables-save > /etc/iptables/rules.v4
sudo systemctl enable iptables-persistent

🛡️ Fail2ban Avançado e IDS

# Instalação e configuração avançada do Fail2ban
sudo apt install fail2ban -y
sudo systemctl enable fail2ban

# Configuração personalizada para Asterisk
sudo tee /etc/fail2ban/jail.d/asterisk.conf << 'EOF'
[asterisk-iptables]
enabled = true
filter = asterisk
action = iptables-allports[name=ASTERISK]
logpath = /var/log/asterisk/security
maxretry = 3
bantime = 3600
findtime = 600

[asterisk-dos]
enabled = true
filter = asterisk-dos
action = iptables-allports[name=ASTERISK-DOS]
logpath = /var/log/asterisk/messages
maxretry = 10
bantime = 86400
findtime = 3600
EOF

# Instalação do Suricata (IDS/IPS)
sudo apt install suricata -y
sudo suricata-update
sudo systemctl enable suricata

📈 Monitoramento Avançado com Prometheus e Grafana

# Instalação do Prometheus
wget https://github.com/prometheus/prometheus/releases/download/v2.40.0/prometheus-2.40.0.linux-amd64.tar.gz
tar xvfz prometheus-*.tar.gz
sudo mv prometheus-2.40.0.linux-amd64 /opt/prometheus
sudo useradd --no-create-home --shell /bin/false prometheus
sudo chown -R prometheus:prometheus /opt/prometheus

# Instalação do Node Exporter
wget https://github.com/prometheus/node_exporter/releases/download/v1.5.0/node_exporter-1.5.0.linux-amd64.tar.gz
tar xvfz node_exporter-*.tar.gz
sudo mv node_exporter-1.5.0.linux-amd64/node_exporter /usr/local/bin/

# Instalação do Grafana
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee /etc/apt/sources.list.d/grafana.list
sudo apt update && sudo apt install grafana -y
sudo systemctl enable grafana-server

⚡ Otimização de Sistema e Asterisk

# Otimizações de kernel para VoIP
sudo tee -a /etc/sysctl.conf << 'EOF'
# Network optimizations for VoIP
net.core.rmem_default = 262144
net.core.rmem_max = 16777216
net.core.wmem_default = 262144
net.core.wmem_max = 16777216
net.ipv4.udp_mem = 102400 873800 16777216
net.core.netdev_max_backlog = 5000
net.ipv4.ip_local_port_range = 1024 65535
EOF
sudo sysctl -p

# Otimizações de CPU e scheduling
echo 'GRUB_CMDLINE_LINUX="isolcpus=1,2,3 rcu_nocbs=1,2,3"' | sudo tee -a /etc/default/grub
sudo update-grub

# Configuração de limites de processo
sudo tee -a /etc/security/limits.conf << 'EOF'
asterisk soft nofile 65536
asterisk hard nofile 65536
asterisk soft nproc 32768
asterisk hard nproc 32768
EOF

🔍 Ferramentas de Análise e Debug Avançado

# Análise de performance em tempo real
sudo apt install htop iotop iftop nethogs -y
sudo htop -d 1 # CPU e memória detalhados
sudo iotop -o # I/O por processo
sudo iftop -i eth0 # Tráfego de rede por conexão
sudo nethogs eth0 # Uso de rede por processo

# Análise de chamadas e RTP
sudo tcpdump -i any -n -s 0 -w /tmp/sip_capture.pcap port 5060
sudo tcpdump -i any -n -s 0 -w /tmp/rtp_capture.pcap portrange 10000-20000
tshark -r /tmp/sip_capture.pcap -Y sip -T fields -e sip.Method -e sip.r-uri

# Análise de logs com ferramentas avançadas
sudo tail -f /var/log/asterisk/messages | grep -E "(NOTICE|WARNING|ERROR)"
sudo journalctl -u asterisk -f --since "1 hour ago"
sudo logwatch --service asterisk --range today --detail high

Exemplos Aplicados Detalhados

🔒 Exemplo 1: Implementação de Segurança Multicamada

Cenário: Configurar proteção completa para servidor Asterisk em produção

  1. Configurar firewall avançado com rate limiting:
    #!/bin/bash
    # advanced-firewall-setup.sh
    echo "Configurando firewall avançado para Asterisk..."
    
    # Limpar regras existentes
    iptables -F
    iptables -X
    
    # Políticas padrão
    iptables -P INPUT DROP
    iptables -P FORWARD DROP
    iptables -P OUTPUT ACCEPT
    
    # Permitir loopback
    iptables -A INPUT -i lo -j ACCEPT
    
    # Permitir conexões estabelecidas
    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    
    # SSH com rate limiting
    iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH_ATTEMPTS
    iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 4 --name SSH_ATTEMPTS -j DROP
    iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    
    # SIP com proteção contra scanning
    iptables -A INPUT -p udp --dport 5060 -m string --string "friendly-scanner" --algo bm -j DROP
    iptables -A INPUT -p udp --dport 5060 -m string --string "sipcli" --algo bm -j DROP
    iptables -A INPUT -p udp --dport 5060 -m recent --set --name SIP_ATTEMPTS
    iptables -A INPUT -p udp --dport 5060 -m recent --update --seconds 60 --hitcount 10 --name SIP_ATTEMPTS -j DROP
    iptables -A INPUT -p udp --dport 5060:5061 -j ACCEPT
    
    # RTP range
    iptables -A INPUT -p udp --dport 10000:20000 -j ACCEPT
    
    # Salvar regras
    iptables-save > /etc/iptables/rules.v4
    echo "Firewall configurado com sucesso!"
  2. Configurar Fail2ban personalizado:
    # /etc/fail2ban/filter.d/asterisk-security.conf
    [Definition]
    failregex = SECURITY.* .*: failed to authenticate as '.*'@.*
                SECURITY.* .*: Registration from '.*' failed for '.*' - Wrong password
                SECURITY.* .*: Host .* failed to authenticate as .*
                SECURITY.* .*: No matching peer found
    ignoreregex =
    
    # /etc/fail2ban/jail.d/asterisk-custom.conf
    [asterisk-security]
    enabled = true
    filter = asterisk-security
    action = iptables-allports[name=ASTERISK-SEC]
             sendmail-whois[name=ASTERISK, dest=admin@empresa.com]
    logpath = /var/log/asterisk/security
    maxretry = 3
    bantime = 7200
    findtime = 600
  3. Implementar autenticação forte:
    # Configuração de extensão segura em pjsip.conf
    [1001]
    type=endpoint
    context=internal
    disallow=all
    allow=alaw,ulaw,g722
    auth=1001
    aors=1001
    direct_media=no
    ice_support=yes
    media_encryption=sdes
    rtp_symmetric=yes
    
    [1001]
    type=auth
    auth_type=userpass
    password=Str0ng!P@ssw0rd#2024
    username=1001
    
    [1001]
    type=aor
    max_contacts=2
    qualify_frequency=30
    remove_existing=yes
  4. Configurar TLS/SRTP:
    # Gerar certificados SSL
    openssl req -new -x509 -days 365 -nodes -out /etc/asterisk/keys/asterisk.pem -keyout /etc/asterisk/keys/asterisk.key
    
    # Configuração TLS em pjsip.conf
    [transport-tls]
    type=transport
    protocol=tls
    bind=0.0.0.0:5061
    cert_file=/etc/asterisk/keys/asterisk.pem
    priv_key_file=/etc/asterisk/keys/asterisk.key
    method=tlsv1_2

📊 Exemplo 2: Sistema de Monitoramento Completo

Cenário: Implementar monitoramento proativo com alertas automáticos

  1. Script de coleta de métricas avançadas:
    #!/bin/bash
    # advanced-metrics-collector.sh
    TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
    METRICS_DIR="/var/log/asterisk/metrics"
    mkdir -p $METRICS_DIR
    
    # Métricas de sistema
    CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
    MEM_USAGE=$(free | grep Mem | awk '{printf "%.2f", $3/$2 * 100.0}')
    DISK_USAGE=$(df -h / | awk 'NR==2{print $5}' | cut -d'%' -f1)
    LOAD_AVG=$(uptime | awk -F'load average:' '{print $2}' | cut -d',' -f1 | xargs)
    
    # Métricas do Asterisk
    ACTIVE_CALLS=$(asterisk -rx "core show calls" | grep "active call" | awk '{print $1}')
    SIP_PEERS=$(asterisk -rx "pjsip show endpoints" | grep -c "Endpoint:")
    REGISTERED_PEERS=$(asterisk -rx "pjsip show endpoints" | grep -c "Available")
    UPTIME=$(asterisk -rx "core show uptime" | grep "System uptime" | awk '{print $3,$4}')
    
    # Métricas de qualidade RTP
    RTP_STATS=$(asterisk -rx "rtp show stats" 2>/dev/null || echo "0 0 0")
    PACKET_LOSS=$(echo $RTP_STATS | awk '{print $1}')
    JITTER=$(echo $RTP_STATS | awk '{print $2}')
    
    # Salvar em CSV
    echo "$TIMESTAMP,$CPU_USAGE,$MEM_USAGE,$DISK_USAGE,$LOAD_AVG,$ACTIVE_CALLS,$SIP_PEERS,$REGISTERED_PEERS,$PACKET_LOSS,$JITTER" >> $METRICS_DIR/system_metrics.csv
    
    # Salvar em JSON para APIs
    cat > $METRICS_DIR/current_metrics.json << EOF
    {
      "timestamp": "$TIMESTAMP",
      "system": {
        "cpu_usage": $CPU_USAGE,
        "memory_usage": $MEM_USAGE,
        "disk_usage": $DISK_USAGE,
        "load_average": $LOAD_AVG
      },
      "asterisk": {
        "active_calls": ${ACTIVE_CALLS:-0},
        "sip_peers": ${SIP_PEERS:-0},
        "registered_peers": ${REGISTERED_PEERS:-0},
        "uptime": "$UPTIME"
      },
      "rtp_quality": {
        "packet_loss": ${PACKET_LOSS:-0},
        "jitter": ${JITTER:-0}
      }
    }
    EOF
    
    echo "Métricas coletadas: $TIMESTAMP"
  2. Sistema de alertas inteligentes:
    #!/bin/bash
    # intelligent-alerts.sh
    source /etc/asterisk/scripts/config.conf
    
    # Thresholds configuráveis
    CPU_THRESHOLD=${CPU_THRESHOLD:-80}
    MEM_THRESHOLD=${MEM_THRESHOLD:-85}
    DISK_THRESHOLD=${DISK_THRESHOLD:-90}
    CALLS_THRESHOLD=${CALLS_THRESHOLD:-100}
    PEERS_DOWN_THRESHOLD=${PEERS_DOWN_THRESHOLD:-5}
    
    # Função para enviar alertas
    send_alert() {
        local severity=$1
        local message=$2
        local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
        
        # Log local
        echo "[$timestamp] $severity: $message" >> /var/log/asterisk/alerts.log
        
        # Email (se configurado)
        if [[ -n "$ALERT_EMAIL" ]]; then
            echo "$message" | mail -s "Asterisk Alert [$severity]" $ALERT_EMAIL
        fi
        
        # Webhook (se configurado)
        if [[ -n "$WEBHOOK_URL" ]]; then
            curl -X POST -H "Content-Type: application/json" \
                 -d "{\"severity\":\"$severity\",\"message\":\"$message\",\"timestamp\":\"$timestamp\"}" \
                 $WEBHOOK_URL
        fi
    }
    
    # Verificar métricas atuais
    CURRENT_METRICS="/var/log/asterisk/metrics/current_metrics.json"
    if [[ -f $CURRENT_METRICS ]]; then
        CPU_USAGE=$(jq -r '.system.cpu_usage' $CURRENT_METRICS)
        MEM_USAGE=$(jq -r '.system.memory_usage' $CURRENT_METRICS)
        DISK_USAGE=$(jq -r '.system.disk_usage' $CURRENT_METRICS)
        ACTIVE_CALLS=$(jq -r '.asterisk.active_calls' $CURRENT_METRICS)
        REGISTERED_PEERS=$(jq -r '.asterisk.registered_peers' $CURRENT_METRICS)
        SIP_PEERS=$(jq -r '.asterisk.sip_peers' $CURRENT_METRICS)
        
        # Verificar alertas
        if (( $(echo "$CPU_USAGE > $CPU_THRESHOLD" | bc -l) )); then
            send_alert "CRITICAL" "CPU usage is ${CPU_USAGE}% (threshold: ${CPU_THRESHOLD}%)"
        fi
        
        if (( $(echo "$MEM_USAGE > $MEM_THRESHOLD" | bc -l) )); then
            send_alert "CRITICAL" "Memory usage is ${MEM_USAGE}% (threshold: ${MEM_THRESHOLD}%)"
        fi
        
        if (( DISK_USAGE > DISK_THRESHOLD )); then
            send_alert "CRITICAL" "Disk usage is ${DISK_USAGE}% (threshold: ${DISK_THRESHOLD}%)"
        fi
        
        if (( ACTIVE_CALLS > CALLS_THRESHOLD )); then
            send_alert "WARNING" "High call volume: ${ACTIVE_CALLS} active calls (threshold: ${CALLS_THRESHOLD})"
        fi
        
        PEERS_DOWN=$((SIP_PEERS - REGISTERED_PEERS))
        if (( PEERS_DOWN > PEERS_DOWN_THRESHOLD )); then
            send_alert "WARNING" "${PEERS_DOWN} SIP peers are down (threshold: ${PEERS_DOWN_THRESHOLD})"
        fi
    fi
  3. Dashboard HTML dinâmico:
    #!/bin/bash
    # generate-dashboard.sh
    DASHBOARD_FILE="/var/www/html/asterisk-dashboard.html"
    METRICS_FILE="/var/log/asterisk/metrics/current_metrics.json"
    
    if [[ -f $METRICS_FILE ]]; then
        # Extrair dados do JSON
        TIMESTAMP=$(jq -r '.timestamp' $METRICS_FILE)
        CPU_USAGE=$(jq -r '.system.cpu_usage' $METRICS_FILE)
        MEM_USAGE=$(jq -r '.system.memory_usage' $METRICS_FILE)
        DISK_USAGE=$(jq -r '.system.disk_usage' $METRICS_FILE)
        ACTIVE_CALLS=$(jq -r '.asterisk.active_calls' $METRICS_FILE)
        REGISTERED_PEERS=$(jq -r '.asterisk.registered_peers' $METRICS_FILE)
        
        # Gerar HTML
        cat > $DASHBOARD_FILE << EOF
    
    
    
        Asterisk Dashboard
        
        
    
    
        

    Asterisk System Dashboard

    Last Update: $TIMESTAMP

    CPU Usage

    ${CPU_USAGE}%

    Memory Usage

    ${MEM_USAGE}%

    Disk Usage

    ${DISK_USAGE}%

    Active Calls

    $ACTIVE_CALLS

    Registered Peers

    $REGISTERED_PEERS
    EOF echo "Dashboard atualizado: $DASHBOARD_FILE" fi

⚡ Exemplo 3: Otimização Avançada de Performance

Cenário: Otimizar sistema para suportar 500+ chamadas simultâneas

  1. Script de otimização automática:
    #!/bin/bash
    # performance-optimization.sh
    echo "Iniciando otimização de performance para Asterisk..."
    
    # Backup das configurações atuais
    cp /etc/sysctl.conf /etc/sysctl.conf.backup
    cp /etc/security/limits.conf /etc/security/limits.conf.backup
    
    # Otimizações de kernel
    cat >> /etc/sysctl.conf << 'EOF'
    # === Asterisk Performance Optimizations ===
    
    # Network buffer sizes
    net.core.rmem_default = 262144
    net.core.rmem_max = 16777216
    net.core.wmem_default = 262144
    net.core.wmem_max = 16777216
    net.core.netdev_max_backlog = 5000
    net.core.netdev_budget = 600
    
    # UDP optimizations
    net.ipv4.udp_mem = 102400 873800 16777216
    net.ipv4.udp_rmem_min = 8192
    net.ipv4.udp_wmem_min = 8192
    
    # TCP optimizations
    net.ipv4.tcp_rmem = 4096 87380 16777216
    net.ipv4.tcp_wmem = 4096 65536 16777216
    net.ipv4.tcp_congestion_control = bbr
    
    # Connection tracking
    net.netfilter.nf_conntrack_max = 1048576
    net.netfilter.nf_conntrack_tcp_timeout_established = 7200
    
    # File system
    fs.file-max = 2097152
    fs.nr_open = 2097152
    
    # Virtual memory
    vm.swappiness = 10
    vm.dirty_ratio = 15
    vm.dirty_background_ratio = 5
    
    # Process scheduling
    kernel.sched_migration_cost_ns = 5000000
    kernel.sched_autogroup_enabled = 0
    EOF
    
    # Aplicar otimizações
    sysctl -p
    
    # Limites de processo para Asterisk
    cat >> /etc/security/limits.conf << 'EOF'
    # Asterisk limits
    asterisk soft nofile 65536
    asterisk hard nofile 65536
    asterisk soft nproc 32768
    asterisk hard nproc 32768
    asterisk soft memlock unlimited
    asterisk hard memlock unlimited
    EOF
    
    # Configuração de CPU affinity
    echo "Configurando CPU affinity para Asterisk..."
    ASTERISK_PID=$(pgrep asterisk)
    if [[ -n $ASTERISK_PID ]]; then
        taskset -cp 1-3 $ASTERISK_PID
        echo "CPU affinity configurada para CPUs 1-3"
    fi
    
    # Otimizações específicas do Asterisk
    cat > /etc/asterisk/asterisk.conf << 'EOF'
    [options]
    verbose = 3
    debug = 1
    maxcalls = 1000
    maxload = 0.9
    runuser = asterisk
    rungroup = asterisk
    cache_record_files = yes
    record_cache_dir = /tmp
    transmit_silence = yes
    silence_threshold = 128
    maxfiles = 65536
    
    [compat]
    pbx_realtime=1.6
    res_agi=1.6
    app_set=1.6
    EOF
    
    echo "Otimização concluída! Reinicie o sistema para aplicar todas as mudanças."
  2. Teste de carga automatizado:
    #!/bin/bash
    # load-test-advanced.sh
    CONCURRENT_CALLS=${1:-100}
    TEST_DURATION=${2:-300}
    RESULTS_DIR="/var/log/asterisk/load-tests"
    mkdir -p $RESULTS_DIR
    
    echo "Iniciando teste de carga: $CONCURRENT_CALLS chamadas por ${TEST_DURATION}s"
    
    # Função para monitorar recursos
    monitor_resources() {
        local test_id=$1
        local output_file="$RESULTS_DIR/resources_${test_id}.csv"
        
        echo "timestamp,cpu_usage,memory_usage,active_calls,rtp_packets" > $output_file
        
        while [[ -f "/tmp/load_test_running" ]]; do
            timestamp=$(date '+%Y-%m-%d %H:%M:%S')
            cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
            memory_usage=$(free | grep Mem | awk '{printf "%.2f", $3/$2 * 100.0}')
            active_calls=$(asterisk -rx "core show calls" | grep "active call" | awk '{print $1}')
            rtp_packets=$(netstat -su | grep "packets received" | awk '{print $1}')
            
            echo "$timestamp,$cpu_usage,$memory_usage,$active_calls,$rtp_packets" >> $output_file
            sleep 5
        done
    }
    
    # Iniciar monitoramento em background
    TEST_ID=$(date +%Y%m%d_%H%M%S)
    touch /tmp/load_test_running
    monitor_resources $TEST_ID &
    MONITOR_PID=$!
    
    # Executar teste com SIPp
    sipp -sn uac -d 30000 -s 1001 -r $CONCURRENT_CALLS -m $((CONCURRENT_CALLS * 10)) \
         -trace_msg -trace_stat -stf $RESULTS_DIR/sipp_stats_${TEST_ID}.csv \
         127.0.0.1:5060 &
    SIPP_PID=$!
    
    # Aguardar conclusão do teste
    sleep $TEST_DURATION
    
    # Finalizar processos
    kill $SIPP_PID 2>/dev/null
    rm -f /tmp/load_test_running
    kill $MONITOR_PID 2>/dev/null
    
    # Gerar relatório
    cat > $RESULTS_DIR/report_${TEST_ID}.html << EOF
    
    
    Load Test Report - $TEST_ID
    
        

    Load Test Report

    Test ID: $TEST_ID

    Concurrent Calls: $CONCURRENT_CALLS

    Duration: ${TEST_DURATION}s

    Results: Check CSV files for detailed metrics

    EOF echo "Teste concluído! Resultados em: $RESULTS_DIR"

🔄 Exemplo 4: Backup e Disaster Recovery Automatizado

Cenário: Implementar backup completo e procedimentos de recuperação

  1. Sistema de backup inteligente:
    #!/bin/bash
    # enterprise-backup.sh
    BACKUP_BASE="/backup/asterisk"
    RETENTION_DAYS=30
    REMOTE_BACKUP="user@backup-server:/backups/asterisk"
    NOTIFICATION_EMAIL="admin@empresa.com"
    
    # Criar estrutura de backup
    mkdir -p $BACKUP_BASE/{daily,weekly,monthly}
    TIMESTAMP=$(date +%Y%m%d_%H%M%S)
    BACKUP_DIR="$BACKUP_BASE/daily/backup_$TIMESTAMP"
    mkdir -p $BACKUP_DIR
    
    echo "Iniciando backup completo do Asterisk - $TIMESTAMP"
    
    # Função para log
    log_message() {
        echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $BACKUP_DIR/backup.log
    }
    
    # Backup de configurações
    log_message "Fazendo backup das configurações..."
    tar -czf $BACKUP_DIR/configs.tar.gz /etc/asterisk/ 2>/dev/null
    if [[ $? -eq 0 ]]; then
        log_message "✓ Configurações salvas"
    else
        log_message "✗ Erro no backup de configurações"
    fi
    
    # Backup de dados do sistema
    log_message "Fazendo backup dos dados do sistema..."
    tar -czf $BACKUP_DIR/system_data.tar.gz \
        /var/lib/asterisk/ \
        /var/spool/asterisk/ \
        /var/log/asterisk/ 2>/dev/null
    
    # Backup do banco de dados (se usando)
    if command -v mysql &> /dev/null; then
        log_message "Fazendo backup do banco de dados MySQL..."
        mysqldump --all-databases --single-transaction --routines --triggers > $BACKUP_DIR/mysql_dump.sql
    fi
    
    # Backup de certificados e chaves
    log_message "Fazendo backup de certificados..."
    if [[ -d /etc/asterisk/keys ]]; then
        tar -czf $BACKUP_DIR/certificates.tar.gz /etc/asterisk/keys/
    fi
    
    # Informações do sistema
    log_message "Coletando informações do sistema..."
    cat > $BACKUP_DIR/system_info.txt << EOF
    Backup Date: $(date)
    Hostname: $(hostname)
    OS Version: $(cat /etc/os-release | grep PRETTY_NAME)
    Asterisk Version: $(asterisk -V)
    Kernel Version: $(uname -r)
    Uptime: $(uptime)
    Disk Usage: $(df -h)
    Memory Info: $(free -h)
    Network Interfaces: $(ip addr show)
    EOF
    
    # Verificar integridade dos backups
    log_message "Verificando integridade dos backups..."
    cd $BACKUP_DIR
    for file in *.tar.gz; do
        if tar -tzf "$file" >/dev/null 2>&1; then
            log_message "✓ $file - OK"
        else
            log_message "✗ $file - CORRUPTED"
        fi
    done
    
    # Calcular checksums
    find $BACKUP_DIR -type f -exec sha256sum {} \; > $BACKUP_DIR/checksums.sha256
    
    # Sincronizar com backup remoto
    if [[ -n "$REMOTE_BACKUP" ]]; then
        log_message "Sincronizando com backup remoto..."
        rsync -avz --progress $BACKUP_DIR/ $REMOTE_BACKUP/backup_$TIMESTAMP/
        if [[ $? -eq 0 ]]; then
            log_message "✓ Backup remoto concluído"
        else
            log_message "✗ Erro no backup remoto"
        fi
    fi
    
    # Limpeza de backups antigos
    log_message "Limpando backups antigos (>$RETENTION_DAYS dias)..."
    find $BACKUP_BASE/daily -type d -name "backup_*" -mtime +$RETENTION_DAYS -exec rm -rf {} \;
    
    # Relatório final
    BACKUP_SIZE=$(du -sh $BACKUP_DIR | cut -f1)
    log_message "Backup concluído! Tamanho: $BACKUP_SIZE"
    
    # Enviar notificação
    if [[ -n "$NOTIFICATION_EMAIL" ]]; then
        mail -s "Asterisk Backup Completed - $TIMESTAMP" $NOTIFICATION_EMAIL < $BACKUP_DIR/backup.log
    fi
  2. Script de recuperação automatizada:
    #!/bin/bash
    # disaster-recovery.sh
    BACKUP_DIR=${1:-"/backup/asterisk/daily"}
    RECOVERY_MODE=${2:-"full"}  # full, config-only, data-only
    
    if [[ ! -d "$BACKUP_DIR" ]]; then
        echo "Erro: Diretório de backup não encontrado: $BACKUP_DIR"
        exit 1
    fi
    
    echo "=== ASTERISK DISASTER RECOVERY ==="
    echo "Backup Source: $BACKUP_DIR"
    echo "Recovery Mode: $RECOVERY_MODE"
    echo "=================================="
    
    # Função de confirmação
    confirm_action() {
        read -p "Esta operação irá sobrescrever dados existentes. Continuar? (yes/no): " confirm
        if [[ $confirm != "yes" ]]; then
            echo "Operação cancelada."
            exit 0
        fi
    }
    
    # Parar serviços
    echo "Parando serviços do Asterisk..."
    systemctl stop asterisk
    systemctl stop fail2ban
    
    # Backup dos dados atuais (segurança)
    CURRENT_BACKUP="/tmp/current_asterisk_$(date +%Y%m%d_%H%M%S)"
    mkdir -p $CURRENT_BACKUP
    echo "Fazendo backup dos dados atuais em: $CURRENT_BACKUP"
    cp -r /etc/asterisk $CURRENT_BACKUP/
    cp -r /var/lib/asterisk $CURRENT_BACKUP/
    
    confirm_action
    
    # Recuperação baseada no modo
    case $RECOVERY_MODE in
        "full")
            echo "Executando recuperação completa..."
            
            # Restaurar configurações
            if [[ -f "$BACKUP_DIR/configs.tar.gz" ]]; then
                echo "Restaurando configurações..."
                tar -xzf $BACKUP_DIR/configs.tar.gz -C /
            fi
            
            # Restaurar dados do sistema
            if [[ -f "$BACKUP_DIR/system_data.tar.gz" ]]; then
                echo "Restaurando dados do sistema..."
                tar -xzf $BACKUP_DIR/system_data.tar.gz -C /
            fi
            
            # Restaurar certificados
            if [[ -f "$BACKUP_DIR/certificates.tar.gz" ]]; then
                echo "Restaurando certificados..."
                tar -xzf $BACKUP_DIR/certificates.tar.gz -C /
            fi
            
            # Restaurar banco de dados
            if [[ -f "$BACKUP_DIR/mysql_dump.sql" ]]; then
                echo "Restaurando banco de dados..."
                mysql < $BACKUP_DIR/mysql_dump.sql
            fi
            ;;
            
        "config-only")
            echo "Restaurando apenas configurações..."
            if [[ -f "$BACKUP_DIR/configs.tar.gz" ]]; then
                tar -xzf $BACKUP_DIR/configs.tar.gz -C /
            fi
            ;;
            
        "data-only")
            echo "Restaurando apenas dados..."
            if [[ -f "$BACKUP_DIR/system_data.tar.gz" ]]; then
                tar -xzf $BACKUP_DIR/system_data.tar.gz -C /
            fi
            ;;
    esac
    
    # Verificar integridade dos arquivos restaurados
    echo "Verificando integridade dos arquivos..."
    if [[ -f "$BACKUP_DIR/checksums.sha256" ]]; then
        cd /
        sha256sum -c $BACKUP_DIR/checksums.sha256 --quiet
        if [[ $? -eq 0 ]]; then
            echo "✓ Integridade verificada"
        else
            echo "⚠ Alguns arquivos podem estar corrompidos"
        fi
    fi
    
    # Ajustar permissões
    echo "Ajustando permissões..."
    chown -R asterisk:asterisk /etc/asterisk/
    chown -R asterisk:asterisk /var/lib/asterisk/
    chown -R asterisk:asterisk /var/spool/asterisk/
    chown -R asterisk:asterisk /var/log/asterisk/
    
    # Reiniciar serviços
    echo "Reiniciando serviços..."
    systemctl start asterisk
    systemctl start fail2ban
    
    # Verificar status
    sleep 5
    if systemctl is-active --quiet asterisk; then
        echo "✓ Asterisk iniciado com sucesso"
        asterisk -rx "core show version"
    else
        echo "✗ Erro ao iniciar Asterisk"
        echo "Logs de erro:"
        tail -20 /var/log/asterisk/messages
    fi
    
    echo "Recuperação concluída!"
    echo "Backup dos dados anteriores: $CURRENT_BACKUP"

Verificação e Troubleshooting Avançado

🚨 Problemas Críticos de Segurança

Problema: Detecção de tentativas de invasão ou uso não autorizado

Diagnóstico Avançado:

  • Análise de logs de segurança: grep -E "(SECURITY|failed|unauthorized)" /var/log/asterisk/security
  • Verificação de conexões suspeitas: netstat -an | grep :5060 | grep -v ESTABLISHED
  • Análise de tráfego SIP: tcpdump -i any -n port 5060 | grep -E "(REGISTER|INVITE)" | head -20
  • Verificação de fail2ban: fail2ban-client status asterisk-iptables

Soluções: Implementar rate limiting mais agressivo, configurar geoblocking, ativar logs de auditoria detalhados

📊 Degradação de Performance em Alta Carga

Problema: Sistema lento ou instável com muitas chamadas simultâneas

Diagnóstico Avançado:

  • Análise de CPU por core: mpstat -P ALL 1 5
  • Análise de I/O: iostat -x 1 5
  • Análise de memória: cat /proc/meminfo | grep -E "(MemFree|Buffers|Cached)"
  • Análise de rede: ss -tuln | grep :5060
  • Threads do Asterisk: asterisk -rx "core show threads"

Soluções: Ajustar parâmetros de kernel, otimizar configuração do Asterisk, implementar load balancing

🔄 Falhas de Backup e Recuperação

Problema: Backups corrompidos ou falhas na recuperação

Diagnóstico Avançado:

  • Verificar integridade: tar -tzf backup.tar.gz >/dev/null && echo "OK" || echo "CORRUPTED"
  • Verificar checksums: sha256sum -c checksums.sha256
  • Análise de espaço: df -i /backup (verificar inodes)
  • Logs de backup: tail -50 /var/log/backup.log

Soluções: Implementar verificação automática de integridade, configurar múltiplos destinos de backup, testar recuperação regularmente

Exercícios Práticos Avançados

🎯 Exercício Básico: Implementação de Segurança Essencial

  1. Configure firewall avançado com rate limiting para SIP
  2. Implemente Fail2ban com regras personalizadas para Asterisk
  3. Configure autenticação forte para todas as extensões
  4. Implemente TLS para transporte SIP seguro
  5. Configure logs de auditoria detalhados

Validação: Teste tentativas de brute force e verifique se são bloqueadas automaticamente

🎯 Exercício Intermediário: Sistema de Monitoramento Completo

  1. Implemente coleta automática de métricas (sistema + Asterisk)
  2. Configure alertas inteligentes com múltiplos canais (email, webhook)
  3. Crie dashboard HTML com atualização automática
  4. Configure Prometheus + Grafana para métricas avançadas
  5. Implemente análise de logs com detecção de anomalias

Validação: Simule condições de alta carga e verifique se os alertas são disparados corretamente

🎯 Exercício Avançado: Otimização e Disaster Recovery

  1. Otimize o sistema para suportar 500+ chamadas simultâneas
  2. Execute testes de carga com SIPp e analise resultados
  3. Implemente sistema de backup automatizado com verificação de integridade
  4. Configure replicação para servidor secundário
  5. Teste procedimentos completos de disaster recovery
  6. Documente runbooks para operação 24/7

Validação: Execute teste de disaster recovery completo e verifique tempo de recuperação

🏆 Bateria de Testes Final de Validação

Teste de Segurança:

  • Verificar bloqueio automático de tentativas de brute force
  • Validar criptografia TLS/SRTP em chamadas
  • Testar detecção de scanning SIP
  • Verificar logs de auditoria completos

Teste de Monitoramento:

  • Validar coleta de métricas em tempo real
  • Testar disparo de alertas em condições críticas
  • Verificar funcionamento do dashboard
  • Validar integração com sistemas externos

Teste de Performance:

  • Executar teste de carga com 200+ chamadas simultâneas
  • Verificar latência e qualidade de áudio sob carga
  • Validar estabilidade do sistema por 24 horas
  • Testar recuperação após picos de carga

Teste de Disaster Recovery:

  • Executar backup completo e verificar integridade
  • Simular falha completa do sistema
  • Executar recuperação completa em menos de 30 minutos
  • Validar funcionamento completo após recuperação