GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo detener/prevenir la fuerza bruta SSH

Solución 1:

¿Cómo acceder?

No está claro por qué no puede acceder a su cuenta.

Si su máquina está bajo ataque o carga alta, debe hablar con su proveedor acerca de restringir el acceso (Restricciones de IP) o desconectar el servidor (desconectarse de Internet).

También es posible que necesite acceso fuera de banda con el que su proveedor pueda ayudarlo.

Si alguien ha comprometido su servidor, es posible que deba restaurar desde copias de seguridad o usar una imagen de recuperación.

Cómo prevenir ataques a su servidor, en particular SSH

¿Cuál es la mejor manera de evitar los inicios de sesión por fuerza bruta?

¡No permita que lleguen a su máquina en primer lugar! Hay muchas formas de detener los intentos de fuerza bruta antes de que lleguen a su host, o incluso a nivel de SSH.

Habiendo dicho eso, proteger su sistema operativo con algo como fail2ban es una gran idea. http://en.wikipedia.org/wiki/Fail2ban

Fail2ban es similar a DenyHosts... pero a diferencia de DenyHosts que se enfoca en SSH, fail2ban se puede configurar para monitorear cualquier servicio que escriba intentos de inicio de sesión en un archivo de registro, y en lugar de usar/etc/hosts.deny solo para bloquear direcciones IP/hosts, fail2ban puede usar Netfilter/iptables y TCP Wrappers /etc/hosts.deny.

Hay una serie de técnicas de seguridad importantes que debe tener en cuenta para ayudar a evitar los inicios de sesión por fuerza bruta:

SSH:

  • No permitir que root inicie sesión
  • No permitir contraseñas ssh (usar autenticación de clave privada)
  • No escuches en todas las interfaces
  • Cree una interfaz de red para SSH (p. ej., eth1), que sea diferente de la interfaz desde la que atiende las solicitudes (p. ej., eth0)
  • No use nombres de usuario comunes
  • Utilice una lista de permitidos y solo permita usuarios que requieran acceso SSH
  • Si necesita acceso a Internet... Restrinja el acceso a un conjunto finito de direcciones IP. Una IP estática es ideal, sin embargo, bloquearla en x.x.0.0/16 es mejor que 0.0.0.0/0
  • Si es posible, encuentre una manera de conectarse sin acceso a Internet, de esa manera puede denegar todo el tráfico de Internet para SSH (por ejemplo, con AWS puede obtener una conexión directa que pasa por alto Internet, se llama Direct Connect)
  • Use software como fail2ban para detectar cualquier ataque de fuerza bruta
  • Asegúrese de que el sistema operativo esté siempre actualizado, en particular los paquetes de seguridad y ssh

Aplicación:

  • Asegúrese de que su aplicación esté siempre actualizada, en particular los paquetes de seguridad
  • Bloquee las páginas de "administración" de su aplicación. Muchos de los consejos anteriores también se aplican al área de administración de su aplicación.
  • Proteja con contraseña su área de administración, algo como htpasswd para la consola web proyectará cualquier vulnerabilidad subyacente de la aplicación y creará una barrera de entrada adicional
  • Bloquear permisos de archivo. Las 'Carpetas de carga' son conocidas por ser puntos de entrada de todo tipo de cosas desagradables.
  • Considere poner su aplicación detrás de una red privada y solo exponer su balanceador de carga front-end y un jumpbox (esta es una configuración típica en AWS que usa VPC)

Solución 2:

¿Cómo puedo suprimir este ataque y evitar los siguientes?

Por lo general, cambio el puerto ssh predeterminado de 22 a otro como 1122. Esto evita muchos ataques automáticos de bots, pero un simple escaneo de puertos puede detectarlo. De todos modos:

vi /etc/ssh/sshd_config

y edite Puerto 22 al Puerto 1122 , pero esto no es suficiente.

Reglas automáticas de IPTables sobre fuerza bruta

yo uso log2iptables https://github.com/theMiddleBlue/log2iptables en lugar de Fail2ban, porque es un script Bash simple que analiza cualquier archivo de registro con una expresión regular y ejecuta iptables. Por ejemplo, cuando ocurren 5 coincidencias, log2iptables elimina la dirección IP específica. Es genial porque usa la API de Telegram y puede enviarme un mensaje a mi teléfono cuando encuentre un problema :)

¡espero que esto ayude!

Solución 3:

Acabo de armar esto, ejecutar cada 15 minutos como un cronjob, etc.:

for z in `grep Invalid /var/log/auth.log | awk '{ print $NF }' | sort | uniq`
do
  count1=`grep $z /etc/hosts.deny | wc -l`
  count2=`grep Invalid /var/log/auth.log | grep $z | wc -l`
  if [ $count1 -eq 0 -a $count2 -gt 10 ] ; then
    current=`egrep "^ssh" /etc/hosts.deny | sed 's/sshd[ :,]*//'`
    sudo cp /etc/hosts.deny.bak /etc/hosts.deny
    sudo chmod 666 /etc/hosts.deny
    if [ $current ] ; then
      echo "sshd : $current , $z" >> /etc/hosts.deny
    else
      echo "sshd : $z" >> /etc/hosts.deny
    fi
    sudo chmod 644 /etc/hosts.deny
  fi
done

Linux
  1. Cómo cambiar el puerto SSH en Linux

  2. Cómo configurar túneles SSH

  3. Cómo configurar claves SSH

  4. Ssh:¿cómo funciona TCP-keepalive en Ssh?

  5. ¿Cómo dejar de agregar IP de EC2 a unknown_hosts para ssh?

Cómo cambiar el puerto SSH en VPS

Cómo crear un alias SSH en Linux

Cómo permitir o denegar el acceso SSH a un usuario o grupo en particular en Linux

Cómo evitar que se agote el tiempo de espera de SSH

Cómo detener un servidor de spam

Cómo evitar que SSH se desconecte si ha estado inactivo por un tiempo