> Manuales > Ayudas técnicas

Mejora la seguridad en las conexiones por SSH a tu servidor remoto con la autenticación a dos pasos, un servicio gratuito de Google.

Si administras tu propio servidor web, ya sea dedicado o un VPS, lo más seguro es que accedas via SSH Secure Shell autenticando con tu usuario y contraseña.

Aparte de las medidas de seguridad habituales puedes agregar lo que se llama "autenticación a 2 pasos" (two factor auth), que todavía mejorará bastante la seguridad de las conexiones. Para ello podemos usar una herramienta gratuita, de la propia gente de Google, llamada Google Authenticator que será la que nos permita hacer two factor auth sin grandes complicaciones.

Esta herramienta es un software basado en autenticación con contraseña de un solo uso. Necesitarás un dispositivo con alguno de estos sistemas operativos: Android, iOS o Blackberry, que te servirán para conseguir esa contraseña de acceso. Por tanto, debes instalar Google Authenticator en tu Dispositivo, descargando el app en la correspondiente tienda de aplicaciones.

Ejemplo, en el Play Store de Android.

Luego necesitarás la librería libpam-google-authenticator instalada en tu servidor. Para conseguir instalarla te explicamos con detalle los pasos a seguir.

Instalación de la librería de autenticación a dos pasos en tu servidor

Nos ponemos manos a la obra tomando como referencia CentOS 6x. No te preocupes por si no es tu distro, pues no hay muchas diferencias.

Primer paso, muy importante, es tener instalado el demonio Network Time Protocol. Puedes saber si lo tienes ya instalado o no mediante este comando:

service ntpd status

Si tu servidor no reconoce el comando es que no dispones de este servicio, por lo que tendrás que instalarlo.

yum install ntp

Ahora toca verificar que arranque siempre.

chkconfig ntpd on

Luego ajustamos reloj:

ntpdate 0.north-america.pool.ntp.org

Nota: Estamos actualizando contra en servidor de hora en Norteamerica. Visitar http://www.pool.ntp.org/es/ para profundizar en el tema.

Por último iniciamos servicio:

service ntpd start

Como segundo paso debes asegurarte de tener una serie de dependencias, necesarias para poder continuar, que también podemos instalar con estos comandos:

yum install pam-devel make gcc-c++ wget
yum --enablerepo=epel install gcc pam-devel subversion python-devel

Ojo, si estás en Ubuntu ten en cuenta que se necesita también el paquete libpam0g-dev

Nota: Aclaración importante!
Este artículo está escrito describiendo un proceso que nosotros hemos probado, sin embargo en el mundo de los servidores pueden haber diferencias en factores como distribución, software instalado, etc. Durante el proceso también te puedes quedar sin red, o tener un corte puntual que nos haga perder la conexión con el servidor. Como es un proceso delicado, te recomendamos una serie de precauciones a tomar:
  • Si estás haciendo todo esto ¿tu servicio shh está instalado y corriendo normalmente, no?
  • Si tu conexión es remota (como el 99% de los casos) mantén otra conexión aparte abierta para deshacer los cambios por si no te puedes conectar.

    En nuestro software kitty o putty en => conexión=> Seconds between keepalives no debe estar en 0. Debe ser número mayor que cero, pero menor que el intervalo que te desconecta. Mejor es agregar a nuestro archivo de configuración de SSH /etc/ssh/sshd_config
  • ClientAliveInterval 60 # (ejemplo 60 segundos) cada minuto un KeepAlive.
  • ClientAliveCountMax 3 # (tres keepalives no respondes se te cayó la conexión te cierro)


Acuérdate de reiniciar el servicio ssh también para que tome los cambios:

service ssh restart

En fin quiero “enfatizar” que debes tener una ventana aparte conectada y “viva” todo el tiempo para deshacer cambios si es necesario.

Ahora que contamos con los softwares necesarios, como tercer paso se trata ya de instalar la propia librería Google Autenticator.

Para continuar vamos a basarnos en GIT, el conocido sistema de control de versiones.

Nota: ¿Tenemos nuestro GIT instalado?

yum install git

