Cargando

Ir a contenido


 


El Manual del Secure Shell SSH

Manual de uso sobre SSH, una herramienta Imprescindible para cualquier Administrador de Sistemas, dando una revolución tecnológica sólo comparable con docker.


Escrito por el ago 26 2015 23:22 seguridad shell hack


 

Tutorial acerca de este magnífico protocolo que empezó sus andanzas en 1997, ofreciendo una gran variedad de herramientas que destacan por su seguridad, al ser muy extenso lo dividiré en varias entradas tratando de cubrir lo más importante tanto al nivel de cliente como servidor.

 

¿Qué es el Protocolo Secure Shell?
Secure Shell o SSH es un protocolo de red que permite el intercambio de datos sobre un canal seguro entre dos computadoras. SSH usa técnicas de cifrado que hacen que la información que viaja por el medio de comunicación vaya de manera no legible y ninguna tercera persona pueda descubrir el usuario y contraseña de la conexión ni lo que se escribe durante toda la sesión. SSH usa criptografía de clave pública para autenticar el equipo remoto y permitir al mismo autenticar al usuario si es necesario.

 

SSH se suele utilizar para iniciar una sesión en una máquina remota, donde poder ejecutar órdenes, pero también permite la tunelización, el reenvío de puertos TCP de forma arbitraria y de conexiones X11; también se pueden realizar transferencias de archivos usando protocolos SFTP o SCP asociados.

 

Podemos ver que su gran atractivo es la se característica más que suficiente para desplazar al antiguo protocolo TELNET el cual carece de cifrado de información, comprometiendo los datos incluso los credenciales de acceso.

 

El servidor SSH, ofrece por defecto el puerto TCP 22. Un cliente de SSH es utilizado, generalmente, para establecer conexiones a un servidor sshd que acepta conexiones remotas. Ambos se encuentran comúnmente en los sistemas operativos más modernos, incluyendo Mac, Linux, Solaris y OpenVMS.

 

El soporte para windows de su versión Servidor se espera sea liberada este año de manera oficial mientras que a nivel de clientes ofrece una gran variedad de opciones destacando a PuTTY sobre los demás.

 

 

OpenSSH
OpenSSH (Open Secure Shell) es un conjunto de aplicaciones que permiten realizar comunicaciones cifradas a través de una red, usando el protocolo SSH. Fue creado como una alternativa libre y abierta al protocolo SSH, es el más usado bajo Linux y será el que utilizaremos a los largo de las entradas.

 

 


1. Instalar Secure Shell SSH


En casi todas las distribuciones su versión cliente viene preinstalada mientras que su versión server está disponible por repositorio su instalación debería ser muy sencilla.

 

Debian, Ubuntu, Linux Mint y Derivadas
sudo apt-get install openssh-server

 

Centos, Rhel, Fedora
sudo yum install openssh-server

 

Arch-Linux
pacman -Syu openssh

 

Verificamos que esté corriendo con:

curl localhost:22
En caso de correr de manera correcta debería arrojar:

 

 

 

Conectándonos al Servidor

Utilizando el cliente podemos conectarnos al servidor que puede ser remoto incluso si tenemos las dos versiones conectarnos de manera interna usando localhost.

 

La manera más básica de conectarnos sería:

ssh usuario@direcciondelhost
En caso de conectarnos internamente sería:
ssh usuario@localhost
Tenemos una gran variedad de opciones al momento de conectar explicaré unas muy útiles, puedes listar todas sus opciones con:
man ssh
A continuación os las mostramos:

 

Opciones man SSH

-C
Solicitar compresión de datos ahorrando ancho de banda o datos en caso de estar por una red móvil.

 

-l
Especificar el usuario con el cual nos conectaremos.

 

-E
Crear un log file donde se desviara el standard error.

 

-F
Seleccionamos otro config file útil para servidores con opciones poco usuales.

 

-g
Necesario para hacer port tunneling.

 

-i
Elegimos el folder que usaremos para una llave privada alterna.

 

-K
Habilitar al utilizar GSSAPI credentials.

 

-n
Utilizarlo en conjunto con X11 de esta forma todo el log generado por la aplicación se desvía a /dev/null.

 

-o
Necesario para utilizar opciones más avanzadas como ServerAliveInterval 30.

 

-p
Seleccionar un puerto diferente al 22 para conectarse al host.

 

-v
Muestra todos los pasos necesarios para establecer la conexión puedes obtener aún más información con -vv -vvv.

 

-X
Necesario si queremos usar el X11 Forwarding.

 

-Y
Habilita el X11 Forwarding seguro.

 

