Proteger acceso remoto a tu servidor ( SSH) usando Failban

en este pequeño post detallare el procedimiento para usar fail2ban el cual es un paquete que escanea log es busca de actividad maliciosa en este caso el servicio SSH.

Usualmente para cualquier servidor que este con puertos expuestos, o en tu propia lan corporativa, es recomendable tener algun tipo de bloqueo o seguridad extra a la hora de exponer este servicio.

en este pequeño post detallare el procedimiento para usar fail2ban el cual es un paquete que escanea log es busca de actividad maliciosa en este caso el servicio SSH.

Nota : la guía esta detallada para Ubuntu  pero agregare el cambio requerido para usarse en cent os o fedora, para Fedora y cent os solo ocupar el gestor de cada uno ( yum, dnf)

Paso 1

Actualizar repositorios

#sudo apt-get update 

Paso 2

Instalar Fail2ban

# apt-get install fail2ban

Paso 3

Fail2ban trae un archivo ya con configuraciones por defecto, lo cual es bastante util lo que haremos es copiarlo para poder modificar este mismo con parámetros para el servicio SSH.

#cp /etc/fail2ban/fail2ban.conf /etc/fail2ban/fail2ban.local

Modificar el archivo fail2ban.local con parametros para ssh.

#nano /etc/failban/fail2ban/fail2ban.local

Agregar configuracion al final del archivo

# config extra
# tiempo de baneo
bantime  = 600
findtime = 600
maxretry = 3

[ssh]

enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 6

Para usuarios Cent os o Fedora, agregar el parametro backend en el archivo fail2ban.local .

backend = systemd

Paso 4

Reiniciar el servicio.

#sudo service fail2ban restart

Paso 5 (optativo)

Validar la configuración correcta.

Servidor con Fail2ban

Usar el comando  tail con el parametro -f  para ver el log en tiempo real, en este caso estoy usando un servidor de prueba como servidor 2 y simular una entrada aleatoria.

#tail -f /var/log/fail2ban.log 
2018-01-29 11:14:55,062 fail2ban.filter         [1798]: INFO    Set maxRetry = 5
2018-01-29 11:14:55,067 fail2ban.filter         [1798]: INFO    Added logfile = /var/log/auth.log
2018-01-29 11:14:55,073 fail2ban.actions        [1798]: INFO    Set banTime = 600
2018-01-29 11:14:55,073 fail2ban.filter         [1798]: INFO    Set findtime = 600
2018-01-29 11:14:55,073 fail2ban.filter         [1798]: INFO    Set jail log file encoding to UTF-8
2018-01-29 11:14:55,073 fail2ban.filter         [1798]: INFO    Set maxlines = 10
2018-01-29 11:14:55,119 fail2ban.server         [1798]: INFO    Jail sshd is not a JournalFilter instance
2018-01-29 11:14:55,124 fail2ban.jail           [1798]: INFO    Jail 'sshd' started
2018-01-29 11:16:04,163 fail2ban.filter         [1798]: INFO    [sshd] Found 159.203.33.226
2018-01-29 11:16:06,399 fail2ban.filter         [1798]: INFO    [sshd] Found 159.203.33.226
2018-01-29 11:17:01,363 fail2ban.filter         [1798]: INFO    [sshd] Found 159.203.33.226
2018-01-29 11:17:33,179 fail2ban.filter         [1798]: INFO    [sshd] Found 159.203.33.226
2018-01-29 11:17:42,687 fail2ban.filter         [1798]: INFO    [sshd] Found 159.203.33.226
2018-01-29 11:17:43,421 fail2ban.actions        [1798]: NOTICE  [sshd] Ban 159.203.33.226
2018-01-29 11:17:44,376 fail2ban.filter         [1798]: INFO    [sshd] Found 159.203.33.226

Servidor 2

jrab66@jrab66:~$ ssh root@47.33.173.59
The authenticity of host '47.33.173.59 (47.33.173.59)' can't be established.
ECDSA key fingerprint is ff:70:df:56:a7:0b:08:bc:a7:72:d5:4e:f7:7a:01:cb.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '47.33.173.59' (ECDSA) to the list of known hosts.
root@47.88.173.59's password: 
Permission denied, please try again.
root@47.88.173.59's password: 
Permission denied, please try again.
root@47.88.173.59's password: 
Permission denied (publickey,password).
jrab66@jrab66:~$ ssh root@47.88.173.59
ssh: connect to host 47.88.173.59 port 22: Connection refused
jrab66@jrab66:~$ ssh root@47.88.173.59
ssh: connect to host 47.88.173.59 port 22: Connection refused

Nota: al final de la consola del servidor 2 se observa que nuestro servidor rechaza la entrada de conexión al puerto ssh, el tiempo de baneo dependera que tanto tenga en segundos el parametro bantime, experimentar con ese parametro como crean conveniente.

En los próximos días espero hacer una actualización para que mande alertas al correo electrónico usando sendmail.

Cualquier duda o comentario es bien recibida.