Hardening

Linux Hardening

Sécurisation d'un serveur Linux — SSH, utilisateurs, permissions, audit et bonnes pratiques

linuxhardeningsshpermissionsauditsécurité

SSH Hardening

Éditer /etc/ssh/sshd_config :

Port 2222                          # Changer le port par défaut
PermitRootLogin no                 # Interdire le login root
PasswordAuthentication no          # Clés SSH uniquement
PubkeyAuthentication yes
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2
AllowUsers deploy admin            # Whitelist d'utilisateurs
Protocol 2
X11Forwarding no
$sshd -t
Tester la configuration SSH avant de recharger
$systemctl restart sshd

Clés SSH

$ssh-keygen -t ed25519 -C 'serveur-prod'
Générer une clé Ed25519
$ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server
Copier la clé publique sur le serveur

Gestion des utilisateurs

$useradd -m -s /bin/bash -G sudo deploy
Créer un utilisateur avec accès sudo
$passwd -l root
Verrouiller le compte root
$chage -l deploy
Voir la politique de mots de passe
$chage -M 90 -W 14 deploy
Expiration du mot de passe à 90 jours, avertissement 14 jours avant

Sudo sécurisé

Éditer avec visudo :

# Logs des commandes sudo
Defaults    logfile="/var/log/sudo.log"
Defaults    log_input, log_output

# Timeout sudo (redemander le mot de passe après 5 min)
Defaults    timestamp_timeout=5

# Pas de sudo sans mot de passe
deploy ALL=(ALL) ALL

Permissions de fichiers

chmod 600 ~/.ssh/authorized_keys    # Lecture/écriture owner uniquement
chmod 700 ~/.ssh                    # Accès owner uniquement
chmod 644 /etc/passwd               # Lecture pour tous, écriture owner
chmod 640 /etc/shadow               # Lecture owner+group, pas others
$find / -perm -4000 -type f 2>/dev/null
Trouver les fichiers SUID (potentiellement dangereux)
$find / -perm -2000 -type f 2>/dev/null
Trouver les fichiers SGID
$find / -perm -o+w -type f 2>/dev/null
Trouver les fichiers world-writable

Mises à jour automatiques

Ubuntu/Debian

$apt install unattended-upgrades
$dpkg-reconfigure -plow unattended-upgrades
Activer les mises à jour de sécurité automatiques

Configuration /etc/apt/apt.conf.d/50unattended-upgrades :

Unattended-Upgrade::Allowed-Origins {
    "${distro_id}:${distro_codename}-security";
};
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "03:00";

Firewall

$ufw default deny incoming
$ufw default allow outgoing
$ufw allow 2222/tcp comment 'SSH'
$ufw allow 443/tcp comment 'HTTPS'
$ufw enable

Audit et monitoring

$last -20
20 dernières connexions
$lastb -20
20 dernières tentatives échouées
$journalctl -u sshd --since '1 hour ago'
Logs SSH de la dernière heure

Auditd

$apt install auditd
# /etc/audit/rules.d/audit.rules
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/sudoers -p wa -k sudo_changes
-w /var/log/ -p wa -k log_changes
-a always,exit -F arch=b64 -S execve -k exec_commands
$ausearch -k identity --start today
Rechercher les modifications d'identité

Sécurisation du kernel

Éditer /etc/sysctl.d/99-security.conf :

# Désactiver le forwarding IP
net.ipv4.ip_forward = 0

# Ignorer les pings broadcast
net.ipv4.icmp_echo_ignore_broadcasts = 1

# Protection contre le SYN flood
net.ipv4.tcp_syncookies = 1

# Ignorer les redirections ICMP
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0

# Désactiver le source routing
net.ipv4.conf.all.accept_source_route = 0

# Logging des paquets martiens
net.ipv4.conf.all.log_martians = 1

# ASLR (Address Space Layout Randomization)
kernel.randomize_va_space = 2
$sysctl -p /etc/sysctl.d/99-security.conf
Appliquer les paramètres

Checklist de sécurisation

  • SSH : clés uniquement, port changé, root interdit
  • Firewall : default deny, ports minimaux ouverts
  • Mises à jour : automatiques pour les patches de sécurité
  • Utilisateurs : pas de comptes inutiles, sudo audité
  • Permissions : pas de SUID/SGID inutiles
  • Logs : centralisés, auditd activé
  • Kernel : sysctl durci
  • Services : désactiver ceux qui ne sont pas nécessaires