Seguridad en Asterisk con fail2ban
Actualmente es muy común encontrar sistemas de telefonía ip basados en asterisk en las empresas, estos sistemas tienen grandes ventajas como ahorro en costos, en teléfonos, permite mayor escalabilidad, y otras ventajas. Pero como todo sistema nada puede ser perfecto, los servidores asterisk son muy utilizados también por hackers y compañias que utilizan estos servicios para realizar llamadas a múltiples destinos desde nuestro PBX.
Existen varias herramientas que permiten escanear servicios SIP y mostrarnos las extensiones y contraseñas configuradas, con esto registrar extensiones y realizar llamadas.
Hoy veremos como asegurar nuestros servidores Asterisk con una herramienta llamada Fail2Ban, la cual crea reglas de iptables dependiendo de la conexiones y comportamientos que se registren en los logs de nuestros servicios.
Instalación Debian/Ubuntu
apt-get install python iptables fail2ban
Instalación CentOS
Primero instalaremos python e iptables
yum install python iptables
Nos ubicamos en la carpeta /usr/src/
cd /usr/src/
Descargamos, Desempaquetamos e instalamos Fail2Ban
wget http://ufpr.dl.sourceforge.net/project/fail2ban/fail2ban-stable/fail2ban-0.8.4/fail2ban-0.8.4.tar.bz2
tar -xjf fail2ban-0.8.4.tar.bz2
cd fail2ban-0.8.4
python setup.py install
Instalamos el script para que funcione como un servicio y le damos permisos para su ejecución
cp /usr/src/fail2ban-0.8.4/files/redhat-initd /etc/init.d/fail2ban
chmod 755 /etc/init.d/fail2ban
Configuración
Ahora ingresamos a la carpeta de archivos para los filtros de Fail2Ban
cd /etc/fail2ban/filter.d
Creamos el archivo asterisk.conf
vi asterisk.conf
Pegamos en el archivo la siguiente información
# Fail2Ban configuration file
#
#
# $Revision: 250 $
#
[INCLUDES]
# Read common prefixes. If any customizations available — read them from
# common.local
#before = common.conf
[Definition]
#_daemon = asterisk
# Option: failregex
# Notes.: regex to match the password failures messages in the logfile. The
# host must be matched by a group named “host”. The tag “<HOST>” can
# be used for standard IP/hostname matching and is only an alias for
# (?:::f{4,6}:)?(?P<host>\S+)
# Values: TEXT
#
failregex = NOTICE.* .*: Registration from ‘.*’ failed for ‘<HOST>’ – Wrong password
NOTICE.* .*: Registration from ‘.*’ failed for ‘<HOST>’ – No matching peer found
NOTICE.* .*: Registration from ‘.*’ failed for ‘<HOST>’ – Username/auth name mismatch
NOTICE.* .*: Registration from ‘.*’ failed for ‘<HOST>’ – Device does not match ACL
NOTICE.* .*: Registration from ‘.*” .* failed for ‘<HOST>’ – 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 ‘.*’ (.*)
NOTICE.* .*: Failed to authenticate user .*@<HOST>.*
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =
Ahora editamos el archivo jail.conf (archivo de configuración de Fail2Ban)
cd /etc/fail2ban/
vi jail.conf
Colocamos la siguiente información:
[asterisk-iptables]
enabled = true
filter = asterisk
action = iptables-allports[name=ASTERISK, protocol=all]
sendmail-whois[name=ASTERISK, dest=root@localhost, sender=fail2ban@pbx.dyndns.org]
logpath = /var/log/asterisk/messages
maxretry = 5
bantime = 1800
En la parte inicial de este archivo de configuración es importante que coloquemos nuestra dirección ip para que no nos bloquee el fail2ban, en el campo default búscamos el parámetro ignoreip y allí colocamos nuestras direcciones ip separadas por espacios. La siguiente imágen sirve de ejemplo:
Ahora editamos el archivo logger.conf de asterisk
vi /etc/asterisk/logger.conf
Agregamos la siguiente información
[general]
dateformat=%F %T
Verificamos que el campo messages tenga el parámetro notice.
luego de ejecutar estos dos pasos debe quedar algo como esto:

Para que Asterisk tome los cambios ejecutamos:
asterisk -rx "logger reload"
Iniciamos los servicios iptables y fail2ban
/etc/init.d/iptables start
/etc/init.d/fail2ban start
Probando el funcionamiento:
Para las pruebas he configurado un softphone con una extensión iax y un password cualquiera.
Al verificar los logs del /var/log/asterisk/messages, aparecieron estos registros:
[2010-09-30 11:59:04] NOTICE[2935] chan_iax2.c: No registration for peer ’1005′ (from 186.80.111.59)
[2010-09-30 11:59:04] NOTICE[2940] chan_iax2.c: No registration for peer ’1005′ (from 186.80.111.59)
[2010-09-30 11:59:07] NOTICE[2934] chan_iax2.c: No registration for peer ’1005′ (from 186.80.111.59)
Con estos datos Fail2Ban se encarga de crear las reglas de iptables, como podemos ver luego de realizar 3 conexiones fallidas a nuestra PBX, se cra una regla de Iptables que Banea la ip desde donde se realizó la prueba.
iptables -L
Bueno, como vemos Fail2Ban es una herramienta de gran ayuda para proteger nuestros servidores asterisk, próximamente veremos nuevas formas de asegurar nuestros servidores de telefonía ip.
Tags: asterisk, fail2ban, iax, seguridad, sip





Curso Asterisk 1.8 – Capítulo 09 – Construyendo un IVR
SFLphone – Softphone SIP e IAX2 para Linux
Curso Asterisk 1.8 – Capítulo 08 – Configurando Buzones de voz
Aplicaciones web con Django sobre Heroku
Curso Asterisk 1.8 – Capítulo 07 – Interactuando con el Dialplan































4 Comentarios
Hola Daniel, estaba aplicando este manual en un asterisk que tengo pero me salen unos errores al momento de iniciar el demonio de fail2ban le dejo el log a ver si me da una mano pues no se que pueda ser
gracias cualquier cosa.
http://paste.ubuntu.com/519744/
El parsing error de la linea 30 no se que sea, igualmente modifique todo el archivo /etc/fail2ban/filter.d/asterisk.conf ya que al copiar y pegar de su blog copia caracteres especiales como las comillas y guiones. pero igual sigue saliendo el error, me puede regalar un paste en utf 8 ??
Gracias, excelente funcionó a la primera.
Aqui dejo un manual complementario
http://www.voip-info.org/wiki/view/Fail2Ban+%28with+iptables%29+And+Asterisk
atte
@_jpgo