Fail2ban no Asterisk: Proteção Real contra Invasores SIP

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.

Rolar para cima