Ajouter install_rsyslog.sh
This commit is contained in:
parent
36c6d0bca1
commit
42eaa63b3e
|
|
@ -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 <<RULE
|
||||
# Logs des services Web (daemon) et des erreurs generales
|
||||
daemon.info;daemon.err $target$LOG_SERVER_HOST:$LOG_SERVER_PORT
|
||||
local2.* $target$LOG_SERVER_HOST:$LOG_SERVER_PORT
|
||||
RULE
|
||||
)
|
||||
;;
|
||||
|
||||
db)
|
||||
echo "⚙️ Profil: Serveur de Base de Données (PostgreSQL/MariaDB)"
|
||||
# Erreurs critiques du systeme et logs specifiques a la DB (local0)
|
||||
rules=$(cat <<RULE
|
||||
# Logs des services DB (local0) et messages systeme critiques
|
||||
mail.none;news.none;daemon.none;auth.none $target$LOG_SERVER_HOST:$LOG_SERVER_PORT
|
||||
*.err;kern.warning $target$LOG_SERVER_HOST:$LOG_SERVER_PORT
|
||||
local0.* $target$LOG_SERVER_HOST:$LOG_SERVER_PORT
|
||||
RULE
|
||||
)
|
||||
;;
|
||||
|
||||
security)
|
||||
echo "⚙️ Profil: Serveur de Sécurité (Firewall, VPN, Bastion)"
|
||||
# Logs d'authentification (auth, authpriv), noyau (kernel) et cron pour la maintenance
|
||||
rules=$(cat <<RULE
|
||||
# Logs de securite critiques
|
||||
auth.*;authpriv.* $target$LOG_SERVER_HOST:$LOG_SERVER_PORT
|
||||
kern.warning $target$LOG_SERVER_HOST:$LOG_SERVER_PORT
|
||||
cron.* $target$LOG_SERVER_HOST:$LOG_SERVER_PORT
|
||||
RULE
|
||||
)
|
||||
;;
|
||||
|
||||
default)
|
||||
echo "⚙️ Profil: Défaut (Système Général/Infrastructure)"
|
||||
# Logs système essentiels (info, warning), en excluant les plus volumineux (mail, news)
|
||||
rules=$(cat <<RULE
|
||||
# Logs systeme generaux importants
|
||||
*.info;mail.none;news.none;authpriv.none;cron.none $target$LOG_SERVER_HOST:$LOG_SERVER_PORT
|
||||
kern.* $target$LOG_SERVER_HOST:$LOG_SERVER_PORT
|
||||
RULE
|
||||
)
|
||||
;;
|
||||
|
||||
*)
|
||||
die "Profil non reconnu. Veuillez choisir parmi: web, db, security, default."
|
||||
;;
|
||||
esac
|
||||
|
||||
# Création du fichier de configuration final
|
||||
cat <<EOF > "$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 <profil>"
|
||||
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 "=========================================================="
|
||||
Loading…
Reference in New Issue