diff --git a/install_rsyslog.sh b/install_rsyslog.sh new file mode 100644 index 0000000..2842679 --- /dev/null +++ b/install_rsyslog.sh @@ -0,0 +1,185 @@ +#!/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 "==========================================================" \ No newline at end of file