Saltar al contenido

CyberSkills – Tutoriales de Seguridad y Servidores

Hardening de SSH en Ubuntu Server 24.04.3 LTS

Hardening de SSH en Ubuntu Server 24.04.3 LTS

La seguridad de un servidor es primordial, y el servicio SSH (Secure Shell) es uno de los puntos de entrada más críticos. Por defecto, SSH suele configurarse con opciones que, si bien son convenientes, no son las más seguras para un entorno de producción. En esta guía, te mostraremos cómo realizar un hardening de SSH en Ubuntu Server 24.04.3 LTS, cambiando el puerto por defecto, deshabilitando el acceso root directo y configurando la autenticación por contraseña de forma segura.

1. Acceso Inicial y Actualización del Sistema

Antes de realizar cualquier cambio, es fundamental asegurarse de que el sistema esté actualizado. Accede a tu servidor vía SSH con tus credenciales actuales (normalmente el usuario que creaste durante la instalación y el puerto 22 por defecto).
ssh tu_usuario@tu_ip_servidor
Una vez dentro, actualiza los paquetes del sistema:
sudo apt update && sudo apt upgrade -y

2. Modificación del Puerto SSH

El puerto 22 es el puerto por defecto para SSH y es un objetivo común para ataques automatizados. Cambiarlo a un puerto no estándar (como el 1022) reduce la superficie de ataque. Edita el archivo de configuración de SSH:
sudo nano /etc/ssh/sshd_config
Busca la línea que contiene #Port 22 y modifícala (descomentándola y cambiando el número) o añade una nueva línea si no existe:
Port 1022
Guarda los cambios (Ctrl+O, Enter, Ctrl+X).

3. Deshabilitar Acceso Root Directo

Permitir el acceso directo al usuario root a través de SSH es una práctica de seguridad deficiente. Es mejor acceder con un usuario normal y luego usar sudo para tareas administrativas. En el mismo archivo /etc/ssh/sshd_config, busca la línea PermitRootLogin y asegúrate de que esté configurada como:
PermitRootLogin no
Si está comentada, descoméntala. Si no existe, añádela.

4. Configuración de Autenticación por Contraseña

Aunque la autenticación por clave SSH es más segura, si necesitas usar contraseñas, es crucial configurarla correctamente. Asegúrate de que las siguientes líneas estén presentes y configuradas así en /etc/ssh/sshd_config:
PasswordAuthentication yes
ChallengeResponseAuthentication no
UsePAM yes
Asegúrate de que PermitEmptyPasswords no también esté configurado para evitar contraseñas vacías.

5. Restricción de Acceso a Usuarios Específicos

Para aumentar la seguridad, puedes especificar qué usuarios tienen permitido acceder vía SSH. Esto es especialmente útil en entornos con múltiples usuarios. En /etc/ssh/sshd_config, añade la siguiente línea al final del archivo, reemplazando tu_usuario con el nombre de usuario que debe tener acceso:
AllowUsers tu_usuario
Si tienes varios usuarios, sepáralos por espacios: AllowUsers usuario1 usuario2.

6. Reinicio del Servicio SSH

Después de realizar todos los cambios en sshd_config, es necesario reiniciar el servicio SSH para que los cambios surtan efecto. ¡Importante! No cierres tu sesión SSH actual hasta que hayas verificado que puedes acceder con la nueva configuración.
sudo systemctl restart sshd
Ahora, abre una nueva terminal y prueba a conectarte con el nuevo puerto y tu usuario:
ssh tu_usuario@tu_ip_servidor -p 1022
Si la conexión es exitosa, puedes cerrar la sesión SSH anterior.

7. Configuración del Firewall (nftables)

Es fundamental configurar el firewall para permitir el nuevo puerto SSH y bloquear el puerto 22. Utilizaremos nftables, que es el sistema de firewall recomendado en Ubuntu Server 24.04.3 LTS. Primero, asegúrate de que nftables esté instalado:
sudo apt install nftables -y
Crea un archivo de configuración para nftables (si no existe o quieres una configuración limpia):
sudo nano /etc/nftables.conf
Aquí tienes una configuración básica que permite SSH en el puerto 1022, tráfico de salida y bloquea el resto. Asegúrate de adaptar esta configuración a tus necesidades específicas.
#!/usr/sbin/nft -f

flush ruleset

table ip filter {
    chain input {
        type filter hook input priority 0; policy drop;
        # allow established and related connections
        ct state {established, related} accept

        # allow loopback
        iif "lo" accept

        # allow SSH on port 1022
        tcp dport 1022 accept

        # drop invalid packets
        ct state invalid drop

        # log and drop everything else
        # log prefix "nftables-input-drop: " level info
        drop
    }

    chain forward {
        type filter hook forward priority 0; policy drop;
    }

    chain output {
        type filter hook output priority 0; policy accept;
    }
}
Guarda el archivo y luego carga las reglas:
sudo nft -f /etc/nftables.conf
Habilita el servicio nftables para que las reglas persistan después de un reinicio:
sudo systemctl enable nftables
sudo systemctl start nftables
Verifica el estado del firewall:
sudo nft list ruleset

8. Consideraciones Adicionales de Seguridad

  • Autenticación por Clave SSH: Para una seguridad aún mayor, considera deshabilitar la autenticación por contraseña y usar solo claves SSH.
  • Fail2Ban: Instala y configura Fail2Ban para proteger tu servidor de ataques de fuerza bruta, bloqueando IPs que intenten acceder repetidamente.
  • Auditoría de Logs: Revisa regularmente los logs de SSH (/var/log/auth.log) para detectar actividades sospechosas.
  • Actualizaciones Constantes: Mantén tu sistema operativo y todos los paquetes siempre actualizados.
Con estos pasos, habrás fortalecido significativamente la seguridad de tu servicio SSH en Ubuntu Server 24.04.3 LTS.

Únete a la conversación

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *