Securizar SSH mediante Latch en Raspbian.

Colaborador: Vasco

Hola amantes de la seguridad!!

En esta entrada vamos a ver como instalar Raspbian en la Raspberry Pi y securizar el servicio ssh para evitar posibles ataques mediante Latch y Fail2Ban.

Para quien no conozca la Raspberry Pi dejo unos enlaces con información:

Tenemos dos opciones para la instalación de Raspbian:

  • NOOBS: se trata de un instalador de sistemas operativos para Raspberry.
    • Descargamos la imagen desde este enlace.
    • Lo descomprimimos en la raíz de una tarjeta SD previamente formateada.
    • Introducimos la tarjeta en la Raspberry y la arrancamos (enchufamos).

 

    • Basta con elegir el/los sistema/s operativo/s que queramos instalar y pinchar en Install.
    • Cuando termine el proceso, nos mostrará un grub donde elegir el sistema operativo.
  • RASPBIAN: descargar la imagen directamente.
    • Descargamos la imagen del siguiente enlace.
    • A continuación tenemos que «copiar» la imagen en una tarjeta SD de forma que sea booteable. En Windows podemos usar Win32DiskImage, en Linux Startup Disk Creator.

LATCH

Con Raspbian ya instalado, vamos a securizar el servicio SSH con Latch.

Lo primero que necesitamos es crear una cuenta de Desarrollador en la web de Latch. Con la cuenta ya creada y logueados, añadiremos una nueva aplicación indicando un nombre, obtendremos esta pantalla con los datos de la misma.

 

    • Nombre: nombre de la aplicación.
    • Id Aplicación: número que identifica la aplicación.
    • Secreto: clave secreta, podemos renovarla si creemos que está comprometida.
    • Imagen: icono de la aplicación, no debe superar 1Mb de tamaño y se recomienda que esté en formato png de 24 bits sin canal alfa, con unas proporciones 1:1.
    • Las opciones OTP y Bloquear tras consultar, solo están disponibles en las cuentas de pago.
    • Operaciones: cada una de las acciones incluidas en el servicio y que se quieren proteger.

Añadiremos una operación para proteger el login del servicio SSH. Pinchamos en añadir y le ponemos un nombre. Dejamos la web abierta para copiar algunos datos que necesitaremos para la configuración de Latch.

A continuación descargamos el plugin de Latch para Unix del Github de Eleven Paths. Descomprimimos y nos situamos en la raiz de la carpeta resultante.

Ejecutamos el siguiente comando para instalar el plugin:

./configure prefix=/usr sysconfdir=/etc && make && sudo make install
Tras la instalación, tendremos el módulo pam_latch.so en el directorio /usr/lib. Debemos mover dicho módulo al directorio PAM del sistema operativo, en el caso de Raspbian se encuentra en /lib/arm-linux-gnueabihf/security/.
El siguiente paso es modificar la configuración PAM del servicio SSH, para ello modificamos el archivo /etc/pam.d/sshd añadiendo la siguiente linea:
auth required pam_latch.so config=/etc/latch/latch.conf accounts=/etc/latch/latch.accounts operation=<NOMBRE OPERACION> otp=no
Donde NOMBRE OPERACION es el nombre que pusimos al crear la operación (sshd-login) en la web de Latch.
En la carpeta del plugin de Latch que descargamos anteriormente, hay una carpeta «examples» con ejemplos de los archivos a modificar para cada servicio, echarles un vistazo en caso de tener problemas.
A continuación configuramos el plugin editando el archivo /etc/latch/latch.conf.
    • app_id: id de la aplicación.
    • secret_key: clave secreta («Secreto» en la web).
    • sshd-login: este es el nombre que le dimos a la operación anteriormente, aquí introducimos el número id de la misma.

Por último configuramos SSH para uso del plugin, esto lo haremos editando el archivo /etc/ssh/sshd_config, añadiendo o modificando las siguientes lineas:

    • UserPAM yes
    • ChallengeResponseAuthentication yes
    • PasswordAuthentication no

Reiniciamos el servicio (sudo service sshd restart) para cargar la nueva configuración.

Con Latch configurado, solo nos falta parear un usuario para así activar o desactivar el acceso a SSH desde nuestro móvil, además recibiremos notificaciones de bloqueo, accesos, etc.
Instalamos Latch en el móvil desde Google Play, abrimos la aplicación y nos logueamos con la cuenta creada en la web. Añadimos un nuevo servicio y Generamos nuevo código.

Como podéis ver en la captura anterior, tenemos un tiempo para usar el código, usamos el siguiente comando en la terminal de la Raspberry para parear el servicio:  latch -p <CODIGO>

Recibiremos un aviso en el móvil confirmando que el servicio ha sido pareado. Ahora nos aparecerá el nuevo servicio creado en la pantalla principal de la aplicación, desde aquí podemos bloquear o permitir el login SSH.

Ya disponemos de un segundo factor de autenticación mediante Latch. Ni que decir tiene que esto mismo se puede realizar para el login de una máquina, comando sudo, servicio vnc y un largo etc.

FAIL2BAN

Como complemento tenemos Fail2Ban, una aplicación escrita en Python para la prevención de intrusos penalizando las ips que intentan el acceso por fuerza bruta en servidores SSH, FTP, HTTP, etc.

Fail2Ban bloquea las ips que intenten loguearse un determinado número de veces (indicado por el usuario) por un tiempo determinado (indicado por el usuario), evitando así ataques por diccionario.

