Proteger SSH con fail2ban en Debian 7

Actualizado el . Posteado en Blog. Visitado 1773 veces.

                              Proteger SSH con fail2ban en Debian 2

Introducción

Tener un servidor o una computadora conectada a una red viene con una cierta cantidad de riesgo. Cualquier máquina, incluyendo un servidor, conectado a Internet es un objetivo potencial para ataques maliciosos.

Aunque tener un Firewall bien configurado evitará muchos tipos de acceso ilegítimo, todavía necesita abrir ciertos servicios para permitirse la habilidad de iniciar sesión y administrar el servidor. SSH es el servicio más utilizado para iniciar sesión en sistemas remotos, por lo que también es uno de los más frecuentes.

Afortunadamente, hay una herramienta disponible que puede mitigar este vector de ataque, llamado fail2ban . Esto se puede configurar para permitir los inicios de sesión legítimos mediante SSH, pero prohíbe las direcciones IP después de que no se hayan autenticado correctamente después de un número de veces establecido.

Estaremos instalando y configurando este software en un servidor Debian 7.

Paso uno: Instalar fail2ban


Debian incluye fail2ban en sus repositorios predeterminados. Podemos descargarlo e instalarlo con el siguiente conjunto de comandos:

sudo apt-get update
sudo apt-get install fail2ban

Esto no sólo instalará fail2ban, sino que también iniciará el servicio con la configuración predeterminada.

Segundo paso: Configurar fail2ban


La configuración fail2ban se mantiene en el directorio /etc/fail2ban . El archivo de configuración que especifica las reglas de prohibición predeterminadas se denomina jail.conf .

Debido a la forma en que fail2ban actualiza sus archivos de configuración cuando el programa tiene una nueva versión, no debemos editar el archivo de configuración predeterminado.

En su lugar, debemos copiarlo a una nueva ubicación y editarlo allí:

cd /etc/fail2ban
sudo cp jail.conf jail.local
sudo nano jail.local

Aquí, podemos cambiar cualquier configuración que no nos gusta que se estableció en la configuración predeterminada.

Configuración Predeterminada


La sección que comienza [DEFAULT] configura los valores predeterminados que se pueden sobreescribir en contextos más específicos más adelante en la configuración. Es una buena idea tener fuertes valores predeterminados.

La mayoría de los ajustes que se han dado son buenas selecciones para las opciones predeterminadas. Sin embargo, hay algunas áreas que se beneficiarían de la configuración.

Parámetros de Prohibición


Podemos configurar la forma en que fail2ban implementa su prohibición modificando algunos parámetros. Éstos son algunos de los más importantes:

  • Ignoreip : Este parámetro toma una lista de direcciones IP que deben ser excluidas de las reglas fail2ban. Las direcciones IP o los bloques enumerados aquí no tendrán restricciones puestas en ellos, así que elija sabiamente y específicamente.

    • Las direcciones IP y los rangos están separados por espacios en blanco.
    • Debe agregar su dirección IP doméstica o de trabajo al final de la lista para que no se bloquee si tiene problemas para iniciar sesión.
    • Esto se verá así: "ignoreip = 127.0.0.1/8 YOUR_IP_ADDRESS "
  • Bantime : Enumera la cantidad de tiempo que durará una prohibición si el cliente no se autentica correctamente. Se da en segundos.

    • El valor predeterminado prohíbe a los clientes durante 10 minutos.
  • Maxretry : Este parámetro especifica el número de intentos permitidos antes de que se establezca una prohibición.

Definir las Medidas de Prohibición


