system_hardering/readme.md

469 lines
12 KiB
Markdown

# 🔒 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 ✅