0%
Hardening de seguridad de un servidor Linux en 10 pasos esenciales

Hardening de seguridad de un servidor Linux en 10 pasos esenciales

Guía práctica para proteger eficazmente sus servidores Linux frente a las amenazas actuales, con comandos concretos y explicaciones detalladas

I

InSkillCoach

· min

Hardening de seguridad de un servidor Linux en 10 pasos esenciales

Asegurar un servidor Linux es una competencia fundamental para cualquier administrador de sistemas. Con el aumento de los ciberataques y de los intentos de intrusión, es crucial implantar una estrategia de endurecimiento (hardening) eficaz desde el despliegue inicial del servidor.

Esta guía detalla 10 pasos esenciales para reforzar de forma significativa la seguridad de sus servidores Linux, ya estén alojados en su propia infraestructura o en la nube.

1. Mantener el sistema actualizado

La base de toda estrategia de seguridad son las actualizaciones periódicas. Los parches de seguridad se publican con frecuencia para corregir las vulnerabilidades descubiertas.

Para Debian/Ubuntu:

# Mise à jour de la liste des paquets
sudo apt update

# Installation des mises à jour
sudo apt upgrade -y

# Mise à jour du noyau et des paquets critiques
sudo apt dist-upgrade -y

Para RHEL/CentOS/Fedora:

# Mise à jour de tous les paquets
sudo dnf update -y
# ou avec yum sur les systèmes plus anciens
sudo yum update -y

Consejo profesional: configure actualizaciones automáticas de seguridad con unattended-upgrades en Debian/Ubuntu o con dnf-automatic en Fedora/RHEL.

# Sur Debian/Ubuntu
sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades

# Sur RHEL/CentOS 8/Fedora
sudo dnf install dnf-automatic
sudo systemctl enable --now dnf-automatic.timer

2. Asegurar SSH

SSH suele ser la principal puerta de entrada a su servidor, lo que lo convierte en un objetivo prioritario para los atacantes.

Cambiar el puerto predeterminado

Edite el archivo /etc/ssh/sshd_config:

# Remplacez 22 par un port non standard (entre 1024 et 65535)
Port 2222

Desactivar la autenticación por contraseña

PasswordAuthentication no
ChallengeResponseAuthentication no

Configurar la autenticación por clave

En su máquina local:

# Créer une paire de clés si vous n'en avez pas
ssh-keygen -t ed25519 -a 100

# Copier la clé publique sur le serveur
ssh-copy-id -i ~/.ssh/id_ed25519.pub utilisateur@serveur

Limitar el acceso de root y los usuarios autorizados

PermitRootLogin no
AllowUsers utilisateur1 utilisateur2

Aplicar los cambios

sudo systemctl restart sshd

3. Configurar un cortafuegos

Un cortafuegos correctamente configurado es esencial para controlar el tráfico entrante y saliente.

UFW (Uncomplicated Firewall) para Debian/Ubuntu

# Installation
sudo apt install ufw

# Configuration de base
sudo ufw default deny incoming
sudo ufw default allow outgoing

# Autoriser SSH (sur le port modifié si nécessaire)
sudo ufw allow 2222/tcp

# Autoriser d'autres services selon les besoins
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# Activer le pare-feu
sudo ufw enable

Firewalld para RHEL/CentOS/Fedora

# Installation si nécessaire
sudo dnf install firewalld

# Activation du service
sudo systemctl enable --now firewalld

# Configuration de base
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https

# Si vous avez modifié le port SSH
sudo firewall-cmd --permanent --remove-service=ssh
sudo firewall-cmd --permanent --add-port=2222/tcp

# Appliquer les changements
sudo firewall-cmd --reload

4. Instalar y configurar Fail2ban

Fail2ban supervisa los registros de su sistema y bloquea temporalmente las direcciones IP que muestran signos de actividad maliciosa.

# Installation
sudo apt install fail2ban # Debian/Ubuntu
sudo dnf install fail2ban # RHEL/CentOS/Fedora

# Création d'un fichier de configuration local
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Edite /etc/fail2ban/jail.local para personalizar la configuración:

