Introdução
Servidores Asterisk expostos à internet sem proteção são alvos constantes de ataques. Bots tentam registrar ramais com senhas fracas, escanear extensões válidas e até originar chamadas indevidas. A porta 5060, principalmente em UDP, é um farol aceso para scanners automáticos.
O fail2ban
oferece uma solução eficiente: monitora os logs e bloqueia automaticamente os IPs mal-intencionados via iptables, antes que causem prejuízos.
Neste guia, você vai configurar uma proteção sólida para o seu Asterisk, com filtros específicos, bloqueios por protocolo e dicas práticas para ambientes públicos ou híbridos (interno + operadora via TCP).
1. Instalando o fail2ban no Debian
apt update
apt install fail2ban -y
2. Ativando o log do Asterisk corretamente
O fail2ban depende de logs para identificar ataques. É necessário garantir que o logger.conf
esteja configurado:
vi /etc/asterisk/logger.conf
Adicione (ou verifique) a linha:
messages => notice,warning,error
Reinicie o logger:
asterisk -rx "logger reload"
E verifique se o log está sendo gravado:
tail -f /var/log/asterisk/messages
3. Criando filtros personalizados
Crie o filtro principal:
vi /etc/fail2ban/filter.d/asterisk.conf
Conteúdo:
[Definition]
failregex = NOTICE.* .*: Registration from '.*' failed for '<HOST>'
NOTICE.* .*: Call from '.*' to extension '.*' rejected because extension not found
ignoreregex =
Esse filtro cobre registros falhos e chamadas para extensões inválidas.
4. Configurando os jails
Edite (ou crie) o arquivo:
vi /etc/fail2ban/jail.local
Exemplo de configuração completa:
[asterisk-udp]
enabled = true
port = 5060
protocol = udp
filter = asterisk
logpath = /var/log/asterisk/messages
maxretry = 4
findtime = 300
bantime = 3600
action = iptables[name=ASTERISK-UDP, port=5060, protocol=udp]
[asterisk-tcp]
enabled = true
port = 5060
protocol = tcp
filter = asterisk
logpath = /var/log/asterisk/messages
maxretry = 4
findtime = 300
bantime = 3600
action = iptables[name=ASTERISK-TCP, port=5060, protocol=tcp]
Com isso, o fail2ban vai tratar ataques nos dois protocolos separadamente.
5. Ativando o fail2ban
systemctl restart fail2ban
systemctl enable fail2ban
Verifique se os jails estão ativos:
fail2ban-client status
Para ver IPs banidos:
fail2ban-client status asterisk-udp
fail2ban-client status asterisk-tcp
6. Dicas adicionais
- Para evitar falsos positivos, adicione seus IPs confiáveis em uma whitelist:
vi /etc/fail2ban/jail.local
Adicione:
ignoreip = 127.0.0.1 192.168.0.0/16 seu_ip_publico
- Banir IPs permanentemente:
iptables -I INPUT -s 1.2.3.4 -j DROP
- Remover IP banido:
fail2ban-client set asterisk-udp unbanip 1.2.3.4
- Use
ipset
no lugar de iptables para melhorar desempenho em firewalls com muitas regras (em servidores de grande porte).
7. Script DevData (instalação automática)
Se quiser, podemos publicar junto um .sh
que:
- Instala o fail2ban
- Cria o filtro e o jail
- Faz reload dos serviços
instalar-fail2ban-asterisk.sh
#!/bin/bash
echo "[+] Instalando Fail2ban..."
apt update && apt install -y fail2ban
echo "[+] Criando filtro para Asterisk..."
cat > /etc/fail2ban/filter.d/asterisk.conf << 'EOF'
[Definition]
failregex = NOTICE.* .*: Registration from '.*' failed for '<HOST>'
NOTICE.* .*: Call from '.*' to extension '.*' rejected because extension not found
ignoreregex =
EOF
echo "[+] Garantindo logger do Asterisk ativo..."
sed -i '/^messages/d' /etc/asterisk/logger.conf
echo "messages => notice,warning,error" >> /etc/asterisk/logger.conf
asterisk -rx "logger reload"
echo "[+] Criando jail.local com proteção para UDP e TCP..."
cat > /etc/fail2ban/jail.local << 'EOF'
[DEFAULT]
bantime = 3600
findtime = 300
maxretry = 4
ignoreip = 127.0.0.1/8 ::1
[asterisk-udp]
enabled = true
port = 5060
protocol = udp
filter = asterisk
logpath = /var/log/asterisk/messages
action = iptables[name=ASTERISK-UDP, port=5060, protocol=udp]
[asterisk-tcp]
enabled = true
port = 5060
protocol = tcp
filter = asterisk
logpath = /var/log/asterisk/messages
action = iptables[name=ASTERISK-TCP, port=5060, protocol=tcp]
EOF
echo "[+] Reiniciando Fail2ban..."
systemctl restart fail2ban
systemctl enable fail2ban
echo "[+] Status dos jails:"
fail2ban-client status
echo "[✓] Fail2ban configurado com sucesso no Asterisk."
Conclusão
Fail2ban é uma camada essencial de proteção para centrais Asterisk expostas. Sua implementação é simples, mas os benefícios são imensos. Esse post entrega uma configuração robusta, pronta para ambientes reais — seja você um provedor, integrador ou entusiasta que lida com VoIP em produção.