Por Damien / Ene 3, 2013 / LinuxSSH

es una buena herramienta para que puedas acceder remotamente a tu ordenador/servidor y hacer cambios en él como si estuvieras delante del ordenador. Si tienes un servidor SSH, te hemos mostrado cómo generar y utilizar una clave pública/privada para que puedas conectarte al servidor remoto de forma segura, pero eso no significa que tu servidor SSH sea seguro. Por el contrario, la mayoría de los servidores SSH son vulnerables a los ataques de fuerza bruta y si no estás atento, los hackers podrían fácilmente hackear tu servidor y destruir/robar todo lo que tienes.

Fail2Ban es una herramienta simple, pero útil, que puede monitorear su servidor de ataques maliciosos y bloquearlos antes de que puedan causar estragos.

Instalación

Fail2Ban está disponible en el repositorio de Ubuntu, así que puedes instalarlo fácilmente con el comando

sudoapt-get install fail2ban

Para los usuarios de Red Hat o Centos, pueden instalar Fail2Ban a través del repositorio EPEL.

Una vez que hayas instalado Fail2Ban, el siguiente paso es mover el archivo de configuración a una carpeta local para no cambiar el archivo de configuración principal accidentalmente.

sudocp/etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Configuración

Una vez instalado, Fail2Ban comenzará a monitorear automáticamente su servidor en busca de ataques maliciosos. En la mayoría de los casos, la configuración por defecto es suficiente para proteger tu sitio, pero si tienes alguna configuración personalizada del servidor (como un puerto diferente para el acceso SSH) o quieres habilitar otros servicios, aquí tienes cómo hacerlo:

sudonano/etc/fail2ban/jail.local

El archivo de configuración está dividido en diferentes secciones. La primera que encontrarás es [DEFAULT].

[DEFAULT]# "ignoreip" puede ser una dirección IP, una máscara CIDR o un host DNStignoreip = 127.0.0.1/8bantime = 600maxretry = 3# "backend" especifica el backend utilizado para obtener la modificación de los archivos. Las# opciones disponibles son "gamin", "polling" y "auto": Por alguna razón, python-gamin enviado por Debian no funcionaba como se esperaba# Este problema quedó pendiente, así que polling es el backend por defecto por ahorabackend = auto ## Dirección de correo electrónico de destino utilizada únicamente para las interpolaciones en# jail.{conf,local} archivos de configuración.destemail = root@localhost

Los pocos parámetros que hay que tener en cuenta aquí son ignoreip, bantime y maxretry.

  • ignoreip – este es el lugar donde se pone en la lista blanca la IP que no se quiere bloquear. El valor por defecto es el localhost (127.0.0.1/8). Puedes añadir IPs adicionales al campo, separando cada IP con un espacio.
  • bantime – esta es la cantidad de tiempo en segundos para bloquear la IP de acceso a su servidor. El valor por defecto es de 10 minutos (600 segundos)
  • maxretry -este es el número de intentos fallidos de acceso antes de que la IP sea bloqueada.

También está el campo destemail donde puedes especificar una dirección de correo electrónico para que notifique cuando se detecte un ataque malicioso. Una cosa a tener en cuenta es que esto sólo funcionará si tienes un servidor de correo instalado.

La siguiente sección es la de “Acciones”.

# ACCIONES## Acción de prohibición por defecto (por ejemplo, iptables, iptables-new,# iptables-multiport, shorewall, etc) Se utiliza para definir# variables action_*. Puede ser anulada globalmente o por# sección dentro de jail.local filebanaction = iptables-multiport # acción de correo. Desde la versión 0.8.1 fail2ban utiliza sendmail# MTA para el envío de correos. Cambie el parámetro de configuración mta a mail# si quiere volver a usar el 'mail' convencional.mta = sendmail# Por defecto protocolprotocolo = tcp # Especifique la cadena en la que habría que añadir los saltos en iptables-* actionschain = INPUT ## Atajos de acción. Para definir el parámetro de la acción# La acción más simple a realizar: ban onlyaction_ = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]# ban y enviar un e-mail con informe whois al destemail.action_mw = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]%(mta)s-whois[name=%(__name__)s, dest="%(destemail)s", protocol="%(protocol)s", chain="%(chain)s"]# prohibir y enviar un correo electrónico con el informe whois y las líneas de registro pertinentes# al destemail.
action_mwl = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]%(mta)s-whois-lines[name=%(__name__)s, dest="%(destemail)s", logpath=%(logpath)s, chain="%(chain)s"]# Elige la acción por defecto. Para cambiar, simplemente anule el valor de 'action' con la# interpolación al atajo de acción elegido (por ejemplo, action_mw, action_mwl, etc) en jail.local# globalmente (sección [DEFAULT]) o por sección específicaaction = %(action_)s

La mayoría de los ajustes aquí pueden dejarse por defecto a menos que quieras cambiar la acción de baneo y el protocolo. La “acción de prohibición” por defecto es a través de la tabla IPT. Puedes hacer que use la configuración multipuerto o crear una nueva IpTable para esto. El valor por defecto para el “protocolo” es tcp, pero puedes cambiarlo a udp , dependiendo de la conexión que estés usando.

La última parte de la sección “Jail” donde puede configurar Fail2Ban para monitorear su servidor Apache, servidor FTP, servidor de correo y servidor DNS.

ssh]enabled = trueport = sshfilter = sshdlogpath = /var/log/auth.logmaxretry = 6

En la mayoría de los casos, basta con cambiar la configuración “enabled = false” por “enabled = true

” y se activará para ese servicio. Si no está utilizando el puerto 20 habitual para SSH, también puede cambiar el número de puerto en la configuración anterior.

Una vez que haya terminado con la configuración, pulse “Ctrl + o” para guardar y “ctrl + x” para salir.

Por último, reinicie el servicio Fail2Ban con el comando

sudo service fail2ban restart

¿Qué otras formas utilizas para proteger tu servidor SSH?

  • Gavin Engel 30 de mayo de 2013 a las 3:04 pm ¿Hay algún inconveniente en configurar simplemente todos los elementos monitorizados para que estén activados, incluso si algunos ni siquiera están instalados?” Damien 4 de junio de 2013 a las 7:10 am No lo he probado, pero no creo que haya ningún inconveniente. Simplemente comprobará el elemento, y lo omitirá si no está activado.
  • Los