¡Esta es una revisión vieja del documento!
Tabla de Contenidos
212.3 Secure shell (SSH)
Pertenece a Topic 212: System Security
- Weight: 4
- Description: Candidates should be able to configure and secure an SSH daemon. This objective includes managing keys and configuring SSH for users. Candidates should also be able to forward an application protocol over SSH and manage the SSH login.
- Key Knowledge Areas:
- OpenSSH configuration files, tools and utilities
- Login restrictions for the superuser and the normal users
- Managing and using server and client keys to login with and without password
- Usage of multiple connections from multiple hosts to guard against loss of connection to remote host following configuration changes
- Terms and Utilities:
sshsshd/etc/ssh/sshd_config/etc/ssh/- Private and public key files
PermitRootLogin,PubKeyAuthentication,AllowUsers,PasswordAuthentication,Protocol.
OpenSSH
El protocolo SSH fue diseñado para proporcionar servicios de autentificación y de confidencialidad al intercambio de datos entre un cliente y un servidor.
La implementación open source del protocolo SSH es OpenSSH.
El daemon del servicio es /etc/init.d/sshd
El fichero de configuración /etc/ssh/sshd_config
Configuración
Directivas de configuración de /etc/ssh/sshd_config:
| Directiva | Descripción |
|---|---|
Port | Número de puerto de escucha del servicio (default 22). |
Protocol | Versión del protocolo utilizada (1, más inseguro, o 2). |
ListenAddress | IPs por las que escucha el servicio (default *) |
PermitRootLogin | Autoriza las conexiones del usuario root (default yes, aunque en debian es al revés) |
PubKeyAuthentication | Autoriza las conexiones con llave pública (default yes). |
PasswodAuthentication | Autoriza las conexiones con contraseña (default yes). |
AllowUsers | Indica usuario/usuarios que tienen permitido el acceso. |
AllowGroups | Indica grupo/grupos que tienen permitido el acceso. |
AllowTcpForwarding | Autoriza la creación de túneles SSH (default yes). |
X11Forwarding | Autoriza el reenvío de sesiones X a través de SSH (default yes). |
Conexiones desde el cliente SSH
Tenemos dos métodos para conectarnos a un servidor SSH:
- Autenticación por contraseña
- Autenticación por claves
Autenticación con contraseña
Para evitar cualquier tipo de riesgo de falsificación del servidor, el cliente realiza una comprobación de la identidad del servidor en la primera conexión creando y validando una huella digital del servidor.
La huella se guarda en un archivo llamado known_hosts, alojado en el directorio oculto .ssh en el directorio personal del usuario.
En las posteriores conexiones se contrastará esa huella digital para verificar que se trata del mismo servidor y que nadie ha hecho un cambio en el servidor de destino.
linux:~$ cat .ssh/known_hosts |1|LPx02U8nHnkSb0czyqVrdXPcW04=|jS0/QdS0HydzPZj8QXxHXC4j6EM= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAv+kXth0/RSAroNfqeV+IkEMetdWRWYBvbNOqUDDSL/ fLylBip9le40xfTe1j FXuYqAWR+mQMo8Pg37/PUWeetlBCvG4F486UbqUn2Ol5B/1GZqzG7nvbOLcp7CDr6vmqgr k2QZvUZcohWc4L9S6z zvk3EmQ1AMa+BKo4m+FCG9E1mK4bFtvchVqL1amzGg1jd2QuTzMGNibTdrEi9gSr2TrJ5S e9AhNQkIzZPvrqvVAD itiggcYNetxaNkPKfW8DdClq+qOVVAQuWnZiO63Mp/0+b+JEutFgNsX8mkt9nx34Yws7s3 BnIuT7oU+shxnuy/vj 5But4uUry5tFaTxXCw==
Autenticación por claves
Un método más fiable para autenticar conexiones SSH consiste en utilizar claves de autenticación almacenadas localmente en el disco del usuario. La autenticación por claves no exime de la obligación de utilizar una contraseña, pero garantiza al usuario que la máquina remota es con la que se quiere trabajar, y no una falsificación.
Se basa en el cifrado asimétrico (claves públicas y privadas).
Creación de claves en el cliente:
ssh-keygen -t <algoritmo>
algoritmo representa el algoritmo usado para la generación de las claves del cliente. RSA y DSA son dos algoritmos de cifrado asimétricos que se usan a menudo para autenticar. Si no se especifica un algoritmo, se usa el valor por defecto: RSA.
Ejemplo:
ssh-keygen -t RSA
Se crearán los ficheros:
.ssh/id_rsa: clave privada.ssh/id_rsa.pub: clave pública
El cliente deberá copiar su clave pública al servidor en el fichero .ssh/authorized_keys. En cada conexión, el servidor mira en el directorio local del usuario que se intenta conectar para ver si existe el directorio .ssh/authorized_keys y si contiene la clave pública del cliente. Si este es el caso, la autenticación del servidor la puede realizar el cliente.
La clave privada no puede salir de nuestra máquina. Solo se comparte la clave pública.
En cada conexión, el servidor comprueba en dicho fichero del directorio del usuario que contiene la clave pública del cliente.
Conexiones SSH
Apertura de sesión desde el cliente:
ssh usuario@servidor
Apertura de sesiones con X11 desde el cliente:
ssh -X usuario@servidor
Copias remotas de archivos con ssh:
scp <archivo_local> <usuario>@<servidor>:</path/archivo_remoto>
Creación de Tuneles SSH
Una de las opciones más interesantes de OpenSSH es crear un túnel seguro a través del cual podremos redirigir el tráfico de otros protocolos.
Podemos crear un túnel entre un cliente y un servidor con el siguiente comando:
ssh -L <puerto>:<destino_tráfico>:<puerto_destino> <usuario>@<servidor>
-L: reenvía un puerto local a un servidor SSH (establecimiento del túnel)puerto: el puerto local que se reenviará.destino_tráfico: dirección IP o nombre de la máquina destino del tráfico.puerto_destino: puerto al que se reenviará el tráfico en la máquina destinousuario: cuenta de usuario en el servidor usada para desplegar el túnel.servidor: dirección IP o nombre del servidor que será el extremo del túnel.
Ejemplo:
ssh -L 80:192.168.0.99:80 usuario@myserver.com
En la imagen nosotros estamos en una workstation y a través de Internet tenemos acceso al servidor SSH de myserver.com y queremos acceder al servidor web que hay en la red local 192.168.0.99. Esa máquina no podemos verla directamente desde Internet. Creando un túnel desde el puerto 80 del equipo 192.168.0.99 hasta el puerto 80 de nuestro equipo local mediante el servidor SSH que hay en myserver.com (que es público) lo podremos lograr. Mientras dure la conexión SSH, podremos consultar a través de nuestro puerto 80 lo que sirve el servidor web en 192.168.0.99 por su puerto 80.
