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.