¿Cómo podemos limitar el impacto de las sondas ssh?

13

Mi servidor web es constantemente atacado por varias direcciones IP. Intentan cinco contraseñas y luego cambian la dirección IP.

He realizado varios bloqueos, como usar ssh-keys y no permitir contraseñas, y no permitir el inicio de sesión raíz remoto.

¿Hay algo que pueda hacer para deshacerme de estos intentos de ataque? De lo contrario, ¿hay defensas específicas que deba poner?

JW01
fuente
1
Marcar para una migración a security.se donde es un poco más sobre el tema
Rory Alsop
1
@Rory Hay una diferencia entre "un poco más sobre el tema de alguien más" y "fuera de tema aquí" - parece bastante claro sobre el tema aquí
Michael Mrozek
No te preocupes @Michael. Tenía un ping de Gilles para verlo, ya que posiblemente fuera un tema fuera de aquí.
Rory Alsop
@Rory Ok, le preguntaré al respecto; por lo general es bastante bueno para convencerme de algo que creo que es {off, on} el tema es en realidad {on, off} topic
Michael Mrozek
1
Mi pregunta parece haber cambiado más allá del reconocimiento. En mi pregunta original, realmente estaba tratando de descubrir si era común que cada sitio experimentara ataques de fuerza bruta, es decir, es un hecho de la vida. Esto fue respondido por Matteo con "De hecho, es un hecho de la vida". La segunda parte de la pregunta era preguntar qué podía hacer para detener activamente estos ataques, además de poner defensas . Esta habría sido una pregunta secundaria relevante si solo ciertos sitios sufrieran ataques de fuerza bruta. Fue respondido por Bruce con su idea de tarpit. Realmente no pedí consejos defensivos.
JW01

Respuestas:

14

De hecho es un hecho de la vida. Puede instalar herramientas para filtrar los hosts que lo están atacando después de un par de intentos fallidos.

DenyHosts analiza sus archivos de registro y agrega automáticamente atacantes a su /etc/hosts.denyarchivo.

Consulte la documentación sobre cómo configurarlo para sus necesidades.

Actualización : algunos puntos importantes sugeridos en los comentarios

  • asegúrese de configurar correctamente las herramientas como DenyHosts ya que podría bloquearse (por ejemplo, puede configurar una máquina o red que nunca se filtre)

  • DenyHosts no aumenta la seguridad de su sistema: solo filtra los ataques a nivel de IP (podría reducir la carga en máquinas pequeñas y reducir el tamaño de los archivos de registro, pero nada más)

Matteo
fuente
1
Aaah Estaba empezando a pensar que era especial. Gracias por aclararme.
JW01
Extendiéndose sobre Matteo, su pregunta casi se responde exactamente refs Q1.3 denyhosts.sourceforge.net/faq.html#1_0
whoami
@whoami Gracias por el enlace, un buen resumen. Aunque una cosa que siempre pasa por mi mente cuando veo el uso de una sugerencia de puerto diferente es ' ¿cómo sabes que el puerto alternativo que eliges ya no está siendo utilizado por otra persona? '
JW01
1
Tenga cuidado con DenyHosts y herramientas similares, ya que introducen una complejidad adicional, es decir, pueden crear problemas de seguridad por sí mismos, cf. el segundo comentario en unix.stackexchange.com/questions/2942/…
maxschlepzig
1
También tenga cuidado con DenyHosts porque podría bloquear su máquina. Un simple apt-get install denyhostsme dejó fuera de mi máquina.
Naftuli Kay
15

Seguí estas instrucciones para agregar un retraso de 7 segundos a cada intento de inicio de sesión SSH con contraseña incorrecta. Convertí mi sshd en un "tarpit" para los escáneres de fuerza bruta.

También debo agregar que tengo mi sshd tarpit modificado, registrar las contraseñas fallidas. Esto puede no ser del todo ético, ya que le da al usuario root una mirada a lo que los usuarios regulares escriben mal como sus propias contraseñas, pero como soy el único usuario "real", creo que está bien.

