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