Ajouter readme.md
This commit is contained in:
parent
171957aca5
commit
b3c1025c3d
|
|
@ -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.
|
||||
|
||||
[](https://www.gnu.org/licenses/gpl-3.0)
|
||||
[](https://www.gnu.org/software/bash/)
|
||||
[](https://www.debian.org/)
|
||||
[](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 ✅
|
||||
Loading…
Reference in New Issue