# 🔒 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. [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) [![Bash](https://img.shields.io/badge/bash-5.0+-green.svg)](https://www.gnu.org/software/bash/) [![Debian](https://img.shields.io/badge/Debian-10%2B-red.svg)](https://www.debian.org/) [![Ubuntu](https://img.shields.io/badge/Ubuntu-20.04%2B-orange.svg)](https://ubuntu.com/) ## 📋 Table des matières - [Fonctionnalités](#-fonctionnalités) - [Prérequis](#-prérequis) - [Installation](#-installation) - [Utilisation](#-utilisation) - [Configuration](#%EF%B8%8F-configuration) - [Étapes de durcissement](#-étapes-de-durcissement) - [Modes d'exécution](#-modes-dexécution) - [Exemples](#-exemples) - [Sécurité](#-sécurité) - [Dépannage](#-dépannage) - [Contribution](#-contribution) - [Licence](#-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 ```bash git clone https://git.h3campus.fr/Johnny/system_hardering.git cd system_hardering ``` ### Rendre le script exécutable ```bash chmod +x system_hardening_optimized.sh ``` ### Vérifier le script (optionnel) ```bash bash -n system_hardening_optimized.sh ``` ## 🚀 Utilisation ### Mode basique (interactif) ```bash sudo ./system_hardening_optimized.sh ``` ### Mode autonome (recommandé pour la production) ```bash sudo ./system_hardening_optimized.sh --unattended ``` ### Aide complète ```bash ./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 ```bash # 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) 1. Installation des outils de sécurité 2. Changement mot de passe root aléatoire 3. Détection des ports ouverts ### Configuration système (4-13) 4. Configuration Process Accounting 5. Durcissement sysctl 6. Permissions des logs 7. Politique mots de passe PAM 8. Configuration login.defs 9. Configuration umask 10. Configuration AIDE SHA512 11. Initialisation base AIDE 12. Configuration ClamAV 13. Configuration Chrony (NTP) ### Sécurisation réseau (14-17) 14. Durcissement SSH 15. Configuration bannières 16. Configuration pare-feu UFW 17. Configuration Fail2ban ### Nettoyage et restrictions (18-22) 18. Suppression paquets inutiles 19. Restriction permissions fichiers 20. Désactivation modules noyau 21. Configuration limites sécurité 22. Vérification intégrité paquets ### Automatisation et audit (23-33) 23. Configuration mises à jour auto 24. Configuration tâche AIDE cron 25. Durcissement bannière SMTP 26. Durcissement services systemd 27. Configuration PAM avancée 28. Vérification partitions 29. Vérification fichiers noyau 30. Exécution chkrootkit 31. Préparation nettoyage SSH 32. Audit Lynis final 33. Rapport et résumé ## 🎯 Modes d'exécution ### Mode interactif ```bash sudo ./system_hardening_optimized.sh ``` Le script demande confirmation pour les actions critiques. ### Mode autonome complet ```bash sudo ./system_hardening_optimized.sh --unattended ``` Aucune interaction requise, utilise les valeurs par défaut. ### Mode auto-confirmation ```bash sudo ./system_hardening_optimized.sh --yes ``` Confirme automatiquement mais affiche les étapes. ### Forcer une étape spécifique ```bash sudo ./system_hardening_optimized.sh --force-step=harden_ssh ``` ### Sauter une étape ```bash sudo ./system_hardening_optimized.sh --skip-step=configure_clamav ``` ### Réinitialiser une étape ```bash sudo ./system_hardening_optimized.sh --reset-step=harden_ssh ``` ### Réinitialiser toutes les étapes ```bash sudo ./system_hardening_optimized.sh --reset-all ``` ### Afficher le statut ```bash sudo ./system_hardening_optimized.sh --show-status ``` ### Lister toutes les étapes ```bash ./system_hardening_optimized.sh --list-steps ``` ## 📚 Exemples ### Configuration serveur web ```bash # 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 ```bash # 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) ```bash # 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 ```bash # 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 `22` reste temporairement actif pendant les tests - Utilisez `--cleanup-ssh` pour 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 ```bash # 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 ```bash # 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 ```bash # 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 ```bash # 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 ```bash # 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 : ```bash # 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 1. Forkez le projet 2. Créez une branche (`git checkout -b feature/amelioration`) 3. Committez vos changements (`git commit -am 'Ajout fonctionnalité'`) 4. Pushez vers la branche (`git push origin feature/amelioration`) 5. Ouvrez une Pull Request ### Signaler un bug Ouvrez une issue sur [Gitea](https://git.h3campus.fr/Johnny/system_hardering/issues) 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](LICENSE) pour plus de détails. ## 👤 Auteur **Security Team** - Repository: [https://git.h3campus.fr/Johnny/system_hardering.git](https://git.h3campus.fr/Johnny/system_hardering.git) ## 🙏 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 ✅