Vamos a ver cómo instalar y configurar un servidor SSH para mayor seguridad en el acceso de los usuarios de la máquina Linux.
Sitio oficial de Open SSH: https://www.openssh.com/
- 1. Para qué un servidor SSH
- 2. SSH Servidor y SSH Cliente
- 2.1 Linux
- 2.2 Windows
- 3. Instalación de Servidor SSH (con Open SSH)
- 4. DIRECTIVAS SSH INTERESANTES Y ÚTILES
- 5. Aspectos de seguridad que podemos configurar para crear un servidor SSH más seguro
1. Para qué un servidor SSH
Por seguridad. SSH es más difícil de interceptar que una comunicación sin cifrar. Además SSH puede utilizar pares de clave pública y privada.
2. SSH Servidor y SSH Cliente
Hemos de diferenciar entre el servidor y el cliente SSH.
SERVIDOR SSH:
- En Linux, podremos instalar Open SSH.
- En Windows podemos instalar la versión de Open SSH para Windows.
CLIENTE SSH:
Como cliente SSH en Windows podemos utilizar el famoso PuTTY. Y en Linux conectaremos directamente por terminal.
3. Instalación de Servidor SSH (con Open SSH)
Comenzamos instalando Open SSH Server
dependiendo de la distro Linux usaremos:
apt-get install openssh-server |
o
apt install openssh-server |
Tras la instalación, debemos revisar el archivo de configuración del servidor SSH y modificaremos las directivas activadas, el puerto de escucha, los usuarios que deseamos que puedan acceder por SSH …
3.1 ARCHIVO DE CONFIGURACIÓN DE SERVIDOR OPEN SSH
El archivo de configuración principal del servidor SSH es el archivo sshd_config
3.2 CONFIGURAR ARCHIVO sshd_config
Vemos el contenido del archivo sshd_config por defecto:
# Package generated configuration file # See the sshd_config(5) manpage for details # What ports, IPs and protocols we listen for Port 22 # Use these options to restrict which interfaces/protocols sshd will bind to #ListenAddress :: #ListenAddress 0.0.0.0 Protocol 2 # HostKeys for protocol version 2 HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_dsa_key HostKey /etc/ssh/ssh_host_ecdsa_key #Privilege Separation is turned on for security UsePrivilegeSeparation yes # Lifetime and size of ephemeral version 1 server key KeyRegenerationInterval 3600 ServerKeyBits 768 # Logging SyslogFacility AUTH LogLevel INFO # Authentication: LoginGraceTime 120 PermitRootLogin yes StrictModes yes RSAAuthentication yes PubkeyAuthentication yes #AuthorizedKeysFile %h/.ssh/authorized_keys # Don't read the user's ~/.rhosts and ~/.shosts files IgnoreRhosts yes # For this to work you will also need host keys in /etc/ssh_known_hosts RhostsRSAAuthentication no # similar for protocol version 2 HostbasedAuthentication no # Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication #IgnoreUserKnownHosts yes # To enable empty passwords, change to yes (NOT RECOMMENDED) PermitEmptyPasswords no # Change to yes to enable challenge-response passwords (beware issues with # some PAM modules and threads) ChallengeResponseAuthentication no # Change to no to disable tunnelled clear text passwords #PasswordAuthentication yes # Kerberos options #KerberosAuthentication no #KerberosGetAFSToken no #KerberosOrLocalPasswd yes #KerberosTicketCleanup yes # GSSAPI options #GSSAPIAuthentication no #GSSAPICleanupCredentials yes X11Forwarding yes X11DisplayOffset 10 PrintMotd no PrintLastLog yes TCPKeepAlive yes #UseLogin no #MaxStartups 10:30:60 #Banner /etc/issue.net # Allow client to pass locale environment variables AcceptEnv LANG LC_* Subsystem sftp /usr/lib/openssh/sftp-server # Set this to 'yes' to enable PAM authentication, account processing, # and session processing. If this is enabled, PAM authentication will # be allowed through the ChallengeResponseAuthentication and # PasswordAuthentication. Depending on your PAM configuration, # PAM authentication via ChallengeResponseAuthentication may bypass # the setting of "PermitRootLogin without-password". # If you just want the PAM account and session checks to run without # PAM authentication, then enable this but set PasswordAuthentication # and ChallengeResponseAuthentication to 'no'. UsePAM yes |
El resto del archivo sshd_config:
4. DIRECTIVAS SSH INTERESANTES Y ÚTILES
4.1 Directiva AuthorizedKeysFile (directorio donde configurar los hosts y claves autorizadas)
El directorio donde se encuentran los hosts conocidos y las claves almacenadas, es:
/home/usuario/.ssh/
Podemos verlo en el archivo de configuración del server SSH: /home/usuario/.ssh/
En el archivo de configuración aparecerá por defecto: %h/.ssh/authorized_keys
que significa la home del usuario/.ssh/authorized_keys
Y concretamente en el archivo authorized_keys se encuentran las claves públicas y el hostname de cada uno de los hosts que tienen permitido el acceso al Server OpenSSH:
4.2 Generación de claves SSH
Lo podemos ver en el post sobre clave pública/privada de SSH
4.3 Directivas SSH para denegar acceso usuarios/grupos
Ya hablamos de estas directivas en el post: Permisos usuarios y grupos SSH Server
DenyUsers: Permite especificar usuarios a los que deseamos denegar el acceso SSH.
DenyGroups : Permite especificar grupos de usuarios a los que deseamos denegar el acceso SSH.
4.4 Opciones Conexión SSH
ssh -p puerto usuario@IP permite especificar el puerto al que nos conectaremos por SSH |
4.5 Comandos para gestionar el servicio de servidor SSH
- Iniciar el servidor SSH
sudo /etc/init.d/ssh start |
- Apagar el servidor SSH
sudo /etc/init.d/ssh stop |
- Reiniciar el servidor SSH
sudo /etc/init.d/ssh restart |
- Comprobar el estado del servicio SSH:
systemctl status service ssh |
Este comando nos mostrará si el servicio se encuentra funcionando, si hay errores en alguno de los archivos de configuración, y en qué puertos e interfaces está funcionando el servicio de OpenSSH.
5. Aspectos de seguridad que podemos configurar para crear un servidor SSH más seguro
- Cambiar el puerto de funcionamiento por defecto de SSH (22) a otro de nuestra elección, que no esté ocupado por ningún servicio: Port 21335
- Deshabilitar el acceso al usuario Root: (PermitRootLogin no)
- Limitar el número de intentos permitidos para introducir el password correcto, antes de desconectar al usuario: MaxAuthTries
- Establecer un tiempo menor para que el usuario pueda autenticarse en el servidor: LoginGraceTime
- Permitir/Denegar a ciertos usuarios: AllowUsers/DenyUsers
- Permitir/Denegar a ciertos grupos de usuarios: AllowGroups/DenyUsers
Esto es lo básico que necesitamos para configurar de forma rápida un servidor OpenSSH, sin muchos quebraderos de cabeza, y con algo de seguridad.
Si queremos hilar más fino, podemos revisar otros aspectos de seguridad como por ejemplo los relativos a permisos de usuarios y grupos SSH, y revisar algunos posibles errores en un Server SSH puede mostrarnos de forma más o menos habitual.