[DEFAULT]
# Bannir une IP pendant 1 heure (3600 secondes)
bantime = 3600
# Bannir après 5 tentatives échouées
maxretry = 5
# Période d'observation des tentatives (en secondes)
findtime = 600

[sshd]
enabled = true
port = 2222
logpath = %(sshd_log)s
maxretry = 3

Active e inicie el servicio:

sudo systemctl enable --now fail2ban

5. Particionado seguro y opciones de montaje

Si configura un servidor nuevo, considere un esquema de particionado que incluya particiones separadas para /home, /tmp, /var, /var/log y /var/log/audit, para evitar que el llenado del espacio afecte a todo el sistema.

En los sistemas existentes, asegure las opciones de montaje en /etc/fstab:

# Montage de /tmp avec noexec, nosuid et nodev
/dev/sdXY  /tmp  ext4  defaults,nosuid,nodev,noexec  0 0

# Montage de /home avec nosuid et nodev
/dev/sdXZ  /home  ext4  defaults,nosuid,nodev  0 0

Si no dispone de particiones separadas, puede utilizar sistemas de archivos temporales:

# Ajouter au /etc/fstab
tmpfs  /tmp  tmpfs  defaults,nosuid,nodev,noexec,size=1G  0 0

Aplique los cambios:

sudo mount -o remount /tmp

6. Asegurar el kernel con sysctl

Modifique /etc/sysctl.conf para reforzar los parámetros de seguridad del kernel:

# Désactiver le transfert IP si ce n'est pas un routeur
net.ipv4.ip_forward = 0

# Protection contre les attaques de type Spoofing
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

# Ignorer les réponses ICMP broadcast
net.ipv4.icmp_echo_ignore_broadcasts = 1

# Protection contre les attaques SYN flood
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2

# Protection contre les attaques de type martian packets
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1

# Désactiver les pings (optionnel)
net.ipv4.icmp_echo_ignore_all = 1

# Désactiver le protocole IPv6 si non utilisé
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

Aplique los cambios:

sudo sysctl -p

7. Auditar y limitar los paquetes instalados

Minimice la superficie de ataque instalando únicamente los paquetes necesarios.

Listar los paquetes instalados

# Debian/Ubuntu
dpkg -l

# RHEL/CentOS/Fedora
rpm -qa

Eliminar los paquetes innecesarios

# Debian/Ubuntu
sudo apt remove paquet-inutile
sudo apt autoremove

# RHEL/CentOS/Fedora
sudo dnf remove paquet-inutile

Comprobar los servicios en ejecución

sudo systemctl list-units --type=service --state=active

Desactivar los servicios no esenciales

sudo systemctl disable service-non-essentiel
sudo systemctl stop service-non-essentiel

8. Configurar un sistema de detección de intrusiones

AIDE (Advanced Intrusion Detection Environment) es una herramienta de verificación de integridad que detecta las modificaciones no autorizadas de los archivos del sistema.

# Installation
sudo apt install aide # Debian/Ubuntu
sudo dnf install aide # RHEL/CentOS/Fedora

# Initialiser la base de données
sudo aideinit
# ou
sudo aide --init

# La commande crée une base de données dans /var/lib/aide/aide.db.new
# Sur certains systèmes, il faut la renommer
sudo mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db

# Vérifier régulièrement l'intégrité
sudo aide --check

Configure una tarea cron para realizar comprobaciones periódicas:

echo "0 4 * * * root /usr/sbin/aide --check | mail -s 'AIDE Integrity Check' admin@example.com" | sudo tee /etc/cron.d/aide-check

9. Reforzar la política de contraseñas

Una política de contraseñas robusta es esencial, incluso si utiliza la autenticación por clave SSH.

Instale libpam-pwquality en Debian/Ubuntu o pam_pwquality en RHEL/CentOS/Fedora.

sudo apt install libpam-pwquality # Debian/Ubuntu
sudo dnf install pam_pwquality # RHEL/CentOS/Fedora

Edite el archivo /etc/pam.d/common-password (Debian/Ubuntu) o /etc/security/pwquality.conf (RHEL/CentOS/Fedora):

# Exemple pour Debian/Ubuntu dans /etc/pam.d/common-password
password requisite pam_pwquality.so retry=3 minlen=12 difok=3 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1 reject_username enforce_for_root

