Cómo asegurar el acceso SSH de un VPS LWS: solo claves y fail2ban

Procédure

Para asegurar el acceso SSH de su VPS LWS, se recomienda desactivar por completo la autenticación por contraseña en favor de una clave SSH y, a continuación, instalar fail2ban. Esta configuración protege su servidor contra ataques de fuerza bruta y elimina los riesgos relacionados con contraseñas interceptadas o adivinadas. En este tutorial, copiará su clave SSH pública, ajustará la configuración SSH para neutralizar los ajustes predeterminados de cloud-init y luego instalará y verificará la protección activa de fail2ban.

Instalar su clave SSH

  1. Conéctese una primera vez por SSH y luego desconéctese

    Abra una terminal en su ordenador y conéctese al servidor con la contraseña root recibida en su correo de entrega. Durante la primera conexión, acepte la huella de la clave del servidor escribiendo yes. Una vez conectado, salga inmediatamente de la sesión ejecutando exit para volver a su máquina local.

    ⌨ En su ordenador
    ssh root@203.0.113.10
    exit
  2. Copie su clave SSH pública en el VPS

    Desde su ordenador, utilice el comando ssh-copy-id para copiar su clave pública al servidor. Introduzca su contraseña root una última vez cuando la terminal se lo pida. Si ya había añadido su clave SSH durante el pedido o la reinstalación desde el panel KVM, este paso no es necesario.

    ⌨ En su ordenador
    ssh-copy-id root@203.0.113.10
    Resultado esperado
    Number of key(s) added: 1
    
    Now try logging into the machine, with: "ssh 'root@203.0.113.10'"
    and check to make sure that only the key(s) you wanted were added.
  3. Verifique la conexión mediante clave SSH

    Vuelva a conectarse a su VPS por SSH desde su ordenador. La conexión debe establecerse instantáneamente sin solicitar la contraseña root del servidor, confirmando que su clave pública se ha instalado correctamente.

    ⌨ En su ordenador
    ssh root@203.0.113.10

Desactivar la conexión por contraseña

  1. Localice la trampa del archivo cloud-init

    Enumere los archivos presentes en el directorio /etc/ssh/sshd_config.d/ y muestre el contenido de 50-cloud-init.conf. Este archivo activa la autenticación por contraseña. Como el servidor SSH conserva la primera directiva encontrada al leer los archivos por orden alfabético, su propia configuración debe leerse obligatoriamente antes que esta.

    ⌨ En el servidor
    ls /etc/ssh/sshd_config.d/
    cat /etc/ssh/sshd_config.d/50-cloud-init.conf
    Resultado esperado
    PasswordAuthentication yes
  2. Cree el archivo de configuración SSH prioritario

    Abra el editor nano para crear el archivo 00-cles-uniquement.conf. El prefijo 00 garantiza que este archivo se procesará antes que 50-cloud-init.conf. Escriba en él las directivas que desactivan las contraseñas y limitan el acceso root a las claves, y luego guarde con Ctrl+X, confirme con O (o Y según el idioma) y pulse Entrar.

    ⌨ En el servidor
    nano /etc/ssh/sshd_config.d/00-cles-uniquement.conf
    📄 /etc/ssh/sshd_config.d/00-cles-uniquement.conf
    # Conexión SSH solo mediante clave
    PasswordAuthentication no
    KbdInteractiveAuthentication no
    PermitRootLogin prohibit-password
  3. Pruebe la sintaxis y aplique la configuración

    Ejecute sshd -t para comprobar que no hay errores de sintaxis y luego verifique los valores activos con sshd -T. Tenga en cuenta que permitrootlogin muestra without-password, lo que corresponde a prohibit-password. Si todo es correcto, recargue el servicio SSH para aplicar los nuevos parámetros sin interrumpir su sesión.

    ⌨ En el servidor
    sshd -t
    sshd -T | grep -E "^(passwordauthentication|kbdinteractiveauthentication|permitrootlogin)"
    systemctl reload ssh
    Resultado esperado
    permitrootlogin without-password
    passwordauthentication no
    kbdinteractiveauthentication no

Probar el acceso SSH

  1. Valide el rechazo de la contraseña y el acceso mediante clave

    Sin cerrar su sesión activa, abra una segunda ventana de terminal en su ordenador. Intente primero una conexión forzando el rechazo de las claves con la opción PubkeyAuthentication=no: el servidor debe rechazar el acceso. Después, inicie una conexión normal: la autenticación mediante clave se realiza con éxito.

    ⌨ En su ordenador
    ssh -o PubkeyAuthentication=no root@203.0.113.10
    ssh root@203.0.113.10
    Resultado esperado
    root@203.0.113.10: Permission denied (publickey).

