RedesLinux SSH
RedesLinux SSH
[Link] 1
REDES LINUX · Capítulo 04
ÍNDICE
[Link] 2
REDES LINUX · Capítulo 04
Previo a explicar el servicio de SSH debemos comprender los conceptos básicos del
cifrado asimétrico que es una de las herramientas fundamentales que le dan a SSH
el ser lo que es. No es la intención explicar en detalle las bondades de este tipo de
cifrado, sino apuntar específicamente a su uso dentro de este servicio.
El cliente crea dos claves, una pública y otra privada con las siguientes condiciones:
1.- Con la pública yo solo puedo cifrar y con la privada solo puedo descifrar.
2.- Cada clave pública se corresponde con solo una privada y viceversa.
3.- A partir de la clave pública no se puede deducir la clave privada.
4.- La clave privada JAMÁS se divulga o comparte; pero la clave pública se entrega a
quien sea que me la solicite.
Por lo que en el momento de iniciar una conexión, tanto cliente como servidor inter-
cambian sus claves públicas. Cuando el cliente quiera enviar un mensaje al servidor
lo cifra con la clave pública del server, que solo podrá ser descifrado con la privada
que solo está en poder del servidor. Cuando el servidor por el contrario quiera enviarle
un mensaje al cliente, lo cifrará con la clave pública del cliente quien lo descifrará con
su propia clave privada.
[Link] 3
REDES LINUX · Capítulo 04
El protocolo SSH
Una clave RSA o DSA (sistema de encriptación por medio de llaves) es un algoritmo
que genera un par de llaves de autenticación, la pública y la privada. La pública se
distribuye en forma autenticada y la privada que generalmente es guardada en secre-
to por el propietario. El protocolo SSH (Secure Shell) esta implementado bajo el
estándar TCP/IP, el cual a su vez se encuentra dividido en 5 secciones:
· Nivel físico
· Nivel de enlace
· Nivel de internet
· Nivel de transporte
· Nivel de aplicación
La capa de aplicación es el nivel que los programas más comunes utilizan para co-
municarse a través de una red con otros programas. Los procesos que acontecen
en este nivel son aplicaciones específicas que pasan los datos al nivel de aplicación
en el formato que internamente use el programa y es codificado de acuerdo con un
protocolo estándar.
[Link] 4
REDES LINUX · Capítulo 04
ACERCA DE OPENSSH
Este proyecto es liderado actualmente por Theo de Raadt quien actualmente es fun-
dador y líder de proyectos como OpenBSD. Los desarrolladores de OpenSSH asegu-
ran que este es más seguro que el original, lo cual es debido a la conocida reputación
de los desarrolladores de OpenBSD por crear código limpio y perfectamente audita-
do, lo que contribuye a que sea más seguro. Su seguridad también es atribuible al
hecho de que su código fuente se distribuya libremente con una licencia BSD.
Aunque todo el código fuente del SSH original también está disponible, existen res-
tricciones con respecto a su uso y distribución, lo que convierte a OpenSSH en un
proyecto mucho más atractivo a la hora de atraer nuevos desarrolladores.
[Link] 5
REDES LINUX · Capítulo 04
Una vez finalizado el proceso de instalación pasaremos con las configuraciones pro-
pias de OpenSSH, nos referimos a los archivos de configuración.
[Link] 6
REDES LINUX · Capítulo 04
[Link] 7
REDES LINUX · Capítulo 04
Donde:
· -b: tamaño de la clave.
· -t: tipo de clave.
· -N: passphrase. En este caso creamos una clave sin passphrase que ingresar
al momento de desear utilizarla.
[Link] 8
REDES LINUX · Capítulo 04
known_hosts Este archivo contiene las claves de host DSA de los ser-
vidores SSH a los cuales el usuario ha accedido. Este
archivo es muy importante para asegurar que el cliente
SSH está conectado al servidor SSH correcto.
[Link] 9
REDES LINUX · Capítulo 04
Archivo “sshd_config”
El siguiente paso será abrir el archivo con la ayuda del editor de textos vi:
# vi /etc/ssh/sshd_config
SSH tiene asignado por defecto el puerto 22, esto es algo que
conocen todos nuestros posibles atacantes, por lo que es una
buena idea cambiarlo.
[Link] 10
REDES LINUX · Capítulo 04
Para modificar esta opción y las siguientes que iremos mencionando editaremos el
archivo de configuración shd_config, que por defecto se encuentra en el directorio
/etc/ssh/.
En este ejemplo usaremos el 34765, por lo que tendrá que editar el parámetro Port del
archivo de configuración el cual deberá quedar así:
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented. Uncommented options change a
# default value.
Port 34567
#AddressFamily any
#ListenAddress [Link]
#ListenAddress ::
[Link] 11
REDES LINUX · Capítulo 04
DESACTIVANDO EL PROTOCOLO 1
La versión 1 de OpenSSH hace uso de varios algoritmos de cifrado de datos más, sin
embargo, algunos de estos algoritmos han dejado de ser mantenidos por sus creado-
res y por lo tanto presenta serios huecos de seguridad que potencialmente permite a
un intruso insertar datos en el canal de comunicación. Para evitar el uso del protocolo
1 y sus posibles ataques a este, basta con indicar que solo admita comunicaciones
de ssh basadas en el protocolo 2, por lo que tendrá que editar el parámetro Proto-
col del archivo de configuración el cual deberá quedar así:
# Disable legacy (protocol version 1) support in the server for new
# installations. In future the default will change to require explicit
# activation of protocol 1
Protocol 2
Este es quizá el parámetro más importante de seguridad que podemos indicar para
blindar nuestro servidor.
[Link] 12
REDES LINUX · Capítulo 04
Para llevar a cabo estos cambios tendrá que editar el parámetro PermitRootLogin
del archivo de configuración, el cual deberá quedar de la siguiente manera:
# Authentication:
#LoginGraceTime 2m
PermitRootLogin no
#StrictModes yes
#MaxAuthTries 6
Muchos de los ataques llevados a cabo por piratas informáticos se basan en fuerza
bruta, estableciendo un número máximo de intentos de conexión lograremos que sus
intentos por entrar a nuestro servidor sean disuadidos.
Para llevar a cabo estos cambios tendrá que editar el parámetro MaxAuthTries del
archivo de configuración el cual deberá quedar de la siguiente manera:
# Authentication:
#LoginGraceTime 2m
PermitRootLogin no
#StrictModes yes
MaxAuthTries 2
[Link] 13
REDES LINUX · Capítulo 04
La opción StrictModes debe activarse para que, por ejemplo, los usuarios que esta-
blecen permisos de escritura para todos en sus archivos y directorios, no se lleven
una desagradable noticia cuando otro usuario los modifique. De esta manera se pro-
tege la información de los usuarios.
Para llevar a cabo estos cambios tendrá que editar el parámetro StrictModes del
archivo de configuración el cual deberá quedar de la siguiente manera:
# Authentication:
#LoginGraceTime 2m
PermitRootLogin no
StrictModes yes
MaxAuthTries 2
Para llevar a cabo estos cambios tendrá que editar el parámetro X11Forwarding
del archivo de configuración el cual deberá quedar de la siguiente manera:
# Accept locale-related environment variables
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY
LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL
#AllowTcpForwarding yes
#GatewayPorts no
#X11Forwarding yes
[Link] 14
REDES LINUX · Capítulo 04
Si somos el único usuario del sistema, considero que con 20 o 30 segundos es más
que suficiente.
Para llevar a cabo estos cambios tendrá que editar el parámetro LoginGraceTime
del archivo de configuración, el cual deberá quedar de la siguiente manera:
# Authentication:
LoginGraceTime 30
PermitRootLogin no
StrictModes yes
MaxAuthTries 2
Para iniciar el servicio de SSH tendrá que teclear en consola y como root lo siguiente:
# /etc/init.d/sshd start
o Bien
# systemctl start sshd
[Link] 15
REDES LINUX · Capítulo 04
Igualmente existen opciones ya sea para reiniciar, detener, recargar o conocer el sta-
tus en el que se encuentra el servicio.
[Link] 16
REDES LINUX · Capítulo 04
Para establecer una conexión con un servidor SSH remoto desde Debian haremos
uso de una terminal. La sintaxis para llevar a cabo esta operación es la siguiente:
# ssh usuario@ipDelServidor
En caso de haber establecido un puerto de escucha distinto al puerto 22, solo deberá
especificar el puerto por el cual requiere autenticarse al servidor. Ejemplo:
# ssh -p[puerto] usuario@ipDelServidor
[Link] 17
REDES LINUX · Capítulo 04
FINGERPRINT SSH
Algo que notaremos la primera vez que nos conectemos a un servidor será que nos
dice algo de un fingerprint. ¿Qué es eso?
Como es la primera vez que nos conectamos, nos está avisando que no tiene ese
fingerprint. Si somos muy paranoicos podremos llamar al administrador del server al
que nos estamos queriendo conectar, quien ejecutando el siguiente comando en el
mismo nos dirá el fingerprint que tiene y verificar si coincide:
# cd /etc/ssh
# for file in *sa_key.pub; do ssh-keygen -lf $file; done
Esto nos mostrará el fingerprint por cada una de las claves que tiene, si alguna salida
coincide con lo que nos mostró del lado del cliente. Una vez que se acepte el finger-
print, el mismo se almacenará en la carpeta:
/home/usuario/.ssh/known_hosts
[Link] 18
REDES LINUX · Capítulo 04
Otro ejemplo más común que el anterior es cuando se le asigna la IP a otro servidor o
cuando reinstalamos ese servidor. En ambos casos nos dará la misma alerta. Si este
es el caso, deberemos ingresar a la línea known_hosts que nos indica y eliminar esa
línea, o si es posible ejecutar el siguiente comando:
ssh-keygen -R hostname
[Link] 19
REDES LINUX · Capítulo 04
EJEMPLO 1:
La empresa para la cual trabajamos, nos ha pedido reiniciar el servicio de apache,
para ello nos ha proporcionado los siguientes datos:
IP del servidor -> [Link]
Nombre del usuario remoto -> adminlog
Puerto de autenticacion -> 34765
Solución:
03 Una vez dentro del servidor remoto nos logearemos ahora si como “root”:
[adminlog@ web ]# su -
Contraseña: xxxxxxxxxxxxxxxxxx
[root@ web ]#
[Link] 20
REDES LINUX · Capítulo 04
Para copiar archivos o carpetas desde un equipo remoto hacia nuestro equipo exis-
ten dos maneras:
· Mediante el uso del comando SCP
· Mediante el uso del comando SFTP
La diferencia en utilizar SCP (Shell) y SFTP (Security File Transfer Protocol) para co-
piar carpetas o archivos radica en que para SCP tenemos que conocer exactamente
donde se encuentra el recurso que queremos copiar, de otra forma nunca lo des-
cargará. En cambio SFTP nos deja navegar entre las carpetas, lo cual hace más
sencillo la ubicación del recurso que deseamos copiar. La única desventaja que
presenta SCP es que únicamente permite la transferencia de archivos (descarga y
subida de archivos).
[Link] 21
REDES LINUX · Capítulo 04
EJEMPLO 1:
#scp -P[puerto] usuario@ipDelServidor:/rutaDelRecurso
Aunado a esto, para descargar una carpeta tendrá que seguir la siguiente sintaxis:
#scp -P[puerto] -r usuario@ipServidor:/rutaDelDirectorio
EJEMPLO 2:
La misma empresa nos ha pedido copiar la carpeta de inventarios de la empresa la
cual esta hospedada en un servidor remoto, para ello nos ha proporcionado los si-
guientes datos:
IP del servidor -> [Link]
Nombre del usuario remoto -> adminlog
Puerto de autenticacion -> 34567
Ruta del Recurso Remoto -> /tmp/Conta
Solución:
01 Para poder hacer la copia desde servidor remoto habrá que especificar el
puerto de escucha, el usuario remoto, la IP del servidor remoto y la ruta (sin
errores) del recurso remoto.
[Link] 22
REDES LINUX · Capítulo 04
[Link] 23
REDES LINUX · Capítulo 04
03 Una vez dentro del servidor solo bastará ejecutar el comando “get” para des-
cargar algún archivo.
[root@ localhost]# sftp -o Port=[PuertoDeEscucha] usuarioRemoto@
ipDelServidorRemoto
Connecting to IPDelServidorRemoto...
usuarioRemoto@IPDelServidorRemoto’s password: xxxxxxxxxxxxxxxxxxx
sftp> get recursoRemoto
La siguiente tabla explica más a detalle los comandos que pueden ser utilizados con
SFTP:
[Link] 24
REDES LINUX · Capítulo 04
put [rutaLocal] [rutaRemota] Sube un archivo o archivo desde una ruta lo-
cal hasta una ruta remota.
EJEMPLO 3:
La misma empresa nos ha pedido copiar el archivo [Link] que se en-
cuentra dentro la ruta “/tmp/Conta/”, para ello nos ha proporcionado los siguientes
datos:
IP del servidor remoto -> [Link]
Nombre del usuario remoto -> adminlog
Puerto de autenticacion -> 34567
Ruta del Recurso Remoto -> /tmp/Conta
Solución:
01 Para poder traer la copia desde servidor remoto hacia nuestro equipo habrá
que especificar el puerto de escucha, el usuario remoto y la IP del servidor
remoto.
02 Nos pedirá autenticarnos con la contraseña del usuario remoto, en este caso
la contraseña del usuario “adminlog”.
[Link] 25
REDES LINUX · Capítulo 04
03 Una vez autenticados con el servidor nos dará acceso a través de SFTP.
04 Nos moveremos entre directorios con la ayuda del comando “cd” hasta estar
ubicados en “/tmp/Conta”.
Para subir archivos o carpetas desde nuestro equipo hacia un equipo remoto existen
dos maneras:
· Mediante el uso del comando SCP
· Mediante el uso del comando SFTP
En caso de haber establecido un puerto de escucha distinto al puerto 22, solo deberá
especificar el puerto por el cual requiere autenticarse al servidor. Ejemplo:
[root@localhost]#scp -P[puerto] rutaDelRecursoLocal usuario@ip-
DelServidor:/ruta
[Link] 26
REDES LINUX · Capítulo 04
Aunado a esto, para subir una carpeta tendrá que seguir la siguiente sintaxis:
[root@localhost]#scp -P[puerto] -r directorioLocal usuario@ipDel-
Servidor:/ruta
EJEMPLO 4:
Se nos ha pedido subir una actualización referente a la página web de la empresa,
para ello nos ha proporcionado los siguientes datos:
IP del servidor remoto -> [Link]
Nombre del usuario remoto -> adminlog
Puerto de autenticacion -> 34567
Ruta del Servidor a donde se tiene que subir la información -> /
tmp/Conta
Solución:
01 Para subir este directorio al servidor remoto habrá que especificar la ruta del
directorio local, el puerto de escucha, el usuario remoto, la IP del servidor re-
moto y la ruta (sin errores) a donde se quiere enviar el directorio.
02 Luego de haber hecho esto nos pedirá autenticarnos con la contraseña del
usuario remoto:
adminlog@[Link]’s password:xxxxxxxxxxxxx
[Link] 27
REDES LINUX · Capítulo 04
En caso de haber establecido un puerto de escucha distinto al puerto 22, solo deberá
especificar el puerto por el cual requiere autenticarse al servidor. Ejemplo:
# sftp -o Port=[Puerto] usuario@ipDelServidor
Una vez dentro del servidor solo bastara ejecutar el comando “put” para descargar
algún archivo:
# sftp -o Port=[PuertoDeEscucha] usuarioRemoto@ipDelServidorRemoto
Connecting to IPDelServidorRemoto...
usuarioRemoto@IPDelServidorRemoto’s password: xxxxxxxxxxxxxxxx
sftp> put recursoLocal
La siguiente tabla explica más a detalle los comandos que pueden ser utilizados con
SFTP:
[Link] 28
REDES LINUX · Capítulo 04
put [rutaLocal] [rutaRemota] Sube un archivo o archivo desde una ruta lo-
cal hasta una ruta remota.
[Link] 29
REDES LINUX · Capítulo 04
EJEMPLO 5:
Se nos ha pedido subir una actualización referente a la página web de la empresa,
pero esta vez será usando SFTP, para ello nos ha proporcionado los siguientes datos:
IP del servidor remoto -> [Link]
Nombre del usuario remoto -> adminlog
Puerto de autenticacion -> 34567
Ruta del Servidor a donde se tiene que subir la información -> /
tmp/Conta
Solución:
01 Para subir este directorio al servidor remoto habrá que especificar el puerto de
escucha, el usuario remoto y la IP del servidor remoto.
02 Nos pedirá autenticarnos con la contraseña del usuario remoto, en este caso
la contraseña del usuario “adminlog”.
03 Una vez autenticados con el servidor nos dará acceso a través de SFTP.
04 Nos moveremos entre directorios con la ayuda del comando “cd” hasta estar
ubicados en “/tmp/Conta”.
[Link] 30
REDES LINUX · Capítulo 04
[Link] 31