7. Hardening Linux : durcissement système

Le hardening (durcissement) consiste à réduire la surface d’attaque d’un système Linux en appliquant des configurations sécurisées, en supprimant les services inutiles et en renforçant les contrôles d’accès. C’est une pratique fondamentale pour tout administrateur système soucieux de la sécurité.

Sécuriser SSH

# Éditer la configuration SSH
sudo nano /etc/ssh/sshd_config

# Paramètres recommandés :
Port 2222                        # Changer le port par défaut (22)
PermitRootLogin no               # Interdire la connexion root directe
PasswordAuthentication no        # Forcer l'authentification par clé
MaxAuthTries 3                   # Limiter les tentatives
ClientAliveInterval 300          # Timeout de session
AllowUsers admin deployuser      # Whitelist d'utilisateurs

# Générer une paire de clés SSH
ssh-keygen -t ed25519 -C "[email protected]"
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@serveur

# Redémarrer SSH
sudo systemctl restart sshd

Gestion des utilisateurs et sudo

# Lister les utilisateurs avec shell
cat /etc/passwd | grep -v nologin | grep -v false

# Désactiver un compte
sudo usermod -L utilisateur_suspect
sudo usermod -s /sbin/nologin utilisateur_suspect

# Configuration sudo restrictive (/etc/sudoers)
sudo visudo

# Permettre uniquement des commandes spécifiques
deployuser ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx
deployuser ALL=(ALL) NOPASSWD: /usr/bin/journalctl

# Journaliser toutes les commandes sudo
Defaults logfile=/var/log/sudo.log
Defaults log_input, log_output

Pare-feu avec UFW et iptables

# UFW : configuration de base
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 2222/tcp    # SSH sur nouveau port
sudo ufw allow 80/tcp      # HTTP
sudo ufw allow 443/tcp     # HTTPS
sudo ufw deny 23/tcp       # Bloquer Telnet
sudo ufw enable
sudo ufw status numbered

# Limiter les connexions SSH (anti-brute force)
sudo ufw limit 2222/tcp

# iptables : règle de rate limiting
sudo iptables -A INPUT -p tcp --dport 2222 -m recent --set
sudo iptables -A INPUT -p tcp --dport 2222 -m recent --update --seconds 60 --hitcount 4 -j DROP

Fail2ban

sudo apt install fail2ban

# Configuration /etc/fail2ban/jail.local
[sshd]
enabled  = true
port     = 2222
maxretry = 3
bantime  = 3600
findtime = 600

[nginx-http-auth]
enabled  = true
maxretry = 5

sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd

AppArmor

# Vérifier le statut AppArmor
sudo apparmor_status

# Profils en mode enforcing vs complain
sudo aa-enforce /etc/apparmor.d/usr.sbin.nginx
sudo aa-complain /etc/apparmor.d/usr.sbin.nginx

# Créer un profil pour une application
sudo aa-genprof /usr/local/bin/monapp

Audit et journalisation

# Installer auditd
sudo apt install auditd

# Règles d'audit : surveiller /etc/passwd
sudo auditctl -w /etc/passwd -p rwxa -k passwd_changes

# Surveiller l'élévation de privilèges
sudo auditctl -a always,exit -F arch=b64 -S execve -F euid=0 -k root_commands

# Consulter les logs
sudo ausearch -k passwd_changes
sudo aureport --auth  # Résumé des authentifications

# Logrotate pour les logs système
sudo nano /etc/logrotate.d/syslog

Hardening du noyau avec sysctl

# /etc/sysctl.d/99-hardening.conf
# Désactiver le routage IP
net.ipv4.ip_forward = 0

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

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

# Désactiver l'IPv6 si non utilisé
net.ipv6.conf.all.disable_ipv6 = 1

# Protéger /proc
kernel.dmesg_restrict = 1
kernel.kptr_restrict = 2

sudo sysctl -p /etc/sysctl.d/99-hardening.conf
Points clés :

  • Changer le port SSH, désactiver root et forcer l’auth par clé réduit drastiquement le risque
  • Fail2ban bannit automatiquement les IPs après plusieurs échecs d’authentification
  • AppArmor limite les actions d’un processus selon un profil de sécurité
  • auditd journalise les événements sensibles du système pour la forensique
SEE ALL Add a note
YOU
Add your Comment