12 KiB
🔒 System Hardening Script v8.2
Script automatisé de durcissement de sécurité pour systèmes Debian/Ubuntu LTS. Conçu pour une configuration autonome avec des valeurs par défaut sécurisées.
📋 Table des matières
- Fonctionnalités
- Prérequis
- Installation
- Utilisation
- Configuration
- Étapes de durcissement
- Modes d'exécution
- Exemples
- Sécurité
- Dépannage
- Contribution
- Licence
✨ Fonctionnalités
🛡️ Sécurité renforcée
- Durcissement SSH : Configuration sécurisée avec authentification par clé uniquement
- Pare-feu UFW : Détection automatique des ports et configuration intelligente
- Fail2ban : Protection contre les attaques par force brute
- AIDE : Système de détection d'intrusion basé sur l'intégrité des fichiers (SHA512)
- ClamAV : Antivirus avec mises à jour automatiques
- Politique de mots de passe : Exigences strictes (14 caractères minimum, 3 classes)
🔧 Durcissement système
- Configuration sysctl optimisée pour la sécurité
- Désactivation des modules noyau risqués
- Durcissement des services systemd
- Configuration PAM avancée avec SHA512
- Permissions restrictives sur les fichiers critiques
- Audit de sécurité avec Lynis
🤖 Automatisation
- Mode autonome : Aucune interaction requise
- Détection de conteneurs : Adaptation automatique (LXC, Docker, systemd-nspawn)
- Gestion d'état : Reprise après interruption
- Mises à jour automatiques : Configuration de unattended-upgrades
- Bannières légales : Configuration automatique
📦 Prérequis
Système
- Debian 10+ ou Ubuntu 20.04+
- Accès root ou sudo
- Connexion Internet (pour les mises à jour et installations)
Recommandations
- Effectuer une sauvegarde complète avant exécution
- Tester dans un environnement de développement d'abord
- Avoir un accès console physique ou IPMI en cas de problème SSH
📥 Installation
Cloner le dépôt
git clone https://git.h3campus.fr/Johnny/system_hardering.git
cd system_hardering
Rendre le script exécutable
chmod +x system_hardening_optimized.sh
Vérifier le script (optionnel)
bash -n system_hardening_optimized.sh
🚀 Utilisation
Mode basique (interactif)
sudo ./system_hardening_optimized.sh
Mode autonome (recommandé pour la production)
sudo ./system_hardening_optimized.sh --unattended
Aide complète
./system_hardening_optimized.sh --help
⚙️ Configuration
Variables d'environnement
Le script peut être configuré via des variables d'environnement :
| Variable | Défaut | Description |
|---|---|---|
AUTO_SSH_PORT |
22022 |
Port SSH personnalisé |
AUTO_TIMEZONE |
Europe/Paris |
Fuseau horaire |
AUTO_PASS_MAX_DAYS |
90 |
Durée max du mot de passe (jours) |
AUTO_PASS_MIN_DAYS |
7 |
Durée min entre changements |
AUTO_UMASK |
027 |
Umask par défaut |
AUTO_DISABLE_ROOT_LOGIN |
no |
Désactiver login root SSH |
AUTO_ENABLE_FAIL2BAN |
yes |
Activer Fail2ban |
AUTO_ENABLE_UFW |
yes |
Activer UFW |
AUTO_ENABLE_AIDE |
yes |
Activer AIDE |
AUTO_ENABLE_CLAMAV |
yes |
Activer ClamAV |
AUTO_SKIP_PORTS_DETECTION |
no |
Sauter détection ports |
AUTO_SKIP_LYNIS |
no |
Sauter audit Lynis |
AUTO_YES |
no |
Confirmer automatiquement |
AUTO_CLEANUP_SSH |
no |
Nettoyer port SSH 22 |
AUTO_CHANGE_ROOT_PWD |
yes |
Changer mot de passe root |
Exemple de configuration
# Configuration personnalisée
export AUTO_SSH_PORT=2222
export AUTO_TIMEZONE="America/New_York"
export AUTO_ENABLE_CLAMAV=no
export AUTO_ENABLE_AIDE=yes
sudo -E ./system_hardening_optimized.sh --unattended
🔐 Étapes de durcissement
Le script exécute 33 étapes de durcissement :
Installation et mise à jour (1-3)
- Installation des outils de sécurité
- Changement mot de passe root aléatoire
- Détection des ports ouverts
Configuration système (4-13)
- Configuration Process Accounting
- Durcissement sysctl
- Permissions des logs
- Politique mots de passe PAM
- Configuration login.defs
- Configuration umask
- Configuration AIDE SHA512
- Initialisation base AIDE
- Configuration ClamAV
- Configuration Chrony (NTP)
Sécurisation réseau (14-17)
- Durcissement SSH
- Configuration bannières
- Configuration pare-feu UFW
- Configuration Fail2ban
Nettoyage et restrictions (18-22)
- Suppression paquets inutiles
- Restriction permissions fichiers
- Désactivation modules noyau
- Configuration limites sécurité
- Vérification intégrité paquets
Automatisation et audit (23-33)
- Configuration mises à jour auto
- Configuration tâche AIDE cron
- Durcissement bannière SMTP
- Durcissement services systemd
- Configuration PAM avancée
- Vérification partitions
- Vérification fichiers noyau
- Exécution chkrootkit
- Préparation nettoyage SSH
- Audit Lynis final
- Rapport et résumé
🎯 Modes d'exécution
Mode interactif
sudo ./system_hardening_optimized.sh
Le script demande confirmation pour les actions critiques.
Mode autonome complet
sudo ./system_hardening_optimized.sh --unattended
Aucune interaction requise, utilise les valeurs par défaut.
Mode auto-confirmation
sudo ./system_hardening_optimized.sh --yes
Confirme automatiquement mais affiche les étapes.
Forcer une étape spécifique
sudo ./system_hardening_optimized.sh --force-step=harden_ssh
Sauter une étape
sudo ./system_hardening_optimized.sh --skip-step=configure_clamav
Réinitialiser une étape
sudo ./system_hardening_optimized.sh --reset-step=harden_ssh
Réinitialiser toutes les étapes
sudo ./system_hardening_optimized.sh --reset-all
Afficher le statut
sudo ./system_hardening_optimized.sh --show-status
Lister toutes les étapes
./system_hardening_optimized.sh --list-steps
📚 Exemples
Configuration serveur web
# Serveur web avec port SSH personnalisé
export AUTO_SSH_PORT=2222
export AUTO_ENABLE_CLAMAV=no # Désactiver ClamAV (pas nécessaire)
export AUTO_ENABLE_AIDE=yes # Garder AIDE pour intégrité
sudo -E ./system_hardening_optimized.sh --unattended
Configuration conteneur LXC
# Conteneur LXC (détection automatique)
export AUTO_ENABLE_UFW=no # Pare-feu géré par l'hôte
export AUTO_SSH_PORT=22 # Garder port standard
export AUTO_ENABLE_CLAMAV=no # Pas nécessaire en conteneur
sudo -E ./system_hardening_optimized.sh --unattended
Configuration minimale (rapide)
# Configuration rapide sans antivirus ni AIDE
export AUTO_ENABLE_CLAMAV=no
export AUTO_ENABLE_AIDE=no
export AUTO_SKIP_LYNIS=yes
sudo -E ./system_hardening_optimized.sh --unattended
Test du nouveau port SSH
# Après durcissement, tester le nouveau port
ssh -p 22022 user@server
# Si OK, nettoyer le port 22 temporaire
sudo ./system_hardening_optimized.sh --cleanup-ssh
🔒 Sécurité
Mot de passe root
Le script génère un mot de passe par défaut pour root :
Mot de passe : 1H6$06%@o*iEle
⚠️ IMPORTANT :
- Ce mot de passe est sauvegardé dans
/root/root_password_YYYYMMDD_HHMMSS.txt - Permissions :
600(lecture seule par root) - Conservez ce fichier en lieu sûr
- Le mot de passe expire dans 90 jours
- Vous n'êtes PAS obligé de le changer à la première connexion
Port SSH
- Port par défaut :
22022 - Le port
22reste temporairement actif pendant les tests - Utilisez
--cleanup-sshpour supprimer le port 22 après validation
Fichiers sensibles
Le script sauvegarde automatiquement :
/etc/ssh/sshd_config/etc/pam.d/common-password/etc/login.defs- Tous les fichiers modifiés
Répertoire de sauvegarde : /root/backup_hardening_YYYYMMDD_HHMMSS/
Journalisation
Tous les logs sont enregistrés dans :
/var/log/system_hardening.log: Log complet/var/log/hardening_status.log: Statut des étapes/var/log/security_report_YYYYMMDD.log: Rapport Lynis
🔧 Dépannage
Problème de connexion SSH
# Vérifier le statut SSH
sudo systemctl status sshd
# Vérifier les ports d'écoute
sudo ss -tlnp | grep sshd
# Tester la configuration
sudo sshd -t
# Restaurer la configuration SSH
sudo cp /root/backup_hardening_*/sshd_config /etc/ssh/sshd_config
sudo systemctl restart sshd
Pare-feu bloque les connexions
# Vérifier les règles UFW
sudo ufw status numbered
# Désactiver temporairement UFW
sudo ufw disable
# Réinitialiser UFW
sudo ufw --force reset
Fail2ban bloque votre IP
# Vérifier les jails
sudo fail2ban-client status sshd
# Débannir une IP
sudo fail2ban-client set sshd unbanip VOTRE_IP
# Désactiver Fail2ban temporairement
sudo systemctl stop fail2ban
Réinitialiser complètement le script
# Réinitialiser toutes les étapes
sudo ./system_hardening_optimized.sh --reset-all
# Restaurer les configurations
# (suivre les instructions à l'écran)
Vérifier l'intégrité du système
# Vérification AIDE
sudo aide --check
# Scan ClamAV
sudo clamscan -r /home
# Audit Lynis
sudo lynis audit system
📊 Rapport de sécurité
Après exécution, consultez :
# Rapport Lynis
cat /var/log/security_report_$(date +%Y%m%d).log
# Score de sécurité
grep "Hardening index" /var/log/security_report_*.log
# Logs complets
tail -f /var/log/system_hardening.log
🤝 Contribution
Les contributions sont les bienvenues !
Comment contribuer
- Forkez le projet
- Créez une branche (
git checkout -b feature/amelioration) - Committez vos changements (
git commit -am 'Ajout fonctionnalité') - Pushez vers la branche (
git push origin feature/amelioration) - Ouvrez une Pull Request
Signaler un bug
Ouvrez une issue sur Gitea avec :
- Description du problème
- Version du système (Debian/Ubuntu)
- Logs pertinents
- Étapes pour reproduire
📝 Licence
Ce projet est sous licence GPL v3. Voir le fichier LICENSE pour plus de détails.
👤 Auteur
Security Team
🙏 Remerciements
- Communauté Debian Security
- Projet Lynis
- Documentation CIS Benchmarks
- Communauté AIDE
⚠️ Avertissement
Ce script modifie profondément la configuration système.
- Testez toujours dans un environnement de développement d'abord
- Sauvegardez votre système avant exécution
- Lisez la documentation complète
- Conservez un accès console physique ou IPMI
- Notez le nouveau mot de passe root et le port SSH
L'auteur décline toute responsabilité en cas de perte de données ou d'accès au système.
Version : 8.2
Dernière mise à jour : Janvier 2025
Statut : Production Ready ✅