Nos conectaremos al servidor prueba.solvetic.com con el usuario jcarrillo utilizando una llave privada diferente ubicada en nuestro folder /home/jcarrillo/llaves-aws usando el puerto 8022 de nuestro instancia en AWS.

Ejemplo → ssh -C -i “~/llaves-aws/” -p 8022 -l jcarrillo prueba.solvetic.com
Como vemos es una herramienta extensa pero muy completa que merece más entradas para poder abarcar sus funciones necesarias para cualquier Sysadmin de nivel intermedio o Profesional.

 

Ahora pasamos a su configuración a nivel cliente-servidor, generar llaves públicas y privadas, el uso de port forwarding en situaciones reales, redirección del Servidor X por medio de X11 Forwarding, el uso scp, sftp , ssh-agent entre otras.

 

 


2. Securizar servidor SSH


Seguimos con OpenSSH centrándonos en securizar nuestro Servidor SSH, para evitar todo tipos de Ataques que puedan comprometer nuestro Servidor. Todas estas configuraciones las haremos en el archivo sshd_config ubicado en /etc/ssh/ el cual podemos modificar con cualquier editor de texto en mi caso usar vim:
sudo vim /etc/ssh/sshd_config
Ahora vemos como modificarlo.

 

 

Modificar sshd_config

Dentro veremos un fichero de configuración típico basado en “opción valor” si alguna de las opciones no se encuentra por defecto debemos colocar la línea por completo en otros casos será sólo cambiar de 0 a 1 de No a Yes o descomentar una línea.

 

 

Modificar Puerto 22

Es esencial cambiar el puerto por defecto a uno aleatorio muchos scripts están configurados a atacar este puerto, lo recomendable es cambiarlo en el rango de 1000 a 23000 procurando que el puerto no este usado por otro servicio.

 

Tampoco debemos usar puertos como el 2222, 8022 o 1022 son igual de comunes que el 22 y muchos scripts están configurados para atacarlos.

 

port 2345

 

Si tenemos SELINUX habilitado debemos de usar un comando adicional para permitir el acceso desde el exterior al nuevo puerto.

 

semanage port -a -t ssh_port_t -p tcp 2345 #Cambiando puerto 22 por Seguridad

 

 

Usar por defecto Protocol 2

Debemos asegurarnos que todas nuestras conexiones se realizan bajo el Protocol 2 el 1 tiene muchas vulnerabilidades.

 

Protocol 2

 

 

Tiempo para introducir Credenciales

Buscar la sección “Authentication”. Sus dos primeras opciones son también importantes. La primera es el número de segundos que tendrá el usuario remoto para hacer login en tu máquina. Colocar ese valor a pocos segundos, no tardamos mucho en hacer login si sabemos la cuenta y la password.

 

De esta forma evitamos ciertos scripts que se aprovechan de ese tiempo. El valor típico en términos de seguridad es 30, aunque puede ser incluso menos.

 

LoginGraceTime 30

 

 

Deshabilitar Acceso Root

Esta es la opción más importante para ser víctima de un ataque, necesitan de 3 cosas:
  • Usuario
  • Puerto
  • Contraseña

 

Si nos deshabilitamos el root ya tienen una al ser root un usuario común en todos los sistemas. Adicional a esto, este usuario puede causar estragos al tener todos los permisos habilitados.

 

PermitRootLogin no

 

 

Habilitar Acceso controlado

Podemos controlar que usuario puede hacer login por medio de SSH e incluso colocar una cláusula para que se conecte solo desde cierta IP. Esto es similar a lo que ofrece AWS para conectarnos a sus instancias.

 

AllowUsers fulanito@83.45.258.21

 

Es importante permitir el acceso a solo usuarios que necesiten acceso remoto y si es posible limitarlos a una IP conocida.

 

 

Configurar el número de Intentos errados

Si colocamos mal la contraseña el servidor nos da varios intentos para volver a ingresarla, esto debemos limitarlo o puedes ser víctima de un script de fuerza bruta, podemos colocarlo a 2 o 3 veces.

 

MaxAuthTries 2

 

 

Número Conexiones Permitidas de Manera Simultánea

Esto puede variar dependiendo del uso que le des al servidor, pero lo ideal es tenerlo controlado, basta con añadir el total de usuarios permitidos por SSH.

 

MaxStartups X

 

Después de realizar todos los cambios en nuestro archivo debemos de reiniciar nuestro servicio de sshd, Puede variar dependiendo del gestor de servicios.

 

 

SystemD
systemctl restart sshd

 

Upstart/Sysinit
service restart sshd

 

 

