Ricerca nel sito web

Come configurare il server di accesso centrale con Rsyslog in Linux


I log sono un componente fondamentale di qualsiasi software o sistema operativo. I log solitamente registrano le azioni dell'utente, gli eventi di sistema, l'attività di rete e molto altro ancora, a seconda dello scopo a cui sono destinati. Uno dei sistemi di registrazione più utilizzati sui sistemi Linux è rsyslog.

Rsyslog è un sistema di elaborazione dei log potente, sicuro e ad alte prestazioni che accetta dati da diversi tipi di fonti (sistemi/applicazioni) e li restituisce in più formati.

Si è evoluto da un normale demone syslog a un sistema di registrazione di livello aziendale completo di tutte le funzionalità. È progettato in un modello client/server, pertanto può essere configurato come client e/o come server di registrazione centrale per altri server, dispositivi di rete e applicazioni remote.

Ambiente di test

Ai fini di questa guida, utilizzeremo i seguenti host:

  • Server: 192.168.241.140
  • Cliente: 172.31.21.58

Come installare e configurare il server Rsyslog

La maggior parte delle distribuzioni Linux vengono fornite con il pacchetto rsyslog preinstallato. Nel caso in cui non sia installato, puoi installarlo utilizzando lo strumento di gestione pacchetti Linux come mostrato.

sudo yum update && yum install rsyslog 	#CentOS 7
sudo apt update && apt install rsyslog	#Ubuntu 16.04, 18.04

Una volta installato rsyslog, per ora devi avviare il servizio, abilitarlo all'avvio automatico all'avvio e controllarne lo stato con il comando systemctl.

sudo systemctl start rsyslog
sudo systemctl enable rsyslog
sudo systemctl status rsyslog

Il file di configurazione principale di rsyslog si trova in /etc/rsyslog.conf, che carica i moduli, definisce le direttive globali, contiene regole per l'elaborazione dei messaggi di registro e include anche tutti i file di configurazione in /etc /rsyslog.d/ per varie applicazioni/servizi.

sudo vim /etc/rsyslog.conf

Per impostazione predefinita, rsyslog utilizza i moduli imjournal e imusock per importare messaggi di log strutturati da systemd journal e per accettare syslog messaggi provenienti rispettivamente dalle applicazioni in esecuzione sul sistema locale tramite socket Unix.

Per configurare rsyslog come server di registrazione di rete/centrale, è necessario impostare il protocollo (UDP o TCP o entrambi) che utilizzerà per la ricezione remota del syslog così come il porta su cui è in ascolto.

