https://youtu.be/6Vbsv7lZWE0
Fuente del vídeo:
Como crear y usar llaves (privada y publica) con ssh en LinuxAutor: Manuel Cabrera Caballero
"SSH o también conocido como Secure Shell, es un
protocolo y el nombre del programa que lo implementa. SSH es ampliamente
conocido por ser el protocolo seguro para la administración remota de
servidores, routers, switches y un largo etcétera de equipos. El
protocolo SSH permite manejar por completo el servidor o dispositivo de
red mediante un intérprete de órdenes, además, también podemos redirigir
el tráfico de X para ejecutar programas gráficos a través de la propia
sesión SSH.
Otras características fundamentales de SSH son que nos va a permitir copiar datos de manera segura, tanto archivos como carpetas, a través del protocolo SFTP (SSH FTP), un protocolo hecho desde cero y que no tiene nada que ver con FTPS o FTPES (FTP sobre SSL/TLS). El protocolo SSH es fundamental en el ámbito de las redes y sistemas, además, podremos configurarlo en detalle para dotar a nuestro sistema de la máxima seguridad posible.
El protocolo SSH proporciona confidencialidad (los datos van cifrados punto a punto), autenticación (podremos autenticarnos frente al servidor SSH de múltiples maneras, con usuario/clave, criptografía de clave pública e incluso podremos configurar un segundo factor de autenticación), integridad (si los datos se modifican o los modifica un usuario malintencionado se podrá detectar, ya que usa HMAC para comprobar la integridad de todos y cada uno de los datos).
Existen dos versiones de SSH, la versión 1 no se recomienda hoy en día usarla, de hecho, por defecto siempre se utiliza ya la versión SSHv2. Por defecto SSH utiliza el protocolo TCP de la capa de transporte, y el número de puerto es el 22, no obstante, podremos cambiar el número de puerto para mitigar posibles escaneos de bots al servicio SSH.
En este manual que hoy os presentamos, os vamos a enseñar a configurar el servidor SSH de OpenSSH, un programa que está disponible para sistemas operativos basados en Unix y Linux, como por ejemplo FreeBSD, OpenBSD, Debian, Red Hat Enterprise Linux y un largo etcétera de distribuciones. En esta guía no solo aprenderemos a configurar correctamente el archivo de configuración sshd_config, sino que usaremos programas adicionales para dotar al sistema de la máxima seguridad posible. En este manual todas las configuraciones las realizaremos con Debian, no obstante, todas las medidas de seguridad pueden ser implementadas en cualquier sistema operativo basado en Linux y Unix." 1 1 Servidor SSH en Linux: Manual de configuración para máxima seguridad
SO: En Ubuntu 18.04 LTS
Pasos:
1) Instalación de ssh servidor y el ssh cliente.
Se puede instalar uno o ambos.
Servidor
sudo apt install openssh-server
Cliente
sudo apt install openssh-client
Si usas este comando se instalan los dos en cada host
sudo apt install shh
Cambiar nombre del servidor si hace falta
sudo hostnamectl set-hostname nombre_maquina
2) Verificar si se conecta
Otras características fundamentales de SSH son que nos va a permitir copiar datos de manera segura, tanto archivos como carpetas, a través del protocolo SFTP (SSH FTP), un protocolo hecho desde cero y que no tiene nada que ver con FTPS o FTPES (FTP sobre SSL/TLS). El protocolo SSH es fundamental en el ámbito de las redes y sistemas, además, podremos configurarlo en detalle para dotar a nuestro sistema de la máxima seguridad posible.
El protocolo SSH proporciona confidencialidad (los datos van cifrados punto a punto), autenticación (podremos autenticarnos frente al servidor SSH de múltiples maneras, con usuario/clave, criptografía de clave pública e incluso podremos configurar un segundo factor de autenticación), integridad (si los datos se modifican o los modifica un usuario malintencionado se podrá detectar, ya que usa HMAC para comprobar la integridad de todos y cada uno de los datos).
Existen dos versiones de SSH, la versión 1 no se recomienda hoy en día usarla, de hecho, por defecto siempre se utiliza ya la versión SSHv2. Por defecto SSH utiliza el protocolo TCP de la capa de transporte, y el número de puerto es el 22, no obstante, podremos cambiar el número de puerto para mitigar posibles escaneos de bots al servicio SSH.
En este manual que hoy os presentamos, os vamos a enseñar a configurar el servidor SSH de OpenSSH, un programa que está disponible para sistemas operativos basados en Unix y Linux, como por ejemplo FreeBSD, OpenBSD, Debian, Red Hat Enterprise Linux y un largo etcétera de distribuciones. En esta guía no solo aprenderemos a configurar correctamente el archivo de configuración sshd_config, sino que usaremos programas adicionales para dotar al sistema de la máxima seguridad posible. En este manual todas las configuraciones las realizaremos con Debian, no obstante, todas las medidas de seguridad pueden ser implementadas en cualquier sistema operativo basado en Linux y Unix." 1 1 Servidor SSH en Linux: Manual de configuración para máxima seguridad
SO: En Ubuntu 18.04 LTS
Pasos:
1) Instalación de ssh servidor y el ssh cliente.
Se puede instalar uno o ambos.
Servidor
sudo apt install openssh-server
Cliente
sudo apt install openssh-client
Si usas este comando se instalan los dos en cada host
sudo apt install shh
Cambiar nombre del servidor si hace falta
sudo hostnamectl set-hostname nombre_maquina
2) Verificar si se conecta
Si quieres ver los puertos abiertos del servidor funcionando usa el siguiente comando
sudo netstat -lantp
tcp6 0 0 :::22 :::* ESCUCHAR 1096/sshd
a) Verificar el IP del servidor (ip addr, ifconfig)
ip addr
Supongamos:
b) Entramos en el servidor desde el cliente con la terminal
ssh - p 1234 usuario@192.168.1.132
The authenticity of host '[192.168.1.132]:1234 ([192.168.1.132]:1234)' can't be established.
ECDSA key fingerprint is SH<xxx<x<xx<A2xxxxxxtTjYx<<z<zn¡ghhghhfhasdhxK4.
Are you sure you want to continue connecting (yes/no)?
yes
el fingerprint puede cambiar si el servidor es formateado, no es nuestro servidor, o simplemente ha sido hackeado.
password: introducimos la clave de nuestro usuario en el servidor remoto
c) Reiniciamos y vemos el servicio ssh en el servidor
sudo /etc/init.d/ssh restart (para el demonio y reinicia, relee la configuraciones, es el antiguo comando y da más información)
sudo /etc/init.d/ssh status (vemos como está el servicio)
Ahora el nuevo comando debería ser estos
sudo systemctl restart ssh
sudo systemctl status ssh
4) Generar claves de ssh en el cliente
ssh -p 1234 usuariocliente@192.168.1.132
Muchas veces los sistemas ya tienen claves generadas en el siguiente directorio:
/home/<usuario>/.ssh
Dentro de este directorio oculto (.ssh) podremos ver claves que, en caso de existir, tendrán el nombre de id_rsa (privada) e id_rsa.pub para la clave pública.
Para generar unas nuevas claves deberás
ssh-keygen
Preguntará un nombre para la clave (suelo colocar el nombre del host, pero puede ser cualquiera) y otra palabra de paso (debes de anotarla en un sitio seguro), es necesario colocar una palabra para poder descifrarla. Si lo dejas en blanco el cifrado será incompleto. Además puede ser necesaria para su desencriptado.
nombre del archivo con la clave: hostpepe
palabra de paso: claveinventada
Se generarán dos archivos
hostpepe
hostpepe.pub (Está es la que vas a compartir con otros usuarios)
Como su nombre indica, la clave privada es “privada” y por tanto deberá permanecer almacenada de forma segura. La clave pública será la que podremos compartir libremente con cualquier host.
Cuando terminemos ya tendremos nuestro un par de claves Secure Shell generado, se usará por defecto el algoritmo RSA con longitud 2048.
b) Generando el par de claves
Otro ejemplo de clavecliente
Para generar unas claves RSA de 4096 bits nuevas, simplemente deberemos ejecutar el siguiente comando:
pero también podemos especificar el tipo de clave usando este formato:
ssh-keygen -t <tipo>
ssh-keygen -f /etc/ssh/ssh_host_rsa_key -t rsa -b 4096
5) Transmitir la clave pública del cliente al servidor
Método 1(requiere estar habilitado las claves en el servidor)
Dos formas:
ssh-copy-id <usuario@servidor>
ssh-copy-id <servidor>
ssh-copy-id -i /home/usuariocliente/.ssh /clavecliente.pub userservidor@ip -p 1234
introducimos la clave del cliente, nos dirá que está agregada
Método 2 (requiere copiarla y pegarla con el comando cat si eres el administrador del servidor)
Cat --> comando de salida que permite ver el contenido de un archivo en la propia consola
cat clave.pub (veras un texto muy largo de letras números y símbolos )
La copiamos y la pegamos si somos el administrador en el archivo
sudo nano/home/usuario/.ssh/authorized_keys
ctrl+o
enter
ctrl+x
6) Desactivar el acceso por clave en el servidor en el archivo
ssh_config (configuración del servicio ssh en el cliente)
sshd_config (configuración del servicio ssh en el servidor)
Ambos deberán estar en el directorio: /etc/ssh
Nota: sería buena idea hacer un backup de estos archivos antes de modificarlos, por si la liamos.
cd /etc/ssh
scp sshd_config sshd_config.bak
sudo nano /etc/ssh/sshd_config
Buscar la línea que tenga y descomentar o modificar
PasswordAuthentication no
7) Reiniciamos el servidor
systemctl restart ssh (actualmente)
sudo /etc/systemctl status ssh (antiguamente se usaba este, aún funciona)
8) Ahora el servidor estará más seguro y ya podemos entrar con la clave de paso en el servidor.
Ya podemos entrar con nuestra clave pública
ssh usuario@servidor
de lo contrario
usuario@192.168.1.132: Permission denied (publickey).
Comandos para controlar el servidor ssh
Para arrancar el servidor:
sudo /etc/init.d/ssh start
Para parar el servidor:
sudo /etc/init.d/ssh stop
Para reiniciar el servidor:
sudo /etc/init.d/ssh restart
Otro directorio que tenemos que tener muy en cuenta es la de host conocidos, ya que aquí también es donde configuraremos las claves criptográficas RSA/DSA. Ubicado en la siguiente ruta:
/home/usuario/.ssh/
Cada usuario tendrá su propio .ssh en el host cliente. Este directorio por defecto está oculto (.ssh) y hay un directorio por cada usuario que haya en el sistema operativo y que se conecte a un servidor remoto.
Configurar el servidor modificando el archivo sshd_config
Cambiar el puerto por defecto del servidor SSH
Por defecto los servidores SSH utilizan el puerto 22 para las conexiones. Es recomendable cambiar este número de puerto, por ejemplo queremos usar el puerto 1234 debemos poner en el fichero de configuración (sshd_config)
lo siguiente:
Port 1234 (descomentar y cambiar el 22, por el que quieras, en nuestro caso 1234)
Desactivando al propio usuario root, y usando “sudo” para elevar a permisos de superusuario, evitaremos esto. Además, OpenSSH también nos permitirá deshabilitar el login del usuario root para dotar al sistema de mayor seguridad:
PermitRootLogin no
De esta manera las conexiones root quedarán bloqueadas evitando que usuarios no autorizados puedan realizar ataques de fuerza bruta contra nuestro servidor SSH para adivinar los credenciales del usuario Root. También tenemos otras opciones en este apartado, como por ejemplo
PermitRootLogin without-password
donde se permite autenticación pero no con usuario y contraseña, sino con claves criptográficas RSA.
Ejemplo sshd_config sería el siguiente
------------------------------------------------------------------------
Port 2244
PermitRootLogin no
LoginGraceTime 30
MaxAuthTries 3
MaxStartups 3
AllowUsers usuario1 usuario2
DenyUsers usuario3 usuario4
------------------------------------------------------------------------
Fuente:
sudo netstat -lantp
tcp6 0 0 :::22 :::* ESCUCHAR 1096/sshd
a) Verificar el IP del servidor (ip addr, ifconfig)
ip addr
Supongamos:
- el ip es 192.168.1.132
- el puerto es 1234 (sino lo has cambiado sería el 22)
- el usuario es usuario
b) Entramos en el servidor desde el cliente con la terminal
ssh - p 1234 usuario@192.168.1.132
The authenticity of host '[192.168.1.132]:1234 ([192.168.1.132]:1234)' can't be established.
ECDSA key fingerprint is SH<xxx<x<xx<A2xxxxxxtTjYx<<z<zn¡ghhghhfhasdhxK4.
Are you sure you want to continue connecting (yes/no)?
yes
el fingerprint puede cambiar si el servidor es formateado, no es nuestro servidor, o simplemente ha sido hackeado.
password: introducimos la clave de nuestro usuario en el servidor remoto
c) Reiniciamos y vemos el servicio ssh en el servidor
sudo /etc/init.d/ssh restart (para el demonio y reinicia, relee la configuraciones, es el antiguo comando y da más información)
sudo /etc/init.d/ssh status (vemos como está el servicio)
Ahora el nuevo comando debería ser estos
sudo systemctl restart ssh
sudo systemctl status ssh
4) Generar claves de ssh en el cliente
ssh -p 1234 usuariocliente@192.168.1.132
Muchas veces los sistemas ya tienen claves generadas en el siguiente directorio:
/home/<usuario>/.ssh
Dentro de este directorio oculto (.ssh) podremos ver claves que, en caso de existir, tendrán el nombre de id_rsa (privada) e id_rsa.pub para la clave pública.
Para generar unas nuevas claves deberás
a) Generando el par de claves
cd /home/usuario/.sshssh-keygen
Preguntará un nombre para la clave (suelo colocar el nombre del host, pero puede ser cualquiera) y otra palabra de paso (debes de anotarla en un sitio seguro), es necesario colocar una palabra para poder descifrarla. Si lo dejas en blanco el cifrado será incompleto. Además puede ser necesaria para su desencriptado.
nombre del archivo con la clave: hostpepe
palabra de paso: claveinventada
Se generarán dos archivos
hostpepe
hostpepe.pub (Está es la que vas a compartir con otros usuarios)
Como su nombre indica, la clave privada es “privada” y por tanto deberá permanecer almacenada de forma segura. La clave pública será la que podremos compartir libremente con cualquier host.
Cuando terminemos ya tendremos nuestro un par de claves Secure Shell generado, se usará por defecto el algoritmo RSA con longitud 2048.
b) Generando el par de claves
Otro ejemplo de clavecliente
Para generar unas claves RSA de 4096 bits nuevas, simplemente deberemos ejecutar el siguiente comando:
pero también podemos especificar el tipo de clave usando este formato:
ssh-keygen -t <tipo>
ssh-keygen -f /etc/ssh/ssh_host_rsa_key -t rsa -b 4096
5) Transmitir la clave pública del cliente al servidor
Método 1(requiere estar habilitado las claves en el servidor)
Dos formas:
ssh-copy-id <usuario@servidor>
ssh-copy-id <servidor>
ssh-copy-id -i /home/usuariocliente/.ssh /clavecliente.pub userservidor@ip -p 1234
introducimos la clave del cliente, nos dirá que está agregada
Método 2 (requiere copiarla y pegarla con el comando cat si eres el administrador del servidor)
Cat --> comando de salida que permite ver el contenido de un archivo en la propia consola
cat clave.pub (veras un texto muy largo de letras números y símbolos )
La copiamos y la pegamos si somos el administrador en el archivo
sudo nano/home/usuario/.ssh/authorized_keys
ctrl+o
enter
ctrl+x
6) Desactivar el acceso por clave en el servidor en el archivo
ssh_config (configuración del servicio ssh en el cliente)
sshd_config (configuración del servicio ssh en el servidor)
Ambos deberán estar en el directorio: /etc/ssh
Nota: sería buena idea hacer un backup de estos archivos antes de modificarlos, por si la liamos.
cd /etc/ssh
scp sshd_config sshd_config.bak
sudo nano /etc/ssh/sshd_config
Buscar la línea que tenga y descomentar o modificar
PasswordAuthentication no
7) Reiniciamos el servidor
systemctl restart ssh (actualmente)
sudo /etc/systemctl status ssh (antiguamente se usaba este, aún funciona)
8) Ahora el servidor estará más seguro y ya podemos entrar con la clave de paso en el servidor.
Ya podemos entrar con nuestra clave pública
ssh usuario@servidor
de lo contrario
usuario@192.168.1.132: Permission denied (publickey).
Comandos para controlar el servidor ssh
Para arrancar el servidor:
sudo /etc/init.d/ssh start
Para parar el servidor:
sudo /etc/init.d/ssh stop
Para reiniciar el servidor:
sudo /etc/init.d/ssh restart
Configuración de sshd_config para la máxima seguridad en el servidor
Hosts clientes conocidos y las claves públicas (directorio .ssh)Otro directorio que tenemos que tener muy en cuenta es la de host conocidos, ya que aquí también es donde configuraremos las claves criptográficas RSA/DSA. Ubicado en la siguiente ruta:
/home/usuario/.ssh/
Cada usuario tendrá su propio .ssh en el host cliente. Este directorio por defecto está oculto (.ssh) y hay un directorio por cada usuario que haya en el sistema operativo y que se conecte a un servidor remoto.
Configurar el servidor modificando el archivo sshd_config
sudo nano /etc/ssh/sshd_config
|
Cambiar el puerto por defecto del servidor SSH
Por defecto los servidores SSH utilizan el puerto 22 para las conexiones. Es recomendable cambiar este número de puerto, por ejemplo queremos usar el puerto 1234 debemos poner en el fichero de configuración (sshd_config)
lo siguiente:
Port 1234 (descomentar y cambiar el 22, por el que quieras, en nuestro caso 1234)
Bloquear el acceso root en las conexiones remotas
Por defecto, cualquier usuario en el sistema operativo que tenga permisos de Shell, podrá iniciar sesión en el servidor. Además, debemos tener en cuenta que si tenemos activado el usuario root, también podrá conectarse al servidor de forma local o remota, evitando al atacante tener que “adivinar” el nombre de usuario. Por defecto, los bots siempre intentan atacar el puerto 22 y al usuario “root”.Desactivando al propio usuario root, y usando “sudo” para elevar a permisos de superusuario, evitaremos esto. Además, OpenSSH también nos permitirá deshabilitar el login del usuario root para dotar al sistema de mayor seguridad:
PermitRootLogin no
De esta manera las conexiones root quedarán bloqueadas evitando que usuarios no autorizados puedan realizar ataques de fuerza bruta contra nuestro servidor SSH para adivinar los credenciales del usuario Root. También tenemos otras opciones en este apartado, como por ejemplo
PermitRootLogin without-password
donde se permite autenticación pero no con usuario y contraseña, sino con claves criptográficas RSA.
Configuraciones de seguridad adicionales en el servidor
Existen otras configuraciones recomendadas para evitar las conexiones no deseadas a nuestro servidor SSH. Estas conexiones son:- LoginGraceTime: Estableceremos el tiempo necesario para introducir la contraseña, evitando que el atacante tenga que “pensar mucho”. 30
- MaxAuthTries: Número de intentos permitidos al introducir la contraseña antes de desconectarnos.
- MaxStartups: Número de logins simultáneos desde una IP, para evitar que se pueda utilizar la fuerza bruta con varias sesiones a la vez.
- AllowUsers: Es crear una lista blanca de usuario. Este parámetro nos permite configurar los usuarios que podrán conectarse. Una medida muy restrictiva pero a la vez muy segura ya que bloqueará todas las conexiones de los usuarios que no estén en el listado. Los usuarios que tengamos aquí podrán conectarse, y el resto no.
- DenyUsers: Parecido al anterior, pero ahora creamos una lista negra. Los usuarios que tengamos aquí no podrán conectarse, y el resto sí.
- AllowGroups/DenyUsers: Exactamente igual a lo anterior, pero en lugar
------------------------------------------------------------------------
Port 2244
PermitRootLogin no
LoginGraceTime 30
MaxAuthTries 3
MaxStartups 3
AllowUsers usuario1 usuario2
DenyUsers usuario3 usuario4
------------------------------------------------------------------------
Fuente:
- Servidor SSH en Linux: Manual de configuración para máxima seguridad https://www.redeszone.net/seguridad-informatica/servidor-ssh-en-linux-manual-de-configuracion-para-maxima-seguridad/
- ¿Cómo instalar un servidor SSH en Linux? [Resubido] . Vídeo, URL: https://www.youtube.com/watch?v=hKfqg-w0oFQ
- Configurar claves para SSH en Linux. URL: https://protegermipc.net/2018/08/22/configurar-claves-para-ssh-en-linux/
Comentarios
Publicar un comentario