Todos estos cambios añaden un nivel extra de Seguridad pero debemos de tener presentes:

  • Usar contraseñas alfanuméricas.
  • Usar Autenticación por Llaves Públicas/Privadas cuando sea posible.
  • Complementar la Seguridad con SELINUX y Firewalls.
  • Controlar el acceso a qué usuarios necesitan entrar remotamente.

 

 


Autenticar Llaves Públicas / Privadas SSH


En la actualidad usar Llaves SSH es un requisito indispensable, esta autenticación es muy usada por los Administradores para automatizar tareas entre varios servidores e incluso es usada por desarrolladores para acceder a SCM como GIT, GITHUB, GITLAB entre otros.

 

Ofrece una gran seguridad y la posibilidad de crear Tareas Automatizadas basadas en scripts como un Respaldo o Replicar cambios a varios nodos a la vez.

 

Al usar una llave SSH (pública y privada), pueden conectarse fácilmente a un servidor, o a múltiples servidores, sin tener que ingresar un password cada vez. Es posible configurar tus llaves sin una frase-de-paso, sin embargo eso sería imprudente, si alguien obtiene tu clave, podría usarla. Hablaremos de cómo generar Llaves, distribuirlas, y usar ssh-agent para obtener mayor Seguridad.

 

 

Generando Llaves sin Passphrase

Ante todo asegurarse de tener OpenSSH instalado no hace falta, el servidor solo el cliente.

 

Empezamos por Generar una llave del Tipo DSA con una seguridad 1024 bits, más que suficiente aunque puedes ir más allá y generar una llave del tipo RSA con un tope de 4096.

ssh-keygen -b 1024 -t dsa
Nos pedirá la ubicación donde guardará las llaves por defecto ~/.ssh
Enter file in which to save the key (/home/test/.ssh/id_dsa)
Luego preguntará por una frase por ahora no usaremos ninguna y la dejaremos en blanco y nos dirá que la llave se ha creado y nos refleja.

 

 

La imagen siempre será diferente se genera de manera aleatoria, luego si vamos al folder .ssh debemos de tener 2 archivos

 

id_dsa -----> Llave Privada (No la compartas con nadie es como tu TDC).
id_dsa.pub ----> Es la que compartimos para poder conectarnos.

 

 

Compartir Llave Pública

En caso de querer compartir la llave pública en SCM o Chef, Puppet, Jenkins visualizamos el archivo de la llave pública lo copiamos y lo pegamos donde corresponde.
more id_dsa.pub
ssh-dss AAAAB3NzaC1kc3MAAACBAN6SEI4Qqzb23pJYRXIAtPmGJHln5hFdthFq43ef+ifR29v2IknXCFwefKK8jorSDiUEY/1F/yp0xao

mjhFQu1jNXOgF0PAZTfivRVFn6Q9FRsyXU9s+fx+xQiW3mf3y4IX654O82SLGl7Vhh5UsvG8r8d8pV6R+L22sV7GkCHPxAAAAFQCyF1Gdh3
Cap4xr/0gFArHmFwAxfQAAAIEAmVYjPYAdQ9DCNWP+J44xDDn+03anWgyoZqSPPs23djyVQ756U4VitM0GiIQQ89HCdvTFFpSagnfdVpWh4

Hxo4Y5skKihnPMtB+bFNbP/2SmGdPz1AOmb7tvRrTkj5VLtXeDeB3ulowUKarwiBVVvAvxtxmozoZHOADWqrEPizxIAAACAU2DF1ZGTiJMP
1oXguj+OhVB7mlsVhhkq53OxKKJbZqsl9hkOiSxaLUfQBNu6Ae441ekIObqolWNCBIvCO3uQYOozyzNGBhqHE7FVq+UGNkee96D2by+2GAQ

S7daieIKNmFer2hO/SBxzepMrWAiIUnUsP5irmYspkjGlQxP+hxw= test@solvetic
En caso de querer compartirla para acceder a un servidor yo siempre recomiendo usar ssh-copy-id viene incluido en OpenSSH y es muy sencillo de usar:
ssh-copy-id user@remote-server-ip
-i especifica la ubicación de la llave a usar.
Hay otras formas como:
ssh user@remote-server-ip \
	   'cat >> .ssh/authorized_keys2' < .ssh/id_dsa.pub
scp ~/.ssh/id_dsa.pub user@remote-server-ip
A partir de ahora las llaves están conectadas y solo necesitar ingresar al host.
ssh -l user remote-server-ip
Esta vez no pedirá ninguna contraseña y podemos usar scripts sin interacción.

 

 