# Exemple pour RHEL/CentOS/Fedora dans /etc/security/pwquality.conf
minlen = 12
dcredit = -1
ucredit = -1
lcredit = -1
ocredit = -1
difok = 3

Para configurar la caducidad de las contraseñas:

sudo chage -M 90 -m 7 -W 14 utilisateur

Este comando:

  • Fuerza el cambio de contraseña cada 90 días (-M 90)
  • Impone un mínimo de 7 días entre cambios (-m 7)
  • Avisa al usuario 14 días antes de la caducidad (-W 14)

10. Supervisar y auditar el sistema

La supervisión de los logs es crucial para detectar intentos de intrusión.

Configurar el registro centralizado

Para una infraestructura más amplia, considere implantar un servidor de registro centralizado.

Configurar auditd para un registro avanzado

# Installation
sudo apt install auditd audispd-plugins # Debian/Ubuntu
sudo dnf install audit # RHEL/CentOS/Fedora

# Activer au démarrage
sudo systemctl enable --now auditd

Edite /etc/audit/rules.d/audit.rules para añadir reglas personalizadas:

# Surveiller les modifications des fichiers de configuration
-w /etc/passwd -p wa -k identity
-w /etc/group -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/sudoers -p wa -k identity
-w /etc/ssh/sshd_config -p wa -k sshd_config

# Surveiller les échecs d'authentification
-a always,exit -F arch=b64 -S open -F a1&01003 -F exit=-EACCES -F auid>=1000 -F auid!=4294967295 -k access
-a always,exit -F arch=b32 -S open -F a1&01003 -F exit=-EACCES -F auid>=1000 -F auid!=4294967295 -k access
-a always,exit -F arch=b64 -S open -F a1&01003 -F exit=-EPERM -F auid>=1000 -F auid!=4294967295 -k access
-a always,exit -F arch=b32 -S open -F a1&01003 -F exit=-EPERM -F auid>=1000 -F auid!=4294967295 -k access

Recargue las reglas:

sudo auditctl -R /etc/audit/rules.d/audit.rules

Supervisar las conexiones con LogWatch

# Installation
sudo apt install logwatch # Debian/Ubuntu
sudo dnf install logwatch # RHEL/CentOS/Fedora

# Exécution manuelle
sudo logwatch --output mail --mailto admin@example.com --detail high

Configure una tarea cron para recibir informes diarios editando /etc/cron.daily/00logwatch.

Conclusión

Asegurar un servidor Linux es un proceso continuo que requiere vigilancia y actualizaciones periódicas. Estos 10 pasos le permitirán establecer una base sólida para proteger sus sistemas frente a la mayoría de las amenazas habituales.

No olvide que esta lista no es exhaustiva. Según su entorno y sus necesidades específicas, es posible que necesite medidas adicionales como:

  • La implantación de soluciones de copia de seguridad automatizadas
  • La implementación de una solución de control de acceso basada en roles (RBAC)
  • El uso de un sistema de prevención de intrusiones (IPS)
  • La configuración de una VPN para el acceso remoto
  • La implementación de SELinux o AppArmor para el control de acceso obligatorio

La seguridad es un equilibrio entre funcionalidad y protección. Adapte siempre estas recomendaciones a sus necesidades específicas y no dude en consultar la documentación oficial de su distribución Linux para obtener consejos adaptados a su entorno.

¿Cuáles son las medidas de seguridad que le han resultado más eficaces en sus servidores Linux? ¡Comparta su experiencia en los comentarios!

InSkillCoach

Acerca de InSkillCoach

Experto en formación y tecnologías

Coach especializado en tecnologías avanzadas e IA, impulsado por GNeurone Inc.

Certificaciones:

  • AWS Certified Solutions Architect – Professional
  • Certificaciones de Google Cloud
  • Microsoft Certified: DevOps Engineer Expert
  • Certified Kubernetes Administrator (CKA)
  • CompTIA Security+
1.6k
99

Comentarios

Los comentarios funcionan con GitHub Discussions

Inicia sesión con GitHub para participar en la discusión

¡Enlace copiado!