Error al bloquear la fuerza bruta ssh con iptables


9

Estoy tratando de bloquear (ralentizar) los ataques de fuerza bruta en mi servidor sshd. Estoy siguiendo esta guía http://www.rackaid.com/resources/how-to-block-ssh-brute-force-attacks/ que básicamente dice que necesito ingresar los 2 comandos a continuación.

sudo iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent --set
sudo iptables -I INPUT -p tcp --dport 22 -i eth0 -m state --state NEW -m recent  --update --seconds 60 --hitcount 4 -j DROP

Mi puerto sshd es 6622, así que cambié las entradas de "22" a "6622" y puse esos comandos. Luego intenté simplemente probar las nuevas iptables. Fui a otra PC y a propósito ingresé la contraseña de inicio de sesión incorrecta varias veces. Desafortunadamente, las nuevas reglas no parecen impedir que lo intente tanto como quiera. A continuación se enumeran mis reglas actuales. ¿Qué estoy haciendo mal?

# iptables --list

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       tcp  --  anywhere             anywhere             tcp dpt:6622 state NEW recent: UPDATE seconds: 60 hit_count: 4 name: DEFAULT side: source
           tcp  --  anywhere             anywhere             tcp dpt:6622 state NEW recent: SET name: DEFAULT side: source

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain LOGDROP (0 references)
target     prot opt source               destination         
LOG        all  --  anywhere             anywhere             LOG level warning
DROP       all  --  anywhere             anywhere            

44
Recomiendo fail2ban para manejar IP de bloqueo que muestran intentos de fuerza bruta. Es fácil de instalar y configurar. Sé que no responde su pregunta directamente, pero podría ahorrarle algunos agujeros en el panel de yeso.
Banjer

1
Concurra con @Banjer: olvide ese enlace de rackaid, configure fail2ban.
Shadur

¿Alguna posibilidad de ajustar MaxStartupspodría ayudar en el lado del demonio?
Peter

2
@peterph Solo si desea convertir un intento de ruptura de fuerza bruta en una denegación de servicio.
Shadur

¿Por qué exponer un servidor ssh a Internet y luego tratar de minimizar las consecuencias? Ya sea en el trabajo o en casa, entro a través de VPN de ipsec, sin ssh abierto a Internet en absoluto.
Rui F Ribeiro

Respuestas:


5

Como @banjer señaló en su comentario, está intentando la solución incorrecta para su problema real.

Lo que debe hacer es configurar fail2ban . Utiliza iptables en segundo plano para bloquear automáticamente los intentos de conexión de los hosts que generan intentos de acceso fallidos de varias fuentes. Es increíblemente versátil y le permite agregar y modificar diferentes entradas, patrones para buscar y métodos de prohibición; Tendrá que ajustar ligeramente su cárcel ssh predeterminada para tener en cuenta el puerto no estándar que está utilizando, pero eso no debería ser difícil.


1

Uso reglas como esta para ralentizar las cosas:

iptables -A DDoS -m limit --limit 12/s --limit-burst 24 -j RETURN
iptables -A DDoS -j LOG --log-prefix "[DDos Attack?] "
iptables -A DDoS -j DROP

En otros lugares limito cosas como esta:

LOGLIMIT="50/h"
LOGLIMITBURST="10"
iptables -A IANA -p tcp -m limit --limit $LOGLIMIT --limit-burst \
     $LOGLIMITBURST -j DROP

0

¿Leíste la página del manual?

man sshd_config:

 MaxAuthTries
         Specifies the maximum number of authentication attempts 
         permitted per connection.  Once the number of failures 
         reaches half this value, additional failures are logged. 
         The default is 6.
 MaxSessions
         Specifies the maximum number of open sessions permitted 
         per network connection.  The default is 10.
 MaxStartups
         Specifies the maximum number of concurrent unauthenticated
         connections to the SSH daemon.  Additional connections
         will be dropped until authentication succeeds or 
         the LoginGraceTime expires for a connection. The default is 10:30:100.

         Alternatively, random early drop can be enabled by specifying
         the three colon separated values “start:rate:full” (e.g.
         "10:30:60").  sshd(8) will refuse connection attempts with a
         probability of “rate/100” (30%) if there are currently “start”
         (10) unauthenticated connections.  The probability increases
         linearly and all connection attempts are refused if the 
         number of unauthenticated connections reaches “full” (60).

3
No ayuda Los ataques de fuerza bruta SSH tienden a ser utilizados por las redes de bot distribuidas en la actualidad, por lo que cada conexión solo haría tres o cuatro intentos, pero tendría cientos de conexiones de diferentes hosts.
Shadur

0

Acabo de probar la solución de dos reglas y tuve el mismo problema cuando la revisé. ¡Entonces, observo que las reglas publicadas tienen -i eth0opción! Lo cambié a la buena interfaz de red y finalmente comenzó a funcionar.


0

La mayoría de los tutoriales se utilizan -Apara agregar al final del conjunto de reglas. OP solía -Iinsertar pero sin un índice, por lo que las reglas terminaron en el orden incorrecto.

Una herramienta valiosa para depurar las reglas de iptables es iptables -vLque enumera las reglas con recuentos de cuántas veces se ha aplicado cada regla. Cuando obtienes un recuento inesperado de 0, puede ayudarte a ver qué está mal.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.