Cómo proporcionar un retraso de inicio de sesión en ssh

11

Quería proporcionar un retraso de inicio de sesión mientras iniciaba sesión a través de ssh. Intenté un par de formas de hacer lo mismo pero no pude encontrar el resultado deseado.

Intenté los pasos proporcionados por el enlace dado.

http://hostingfu.com/article/ssh-dictionary-attack-prevention-with-iptables

iptables -N SSH_CHECK
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j SSH_CHECK
iptables -A SSH_CHECK -m recent --set --name SSH
iptables -A SSH_CHECK -m recent --update --seconds 60 --hitcount 4 --name SSH -j DROP

No tengo el módulo pam instalado en mi máquina, así que no puedo hacer ninguna modificación relacionada con los archivos pam

Entonces, ¿algún cuerpo me deja sugerir alguna otra forma de hacer lo mismo?

Tengo el kernel de Linux desnudo ejecutándose en una plataforma integrada.

RAM
fuente
¿Por qué quieres introducir un retraso? ¿Cuál es tu objetivo final?
un CVn
Quería evitar la posibilidad de un ataque de fuerza bruta.
Ram
3
Simplemente introducir un retraso en las nuevas conexiones no evitará un ataque de fuerza bruta. Debe buscar herramientas diseñadas para resolver su problema real. Sugeriría comenzar mirando a fail2ban, que está específicamente diseñado para reaccionar a las entradas de registro repetidas mediante la ejecución de comandos dados, y a menudo se usa específicamente para evitar intentos de fuerza bruta para obtener acceso no autorizado.
un CVn
Está bien Michael, pero tengo que hacerlo con la infraestructura existente que tengo conmigo. ¿Cómo puedo introducir un retraso cada vez que me conecto a través de ssh?
Ram
2
Amigo, fail2banusa la infraestructura exacta que ya tienes: registros ssh y reglas de iptables.
Shadur

Respuestas:

11

Método n. ° 1: deshabilitar los inicios de sesión de contraseña

Si no necesita permitir el inicio de sesión con contraseña, simplemente deshabilitarlos le dará el efecto deseado. Simplemente agregue esta línea a /etc/ssh/sshd_config:

PasswordAuthentication     no

Además, puede limitar el uso de contraseñas a ciertos usuarios que usan el Matchoperador en sshd_config:

Match User root,foo,bar
    PasswordAuthentication no
Match User user1,user2
    PasswordAuthentication yes

Método # 2 - iptables

También puede usar iptablespara rastrear intentos fallidos de inicio de sesión y soltarlos después de un cierto umbral. Esto es similar a su ejemplo de hostingfu pero es más fácil de entender.

$ sudo iptables -I INPUT -p tcp --dport <YOUR PORT HERE> -i eth0 -m state --state NEW -m recent --set
$ sudo iptables -I INPUT -p tcp --dport <YOUR PORT HERE> -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP

NOTA: La primera línea básicamente crea una regla que solo se aplica a los paquetes utilizados para nuevos intentos de conexión en el puerto ssh. La segunda línea dice que si hay más de 4 intentos de una IP en 60 segundos, entonces cualquier tráfico de esa IP debe ser bloqueado. A esta solución no le importa si los intentos en diferentes cuentas de usuario.

Método # 3 - usa PAM

Me di cuenta de que dijiste que no tienes PAM disponible, pero si lo hiciste, así es como podrías retrasar los intentos fallidos de inicio de sesión. Si su intención es simplemente retrasar las fallas de inicio de sesión ssh, entonces puede usar el módulo PAM pam_faildelay. Este módulo PAM generalmente se incluye con la mezcla predeterminada.

En mi sistema Fedora 19 es parte de la instalación predeterminada.

Ejemplo

Busque archivos relacionados con pam_faildelay.

$ locate pam|grep -i delay
/usr/lib/security/pam_faildelay.so
/usr/lib64/security/pam_faildelay.so
/usr/share/doc/pam-1.1.6/html/sag-pam_faildelay.html
/usr/share/doc/pam-1.1.6/txts/README.pam_faildelay
/usr/share/man/man8/pam_faildelay.8.gz

Vea qué RPM son proporcionados por:

$ rpm -qf /usr/share/man/man8/pam_faildelay.8.gz
pam-1.1.6-12.fc19.x86_64
pam-1.1.6-12.fc19.i686

Uso

Para crear un retraso en caso de falla, simplemente agregue una línea como esta a su sshdarchivo de configuración de pam. De nuevo en / CentOS / RHEL sistemas Fedora este archivo se encuentra aquí: /etc/pam.d/sshd.

Para crear un retraso de 10 segundos:

       auth  optional  pam_faildelay.so  delay=10000000

Un retraso de 60 segundos:

       auth  optional  pam_faildelay.so  delay=60000000

Ejemplo

Con un retraso de 20 segundos usando el método anterior, cambié mi sshdarchivo de configuración PAM de esta manera:

#%PAM-1.0
auth       required     pam_sepermit.so
auth       substack     password-auth
auth       include      postlogin
auth       optional     pam_faildelay.so  delay=20000000
account    required     pam_nologin.so
account    include      password-auth
password   include      password-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open env_params
session    optional     pam_keyinit.so force revoke
session    include      password-auth
session    include      postlogin

Ahora cuando inicio sesión:

$ date
Tue Dec 17 09:16:30 EST 2013

$ ssh blah@localhost
blah@localhost's password: 
Permission denied, please try again.
blah@localhost's password: 

...Control + C....

$ date
Tue Dec 17 09:16:50 EST 2013

Referencias

slm
fuente
Gracias @slm pero de nuevo no puedo instalar el módulo pam y mi autenticación sshd no es de pam. ¿Te gustaría sugerir alguna otra forma?
Ram
@AmitSinghTomar - lo siento, he ampliado mi respuesta. Intentaba crear una respuesta canónica a su pregunta que cubriera todos los métodos, no solo el suyo solo.
slm
Gracias de nuevo @slm por su respuesta de detailes, estoy interesado en seguir el segundo método que sugirió. Lo intentaré y le haré saber el resultado. También me retrasó con el primer intento de inicio de sesión a través de ssh.
Ram
@AmitSinghTomar: no, solo debería retrasarse después de 4 intentos. Cuando --hitcount 4se excede la regla, se bloqueará la dirección IP infractora durante 60 segundos.
slm
Un punto que quería saber de usted, para que su tercer método funcione (PAM), ¿requiere que la autenticación ssh se realice a través de pam?
Ram
3

Deshabilitar contraseñas Sin contraseñas, sin ataque de fuerza bruta.

Puede usar ssh-keys para iniciar sesión, lo que debería ser mucho más seguro y más difícil de hackear.

Nils
fuente
0

En una instalación limpia de Ubuntu 16.04 con openssh-server, ya hay un retraso por un intento de contraseña incorrecta de más de cero caracteres. El retraso parece ser más de 1 segundo .

Para un intento de contraseña incorrecta de cero caracteres no hay demora, por lo que el atacante determinará de inmediato que su contraseña no es la cadena vacía si de hecho no es la cadena vacía. Dado que la cadena vacía probablemente no esté permitida como contraseña, ya lo saben, por lo que no van a probar la cadena vacía.

H2ONaCl
fuente