No lo tengo ejecutado en un puerto no estándar, ya que el aspecto "tarpit" no perdería el tiempo de nadie.

Bruce Ediger
fuente
Además, use un puerto no estándar y use claves en lugar de contraseñas. Entonces casi no tienen esperanza (siempre y cuando no tengan acceso a las llaves, que de todos modos deberían ser aprobadas).
Callum Rogers
Esta es una buena respuesta porque tiene un enfoque un poco "ofensivo" en lugar de ser puramente "defensivo", lo que creo que contribuye a la moral.
JW01
9

Si solo un pequeño número de personas necesita SSH para el sistema, considere mover SSH a un puerto no estándar (por ejemplo, 6422, 8080, etc.) Eso solo reducirá en gran medida el número de intentos de inicio de sesión (y posiblemente lo proteja de algunos no parcheados). Gusano basado en exploits SSH, por ejemplo).

Cuña
fuente
3
+1 Es bastante útil, ya que limita la molestia, pero no lo confunda con una medida de seguridad: este es un equivalente más cercano de una puerta de mosquitera contra mosquitos que de una cerradura de seguridad.
Piskvor salió del edificio el
1
+1 Esto también es un ahorro en los recursos del servidor.
Xeoncross
6

Concurre con la respuesta de @ Matteo; lo que está viendo es esencialmente miles de sistemas zombies que ejecutan un ataque de fuerza bruta distribuido en su servidor porque hay un sitio web ejecutándose en él, lo que significa que puede haber usuarios que pueden tener una cuenta de inicio de sesión que posiblemente se adivine esfuerzo mínimo por parte del script kiddie: tiene un programa que ordena a los miles de zombis que realicen los intentos de fuerza bruta en unos pocos cientos de hosts de sitios web a la vez y solo compile una lista de los retornos exitosos.

Del mismo modo, a veces puede ver muchas permutaciones de "http://your.web.host/phpmyadmin/" en sus /var/log/apache2/access.logarchivos; estos son escaneos automáticos para las formas más comunes de configurar PHPMyAdmin, e intentarán una serie de exploits conocidos si se encuentra uno (por cierto, es por eso que he comenzado a decirles a los clientes que usen el sitio PMA que configuré personalmente y mantenerse actualizado en lugar de instalar su propia versión y olvidarse de mantenerlo actualizado, pero ahora estamos en una tangente).

Además de enviar el comando original, ni siquiera le cuesta tiempo o ancho de banda; Es fuego y olvidar.

Otro bit de software muy útil para situaciones como esta es fail2ban , que utiliza iptables para bloquear los intentos de conexión después de múltiples inicios de sesión claramente falsos u otros intentos de explotación.

Shadur
fuente
4

Intenta configurar Fail2ban . Proporciona una forma muy flexible de buscar intentos fallidos y tiene plantillas para SSH, HTTP y servicios comunes.

Fail2ban actualizará iptables de acuerdo a tus acciones. Me encanta.

Mella
fuente
3

Puede usar IPTABLES para detener el tráfico sin ejecutar un demonio como Fail2Ban o DenyHosts.

#  Allows SSH connections (only 4 attempts by an IP every 3 minutes, drop the rest to prevent SSH attacks)
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --set --name DEFAULT --rsource
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 180 --hitcount 4 --name DEFAULT --rsource -j DROP
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT
Xeoncross
fuente
2

Si puede administrarlo, creo que la mejor manera de lidiar con cosas como esta es usar una VPN. De esa manera, lo único que pueden atacar es la VPN. No debería haber ningún servicio abierto al mundo en general, excepto aquellos que son necesarios para que "todos" puedan acceder, como su servidor web. Todo lo demás debe ser bloqueado por el firewall. Ahora, lo único que realmente tiene que preocuparse por proteger es su VPN. Si puede, obtenga una IP estática para las computadoras desde las que administra sus servidores y bloquee su VPN en esa dirección IP específica. Esta es realmente la única forma de evitar que las personas intenten forzar las contraseñas por fuerza bruta.

Kibbee
fuente
0

Sshguard funciona muy bien. Lo estoy usando junto con iptables.

Alejandro
fuente