LIVE: New phishing campaigns targeting mobile users —View latest threats →

Back to Tutorials
Avanzado 18 min de lectura

Fortalecimiento de la seguridad en Linux: una lista de comprobación práctica

Un servidor Linux recién instalado no es seguro de forma predeterminada. Repase los pasos esenciales de fortalecimiento, desde la configuración de SSH hasta las reglas del cortafuegos.

5 de febrero de 2026

Por qué las instalaciones predeterminadas son inseguras

Un servidor Linux recién instalado viene con un conjunto de valores predeterminados optimizados para una amplia compatibilidad y facilidad de configuración, no para la seguridad. Puede haber servicios en ejecución que no necesita, SSH acepta la autenticación por contraseña (vulnerable a la fuerza bruta), el cortafuegos puede ser permisivo o estar desactivado, y las cuentas de usuario pueden tener privilegios excesivos. El fortalecimiento (hardening) es el proceso de reducir sistemáticamente la superficie de ataque para que se ajuste a sus requisitos reales.

Esta lista de comprobación está orientada a las familias Debian/Ubuntu y RHEL/CentOS, pero los principios se aplican de forma universal.

Fortalecimiento de cuentas de usuario y autenticación

Desactive el inicio de sesión como root y use sudo

Nunca inicie sesión directamente como root. Cree un usuario administrador dedicado y concédale privilegios de sudo:

adduser adminuser
usermod -aG sudo adminuser   # Debian/Ubuntu
usermod -aG wheel adminuser  # RHEL/CentOS

Desactive el inicio de sesión SSH como root en /etc/ssh/sshd_config: establezca PermitRootLogin no.

Aplique políticas de contraseñas robustas

Instale libpam-pwquality (Debian) o pam_pwquality (RHEL) y configure la longitud mínima, los requisitos de complejidad y el historial en /etc/security/pwquality.conf. Establezca la caducidad de contraseñas en /etc/login.defs: PASS_MAX_DAYS 90, PASS_MIN_DAYS 1, PASS_WARN_AGE 14.

Bloquee las cuentas que no se usan

passwd -l username   # Bloquear una cuenta
chage -E 0 username  # Caducar de inmediato

Audite las cuentas sin contraseña o con acceso a shell que no deberían tenerlo (grep -v 'nologin\|false' /etc/passwd).

Fortalecimiento de SSH

SSH es el vector de acceso remoto más común. Fortalezca /etc/ssh/sshd_config:

Port 2222                     # Un puerto no predeterminado reduce los escaneos automatizados
PermitRootLogin no
PasswordAuthentication no     # Solo autenticación basada en claves
PubkeyAuthentication yes
AllowUsers adminuser          # Lista blanca de usuarios específicos
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2
X11Forwarding no
AllowTcpForwarding no         # A menos que se necesite
Protocol 2

Tras cambiar el puerto, actualice las reglas de su cortafuegos antes de reiniciar sshd. Use sshd -t para comprobar la configuración en busca de errores de sintaxis.

Para la generación de claves, prefiera Ed25519 en lugar de RSA 2048:

ssh-keygen -t ed25519 -C "admin@server"

Configuración del cortafuegos

UFW (Ubuntu/Debian)

ufw default deny incoming
ufw default allow outgoing
ufw allow 2222/tcp   # Su puerto SSH
ufw allow 443/tcp    # HTTPS si hay servidor web
ufw enable
ufw status verbose

firewalld (RHEL/CentOS)

firewall-cmd --set-default-zone=drop
firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --reload

Use nftables directamente para lograr el máximo control y rendimiento en los kernels modernos. Aplique el principio de denegación predeterminada: permita solo lo que sea explícitamente necesario.

Actualizaciones del sistema y gestión de paquetes

Mantenga el sistema parcheado. Las vulnerabilidades sin parchear son el vector de acceso inicial más común después de los ataques a credenciales:

# Debian/Ubuntu — habilitar actualizaciones de seguridad desatendidas
apt install unattended-upgrades
dpkg-reconfigure unattended-upgrades

# RHEL/CentOS — habilitar actualizaciones automáticas
dnf install dnf-automatic
systemctl enable --now dnf-automatic.timer

Elimine los paquetes que no necesite: apt purge telnet rsh-server ypserv xinetd. Cada paquete instalado es una posible vulnerabilidad.

Desactivar servicios innecesarios

Enumere todos los servicios en ejecución y desactive los que no use:

systemctl list-units --type=service --state=running
systemctl disable --now servicename

Candidatos comunes para eliminar en un servidor web: avahi-daemon, cups, bluetooth, rpcbind. Cada puerto abierto es un posible punto de entrada.

Seguridad del sistema de archivos

  • Establezca el sticky bit en los directorios con escritura para todos: chmod +t /tmp
  • Use las opciones de montaje noexec, nosuid, nodev para /tmp, /var/tmp y los medios extraíbles en /etc/fstab
  • Audite los binarios SUID/SGID: find / -perm /6000 -type f 2>/dev/null — retire el bit de cualquiera que no lo requiera
  • Restrinja los permisos de /etc/cron*: chmod 700 /etc/cron.d /etc/cron.daily

Detección de intrusiones y supervisión

  • Fail2ban: bloquea automáticamente las IP con fallos de autenticación repetidos; esencial para cualquier SSH expuesto a internet
  • auditd: registro a nivel de kernel de llamadas al sistema, accesos a archivos y comandos de usuario; alimenta a los SIEM con datos de eventos detallados
  • AIDE (Advanced Intrusion Detection Environment): crea una base de datos criptográfica de hashes de archivos en un estado conocido como bueno y avisa de los cambios
  • Logwatch o GoAccess: resúmenes periódicos de registros enviados por correo

Centralice los registros en un servidor syslog remoto o en un SIEM de inmediato: si un atacante consigue acceso root, borrará los registros locales.

Fortalecimiento del kernel con sysctl

Añada a /etc/sysctl.d/99-hardening.conf:

net.ipv4.ip_forward = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.tcp_syncookies = 1
kernel.randomize_va_space = 2
kernel.dmesg_restrict = 1
fs.protected_hardlinks = 1
fs.protected_symlinks = 1

Aplique con sysctl --system. Estos ajustes desactivan el reenvío de IP, previenen los ataques de redirección ICMP, habilitan la protección con SYN cookies y refuerzan ASLR.

#Linux#server security#hardening#SSH#firewall