Checklist d'audit de sécurité
Cette checklist vous aide à vérifier et améliorer la sécurité de votre serveur Linux.
Audit rapide (5 minutes)
Système
- Système à jour :
sudo apt update && sudo apt upgrade - Pas de redémarrage en attente :
ls /var/run/reboot-required - Uptime raisonnable :
uptime
Accès SSH
- Port SSH modifié (pas 22)
- Authentification par mot de passe désactivée
- Root login interdit ou limité
- Fail2ban actif :
sudo fail2ban-client status
Firewall
- UFW actif :
sudo ufw status - Seuls les ports nécessaires sont ouverts
- Politique par défaut = deny incoming
Utilisateurs
- Pas de comptes inutiles :
cat /etc/passwd | grep -v nologin - Pas de mots de passe vides :
sudo awk -F: '($2 == "") {print}' /etc/shadow
Audit complet
1. Mises à jour système
# Vérifier les mises à jour disponibles
sudo apt update
apt list --upgradable
# Vérifier les mises à jour de sécurité automatiques
cat /etc/apt/apt.conf.d/50unattended-upgrades
Actions recommandées :
# Installer les mises à jour
sudo apt upgrade -y
# Activer les mises à jour automatiques de sécurité
sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
2. Configuration SSH
# Afficher la configuration SSH actuelle
sudo sshd -T | grep -E "passwordauthentication|permitrootlogin|port|pubkeyauthentication"
Configuration recommandée (/etc/ssh/sshd_config) :
Port 2222 # Port non standard
PermitRootLogin prohibit-password # Ou 'no'
PasswordAuthentication no # Clés uniquement
PubkeyAuthentication yes
MaxAuthTries 3
X11Forwarding no
AllowTcpForwarding no
ClientAliveInterval 300
ClientAliveCountMax 2
3. Firewall UFW
# Statut détaillé
sudo ufw status verbose
# Voir les règles numérotées
sudo ufw status numbered
Configuration minimale recommandée :
# Politique par défaut
sudo ufw default deny incoming
sudo ufw default allow outgoing
# Autoriser SSH (votre port)
sudo ufw allow 2222/tcp
# Autoriser HTTP/HTTPS si serveur web
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# Activer
sudo ufw enable
4. Utilisateurs et permissions
# Lister les utilisateurs avec shell
grep -v '/nologin\|/false' /etc/passwd
# Utilisateurs avec UID 0 (root)
awk -F: '($3 == "0") {print}' /etc/passwd
# Vérifier les sudoers
sudo cat /etc/sudoers
sudo ls -la /etc/sudoers.d/
# Fichiers SUID (peuvent être dangereux)
sudo find / -perm -4000 -type f 2>/dev/null
# Fichiers world-writable
sudo find / -perm -0002 -type f ! -path "/proc/*" ! -path "/sys/*" 2>/dev/null
5. Services actifs
# Lister les services actifs
systemctl list-units --type=service --state=running
# Ports en écoute
sudo ss -tlnp
# ou
sudo netstat -tlnp
Désactiver les services inutiles :
# Exemple : désactiver cups (impression)
sudo systemctl disable cups
sudo systemctl stop cups
6. Logs et monitoring
# Dernières connexions
last -20
# Tentatives de connexion échouées
sudo grep "Failed password" /var/log/auth.log | tail -20
# Connexions SSH actuelles
who
# Historique des commandes sudo
sudo cat /var/log/auth.log | grep sudo
7. Fail2ban
# Vérifier le statut
sudo fail2ban-client status
# Voir les jails actives
sudo fail2ban-client status | grep "Jail list"
# IP actuellement bannies
for jail in $(sudo fail2ban-client status | grep "Jail list" | sed 's/.*://;s/,//g'); do
echo "=== $jail ==="
sudo fail2ban-client status $jail | grep "Banned IP"
done
8. Certificats SSL
# Vérifier l'expiration des certificats
sudo find /etc/letsencrypt/live -name "cert.pem" -exec openssl x509 -enddate -noout -in {} \;
# Tester le renouvellement
sudo certbot renew --dry-run
9. Intégrité des fichiers
# Installer AIDE (Advanced Intrusion Detection Environment)
sudo apt install aide
# Initialiser la base de données
sudo aideinit
# Vérifier l'intégrité
sudo aide --check
10. Configuration réseau
# Vérifier les paramètres sysctl de sécurité
sysctl net.ipv4.conf.all.accept_redirects
sysctl net.ipv4.conf.all.send_redirects
sysctl net.ipv4.tcp_syncookies
Configuration recommandée (/etc/sysctl.d/99-security.conf) :
# Désactiver les redirections ICMP
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
# Protection SYN flood
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
# Ignorer les broadcasts ICMP
net.ipv4.icmp_echo_ignore_broadcasts = 1
# Log des paquets suspects
net.ipv4.conf.all.log_martians = 1
Appliquer :
sudo sysctl -p /etc/sysctl.d/99-security.conf
Script d'audit automatique
#!/bin/bash
# /usr/local/bin/security-audit.sh
echo "=== AUDIT DE SÉCURITÉ $(date) ==="
echo ""
echo "--- Système ---"
echo "OS: $(cat /etc/os-release | grep PRETTY_NAME | cut -d'"' -f2)"
echo "Kernel: $(uname -r)"
echo "Uptime: $(uptime -p)"
echo ""
echo "--- Mises à jour ---"
apt list --upgradable 2>/dev/null | grep -c upgradable
echo "packages à mettre à jour"
echo ""
echo "--- SSH ---"
sshd -T 2>/dev/null | grep -E "port |passwordauthentication|permitrootlogin"
echo ""
echo "--- Firewall ---"
ufw status | head -5
echo ""
echo "--- Fail2ban ---"
fail2ban-client status 2>/dev/null || echo "Non installé"
echo ""
echo "--- Ports ouverts ---"
ss -tlnp | grep LISTEN
echo ""
echo "--- Dernières connexions ---"
last -5
echo ""
echo "--- Certificats SSL ---"
find /etc/letsencrypt/live -name "cert.pem" -exec sh -c 'echo "{}:" && openssl x509 -enddate -noout -in {}' \; 2>/dev/null
echo ""
echo "=== FIN DE L'AUDIT ==="
chmod +x /usr/local/bin/security-audit.sh
Fréquence recommandée
| Vérification | Fréquence |
|---|---|
| Mises à jour système | Hebdomadaire |
| Logs d'authentification | Quotidien |
| Statut Fail2ban | Quotidien |
| Audit complet | Mensuel |
| Certificats SSL | Mensuel |
| Révision des utilisateurs | Trimestriel |
Outils complémentaires
Lynis - Audit de sécurité
sudo apt install lynis
sudo lynis audit system
RKHunter - Détection de rootkits
sudo apt install rkhunter
sudo rkhunter --update
sudo rkhunter --check
ClamAV - Antivirus
sudo apt install clamav clamav-daemon
sudo freshclam
sudo clamscan -r /home
Conseil
Automatisez ces vérifications avec des cron jobs et envoyez-vous des rapports par email ou notification Discord/Slack.