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