Por si acaso no sabes lo que es o para qué sirve, puedes conocer Git a través de este artículo de referencia, o bien del curso de Git en EscuelaIT.

Empezamos creando el directorio para descargarnos la librería de autenticación a dos pasos de Google.

mkdir ./google-authenticator
cd google-authenticator/
git clone https://code.google.com/p/google-authenticator/
cd google-authenticator/libpam/

Listo. Ahora que ya tenemos el código de la librería, lo tenemos que compilar:

make && make install

Si todo ha ido bien, podemos continuar con el cuarto paso, en el que configuraremos la librería a nuestras necesidades.

Editamos el archivo /etc/pam.d/sshd

Descomentamos la línea (quitar el # simplemente):

auth required pam_google_authenticator.so

Esto nos sirve para habilitar el uso de la herramienta.

Verificamos ChallengeResponseAuthentication, para ver cómo la tenemos establecida: Esta función permite activar o desactivar la autorización de contraseñas para ajustar su autenticación de SSH. Si la autorización de contraseñas está desactivada, los usuarios tendrán que usar claves cuando ellos usan SSH para acceder.

Editamos /etc/ssh/sshd_config y descomentamos esta línea según sea el caso:

ChallengeResponseAuthentication yes

También comentamos esta otra:

# ChallengeResponseAuthentication No

Habilitamos el PAM (Pluggable Authentication Modules est́andar de facto para la autenticación de usuarios en los sistemas UNIX/LINUX)

Si no existe agregamos la linea
UsePAM yes

Descomentamos la linea

PubkeyAuthentication yes

La opción (PubkeyAuthentication) es la que especifica si se podrán usar llaves públicas para demostrar la autenticidad de un usuario.

Reiniciamos nuestro servicio SHH :

Nunca -jamás de los jamases- paramos y arrancamos el servicio solo reiniciar.

Ha sido super señalado que no debemos usar root para conectarnos via ssh
Debemos escoger un usuario estándar previamente creado y debe ser ese el USUARIO que usamos para conectarnos via ssh .

Por ello de nuevo la pregunta: ¿tu servicio está ssh está funcionando y configurado correctamente?

Y corremos, ejemplo siendo user: elusuario

su - 'elusuario' -c /usr/local/bin/google-authenticator

Ahora, a todas las opciones podemos seleccionar que si: Y

Obtenemos 4 cosas:

1. Un link:
https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/ elusuario@tudominio.com %3Fsecret%
Tomaremos en cuenta el correo que aparece elusuario@tudominio.com
2. Un código QR que podemos escanear con nuestro dispositivo
3. El new secret key
4. Los códigos de seguridad de emergencia que se usaremos en caso de extravió del móvil o dispositivo que usaremos para validarnos.

Ingresamos a nuestra app Google Authenticator en nuestro dispositivo -> Configuracion -> Corrección de hora para códigos
Luego creamos nueva cuenta en => Configurar cuenta => Escanear código de barras
Escaneando nuestro código QR o ingresando el new secret key si no podemos escanear.

Probamos:

Al conectarnos via SSH

Abrimos nuestra app colocamos el código generado nos solicitará luego la contraseña y:
¡Eso es todo! Sheldon Cooper seguro usa la autenticación a 2 pasos de google .

Nota: Las veces que he observado que la validación no funciona ha sido por no tener sincronizado adecuadamente el reloj en nuestro dispositivo o servidor, el ntp no corriendo, si ya lo teníamos instalado hacer stop al servicio y ntpdate server-de-hora y luego start al ntpd.

Precauciones: si tienes la desdicha de estar en un sitio del mundo con continuas caídas de internet o incluso de suministro eléctrico sugiero tener otro acceso a su servidor como la herramienta de administración webmin para poder ingresar a su /etc/ssh/sshd_config restablecer todo y reiniciar el demonio ssh si fuera necesario. Dicha herramienta (tema para otro artículo) también puede ser configurada para usar two factor auth

Ten en cuenta que en seguridad informática: Todo lo que puede suceder, sucede.

Heisler Palma

Programador autodidacta, músico e investigador de la mente.

Manual