Para frenar los intentos de fraude telefónico provenientes de personas no autorizadas configuraremos fail2ban sobre asterisk 1.8. Si bien no es nuestro software de seguridad favorito (failed2ban) es el de uso más difundido y solicitado por nuestros clientes

Fail2ban es sólo una medida más de seguridad en Asterisk: depender exclusivamente de ella nos puede dar un dolor de cabeza

Si usted contrató una troncal IP y no tiene clientes remotos dinámicos, utilize listas blancas sobre iptables y denege el resto

Porqué la aclaración de 1.8?

En las versiones anteriores el formato de los logs de asterisk eran diferentes, por lo que pueden dejarse las expresiones regulares de fábrica. En el caso de 1.8.X debemos usar las siguientes:

Edición manual de /etc/fail2ban/filter.d/asterisk.conf

[Definition]

#_daemon = asterisk

failregex = Registration from '.*' failed for '<HOST>(:[0-9]{1,5})' - Wrong password

Registration from '.*' failed for '<HOST>(:[0-9]{1,5})' - No matching peer found

Registration from '.*' failed for '<HOST>(:[0-9]{1,5})' - Device does not match ACL

Registration from '.*' failed for '<HOST>(:[0-9]{1,5})' - Username/auth name mismatch

Registration from '.*' failed for '<HOST>(:[0-9]{1,5})' - Peer is not supposed to register

NOTICE.* <HOST> failed to authenticate as '.*'$

NOTICE.* .*: No registration for peer '.*' (from <HOST>)

NOTICE.* .*: Host <HOST> failed MD5 authentication for '.*' (.*)

ignoreregex =

Edición manual de /etc/fail2ban/jail.conf

[DEFAULT]

destemail = adondeva@gmail.com

sender = quienlomanda@gmail.com

...

[asterisk-iptables]

enabled = true

filter = asterisk

action = iptables-multiport[name=ASTERISK, port="5060,4569", protocol=udp]

sendmail-whois[name=ASTERISK, dest="%(destemail)s", sender="%(sender)s"]

logpath = /var/log/asterisk/full # ya en producción usar messages

maxretry = 5

bantime = 300

ignoreip = nu.est.ra.red/24

El ajuste de maxretry, bantime y findtime se dejan de fábrica ya son a gusto del usuario

Como saber si las expresiones regulares de fail2ban detectan el patrón en los logs de Asterisk?

Podemos cambiar el password de un teléfono IP SIP y resetearlo para que se vuelva a registrar. Luego copiar el error que aparecerá en /var/log/asterisk/messages (o full) y ejecutar el siguiente commando:

fail2ban-regex "[2011-11-25 16:12:10] NOTICE[2987] chan_sip.c: Registration from '<sip:100@192.168.30.30;user=phone>' failed for '192.168.30.51:5064' - No matching peer found" /etc/fail2ban/filter.d/asterisk.conf

Dentro de todos los resultados veremos lo que nos importa, (recordemos que el "No matching peer found" era la segunda regla):

`- Number of matches:
[1] 0 match(es)
[2] 1 match(es)
[3] 0 match(es)

y que la dirección del "atacante" era:

Addresses found:
[1]
[2]
192.168.30.51 (Fri Nov 25 16:12:10 2011)
[3]

Si tenemos más tiempo podemos escanear todo el contenido del archivo /var/log/asterisk/messages o /var/log/asterisk/full. En este caso hacer:

fail2ban-regex /var/log/asterisk/messages /etc/fail2ban/filter.d/asterisk.conf

Ante algún error en los pasos de reconocimiento del los pasos anteriores, podemos revisar la configuración actual del fail2ban ejecutando el comando:

fail2ban-client -d

Lo que veremos a continuación es autoexplicativo

Finalmente ejecutar un iptables -L y asegurarse que están creadas las cadenas de intercepción

Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain fail2ban-ASTERISK (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere
Chain fail2ban-SSH (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere
Chain fail2ban-VSFTPD (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere

Si por motivo de alguna prueba rearrancamos iptables, luego rearrancar fail2ban pues no se generarán las reglas