Cuando se necesita una prohibición, fail2ban puede proceder de muchas maneras diferentes. Decide las acciones necesarias considerando los siguientes parámetros:

  • Banaction : Esta configuración especifica el archivo de configuración que se utilizará cuando se necesite una prohibición.

    • El valor de este parámetro se refiere a un archivo en el directorio /etc/fail2ban/action.d , que manejará el proceso de prohibición real.
    • El valor predeterminado utiliza iptables (un Firewall) para prohibir una IP en todos los puertos cuando falla la autenticación. Más adelante veremos las reglas de prohibición específicas.
  • Acción : Este parámetro especifica uno de los métodos abreviados de acción que se enumeran encima de él. Básicamente llama a un script de banaction (como se mencionó anteriormente), y luego asigna la información apropiada a las variables y las pasa al guión.

    • La acción predeterminada es action_ , que llama al script y pasa el nombre, puerto, protocolo y cadena al script. No envía una dirección de correo electrónico o las líneas de registro como algunas de las otras acciones.

Configurar Alertas por Correo Electrónico


Si desea configurar fail2ban para enviarle un correo electrónico cuando insista una prohibición, también puede configurarlo en la sección predeterminada.

Si ha configurado un servidor de correo en su computadora, puede configurar fail2ban para enviar correo electrónico a una dirección externa. De lo contrario, puede enviarlo a una cuenta unix local.

Hay dos parámetros relevantes:

  • Destemail : Esta opción establece la dirección de correo electrónico que se notificará en caso de una prohibición.

    • El valor predeterminado, "root @ localhost", entregará el correo a la cuenta root del equipo actual.
    • Si tiene configurado un servidor de correo, no dude en cambiarlo a una dirección de correo externa.
  • Mta : Especifica el agente de correo que se utilizará para enviar correo.

    • Si tiene un servidor de correo configurado con sendmail, deje la opción predeterminada (sendmail), tal como está.
    • Si no tiene un servidor de correo configurado, pero desea que el correo local entregado a una cuenta de usuario, puede cambiar "sendmail" a "correo".

Si desea configurar el correo electrónico, tendrá que editar el parámetro de action como se mencionó anteriormente. Cambie la acción a "action mw" o "action mwl" para que la información de correo electrónico se transmita al script de prohibición.

Si ha configurado la entrega de correo local, puede comprobar el correo escribiendo:

sudo nano /var/mail/mail

Configurar Cárceles Específicas de la Aplicación


Más abajo en el archivo, debe ver las secciones marcadas como las verás a continuación:

[application_name]

Debería ser capaz de descifrar la mayoría de los parámetros.

El parámetro filter especifica un archivo dentro del directorio /etc/fail2ban/filter.d . Esto le dice a fail2ban cómo analizar el archivo de registro del programa para los intentos de autenticación fallidos.

La variable logpath contiene la ruta de acceso al archivo de registro del servicio, que fail2ban analizará para los errores.

Puede anular cualquiera de los otros parámetros predeterminados. Por ejemplo, la opción maxretry es diferente para SSH que para la opción dault en una instalación de Debian.

Paso Tres: Configurar Iptables


En realidad no haremos mucha configuración de iptables, pero echaremos un vistazo al archivo de configuración que implementa su comportamiento. Esto nos ayudará a entender cómo fail2ban implementa sus políticas de prohibición.

Abra el archivo que se especificó en nuestra configuración de cárcel bajo el parámetro banaction :

sudo nano /etc/fail2ban/action.d/iptables-multiport.conf

Aquí, podemos ver lo que realmente sucede cuando fail2ban llama a tener un IP prohibido. Utiliza el software firewall iptables para implementar reglas.

Cuando fail2ban comienza, llama a estas líneas:

actionstart = iptables -N fail2ban-<name>
              iptables -A fail2ban-<name> -j RETURN   # questionable usefulness
              iptables -I <chain> -p <protocol> -m multiport --dports <port> -j fail2ban-<name>

Esto inicializa el entorno para pasar el tráfico a través de una cadena de filtrado.

El software iptables controla el tráfico basado en "embudos" o "cadenas". Cada uno de estos embudos aplica reglas sobre todo el tráfico que se le da a fin de decidir si es aceptable o no.

La primera línea, iptables -N fail2ban-<name> , crea una nueva cadena denominada "fail2ban-" con el nombre del servicio siguiente. Esto mantendrá las reglas que prohíben ciertas direcciones IP.