Se desideri utilizzare una connessione UDP, che è più veloce ma inaffidabile, cerca e decommenta le righe sottostanti (sostituisci 514 con la porta su cui vuoi che sia in ascolto, questo dovrebbe corrisponde all'indirizzo della porta a cui i client inviano i messaggi, lo esamineremo più approfonditamente durante la configurazione di un client rsyslog).

$ModLoad imudp
$UDPServerRun 514

Per utilizzare la connessione TCP (che è più lenta ma più affidabile), cerca e decommenta le righe seguenti.

$ModLoad imtcp
$InputTCPServerRun 514

In questo caso, vogliamo utilizzare entrambe le connessioni UDP e TCP contemporaneamente.

Successivamente, devi definire il set di regole per l'elaborazione dei log remoti nel seguente formato.

facility.severity_level	destination (where to store log)

Dove :

  • facility: è il tipo di messaggio che genera processo/applicazione, include auth, cron, daemon, kernel, local0..local7. L'uso di * indica tutte le strutture.
  • severity_level: è il tipo di messaggio di registro: emerg-0, alert-1, crit-2, err-3, warn-4, Notice-5, info-6, debug-7. L'utilizzo di * indica tutti i livelli di gravità e nessuno implica alcun livello di gravità.
  • destinazione: è un file locale o un server rsyslog remoto (definito nella forma IP:porta).

Utilizzeremo il seguente set di regole per raccogliere log da host remoti, utilizzando il modello RemoteLogs. Tieni presente che queste regole devono precedere qualsiasi regola per l'elaborazione dei messaggi locali, come mostrato nello screenshot.

$template RemoteLogs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log"
*.* ?RemoteLogs 
& ~

Osservando il set di regole riportato sopra, la prima regola è “$template RemoteLogs,”/var/log/%HOSTNAME%/%PROGRAMNAME%.log” ”.

La direttiva $template dice al demone rsyslog di raccogliere e scrivere tutti i messaggi remoti ricevuti in log distinti in /var/log, in base al nome host > (nome della macchina client) e la struttura del client remoto (programma/applicazione) che ha generato i messaggi come definito dalle impostazioni presenti nel modello RemoteLogs.

La seconda riga “*.* ?RemoteLogs ” significa registrare i messaggi da tutte le strutture a tutti i livelli di gravità utilizzando la configurazione del modello RemoteLogs.

La riga finale “& ~ ” indica a rsyslog di interrompere l'elaborazione dei messaggi una volta scritti in un file. Se non includi "& ~", i messaggi verranno invece scritti nei file locali.

Esistono molti altri modelli che puoi utilizzare, per ulteriori informazioni, consulta la pagina man di configurazione di rsyslog (man rsyslog.conf) o fai riferimento alla documentazione online di Rsyslog.

Questo è tutto con la configurazione del server rsyslog. Salva e chiudi il file di configurazione. Per applicare le modifiche recenti, riavviare il demone rsyslog con il seguente comando.

sudo systemctl restart rsyslog

Ora verifica i socket di rete rsyslog. Utilizza il comando ss command (o netstat con gli stessi flag) e invia l'output a grep per filtrare le connessioni rsyslogd.

sudo ss -tulnp | grep "rsyslog"

Successivamente, su CentOS 7, se hai SELinux abilitato, esegui i seguenti comandi per consentire il traffico rsyslog in base al tipo di socket di rete.

sudo semanage -a -t syslogd_port_t -p udp 514
sudo semanage -a -t syslogd_port_t -p tcp 514 

Se il sistema ha il firewall abilitato, è necessario aprire la porta 514 per consentire entrambe le connessioni UDP/TCP al server rsyslog, eseguendo.

------------- On CentOS ------------- 
sudo firewall-cmd --permanent --add-port=514/udp
sudo firewall-cmd --permanent --add-port=514/tcp
sudo firewall-cmd --reload

------------- On Ubuntu -------------
sudo ufw allow 514/udp
sudo ufw allow 514/tcp
sudo ufw reload 

Come configurare il client Rsyslog per inviare registri al server Rsyslog

Ora sul sistema client, controlla se il servizio rsyslog è in esecuzione o meno con il seguente comando.

sudo systemctl status rsyslog

Se non è installato, installalo e avvia il servizio come mostrato in precedenza.

sudo yum update && yum install rsyslog 	#CentOS 7
sudo apt update && apt install rsyslog	#Ubuntu 16.04, 18.04
sudo systemctl start rsyslog
sudo systemctl enable rsyslog
sudo systemctl status rsyslog

Una volta che il servizio rsyslog è attivo e funzionante, apri il file di configurazione principale in cui eseguirai le modifiche alla configurazione predefinita.

sudo vim /etc/rsyslog.conf

Per forzare il demone rsyslog a fungere da client di registro e inoltrare tutti i messaggi di registro generati localmente al server rsyslog remoto, aggiungere questa regola di inoltro alla fine del file, come mostrato nello screenshot seguente.

*. *  @@192.168.100.10:514

La regola di cui sopra invierà messaggi da tutte le strutture e a tutti i livelli di gravità. Per inviare messaggi da una struttura specifica, ad esempio auth, utilizza la seguente regola.

auth. *  @@192.168.100.10:514

Salva le modifiche e chiudi il file di configurazione. Per applicare le impostazioni precedenti, riavviare il demone rsyslog.

sudo systemctl restart rsyslog

Come monitorare la registrazione remota sul server Rsyslog

Il passaggio finale è verificare se rsyslog sta effettivamente ricevendo e registrando i messaggi dal client, in /var/log, nel formato nomehost/nomeprogramma.log.

Esegui un comando ls sull'elenco lungo della directory principale dei log e controlla se esiste una directory chiamata ip-172.31.21.58 (o qualunque sia il nome host della tua macchina client).

 
ls -l /var/log/

Se la directory esiste, controlla i file di registro al suo interno, eseguendo.

sudo ls -l /var/log/ip-172-31-21-58/

Riepilogo

Rsyslog è un sistema di elaborazione dei log ad alte prestazioni, progettato in un'architettura client/server. Ci auguriamo che tu sia in grado di installare e configurare Rsyslog come server di registrazione centrale/di rete e come client come dimostrato in questa guida.

Potresti anche voler fare riferimento alle pagine man pertinenti di rsyslog per ulteriore aiuto. Sentiti libero di darci qualsiasi feedback o porre domande.