SSH en CentOS 8. Instalación
¿Qué es SSH?
Antes de realizar la instalación de un servidor SSH en CentOS 8 hemos que tener claro que SSH no es más que un programa informático que nos permite acceder de forma remota y segura a la consola de comandos de cualquier ordenador Linux / UNIX (esto incluye a MacOS, FreeBSD, Net-BSD, OpenBSD, HP-UX, AIX, Solaris y desde hace un tiempo también a Windows).
¿Quien creó SSH?
Secure Shell (SSH) fue creado en el año 1995 por Tatu Ylönen en la Universidad Tecnológica de Helsinki. No obstante, debido a que las restricciones respecto a su copyright fueron cada vez más y más duras, el equipo de desarrollo del sistema operativo OpenBSD decidió crear una copia gratuita y mejorada del mismo. Esta es la versión que actualmente se utiliza en prácticamente todos los ordenadores del mundo incluido el servidor SSH en CentOS 8.
¿Porqué SSH es seguro?
SSH es muy seguro debido a que toda la información que circula entre el ordenador remoto y el nuestro se encripta. De este modo nadie puede ver lo que estamos haciendo y/o trasmitiendo. El servidor SSH en Centos 8 utiliza la última versión de SSH, la versión 2.
¿SSH solo permite acceder a una consola remota?
No, SSH es una herramienta extraordinariamente flexible y amplia que nos permite muchas cosas más, por ejemplo copiar ficheros de un lado a otro de forma segura, crear túneles de datos, redirigir puertos o iniciar sesiones gráficas en escritorios remotos.
Es decir, mediante SSH en CentOS 8 no solo podemos iniciar una sesión a la consola sino también a un escritorio remoto.
Instalación de un servidor SSH en Centos 8
Cabe señalar que esta guía se ha realizado para la instalación de un servidor SSH en CentOS 8 y derivados pero también valdría para un sistema Linux Redhat 7 / CentOS 7 y derivados: Oracle Linux, Fedora, Scientific Linux, etc.
Para realizar la instalación de un servidor SSH en CentOS 8 lo primero que tendremos que hacer es entrar en la consola de comandos del servidor con permiso de administrador root y teclear lo siguiente:
dnf install openssh-server
Para activarlo e inicializarlo:
systemctl start sshd
systemctl enable sshd
Ahora comprobaremos si el servicio (también denominado demonio) se está ejecutando:
systemctl status sshd
Esto nos tiene que devolver un montón de datos como estos:
sshd.service - OpenSSH server daemon Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2020-03-27 22:55:15 CET;....
Pulsaremos la tecla «q» para salir.
Apertura de puertos en el firewall
Ahora le indicaremos al firewall que abra el puerto SSH (22) y que deje ejecutar el servicio:
firewall-cmd --zone=public --permanent --add-service=ssh
firewall-cmd --reload
systemctl reload sshd
Securización de SSH en Centos 8
La instalación por defecto de SSH suele ser segura, no obstante teniendo en cuenta la cantidad de peligros que existen hoy en día en Internet, es obligatorio reforzar su seguridad.
Cambio de puerto
Lo primero que haremos será cambiar el puerto que SSH utiliza por defecto. Para ello, entraremos en el directorio /etc/ssh para editar el fichero sshd_config
Editaremos este fichero con nuestro editor preferido (yo utilizaré vim, pero se puede usar otro más sencillo como nano). Lo importante es cambiar la línea que pone #Port 22 y dejarla como (por ejemplo) Port 1972
Una vez hecho esto y antes de reiniciar el servidor SSH en Centos 8, tendremos que abrir en el firewall los puertos correspondientes. Si no hacemos esto no podremos volver a conectar a la máquina de forma remota.
firewall-cmd --add-port=1972/tcp --permanent
firewall-cmd --reload
Es importante recalcar que si tenemos activado el sistema de control de seguridad y accesos SElinux debemos teclear lo siguiente antes de hacer nada:
semanage port -a -t ssh_port_t -p tcp 3456
Si recibimos un mensaje de error, instalaremos el software semanage de la siguiente forma:
dnf install policycoreutils-python-utils
Ahora comprobamos si los puertos SSH en Centos 8 están abiertos mediante el siguiente comando:
semanage port -a -t ssh_port_t -p tcp 1972
Este comado nos tendría que devolver un mensaje como este:
ssh_port_t tcp 22
Ahora reiniciaremos el servidor para comprobar que todo funciona correctamente y acto seguido intentaremos conectarnos al mismo mediante el puerto 1972. Por ejemplo:
ssh root@nombre-servidor -p 1972
Opciones varias
Ahora vamos a editar el fichero /etc/ssh/sshd_config y cambiar los siguientes parámetros:
- Especificar el tiempo que permitiremos para iniciar la sesión. En este caso 1 minuto:
LoginGraceTime 1m
- Controlaremos qué usuarios se pueden conectar y cuáles no:
AllowUsers root
Podríamos especificar un usuario y una IP de esta forma:AllowUsers [email protected]/24 [email protected]
- Ajustamos el número máximo de intentos para meter la clave:
MaxAuthTries 4
- Ignoramos completamente el sistema de autenticación Rhost:
IgnoreRhosts yes
- No permitiremos claves en blanco:
PermitEmptyPasswords no
- Eliminamos la posibilidad de reenvío de aplicaciones gráficas (túneles X11):
X11Forwarding no
- Desactivamos la posibilidad de permitir reenvío de puertos:
AllowTcpforwarding no
- Ponemos un tiempo de caducidad a nuestra sesión SSH, es decir, si el servidor detecta un periodo de inactividad superior al indicado automáticamente cerrará la sesión:
ClientAliveInterval 1800
- Con este otro comando, se establece un intervalo de tiempo de espera en segundos después del cual, si no se han recibido datos del cliente, se enviará un mensaje a través del canal cifrado para solicitar una respuesta del cliente. El valor predeterminado es 0, lo que indica que estos mensajes no se enviarán al cliente:
ClientAliveCountMax 0
Mensajes de aviso
Es conveniente, por temas legales, poner un aviso al usuario que se conecta indicando explícitamente que nuestro sistema SSH en CentOS 8 es un sistema privado y que el acceso al mismo queda completamente prohibido.
Para ello tendremos que hacer dos cosas:
A) Poner el contenido que deseemos dentro del archivo /etc/issue.net
B) Agregar la siguiente línea a nuestro archivo sshd_config: Banner /etc/issue.net
El contenido del fichero /etc/issue.net será el siguiente (habrá que adaptarlo al contenido en concreto):
Hacer clic para bajarse el fichero
También podemos mostrar un mensaje una vez que el usuario haya entrado en el sistema. Para poder hacer esto simplemente editaremos (o crearemos) el fichero /etc/motd y pondremos lo siguiente:
########################################################
# Welcome to NOMBRE -SISTEMA #
# All connections are monitored and recorded #
# Disconnect IMMEDIATELY if you are not an authorized user! #
########################################################
Finalización de la instalación de un servidor SSH en CentOS 8
Ya solo nos queda reiniciar el servidor SSH en CentOS 8 y comprobar que todo funciona correctamente:
systemctl restart ssh
Así que nuestro fichero sshd_config quedará más o menos así
Port 1972
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
SyslogFacility AUTHPRIV
LoginGraceTime 1m
PermitRootLogin yes
MaxAuthTries 4
AllowUsers root
IgnoreRhosts yes
PermitEmptyPasswords no
ClientAliveInterval 1800
ClientAliveCountMax 0
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication no
GSSAPICleanupCredentials no
UsePAM yes
AllowTcpForwarding no
X11Forwarding no
PrintMotd no
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 LANGUAGESSH en Centos 8 : InstalaciónAcceptEnv 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 LANGUAGE
Subsystem sftp /usr/libexec/openssh/sftp-server