Generar Passphrase y Asociar con ssh-agent

La seguridad de las Llaves SSH se basa en nuestra llave privada que funciona como una tarjeta de acceso, pero en caso de que alguien robe nuestra llave podrá acceder a todos los lugares donde tengamos acceso. Pero al generar una passphrase podemos tener un nivel extra, no solo es necesario la llave si no introducir nuestra frase.

 

Esta vez crearemos una llave rsa con mayor seguridad configurando una frase.

ssh-keygen -b 4096 -t rsa -C “Llave con Passphrase”

# -C Añadir un comentario.
Al ser una frase podemos usar espacios puntos y caracteres especiales
ejemplo ---> Est@ es mi nuev@ llave con Fr@S3.
Compartimos la nueva llave:
scp ~/.ssh/id_rsa.pub user@remote-server-ip
Esta vez necesitamos la llave y el Passphrase pero introducirla varias veces es tedioso pero podemos complementarlo con ssh-agent debemos iniciarlo.
ssh-agent
Añadimos nuestra llave
ssh-add 

Enter passphrase for /home/user/.ssh/id_rsa:
#Introducimos la frase que hemos configurado.
Ahora podemos conectarnos a cualquier servidor que use nuestra llave sin necesidad de ingresar nuestra passphrase.

 

Este método lo recomiendo si se está fuera de la intranet, cliente y servidor en distintos puntos de Internet, y no haremos uso de tareas automatizadas, sino que más bien nos conectaremos al servidor con propósitos de administración remota, lo mejor será indicar una contraseña o frase de contraseña muy larga (15 o más caracteres, mayúsculas, minúsculas, números y símbolos) a la llave pública.

 

De esta manera será prácticamente imposible ser hackeados por este método, ya que no solo el hacker tendrá que saber la contraseña sino que tendrá que tener un certificado público válido en el servidor para que pueda ser autentificado. (Claro suponiendo que el servidor nunca haya sido comprometido y esté completamente actualizado y con la mejor seguridad posible).

¿Te ha gustado y ayudado este Tutorial?
Puedes premiar al autor pulsando este botón para darle un punto positivo
  • -
  • 0
9.9
VOTA
5
93.33%
4
6.67%
3
0%
2
0%
1
0%

  Información

  •   Publicado ago 26 2015 23:22
  •   Actualizado dic 06 2016 20:09
  •   Visitas 4.4K
  •   Nivel
    Avanzado



Tutoriales Relacionados


15 Comentarios


Marcos Riera
ago 27 2015 12:57

Estaré atento, me ha encantado este tutorial Jonathan

Ufff a mi me viene genial SSH y sus diferentes técnicas a fondo. Estaré también atento.


Veronica Nicas
ago 27 2015 19:04

Esto queía yo aprender. :)

 

¡gracias!


Cesar Ortiz
ago 28 2015 10:57

Genial manual de SSH que todos queremos; Atento estoy también.


Roberto Gomez
ago 28 2015 13:26

Muy bueno para mejorar mis técnicas SSH.


santiago bravo
ago 29 2015 02:35

SSH es vital en los de IT hehe, genial tutorial completo.


Raul Mendez
ago 31 2015 10:51

Genial tutorial de seguridad, también estoy al tanto hehe


Cristina Garcia
sep 01 2015 22:35

Nada, pues yo también me uno a ver que tal los siguientes.

Jonathan, me gustado mucho la configuración de seguridad a sshd_config. Te sigo ;)


Julio Arroyo
sep 07 2015 18:23

Este es para tenerlo en Favoritos todos los administradores de sistemas, redes y seguridad.


Hector Olmedo
sep 08 2015 16:11

Muy buenos los capitulos Jonathan, GRACIAS


Marcos Riera
sep 12 2015 15:50

Brutales los nuevos capitulos. Esto es un MUST HAVE para los pro´s.


Juan Carlos
sep 23 2015 16:10

Muchas gracias Jonathan!!!! Buen manual a mis favoritos

¡¡¡GRACIAS POR ESTE TUTORIAL!!!


Teo Robles
oct 22 2015 22:03

Guia perfecta para aprender a instalar y usar SSH, has dado donde más interesa al equipo de profesionales:

  • Autenticación con Llaves Públicas/Privadas
  • Securizar Servidor SSH

 

Gracias por compartirlo con todos nosotros.

 

Un saludo.

No esperes más y entra en Solvetic
Deja tus comentarios y aprovecha las ventajas de la cuenta de usuario ¡Únete!
Demuestra que eres experto!
  ESCRIBIR TUTORIAL
Suscribirse