#!/bin/bash # # Script d'Installation et de Configuration Professionnelle de rsyslog Client Multi-Profils # Objectif: Installer rsyslog et configurer des règles d'envoi de logs vers un serveur central. # Auteur: Gemini # Date: 2025-12-06 # Version: 1.1 # --- Variables de Configuration Globales (À ADAPTER) --- # Adresse IP ou Nom d'hôte du serveur de journaux central LOG_SERVER_HOST="graylog.h3campus.fr" LOG_SERVER_PORT="514" PROTOCOL="UDP" # Peut être UDP ou TCP CONFIG_FILE="/etc/rsyslog.d/50-remote-custom.conf" RSYSLOG_PACKAGE="rsyslog" # --- Fonctions de Gestion --- # Fonction pour afficher les messages d'erreur et quitter function die() { local message="$1" echo -e "\n🚨 ERREUR: $message" >&2 exit 1 } # Fonction pour vérifier les prérequis (privilèges) function check_prerequisites() { if [[ $EUID -ne 0 ]]; then die "Ce script doit être exécuté avec les privilèges root (sudo)." fi echo "✅ Vérification des privilèges passée." } # Fonction pour installer rsyslog si absent function install_rsyslog() { echo -e "\n--- 📦 Étape 1: Installation de rsyslog ---" if ! dpkg -l | grep -q "^ii.*$RSYSLOG_PACKAGE"; then echo "🔍 rsyslog n'est pas installé. Installation en cours..." if ! apt update &> /dev/null; then die "Échec de la mise à jour des listes de paquets APT." fi if ! apt install -y $RSYSLOG_PACKAGE; then die "Échec de l'installation du paquet $RSYSLOG_PACKAGE." fi echo "✅ rsyslog installé avec succès." else echo "✅ $RSYSLOG_PACKAGE est déjà installé." fi } # Fonction pour redémarrer le service rsyslog function restart_rsyslog() { echo -e "\n--- 🔄 Étape 3: Redémarrage du service rsyslog ---" if systemctl restart rsyslog; then echo "✅ Service rsyslog redémarré avec succès." echo "🔍 Vérification du statut du service (extrait)..." systemctl status rsyslog | head -n 5 else die "Échec du redémarrage du service rsyslog. Vérifiez les logs (journalctl -xe | grep rsyslog)." fi } # --- Fonction de Configuration des Règles par Profil --- # Fonction pour définir et appliquer les règles spécifiques à un profil # Arg1: Le profil à configurer (ex: web, db, security, default) function generate_profile_rules() { local profile="$1" local rules="" local target="@" # Symbole par défaut pour UDP # Définition du symbole de destination en fonction du protocole if [[ "$PROTOCOL" == "TCP" ]]; then target="@@" # Pour une transmission fiable fi echo -e "\n--- 📜 Étape 2: Configuration des règles pour le profil '$profile' ---" # Définition des règles spécifiques au profil case "$profile" in web) echo "⚙️ Profil: Serveur Web (Apache/Nginx)" # Logs des services d'arrière-plan (daemon), erreurs, et logs locaux rules=$(cat < "$CONFIG_FILE" # # Configuration rsyslog personnalisee par PROFIL ($profile) # Fichier cree par configure_rsyslog_profiles.sh # Destination: $PROTOCOL://$LOG_SERVER_HOST:$LOG_SERVER_PORT # # --- Regles du Profil $profile --- $rules # NOTE: Les logs envoyes a distance sont toujours stockes localement, # a moins d'ajouter un tilde (~) a la fin de la ligne. EOF if [ $? -eq 0 ]; then echo "✅ Fichier de configuration créé: $CONFIG_FILE" echo " Destination: **$target$LOG_SERVER_HOST:$LOG_SERVER_PORT**" else die "Échec de la création du fichier de configuration $CONFIG_FILE." fi } # --- Exécution Principale du Script --- # Vérification de l'argument du profil if [ -z "$1" ]; then echo "Usage: sudo $0 " echo "Profils disponibles: **web**, **db**, **security**, **default**" die "Le profil du serveur est requis en argument." fi PROFILE_TO_USE="$1" echo "==========================================================" echo "🚀 Démarrage de la configuration rsyslog Client" echo "Serveur de Log Cible: $LOG_SERVER_HOST:$LOG_SERVER_PORT ($PROTOCOL)" echo "==========================================================" # 1. Vérification des prérequis et Installation check_prerequisites install_rsyslog # 2. Configuration basée sur le profil generate_profile_rules "$PROFILE_TO_USE" # 3. Application de la configuration restart_rsyslog echo -e "\n==========================================================" echo "🎉 Configuration rsyslog Client terminee pour le profil **$PROFILE_TO_USE** !" echo "Les logs specifiques sont maintenant diriges vers le serveur central." echo "=========================================================="