diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..891b92a --- /dev/null +++ b/readme.md @@ -0,0 +1,469 @@ +# 🔒 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 ✅ \ No newline at end of file