Instalar y verificar fail2ban

  1. Instale fail2ban

    Desde su sesión conectada al VPS, actualice la lista de repositorios Debian con apt update y luego instale el paquete fail2ban. En las versiones recientes de Debian, fail2ban activa automáticamente la protección del servicio SSH al finalizar la instalación.

    ⌨ En el servidor
    apt update
    apt install -y fail2ban
  2. Compruebe el estado de fail2ban y cierre la sesión

    Asegúrese de que el servicio fail2ban está activo con systemctl y luego consulte la prisión sshd para confirmar que el filtrado funciona y supervisa las conexiones. Después puede desconectarse con total tranquilidad.

    ⌨ En el servidor
    systemctl is-active fail2ban
    fail2ban-client status sshd
    exit
    Resultado esperado
    active
    Status for the jail: sshd
    |- Filter
    |  |- Currently failed: 1
    |  |- Total failed:     3
    |  `- Journal matches:  _SYSTEMD_UNIT=ssh.service + _COMM=sshd
    `- Actions
       |- Currently banned: 0
       |- Total banned:     0
       `- Banned IP list:

Lexicón

SSH (Secure Shell)
Protocolo de comunicación seguro que permite conectarse y administrar un servidor remoto desde la línea de comandos.
Clave pública
Archivo de clave depositado en el servidor remoto para verificar la identidad del usuario sin transmitir una contraseña.
Clave privada
Archivo de clave estrictamente confidencial conservado en su ordenador local y que sirve para probar su identidad ante el servidor.
Cloud-init
Herramienta de automatización utilizada durante el despliegue inicial de las máquinas virtuales para inicializar su red y sus accesos.
fail2ban
Software de seguridad que supervisa los registros del sistema y bloquea temporalmente a nivel del firewall las direcciones IP sospechosas.
Jail (prisión)
En fail2ban, conjunto que asocia un filtro de detección de intentos abusivos y una regla de bloqueo para un servicio determinado.

Preguntas frecuentes

¿Por qué llamar al archivo 00-cles-uniquement.conf en lugar de modificar sshd_config?

El demonio OpenSSH lee los archivos de la carpeta sshd_config.d por orden alfabético y aplica el primer valor que encuentra. Al usar el prefijo 00, sus directivas se procesan antes que las de 50-cloud-init.conf, lo que garantiza que se aplique la prohibición de contraseñas.

¿Qué hacer si me quedo bloqueado fuera de mi VPS?

Si pierde su acceso SSH, conéctese a su área de cliente LWS y abra la consola KVM / VNC disponible para su VPS. Esta consola simula una pantalla y un teclado físicos conectados al servidor y permite corregir sus archivos de configuración sin pasar por SSH.

¿Cuál es la diferencia entre prohibit-password y without-password?

Se trata exactamente del mismo parámetro en OpenSSH. prohibit-password es la sintaxis moderna recomendada, pero el comando sshd -T muestra su equivalente histórico without-password en la lista de directivas activas.

¿Hay que configurar fail2ban después de instalarlo en Debian?

En distribuciones recientes como Debian 13, fail2ban configura e inicia automáticamente la prisión para el servicio SSH en cuanto se instala el paquete. Puede personalizar posteriormente los tiempos de bloqueo en un archivo jail.local si lo desea.

help.lws.net/a/7926
¿Le ha resultado útil este artículo?

Sí

No

Leído 1 veces

¡Gracias! No dude en hacer preguntas sobre nuestra documentación si desea más información y ayudarnos a mejorarla.

Artículos similares

¿Tiene una pregunta sobre este artículo?

Hágala al equipo de LWS y a la comunidad. La respuesta se publica tras la moderación.

Formule una pregunta al equipo de LWS y a su comunidad

RGPD: Responsable: LWS-Ligne Web Services. Finalidad: moderación y publicación pública de su pregunta, posible aviso de una respuesta. Base jurídica: consentimiento (art. 6.1.a RGPD). Conservación de los correos: 90 días tras el aviso, 12 meses como máximo sin respuesta. Para ejercer sus derechos, consulte la sección RGPD de nuestras condiciones generales.