Cómo detener / prevenir la fuerza bruta de SSH [cerrado]

22

Soy muy nuevo en la administración de redes, así que tenga en cuenta que todavía no tengo tanta experiencia.

Tengo un servidor raíz de Ubuntu con panel de plesk.

Ayer mis amigos y yo notamos que la calidad de la voz en nuestro TS3 se volvió muy mala. Envié algunos pings al servidor y hubo una pérdida de paquetes muy alta. Después de eso busqué en Google un poco y descubrí que hay un auth.log. Lo descargué y me desplacé un poco, luego encontré esto:

May 13 10:01:27 rs204941 sshd[9351]: input_userauth_request: invalid user student [preauth]
May 13 10:01:27 rs204941 sshd[9351]: pam_unix(sshd:auth): check pass; user unknown
May 13 10:01:27 rs204941 sshd[9351]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=112.220.198.102 
May 13 10:01:29 rs204941 sshd[9351]: Failed password for invalid user student from 112.220.198.102 port 39806 ssh2
May 13 10:01:29 rs204941 sshd[9351]: Received disconnect from 112.220.198.102: 11: Bye Bye [preauth]
May 13 10:01:31 rs204941 sshd[9353]: Invalid user student from 112.220.198.102

Parece que alguien intentó iniciar sesión en SSH muchas veces. Me desplacé un poco y vi que este alguien intenta usar muchos nombres de usuario diferentes:student, tech, psi, news,...

Cientos de estos inicios de sesión se muestran en el archivo.

Busqué las estadísticas de tráfico en el sitio web de mi centro de datos. Solo costaba 17 MB por hora. Tengo una red troncal de 100Mbit, por lo que la transferencia de datos en sí parece no ser el problema.

Por el momento no puedo acceder al servidor de ninguna manera.

Mi pregunta es: ¿cómo puedo obtener acceso nuevamente, cómo puedo eliminar este ataque y evitar los siguientes ataques?


fuente
Todavía estoy aprendiendo mis cosas en este departamento ... Pero, ¿no sería un buen uso para el golpe de puerto?
mjrider
Consulte también Protección del servidor SSH contra la fuerza bruta
Cristian Ciupitu

Respuestas:

37

¿Cómo obtener acceso?

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 un acceso fuera de banda con el que su proveedor pueda ayudarlo.

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

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

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

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

Dicho esto, 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 varias técnicas de seguridad importantes que debe considerar para ayudar a prevenir inicios de sesión de fuerza bruta:

SSH:

  • No permita que root inicie sesión
  • No permita contraseñas ssh (use autenticación de clave privada)
  • No escuches en todas las interfaces
  • Cree una interfaz de red para SSH (por ejemplo, eth1), que sea diferente de la interfaz desde la que atiende las solicitudes (por ejemplo, eth0)
  • No uses nombres de usuario comunes
  • Use una lista de permisos y solo permita usuarios que requieran acceso SSH
  • Si necesita acceso a Internet ... Restrinja el acceso a un conjunto finito de IP. Una IP estática es ideal, sin embargo, bloquearla a xx0.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 omita Internet, se llama Conexión directa)
  • Use software como fail2ban para atrapar cualquier ataque de fuerza bruta
  • Asegúrese de que el sistema operativo esté siempre actualizado, en particular los paquetes de seguridad y ssh

Solicitud:

  • Asegúrese de que su aplicación esté siempre actualizada, en particular los paquetes de seguridad
  • Bloquee las páginas de 'administrador' de su aplicación. Muchos de los consejos anteriores se aplican también al área de administración de su aplicación.
  • Proteja con contraseña su área de administración, algo como htpasswd para consola web proyectará cualquier vulnerabilidad subyacente de la aplicación y creará una barrera adicional para la entrada
  • Bloquee los permisos de archivo. Las "carpetas de carga" son conocidas por ser puntos de entrada de todo tipo de cosas desagradables.
  • Considere colocar su aplicación detrás de una red privada y solo exponer su balanceador de carga frontal y un jumpbox (esta es una configuración típica en AWS usando VPC)