La siguiente línea, iptables -A fail2ban-<name> -j RETURN , agrega una regla a la cadena que acabamos de crear, que le dice a iptables que devuelva el control a la cadena que llamó a esta cadena.

La última línea, iptables -I <chain> -p <protocol> -m multiport --dports <port> -j fail2ban-<name> , agrega una regla a la cadena INPUT (especificada en nuestro archivo jail.local) que inmediatamente Pasa el control a nuestra nueva cadena fail2ban.

Por lo tanto, el flujo actual es que el tráfico entrante es manejado por nuestra cadena INPUT. En este punto, golpea el control de paso de reglas a la cadena fail2ban. La primera regla en esta cadena pasa el control de regreso a la cadena que lo llamó, la cadena INPUT.

Por lo tanto, en este punto, el control sólo se pasa de ida y vuelta sin que realmente suceda nada. Sin embargo, hemos establecido un flujo de control que acomodará reglas adicionales. Cuando necesitamos prohibir una dirección IP, podemos agregar otra regla a la cadena fail2ban justo encima de donde pasa el control a la cadena INPUT.

Podemos ver las acciones complementarias para derribar las reglas fail2ban, para cuando el servicio se detiene:

actionstop = iptables -D <chain> -p <protocol> -m multiport --dports <port> -j fail2ban-<name>
             iptables -F fail2ban-<name>
             iptables -X fail2ban-<name>

Esto básicamente invierte todas las reglas que acabamos de construir.

Cuando se prohíbe un cliente, esta regla se implementa:

actionban = iptables -I fail2ban-<name> 1 -s <ip> -j DROP

Esto le dice a iptables que elimine todos los paquetes de esa dirección IP, lo cual los prohíbe de intentar autenticarse de nuevo.

Cuando ha transcurrido el plazo, esta regla invierte la prohibición:

actionunban = iptables -D fail2ban-<name> -s <ip> -j DROP

Si desea ver qué reglas se implementan y qué direcciones IP están actualmente prohibidas, puede comprobar las reglas actuales de iptables escribiendo:

sudo iptables -L

Si los clientes están prohibidos, estarán en la cadena inferior.

Paso cuatro: Reinicie fail2ban


Cuando haya realizado cambios en su configuración, deberá reiniciar fail2ban para implementar las nuevas reglas.

Puede hacerlo escribiendo este comando:

sudo service fail2ban restart

Para probar sus nuevas reglas, puede crear otra instancia en su servidor y autenticarse incorrectamente a propósito suficientes veces desde su computadora para activar la regla de prohibición. Después de eso, su llamada SSH ni siquiera devolverá una solicitud de contraseña.

Si observa las reglas iptable en el host que configuró, verá una nueva regla:

sudo iptables -L

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
fail2ban-ssh  tcp  --  anywhere             anywhere             multiport dports ssh

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain fail2ban-ssh (1 references)
target     prot opt source               destination         
DROP       all  --  xxx-xxxxxxxx.dyn.xxxxxxxxx.net  anywhere            
RETURN     all  --  anywhere             anywhere

Puede ver la segunda regla en segundo lugar desde la parte inferior.

Conclusión


Ahora debería tener alguna seguridad adicional haciendo que su servidor sea un objetivo más duro para la fuerza bruta. Si bien este es un gran comienzo, una solución más completa sería deshabilitar la autenticación de contraseña completamente y permitir sólo la autenticación basada en claves.

 

Fuente. Artículo traducido y con muy ligeras modificaciones de: https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-debian

licencia creative common
Este trabajo está licenciado por Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
Sobre el Autor
Pipe Peña
Author: Pipe Peña
Soy un loco enamorado de la vida. Licenciado en Ciencias Sociales y Humanas, amante de la informática y la astrofísica. Me gusta crear e investigar proyectos que enriquezcan la construcción y desarrollo del conocimiento individual y colectivo. Me encantan los videojuegos, el cine, la química, matemáticas, la física cuántica y la música, en donde actualmente soy compositor. Me baso en la idea que toma Baruch Spinoza sobre Dios.

Imprimir


Comentar este artículo en los foros (0 respuestas).