AraDaen, sysadmin notes Blog sobre administración de sistemas operativos, análisis de nuevas tecnologías, diseño y desarrollo de software a medida (Java, .NET, Android) y otras noticias

Instalar fail2ban en servidores Centos y Debian

Hace unos días os comentaba cómo proteger nuestros servidores con fail2ban de 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.conf es el archivo donde se definen que servicios van a analizarse y con qué criterios. Para cada servicio se define un jail que 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 directorio action.d contiene los scripts de las distintas acciones que pueden asociarse a un determinado jail.  Y el directorio filter.d contiene 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 .conf son editables, aunque es recomendable no modificarlos, y utilizar un archivo con el mismo nombre pero acabado en .local en lugar de .conf para escribir nuestra configuracion. La configuración escrita en los archivos .local siempre 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.local y 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í:

1
2
3
4
5
6
7
8
9
10
[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

12
13
14
15
16
17
[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í:

12
13
14
15
16
17
18
[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.

Leave a Reply

Your email address will not be published. Required fields are marked *