Go to file
Johnny b3c1025c3d Ajouter readme.md 2026-01-15 07:34:46 +00:00
readme.md Ajouter readme.md 2026-01-15 07:34:46 +00:00
system_hardening_optimized.sh Actualiser system_hardening_optimized.sh 2026-01-05 21:13:23 +00:00

readme.md

🔒 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 Bash Debian Ubuntu

📋 Table des matières

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

git clone https://git.h3campus.fr/Johnny/system_hardering.git
cd system_hardering

Rendre le script exécutable

chmod +x system_hardening_optimized.sh

Vérifier le script (optionnel)

bash -n system_hardening_optimized.sh

🚀 Utilisation

Mode basique (interactif)

sudo ./system_hardening_optimized.sh

Mode autonome (recommandé pour la production)

sudo ./system_hardening_optimized.sh --unattended

Aide complète

./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

# 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)

  1. Configuration Process Accounting
  2. Durcissement sysctl
  3. Permissions des logs
  4. Politique mots de passe PAM
  5. Configuration login.defs
  6. Configuration umask
  7. Configuration AIDE SHA512
  8. Initialisation base AIDE
  9. Configuration ClamAV
  10. Configuration Chrony (NTP)

Sécurisation réseau (14-17)

  1. Durcissement SSH
  2. Configuration bannières
  3. Configuration pare-feu UFW
  4. Configuration Fail2ban

Nettoyage et restrictions (18-22)

  1. Suppression paquets inutiles
  2. Restriction permissions fichiers
  3. Désactivation modules noyau
  4. Configuration limites sécurité
  5. Vérification intégrité paquets

Automatisation et audit (23-33)

  1. Configuration mises à jour auto
  2. Configuration tâche AIDE cron
  3. Durcissement bannière SMTP
  4. Durcissement services systemd
  5. Configuration PAM avancée
  6. Vérification partitions
  7. Vérification fichiers noyau
  8. Exécution chkrootkit
  9. Préparation nettoyage SSH
  10. Audit Lynis final
  11. Rapport et résumé

🎯 Modes d'exécution

Mode interactif

sudo ./system_hardening_optimized.sh

Le script demande confirmation pour les actions critiques.

Mode autonome complet

sudo ./system_hardening_optimized.sh --unattended

Aucune interaction requise, utilise les valeurs par défaut.

Mode auto-confirmation

sudo ./system_hardening_optimized.sh --yes

Confirme automatiquement mais affiche les étapes.

Forcer une étape spécifique

sudo ./system_hardening_optimized.sh --force-step=harden_ssh

Sauter une étape

sudo ./system_hardening_optimized.sh --skip-step=configure_clamav

Réinitialiser une étape

sudo ./system_hardening_optimized.sh --reset-step=harden_ssh

Réinitialiser toutes les étapes

sudo ./system_hardening_optimized.sh --reset-all

Afficher le statut

sudo ./system_hardening_optimized.sh --show-status

Lister toutes les étapes

./system_hardening_optimized.sh --list-steps

📚 Exemples

Configuration serveur web

# 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

# 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)

# 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

# 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

# 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

# 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

# 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

# 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

# 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 :

# 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 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 pour plus de détails.

👤 Auteur

Security Team

🙏 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