Su instalación es muy sencilla, descargamos el paquete correspondiente a nuestra distribución Linux desde la web oficial y ejecutamos ./setup.py install .

Para configurarlo tenemos que editar dos archivos.

  • /etc/fail2ban/fail2ban.conf

 

    • loglevel: elegimos los datos que mostrará el archivo log.
    • logtarget: ruta y nombre del archivo log.
    • pidfile: podemos elegir el número de proceso de fail2ban-server.
  •  /etc/fail2ban/jail.conf
    • bantime: tiempo en segundos que estará baneada la ip.
    • maxretry: número de intentos antes de ser baneado.
    • ignoreip: lista de ips que serán ignoradas y por tanto no baneadas.
    • protocol: protocolo por defecto (TCP/UDP).

Éstas son algunas de las opciones disponibles, recomiendo echar un vistazo a todas detenidamente.

Reiniciamos el servicio (sudo service fail2ban restart) y ya lo tenemos todo listo. Para ver el log en tiempo real, podemos hacer uso del comando less +F /var/log/fail2ban.log para ver el archivo completo o tail -f /var/log/fail2ban.log para ver solo las últimas lineas.

Como véis ya he recibido algunos ataques…

Hasta aquí la entrada de hoy, espero os haya gustado y que sea de utilidad.

Un saludo, vasco.

8 comentarios en «Securizar SSH mediante Latch en Raspbian.»

  1. Buenas,

    No me funciona el latch con la configuración que mencionas.

    No se si falle en algo, pero sigo teniendo acceso SSH aun con el latch activado.

    hice todo como dice la guia, y no funciona. no se si no entendi el proposito, mi deseo es bloquear el acceso al puerto 22 el puerto de SSH, me conecto pero no

    1. Hola Ronnie, efectivamente Latch bloquea el acceso al servicio en cuestión. Así a bote pronto no sabría decirte en que puede estar fallando, estas usando Raspbian u otro OS, ten en cuenta que algunos directorios y/o archivos pueden cambiar dependiendo de la distribución (el directorio PAM en Debian por ejemplo es /lib/security).

      Sin mas información no puedo decirte mas que repases bien los pasos, sobre todo a la hora de editar los archivos del servicio, etc.

      Un saludo, vasco.

  2. Buenas!
    He intentado por todos los medios poner latch en mi servidor ssh de mi raspberry con Raspbian.
    Una vez instalado en la carpeta /etc/latch y movido el fichero pam_latch.so a /lib/arm-linux-gnu tal y tal/security/. he hecho lo siguiente:
    Modificar el fichero etc/pam.d/sshd añadiendo la siguiente linea auth required pam_latch.so config=/etc/latch/latch.conf accounts=/etc/latch/latch.accounts operation= otp=no
    Despues en /etc/latch/latch.conf. puse bien el app id el app key y el sshd-login tal y como viene tambien en mi panel de latch
    despues en etc/ssh/sshd_config he añadido UserPAM yes
    ChallengeResponseAuthentication yes
    PasswordAuthentication no modificando las lineas donde aparece estos parametros.
    Pues nada, haciendo latch -p no me parea.
    Que puede ser?
    Gracias!
    P.D. El servicio ssh funciona perfectamente fuera de mi red local

    1. Muy buenas Franxu, con los datos que me das no veo ningún problema, ¿te aparece algún error o mensaje a la hora de parear?. En la linea que añades en el archivo /etc/pam.d/sshd supongo que has indicado la «operación» que creaste en la aplicación de la web de Latch, dicha operación también debe ser la misma en el archivo /etc/latch/latch.conf (mismo nombre).
      Yo tuve un problema parecido y al final la solución fue crear otra vez la aplicación en la web de Latch (como aparece al principio de la entrada).

      Te dejo mi email por si no consigues solucionarlo, puedas enviarme capturas o hacer cualquier otra consulta: vascox5@yahoo.es

      Un saludo.

  3. Hola,

    He realizado todos los pasos y me sucede igual que Ronnie, ando probando con
    «Raspbian Jessie with PIXEL». He probado creando la aplicación,operacion y sigue sin funcionar. Coloque el modulo pam de latch en /lib/arm-linux-gnueabihf/security/ donde se puede ver otras librerias. No se que mas probar.

    Saludos,

  4. Tengo el siguien error al compilar, «configure: error: libcurl4 header files not found, install libcurl4-openssl-dev.»
    Esta es la linea completa :
    checking for gcc option to accept ISO C89… (cached) none needed
    checking dependency style of gcc… (cached) none
    checking whether gcc and cc understand -c and -o together… yes
    checking curl/curl.h usability… no
    checking curl/curl.h presence… no
    checking for curl/curl.h… no
    configure: error: libcurl4 header files not found, install libcurl4-openssl-dev

    Trabajo sobre Centos 6 y tengo instalado openssl. Favor tu ayuda.

    1. Hola Felipe, ¿has instalado el paquete que te indica?. En el github de latch vienen una serie de paquetes que hay que instalar y la forma de hacerlo (incluido Centos), asegurate de tenerlos todos.
      Espero tu respuesta, un saludo.

  5. Buenas! Ante todo felicidades por el artículo.
    Quería hacer un grito al aire a ver si alguien me puede echar un cable. Me pasa lo mismo que a ronnie y emericanzero.
    He seguido todos los pasos pero el problema que tengo es que da igual que active o desactive el acceso desde la aplicación, puedo acceder de igual modo vía ssh.
    Alguien ha conseguido resolver o dar con el problema?

    Un saludo y gracias!

Los comentarios están cerrados.