SSH en Centos 8. Instalación

¿Qué es SSH?

Antes de realizar la instalación de un servidor SSH en Centos 8 tendremos 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).

SSH en Centos 8 : Instalación

¿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 la misma 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 teclearemos lo siguiente:

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 el SSH utiliza por defecto. Para ello, tenemos que entrar en el directorio /etc/ssh y editar el fichero sshd_config

Editaremos este fichero con nuestro editor preferido (yo utilizaré vim, pero se puede usar otro más sencillo, por ejemplo 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 nos 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 tendremos que teclear lo siguiente (antes de hacer nada).

semanage port -a -t ssh_port_t -p tcp 3456

Si recibimos un mensaje de error, tendremos que instalar el software semanage de la siguiente forma:

dnf install policycoreutils-python-utils

Ahora comprobaremos 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 [email protected] -p 1972

Opciones varias

Ahora vamos a editar el fichero /etc/ssh/sshd_config y cambiar los siguientes parámetros:

  • Especificamos el tiempo que permitiremos para iniciar la sesión (en este caso un minuto).
    LoginGraceTime 1m
  • Controlaremos que usuarios se pueden conectar y cuales 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, al mismo, 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

Añadir un comentario

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Privacidad y cookies

Utilizamos cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mismas Enlace a polí­tica de cookies y política de privacidad y aviso legal.

Pulse el botón ACEPTAR para confirmar que ha leído y aceptado la información presentada


ACEPTAR
Aviso de cookies