SSH con Autentificación Google Authenticator en Linux
¿Qué es SSH?
SSH (Secure Shell), es un protocolo que encripta la sesión de
conexión, impidiendo que alguien más pueda capturar el password no encriptado.
Se utilizan claves de encriptación que sólo son conocidas por quien emite y por
quien recibe la información. Si ocurriera una alteración en la clave, se
modifica el mensaje original, si por alguna razón, un tercero descubriera la
clave no accedería al mensaje completo de origen.
Cuando un cliente se autentica, con el servidor, se crea un canal
seguro cifrado por donde intercambia la información con total garantía. Los
datos enviados y recibidos en el canal seguro se realizan por medio de
algoritmo de encriptación de 128 bits.
SSH se convierte en un conductor seguro, y garantiza aquellos
protocolos que no lo son (como TELNET, RSH o RLOGIN), mediante el uso de una
técnica denominada reenvió por puerto.
¿Para que sirve?
Para garantizar la seguridad a la hora de comunicarnos con el
servidor. Está seguridad nos la facilita el protocolo SSH, seguramente el
sistema más utilizado actualmente para comunicaciones entre equipos con sistema
operativo Linux.
Si contamos con un servidor dedicado o un VPS (Servidor Virtual
Privado por sus siglas en inglés, Virtual Private Server Hosting), debemos
utilizar un mecanismo para conectarnos a él y poder interactuar remotamente,
como si lo tuviéramos a lado.
Condicionalmente existen protocolos que tienen una gran desventaja
respecto a SSH, ya que éste encripta la sesión de conexión.
Funcionamiento del protocolo SSH.
Figura 1. Proporcionada por https://pressroom.hostalia.com
Desarrollo
El acceso SSH es crítico y es posible que desee encontrar formas de
mejorar la seguridad de su entrada SSH. Para ello vamos asegurar la
autenticación simple de dos factores (2FA), mediante el uso de Google
Authenticator. Para estas pruebas lo realice en Linux Centos 7, a un que lo
podremos realizar en cualquier distribución de Linux solo cambias algunas
cosas.
Primer paso
Debemos verificar si tenemos corriendo el deamon SSH en nuestro
servidor; en modo root. Ejecutamos el siguiente comando ps –A | grep sshd. Al
ejecutarlo deberá devolver una línea como la que se muestra a continuación
(figura 2), si el daemon está ejecutando. Si no está instalado entonces hay que
instalarlo (hay manuales por internet para hacerlo), nos centraremos en que si
tenemos instalado el servicio SSH en nuestro servidor.
# ps –A | grep sshd
El comando ps muestra
información acerca de los procesos activos seleccionados.
La opción –A selecciona todos los procesos. Pipe (|) separación de dos
comandos a ejecutar.
Comando grep busca el
nombre de entrada del archivo, que contenga la línea a emparejar y obtener el
patrón. Que para este caso es “sshd”.
Figura 2. Verificando la ejecución de SSH.
Posteriormente deberemos ejecutar el siguiente comando ss –lnp | grep
sshd, para verificar si el servidor SSH está escuchando las conexiones. Y
debemos ver una salida como la que se muestra a continuación (figura 3), si el
daemosn SSH está en escuchando y el puerto por el que lo hace (para nuestro
ejemplo es el 22).
# ss –lnp | grep sshd
El comando ss es usado para
estadísticas de volcado de socket.
La opción –l muestra los sockets en escuchas.
La opción –n no resuelve los nombres de los servicios.
La opción –p muestra los procesos usando socket.
El comando grep ya lo mencioné.
:P
Figura 3. El daemo SSH escucha conexiones.
Segundo paso
Hasta éste punto todo está funcionando a la perfección. Ahora debemos
instalar un repositorio necesario, antes de instalar el módulo PAM (Pluggable
Authentication Module) de Google Authenticator de código abierto, ejecutando el
siguiente comando:
# sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
Figura 4. Instalación del PAM.
Una vez instalado el repositorio, podemos instalar el
google-authenticator con el comando:
# sudo yum install google-authenticator
Figura 5. Instalar el google-authenticator.
Ya instalado el software, está todo listo para empezar. 😊
El comando google-authenticator debe ser ejecutado por cualquier
usuario que inicie sesión a través del protocolo ssh, como usuario estándar,
ejecutamos el comando:
# google-authenticator
El primer paso nos pregunta:
¿Desea que los tokens de autenticación estén basados en el tiempo? (y/n)
y
Le presentará un código QR. Escaneé ese código con la aplicación Authy
o Google Authentication, para que pueda agregar esa cuenta a su aplicación de
autenticación de dos factores en su dispositivo móvil. También querrá copiar y
guardar los códigos de emergencia que se le presenta.
Figura 6. Configurando nuestro móvil a google-authenticator.
Ahora responderá por defecto a la siguiente pregunta.
¿Quiere que actualice tu archivo ”/home/rene/.google_authenticator”?
(y/n) y
¿Desea deshabilitar usos múltiples del mismo token de autenticación?
Esto lo restringe a un inicio de sesión cada 30 segundos, pero aumenta sus
posibilidades de detectar o incluso prevenir ataque de hombre en el medio (y/n) y
Por default, los token son buenos por cada 30 segundos. Con el fin de
compensar el posible sesgo de tiempo entre el cliente y el servidor, permitimos
un token adicional antes y después de la actual. Si tiene problemas con la
sincronización de tiempo deficiente, puede aumentar la ventana de su tamaño predeterminado
de +-1 min (Tamaño de la ventana de 3) a aproximadamente +-4 min (tamaño de la
ventana de 17 tokens aceptables). ¿quieres hacerlo? (y/n) y
Si la computadora en la que inicia sesión no está reforzada contra los
intentos de inicio de sesión de fuerza bruta, puede habitarlo la limitación de
velocidad para el módulo de autenticación. DE forma predeterminada, esto limita
a los atacantes a no más de 3 intentos de inicio de sesión cada 30 segundos. ¿Desea
habilitar la limitación de velocidad? (y/n) y
Figura 7. Opciones de configuración google-authenticator.
Una vez más, todos los usuarios que necesiten iniciar sesión en el
servidor de Centos, a través de SSH deberán hacerlo todo lo anterior.
Tercer paso
Deberemos configurar dos archivos, el primer de ellos es
/etc/pam.d/sshd, desde el modo root:
# nano /etc/pam.d/sshd
Figura 8. Entremos al archivo sshd para configúralo.
En la parte final del archivo debemos de agregar lo siguiente, Auth
required pam_google_authenticator.so, como se muestra:
Figura 10. Agregamos parámetros al archivo de configuración.
Guarde y cierre el archivo, porque ahora nos toca editar el siguiente
archivo que está ubicado en /etc/ssh/sshd_config.
Figura 11. Editamos el archivo sshd_config.
Ahora debemos de buscar la línea siguiente:
ChallengeReponseAuthentication no
Cambiar la línea de arriba a:
ChallengeReponseAuthentication yes
Nos apoyamos de nano para buscar la palabra
ChallengeReponseAuthentication, tecleando ctrl + w, nos muestra el texto
Buscar:, colocamos la palabra a buscar que para nuestro ejemplo es challengere.
Y realizamos la modificación necesaria de “no” a “yes”.
Figura 12. Buscar dentro del archivo.
Figura 13. Cambiando la opción a yes.
Guardar y cerrar el archivo.
Debemos de reiniciar sshd con el comando systemctl restart sshd. En
este punto, cualquier persona que intente iniciar sesión en el servidor de
Centos atreves de SSH, deberá incluir un código de verificación de la
aplicación Authy o Google Authencator. Sin un código, no podría iniciar sesión.
Figura 14. Reseteamos el servicio sshd.
Si encuentra que 2FA no funciona, es posible que tenga que reiniciar
el servidor. Asegúrese de tener acceso físico el servidor en caso de que algo salga
mal para que pueda iniciar sesión localmente y solucionar el problema.
Cuarto paso y último
El último paso es probar el servicio conectándonos a SSH del servidor,
y ver si requiere un código de verificación.
Debemos de verificar que IP tiene nuestro servidor, utilizaremos el
comando ifconfig eth0, como se muestra a continuación:
$ ifconfig eth0
Figura 15. Verificando que IP tiene el servidor.
Como ya sabemos la IP de nuestro servidor, para este ejemplo es
172.17.40.100, nos conectamos con un cliente SSH (ya lo conocen el software
putty), a nuestro servidor.
Figura 16. Conectamos con un cliente SSH.
Debemos de poner las credenciales de acceso (usuario y password),
posteriormente nos pedirá el código de verificación, como se muestra a continuación.
Figura 17. Entrando al Servidor SSH.
Bingo ya estamos en línea México.
Ya hemos configurado correctamente la autenticación SSH basada en
Google Authenticator. Ahora su SSH es seguro y ningún ataque de fuerza bruta
puede invadir su servidor, al menos que alguien tenga su código de verificación
que también requerirá acceso a su teléfono.
Autor: remarh
















Gracias por el aporte.
ResponderEliminarmuchas gracias
Eliminar