it-swarm-es.com

Fail2Ban o DenyHosts para bloquear intentos de inicio de sesión SSH de nombre de usuario no válidos

¿Hay alguna manera de bloquear automáticamente la dirección IP cuando un usuario intenta iniciar sesión como cualquier nombre de usuario no válido? Ya tengo:

[ssh]

enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 3
bantime = 31536000

en /etc/fail2ban/jail.conf

4
slayton1213

No puedo ayudarte con fail2ban, pero estoy usando denyhosts con bastante éxito para esto exactamente. Puede ajustar bastantes parámetros y también tiene una base de datos distribuida donde puede enviar y recibir otros servidores host.

Aquí hay más detalles:

Instale el paquete denyhosts (Sudo apt-get install denyhosts)

Mire la configuración predeterminada en /etc/denyhosts.conf, puede estar interesado en las opciones DENY_TRESHOLD_INVALID, DENY_TRESHOLD_VALID y DENY_TRESHOLD_ROOT.

En cuanto al servidor de sincronización, está deshabilitado de forma predeterminada y deberá habilitarlo descomentando la opción SYNC_SERVER.

Tampoco es malo establecer la opción PURGE_DENY en 1w o algo así en caso de que se bloquee, por lo que la entrada se purgará después de una semana y podrá iniciar sesión nuevamente.

4
oerdnj

Esto es deliberadamente no es compatible con fail2ban :

En otras palabras, los usuarios no válidos pueden obtener 2 intentos, mientras que las contraseñas no válidas para usuarios válidos obtienen 5 intentos. ¿Cómo se puede hacer eso en fail2ban?

Un argumento convincente en contra de hacer esto dice que le permite al atacante saber si un nombre de usuario es válido y, por lo tanto, disminuye drásticamente el espacio de búsqueda de un ataque de fuerza bruta.

Encontré tu pregunta mientras intentaba hacer lo mismo, pero ahora he cambiado de opinión. Además del beneficio secreto, ¿por qué ahorrarle tiempo a un atacante cortándolo temprano?

5
supervacuo

¿Por qué no simplemente negar todos los inicios de sesión de raíz por completo a través de SSH, en lugar de usar Fail2Ban u otras cosas? Al hacer eso, y al negar el uso del inicio de sesión raíz, se elimina el problema de tener que bloquear a todos, porque incluso si adivinan la contraseña de root, les negará el inicio de sesión. Independientemente de cuántas veces lo intenten.

En /etc/ssh/sshd_config, busque la línea que contiene PermitRootLogin. Edítelo con cualquier editor de texto, pero asegúrese de usar Sudo/gksudo (gksudo solo si está usando un editor de texto GUI). Haga que la línea que mencioné diga PermitRootLogin no, luego guarde y haga Sudo service ssh restart.

(Esta respuesta se escribió para la pregunta inicial indicada incorrectamente. Esta respuesta no se modificará para que coincida con la pregunta revisada, porque está más allá de mi capacidad de respuesta. Puedo eliminar ESTA respuesta en el futuro)

4
Thomas Ward

Primero, defina el filtro para usuarios no válidos en filter.d/sshd-invaliduser.conf:

[INCLUDES]
before = common.conf

[Definition]
_daemon = sshd

failregex = ^%(__prefix_line)s[iI](?:llegal|nvalid) user .*? from <Host>(?: port \d+)?\s*$
ignoreregex = 

[Init]
journalmatch = _SYSTEMD_UNIT=sshd.service + _COMM=sshd

Luego habilítelo en jail.local:

[sshd-invaliduser]
enabled = true
maxretry = 1
port    = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s

Esto funciona con fail2ban 0.9.6-2 en Debian 9.

3
cweiske