Proteger Asterisk y mitigar ataques con Fail2ban

Fail2Ban es un software escrito en Python que bloquea o penaliza el acceso a IPs a nuestro sistema.  El funcionamiento es buscar comportamiento inadecuado en los logs del sistema y aplicar reglas de bloqueo o penalización. Existen un gran número de reglas predefinidas que son de gran ayuda, o en caso de requerir uno podría definir una propia.   Fail2Ban permite mitigar en gran número los ataques por fuerza bruta y prevenir el posible acceso a usuarios malisiosos.

Si tenemos un Asterisk expuesto a  Internet podríamos tener problemas si no lo protegemos, dando la posibilidad de tener  acceso a usuarios malisiosos que se traducirían en mal funcionamiento del sistema o peor aún una larga cuenta telefónica por llamadas a  Cuba, Senegal u otro país.

En este artículo mostraré como instalar y configurar Fail2Ban. Los pasos son sencillos y no es mucha la configuración que se hacer.

Instalación

La instalación la haremos desde los fuentes.  Al momento de escribir esto la versión estable es la 0.8.14.

Descargamos desde el repositorio de Github

wget https://github.com/fail2ban/fail2ban/archive/0.8.14.tar.gz

Descomprimimos el archivo que nos descargó.

tar xvfz fail2ban-0.8.14.tar.gz

Entramos al directorio e instalamos

cd fail2ban-0.8.14
python setup.py install

Con esto ya tenemos instalado fail2ban. Ahora nos toca configurar.

 

Configuración

Las configuraciones se situan en el directorio /etc/fail2ban. En el directorio existen algunos archivos interesantes y directorios que es necesario conocer

  • fail2ban.conf: Archivo principal, donde defines lugar donde se escriben los logs, nivel de verbosidad, proceso, etc..
  • actions.d: Las acciones que se realizan en caso  de encontrar un evento
  • filters.d: Los filtros que se aplican a los logs que se revisan.
  • jail.conf: Donde se definen el archivo a revisar, los filtros a aplicar y las acciones que se realizan en caso de que el filtro se active.

El archivo que vamos a editar es el archivo /etc/fail2ban/jail.conf. Se abre el archivo y se edita la siguiente sección, debes setear enabled a true.

 

[asterisk]
 enabled = true
 filter = asterisk
 action = iptables-multiport[name=asterisk-tcp, port="5060,5061", protocol=tcp]
 iptables-multiport[name=asterisk-udp, port="5060,5061", protocol=udp]
 sendmail-whois[name=Asterisk, dest=you@example.com, sender=fail2ban@example.com]
 logpath = /var/log/asterisk/messages
 maxretry = 10

Como podemos ver,  la sección dice que  se debe aplicar el filtro asterisk al archivo messages. En caso de encontrar algo aplicar las acciones -se pueden definir varias- de iptables multiport para los protocolos tcp y udp.

Arranque

Configurado  el sistema para que aplique el filtro ante los eventos encontrados en el archivo message, debemos indicar que incie cuando arranque el sistema. En el caso de Debian -el sistema  ocupo generalmente ocupo- en el paquete que descargamos no viene el archivo init para Debian, en este se ubica en el directorio files. Ahí se puede encontrar para RedHat, Gentoo, Solaris, Suse y MacOSx.  Entonces debemos descargar desde la rama Debian el init.d

wget https://raw.githubusercontent.com/fail2ban/fail2ban/debian/files/debian-initd

Ahora lo movemos al directorio init.d, aplicamos permisos de ejecución y mediante update-rc.d le decimos que arranque al inicio

mv debian-initd /etc/init.d/fail2ban
chmod +x /etc/init.d/fail2ban
update-rc.d fail2ban defaults

 

Ahora, iniciamos el servicio

/etc/init.d/fail2ban

 

Al listar los procesos usando ps debemos poder ver el proceso corriendo

root@maquina ➜ ~ ps aux| grep fail2ban
 root 16776 0.0 0.1 44792 5476 ? Sl Aug03 10:08 /usr/bin/python /usr/local/bin/fail2ban-server -b -s /var/run/fail2ban/fail2ban.sock -p /var/run/fail2ban/fail2ban.pid
 root 23318 0.0 0.0 3320 816 pts/0 S+ 17:16 0:00 grep fail2ban

Con eso podemos ver que el proceso está corriendo. Una buena idea es ver el archivo de log /var/log/fail2ban.log donde se puede ir viendo lo que va haciendo el fail2ban.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *