Securizando un VPS con LATCH (II). Configurando el acceso

LATCH LOGO

Ahora que tenemos nuestra cuenta de ssh emparejada con una aplicación de Latch, solo nos queda hacer que el servidor actue en consecuencia.

Para ello utilizaremos otro script creado de nuevo por Alejandro Ramos en este post, de nuevo con algunas modificaciones. Vamos con el script:

prettyprint-bash linenums nowrap
#!/bin/bash
applicationId="PHKYXXXXXXXXXX"
secretkey="TBKqEXXXXXXXXXXXXXXXXXXXXXXXXXX"
LATCH="/home/LATCH/latch.accounts"
account=`grep "^$USER:" $LATCH |cut -d: -f2`
if [ -z `echo "$account"|cut -d: -f2`  ]; then exit 0; fi
 
URL="/api/0.6/status/$account"
requestSignature+="GET\n"
date=`date -u '+%Y-%m-%d %H:%M:%S'`
requestSignature+="$date\n\n$URL"
signed=`echo -en "$requestSignature" | openssl dgst -sha1 -hmac "$secretkey" -binary|sed -e 's|.*= \(.*\)|\1|g'`
b64signed=`echo -n "$signed"|base64`
auth_header="Authorization: 11PATHS $applicationId $b64signed"
date_header="X-11Paths-Date: $date"
 
JSON=`wget -q --no-check-certificate -O - --header "$auth_header" --header "$date_header" "https://latch.elevenpaths.com$URL"`
status=`echo -e "$JSON" | sed -e 's|.*status":"\(.*\)","name.*|\1|g'`
 
if [ "$status" == "off" ]; then
   echo -e "Login deshabilitado por LATCH\n"
   pkill ssh
elif [ "$status" == "on" ]; then
   exit 0
else
   echo -e "Error de LATCH. Intenta de nuevo\n"
   pkill ssh
fi

Como veis, de nuevo tenéis que introducir vuestro ApplicationId y vuestra secret key. Además, también tendréis que modificar la ruta del archivo de cuentas, en caso de que en el script de registro lo hayáis cambiado.

Vamos con una pequeña explicación:

En el caso de que LATCH devuelva que el estado de la cuenta es activo, el script no hará nada.

En cambio, tanto si devuelve que está bloqueada como si hay algún error en el proceso, matará el proceso ssh, el cual cortará la conexión (el proceso se reinicia automáticamente).
Además, mostrará un mensaje indicando el error.

Como véis, su funcionamiento es realmente sencillo, pero ahora tenemos que hacer que se ejecute cada vez que el usuario inicie sesión por SSH.

Lo primero que haremos será ir hasta la carpeta del usuario en el VPS (generalmente /root), y una vez ahí ejecutaremos
nano .bashrc

El archivo debería existir, así que al final del archivo añadiremos la siguiente línea:
/home/LATCH/./stat.sh

Esto hará que cada vez que un usuario inicie sesión se lance el script, con lo que automáticamente detectará qué usuario lo está lanzando, hará la comprobación con el servidor de LATCH y actuará según le hemos definido anteriormente.

Además, en caso de que tengamos el acceso bloqueado desde LATCH y alguien inicie sesión, recibiremos al instante una notificación en nuestro teléfono.

Como podéis ver, con unos pocos pasos hemos conseguido proteger el acceso por SSH a nuestro VPS de una forma muy cómoda pero a la vez segura.

EXTRA. Desemparejando la cuenta

Es posible que por algún motivo sea necesario desemparejar la cuenta de usuario de la de LATCH. Para ello utilizaremos el tercer método que ofrece la API de LATCH, unpair.

Para ello utilizaremos el siguiente script:

prettyprint-bash linenums nowrap
#!/bin/bash
if [ "$1" == "debug" ]; then set -x; fi
applicationId="PHKYXXXXXXXXXXXXX"
secretkey="TBKXXXXXXXXXXXXXXXXXXX"
LATCH="/home/LATCH/latch.accounts"
account=`grep "^$USER:" $LATCH |cut -d: -f2`
URL="/api/0.6/unpair/$account"
 
if [ -z "$account" ]; then echo -e "Error.";  exit 0; fi
 
requestSignature+="GET\n"
date=`date -u '+%Y-%m-%d %H:%M:%S'`
requestSignature+="$date\n\n$URL"
 
signed=`echo -en "$requestSignature" | openssl dgst -sha1 -hmac "$secretkey" -binary|sed -e 's|.*= \(.*\)|\1|g'`
b64signed=`echo -n "$signed"|base64`
auth_header="Authorization:11PATHS $applicationId $b64signed"
date_header="X-11Paths-Date: $date"
 
JSON=`wget -q --no-check-certificate -O - --header "$auth_header" --header "$date_header" "https://latch.elevenpaths.com$URL"`
grep -v "^$USER:" $LATCH > /tmp/$$.tmp
mv /tmp/$$.tmp $LATCH
echo -e "\nDone.\n"

De nuevo, modificad los campos necesarios conforme a los cambios que hayáis hecho en los dos scripts anteriores.

El uso es bien sencillo:
./unreg.sh

Y con este sencillo comando ya tendremos la cuenta desemparejada de LATCH.