Drew Khoury
fuente
1
He instalado Fail2ban a través de help.ubuntu.com/community/Fail2ban Parece ser muy potente y fácil de usar (notificaciones por correo, ...)
Recibí un mensaje de mi centro de datos: hubo un ataque de floodatta (¿qué es esto?) Y esto hizo que la conexión fuera muy mala para muchos servidores. No fue un ataque en mi servidor especialmente.
1
Interesante. Entonces parece que mi centro de datos fue el objetivo del ataque. Pero saber que obtuve fuerza bruta además de esto, también es muy bueno. Y Fail2ban es realmente una buena herramienta. Leeré sobre Iptables y SSH Config los próximos días e intentaré que sea mucho más seguro.
3
Configure openssh para escuchar un puerto que no sea el 22 y configure iptables para soltar cualquier cosa que llegue al puerto 22. Si no espera ingresar desde otro país que no sea su país de origen, cree una lista de bloqueo en countryipblocks.net/country_selection. php y úsalo con iptables.
ThoriumBR
4

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

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

vi /etc/ssh/sshd_config

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

Reglas automáticas de IPTables sobre fuerza bruta

uso log2iptables https://github.com/theMiddleBlue/log2iptables en su lugar 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 descarta la dirección IP específica. Es genial porque uso la API de Telegram y puede enviarme un mensaje en mi teléfono cuando encuentra un problema :)

Espero que esto ayude!

la mitad
fuente
8
Supongo por la correlación entre la URL del proyecto y su identificador de SF, que está involucrado en este proyecto. Por favor, vea nuestras directrices en referencia a sus propios productos, en particular, teniendo en cuenta la exigencia de que " se debe revelar su afiliación en sus respuestas ".
MadHatter apoya a Monica el
1

Acabo de armar esto, ejecutar cada 15 minutos como 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
marca
fuente
0

Esta es mi solución alternativa para los ataques SSH. La idea es seguir cerrando SSH daemon si no se usa. Sin puerto abierto sin ataque. Puedes probarlo. Es de código abierto https://github.com/indy99/nnet_port_guard

indy99
fuente
1
¡Bienvenido a Server Fault! Su respuesta sugiere que una solución viable a la pregunta está disponible a través de otro sitio web. La familia de sitios web de preguntas y respuestas de Stack Exchange generalmente desaprueba este tipo de respuesta porque otros sitios web pueden moverse, eliminarse o modificarse. Por favor lea ¿Cómo escribo una buena respuesta? y considere revisar su respuesta para incluir los pasos necesarios para resolver el problema. Y no te olvides de hacer el recorrido por el sitio .
Paul
0

Solución automatizada para Centos / RHEL para bloquear actores malos

Aquí hay una secuencia de comandos para que Centos verifique los inicios de sesión fallidos de ssh para cuentas de usuario no válidas y contraseñas incorrectas para cuentas válidas. Si la IP de origen nos ha afectado más de 3 veces y aún no está en la lista de denegación, se agrega a la lista de denegación. Ejecuto esto cada 15 minutos desde el crontab de root. También he rechazado los inicios de sesión de raíz a través de ssh, por lo que la combinación mantiene las cosas bastante tranquilas.

     #/bin/bash
     # Save a copy of the existing hosts.deny file for safety
     cp /etc/hosts.deny /etc/hosts.deny.bak
     # Get a list of the offending IP addresses and process them
     for z in `grep "Invalid\|Failed" /var/log/secure | awk '{ print $NF }' | sort | uniq`
     do
     # Get the number of times this IP hit us
     hits=`grep "Invalid\|Failed" /var/log/secure* | grep $z | wc -l`
     # Check whether this IP is already blocked
     blocked=`grep $z /etc/hosts.deny | wc -l`
     # If they hit us more than 3 times and are not already on the deny list
     # add them to the deny list
     if [ $hits -gt 3 -a $blocked -eq 0 ]
     then
          echo "sshd : $z" >> /etc/hosts.deny
     fi
     done
David Lash
fuente
1
Mira un fail2banque hace lo mismo y está probado en batalla.
Patrick Mevzek