Archivo por meses: enero 2007

fail2ban, bloqueando accesos por SSH

El problema

Hay mucha gente malvada por el mundo adelante. Personas interesadas en hacerse con un ordenador para robar datos o utilizarlo como puente para alguna “fechorí­a”. Si tenemos funcionando un servidor ssh o web (Apache) es probable que hayamos notado intentos de acceso indiscriminados.

Mucha gente usa ciertos programas que por fuerza bruta o mediante ataques por diccionario (esto es, probar toda una serie de palabras de una lista para encontrar la contraseña) que de forma automatizada tratan de conseguir acceso a un determinado equipo. Si tenemos una buena contraseña, es bastante complicado que consigan averiguarla, pero lo mejor es “bannear” a aquellas IPs que están intentando entrar, de tal forma que no podrán seguir intentándolo, les denegamos el acceso.

La solución

Para bloquear el acceso de una determinada IP a nuestro equipo podemos configurar el cortafuegos (firewall) que traen todos los sistemas Linux: iptables. Pero esto, la verdad, es bastante tedioso y requiere de paciencia y ganas para llegar a hacer algo productivo con él. ¿Qué tal si alguien lo hace por nosotros? Aquí­ entra en escena fail2ban. Es un programita que se ejecuta siempre al iniciar el ordenador y está funcionando en segundo plano, monitoreando los accesos a nuestra máquina. Realmente, no hace nada “mágico”, sino que examina el contenido de los ficheros /var/log/auth.log y /var/log/apache/error_log en busca de intentos fallidos de acceso a nuestra máquina.

/var/log/auth.log Contiene los intentos de acceso a nuestra máquina ví­a SSH
/var/log/apache2/error.log Contiene los intentos de acceso a nuestra máquina a través del servidor web, en este caso, Apache (en su segunda versión).

Instalación

Si vamos a su web oficial vemos que existen paquetes para varias distribuciones. Así­ que sólo tenéis que bajar la versión correspondiente o si tenéis Debian o algún derivado, podréis instalarlo con un sencillo:

# apt-get install fail2ban

Configuración

fail2ban se puede configurar no sólo para controlar los intentos de acceso a través de SSH o de servidor web, sino de otros programas como algún servidor ftp (como el vsftpd). ¿Cómo se configura fail2ban? Editando el fichero /etc/fail2ban.conf a nuestro gusto.

Como en este post hablamos de bloquear las IPs reincidentes que intentan entrar ví­a SSH, configuraremos fail2ban para que bannee estas IPs. Abrimos el fichero de configuración y buscamos la parte de SSH y colocamos las cosas tal que así­:

 [SSH]
# Option:  enabled
# Notes.:  enable monitoring for this section.
# Values:  [true | false]  Default:  true
# 
enabled = true

# Option:  logfile
# Notes.:  logfile to monitor.
# Values:  FILE  Default:  /var/log/auth.log
# 
logfile = /var/log/auth.log

# Option:  port
# Notes.:  specifies port to monitor
# Values:  [ NUM | STRING ]  Default:
#
port = ssh

Con lo de arriba, hemos indicado que fail2ban controle los accesos por SSH (enabled = true), mirando los accesos fallidos que se producen almacenados en /var/log/auth.log (logfile) y puerto ssh (que por defecto es el 22). Y para el resto de servicios se harí­a igual: activarlos o desactivarlos, indicarles el fichero de registros y el puerto que usa ese servicio.

Otra parte importante del fichero de configuración es el número máximo de intentos fallidos que permitimos y el tiempo que queremos que esté banneada una IP:

# Option:  maxfailures
# Notes.:  number of failures before IP gets banned.
# Values:  NUM  Default:  5
#
maxfailures = 3

# Option:  bantime
# Notes.:  number of seconds an IP will be banned. If set to a negative
#          value, IP will never be unbanned (permanent banning).
# Values:  NUM  Default:  600
#
bantime = 60000

Como podéis ver el tiempo de banneo se da en segundos.

Y nada, una vez editado este fichero a vuestro gusto, lo guardáis y reiniciáis fail2ban (como superusuario):

# sudo /etc/init.d/fail2ban restart

Y listo 🙂

Enlaces relacionados