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