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

iptables-asterisk
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.
Fuente