Hace unos días os comentaba cómo proteger nuestros servidores con fail2bande ataques por fuerza bruta. Hoy vamos a tratar cómo instalar y configurar fail2ban en un servidor Debian/Ubuntu para proteger un servidor FTP protftp.
El proceso de instalación y configuración de fail2ban es similar si administras un servidor en otra plataforma Linux como Centos, o quieres proteger otro tipo de servicio como correo, ssh, …
La instalación de fail2ban es sencilla pues se encuentra empaquetado en los repositorios oficiales de la mayoría de distribuciones Linux (si lo prefieres también puedes descargar fail2ban desde su pagina oficial):
Con un usuario con privilegios administrativos ejecutamos el siguiente comando para instalarlo en nuestro servidor:
aptitude install fail2ban
En el caso de un servidor Centos:
yum install fail2ban
La instalación de fail2ban crea la siguiente estructura en la carpeta /etc/fail2ban:
/etc/fail2ban |-- action.d | |-- hostsdeny.conf | |-- iptables-allports.conf | |-- ... |-- fail2ban.conf |-- filter.d | |-- apache-auth.conf | |-- postfix.conf | |-- ... `-- jail.conf
El archivo fail2ban.conf es el archivo de configuración del demonio que ejecuta fail2ban analizando los logs del sistema y en el vamos a poder definir diferentes opciones como son el archivo de registro del propio fail2ban, el detalle de este archivo, etc…
Jail.confes el archivo donde se definen que servicios van a analizarse y con qué criterios. Para cada servicio se define unjailque consta como mínimo de una expresión regular (filter), una acción (action), y el fichero de registro del servicio en cuestión (logpath).
El directorioaction.dcontiene los scripts de las distintas acciones que pueden asociarse a un determinadojail.Y el directoriofilter.dcontiene distintos archivos con las exprexiones regulares para cada servicio. La instalación incluye los archivos para las acciones más comunes (envio de correo, whois, baneo con iptables, host.deny,…) y las expresiones regulares (filters) de multiples servicios (ftp, ssh, correo, apache, …).
Todos los archivos finalizados en .confson editables, aunque es recomendable no modificarlos, y utilizar un archivo con el mismo nombre pero acabado en .localen lugar de .confpara escribir nuestra configuracion. La configuración escrita en los archivos .localsiempre tendrán preferencia ante las.conf.De esta forma se asegura que no se pierda nuestra configuración al actualizar a otra versión (no es necesario duplicar todas las directivas, realmente solo con poner aquellas que deseemos modificar será suficiente).
Copiamos el archivo con el nombre fail2ban.local y lo editamos segun nuestras preferencias:
– loglevel:nivel de detalle del log de fail2ban. Posibles valores 1=error,2=warn,3=info y 4=debug. Dejamos el valor por defecto 3
loglevel = 3
– logtarget: sirve para indicar dónde se mostrara o almacenara el log del propio fail2ban. Es posible redirigirlo a la salida standar (STDOUT), salida de errores standar (STDERR) o a un archivo (SYSLOG). Vamos a optar por almacenar el registro en un archivo en el directorio /var/log
logtarget = /var/log/fail2ban.log
– socket: se utiliza para indicar el archivo del socket de fail2ban. Dejamos el valor que aparece.
socket = /var/run/fail2ban/fail2ban.sock
Una vez guardados los cambios, nos centramos en el archivo jail.conf.Como en el caso anterior lo copiamos con el nombre de jail.localy editamos su contenido:
La sección [DEFAULT]contiene los valores de los parámetros que se aplicarán por defecto a todos los servicios (jails) que se definan, aunque estos valores pueden ser modificados dentro de cada jail:
ignoreip: sirve para indicar IPs o redes desde las que no se tendrá encuentra si se producen fallos o no. Dejaremos la IP de loopback del propio servidor.
[DEFAULT] ignoreip = 127.0.0.1
maxretry: numero máximo de intentos fallidos que se permitiran en el intervalo de tiempo establecido.
maxretry = 5
findtime: el número de fallos se ha de producir en un determinado intervalo de tiempo. Esta variable es la que indica el intervalo de tiempo en segundos.
findtime = 600
backend: método que se utilizará para comprobar la modificación en los logs de los servicios. Dejamos el valor por defecto polling.
backend = polling
bantime: periodo de tiempo (en segundos) durante el cual se mantendrá el bloqueo del atacante.
bantime = 600
destemail: Email al que se enviarán las notificaciones de fail2ban (arranque, parada, baneo,..)
destemail = root@localhost
mta: servidor de correo que utilizara: sendmail o mail. Por defecto sendmail.
mta = sendmail
protocol: protocolo de red TCP o UDP.
protocol = TCP
Resumiendo, los ajustes generales los dejaremos así:
[DEFAULT]
ignoreip = 127.0.0.1
maxretry = 5
findtime = 600
backend = polling
bantime = 600
destemail = root@localhost
mta = sendmail
destemail = root@localhost
protocol = tcp
Ahora solo nos queda activar el jail del servicio que queremos proteger, el servidor ftp proftpd en nuestro caso. El archivo jail.conf ya incluye numerosos jails para los servicios más conocidos, entre ellos el servidor ftp proftpd.
Por defecto, la configuración que trae fail2ban para proteger el servidor ftp proftpd es la siguente
[proftpd]
enabled = false
logpath = /var/log/proftpd/proftpd.log
port = ftp,ftp-data,ftps,ftps-data
filter = proftpd
action = iptables[name=PROFTPD, port=ftp, protocol=tcp]
Vamos a ver detalladamente cada opción:
enabled: sirve para activar o desactivar el jail.
logpath: archivo log que genera el servidor proftpd. En nuestro caso tenemos que modificarlo porque nuestro servidor protftp guarda su registro en /var/log/proftpd.log
port: puertos que utiliza el servicio (protfpd) y queremos que fail2ban analice. Puede indicarse el número de puerto, o su nombre correspondiente del archivo /etc/services.
filter: nombre del archivo de la carpeta filter.d que contiene el filtro para proftpd
action: la acción(o acciones) que se efectuará si se detecta un ataque. En este caso el atacante será baneado utilizando iptables.
Modificamos la configuración del jail de proftpd quedando así:
[proftpd]
enabled = true
logpath = /var/log/proftpd.log
port = ftp,ftp-data,ftps,ftps-data
filter = proftpd
action = iptables[name=PROFTPD, port=ftp, protocol=tcp]
sendmail-whois[name=PROFTPD, dest=root@localhost]
Además de modificar la ubicación del archivo de registro del servidor proftpd, hemos añadido también el parámetro action que fail2ban además de bloquear al atacante con iptables, nos envíe un correo con un whois del atacante.
Después de guardar los cambios, iniciamos fail2ban y ya tendremos nuestro servidor un poquito más seguro corriendo fail2ban:
service fail2ban start fail2ban
A partir de este momento, cualquier intento de ataque por fuerza bruta a nuestro servidor ftp, será bloqueado y recibiremos un email con la IP del atacante y un whois de la misma.
Como habéis visto, la instalación de fail2ban en Centos o Debian es bastante sencilla y su configuración tampoco es complicada, aumentando de forma sencilla la seguridad de nuestro servidor.
Proximamente profundizaré sobre las distintas acciones que pueden llevarse a cabo cuando se detecta un ataque, y cómo modificar los filtros que trae por defecto.
Si tenéis alguna consulta no dudeis en utilizar el sistema de comentarios.