Rsyslog Setup · 8 min read · Nov 15, 2025

Installa un Server di Log Centralizzato con Rsyslog in Debian 9

In Linux, i file di log sono file che contengono messaggi sulle funzioni del sistema che vengono utilizzati dagli amministratori di sistema per identificare eventuali problemi sulle macchine. I log aiutano gli amministratori a visualizzare gli eventi che si sono verificati nel sistema nel corso del tempo. Di solito, tutti i file di log sono conservati nella directory /var/log in Linux. In questa posizione, ci sono diversi tipi di file di log per memorizzare vari messaggi, come un file di log per registrare eventi di sistema, un file di log per messaggi relativi alla sicurezza, altri file di log dedicati al kernel, agli utenti o ai cron job. Lo scopo principale dei file di log è risolvere i problemi di sistema. La maggior parte dei file di log in Linux è controllata dal servizio rsyslogd. Nelle versioni più recenti delle distribuzioni Linux, i file di log sono anche controllati e gestiti dal servizio di sistema journald, che fa parte del programma di inizializzazione systemd. I log memorizzati dal demone del journal sono scritti in un formato binario e sono principalmente volatili, memorizzati nella RAM e in un buffer circolare in /run/log/journal/. Tuttavia, il servizio journal può essere anche configurato per memorizzare permanentemente i messaggi Syslog.

In Linux, il server rsyslog può essere configurato per eseguire un gestore di log centrale, in un modello client-servizio, e inviare messaggi di log attraverso la rete tramite protocolli di trasporto TCP o UDP o ricevere log da dispositivi di rete, server, router, switch o altri sistemi o dispositivi embedded che generano log.

Il demone Rsyslog può essere configurato per funzionare come client e server allo stesso tempo. Configurato per funzionare come server, Rsyslog ascolterà sulla porta predefinita 514 TCP e UDP e inizierà a raccogliere messaggi di log che vengono inviati attraverso la rete da sistemi remoti. Come client, Rsyslog invierà attraverso la rete i messaggi di log interni a un server Ryslog remoto tramite le stesse porte TCP o UDP.

Rsyslog filtrerà i messaggi syslog in base a proprietà e azioni selezionate. I filtri rsyslog sono i seguenti:

  1. Filtri di Facility o Priorità
  2. Filtri basati su Proprietà
  3. Filtri basati su Espressioni

Il filtro facility è rappresentato dal sottosistema interno di Linux che produce i log. Sono categorizzati come presentato di seguito:

  • auth/authpriv = messaggi prodotti dai processi di autenticazione
  • cron = log relativi ai compiti cron
  • daemon = messaggi relativi ai servizi di sistema in esecuzione
  • kernel = messaggi del kernel Linux
  • mail = messaggi del server di posta
  • syslog = messaggi relativi a syslog o altri demoni (il server DHCP invia i log qui)
  • lpr = messaggi delle stampanti o del server di stampa
  • local0 - local7 = messaggi personalizzati sotto il controllo dell’amministratore

I livelli di priorità o severità sono assegnati a una parola chiave e a un numero come descritto di seguito.

  • emerg = Emergenza – 0
  • alert = Allerta – 1
  • err = Errori – 3
  • warn = Avvisi – 4
  • notice = Notifica – 5
  • info = Informazioni – 6
  • debug = Debugging – 7 livello più alto

Ci sono anche alcune parole chiave speciali di Rsyslog disponibili come il segno asterisco ( *) per definire tutte le facilities o priorità, la parola chiave none che specifica nessuna priorità, il segno uguale ( =) che seleziona solo quella priorità e il segno di esclamazione ( !) che nega una priorità.

La parte di azione del syslog è rappresentata dalla dichiarazione destination. La destinazione di un messaggio di log può essere un file memorizzato nel file system, un file nel percorso di sistema /var/log/, un altro input di processo locale tramite una pipe nominata o FIFO. I messaggi di log possono essere anche diretti a utenti, scartati in un buco nero (/dev/null) o inviati a stdout o a un server syslog remoto tramite protocollo TCP/UDP. I messaggi di log possono essere anche memorizzati in un database, come MySQL o PostgreSQL.

Configura Rsyslog come Server

Il demone Rsyslog è automaticamente installato nella maggior parte delle distribuzioni Linux. Tuttavia, se Rsyslog non è installato sul tuo sistema, puoi emettere uno dei comandi sottostanti per installare il servizio; avrai bisogno di privilegi di root per eseguire i comandi.

Nelle distribuzioni basate su Debian:

sudo apt-get install rsyslog

Nelle distribuzioni basate su RHEL come CentOS:

sudo yum install rsyslog

Per verificare se il demone Rsyslog è avviato su un sistema, esegui i comandi sottostanti, a seconda della versione della tua distribuzione.

Su distribuzioni Linux più recenti con systemd:

systemctl status rsyslog.service

Su versioni Linux più vecchie con init:

service rsyslog status
/etc/init.d/rsyslog status

Per avviare il demone rsyslog, emetti il seguente comando.

Su versioni Linux più vecchie con init:

service rsyslog start
/etc/init.d/rsyslog start

Su distribuzioni Linux più recenti:

systemctl start rsyslog.service

Per configurare un programma rsyslog per funzionare in modalità server, modifica il file di configurazione principale in /etc/rsyslog.conf. In questo file apporta le seguenti modifiche come mostrato nel campione sottostante.

sudo vi /etc/rsyslog.conf

Trova e decommenta rimuovendo l’hashtag (#) le seguenti righe per consentire la ricezione dei messaggi di log UDP sulla porta 514. Per impostazione predefinita, la porta UDP è utilizzata da syslog per inviare e ricevere messaggi.

$ModLoad imudp   
$UDPServerRun 514

Poiché il protocollo UDP non è affidabile per scambiare dati su una rete, puoi configurare Rsyslog per inviare messaggi di log a un server remoto tramite protocollo TCP. Per abilitare il protocollo di ricezione TCP, apri il file /etc/rsyslog.conf e decommenta le seguenti righe come mostrato di seguito. Questo permetterà al demone rsyslog di legarsi e ascoltare su un socket TCP sulla porta 514.

$ModLoad imtcp   
$InputTCPServerRun 514 

Entrambi i protocolli possono essere abilitati in rsyslog per funzionare contemporaneamente.

Se desideri specificare a quali mittenti consenti l’accesso al demone rsyslog, aggiungi la seguente riga dopo le righe del protocollo abilitato:

$AllowedSender TCP, 127.0.0.1, 10.110.50.0/24, *.yourdomain.com

Dovrai anche creare un nuovo template che sarà analizzato dal demone rsyslog prima di ricevere i log in arrivo. Il template dovrebbe istruire il server Rsyslog locale su dove memorizzare i messaggi di log in arrivo. Definisci il template subito dopo la riga $AllowedSender come mostrato nel campione sottostante.

$template Incoming-logs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log"  
**.*  *?Incoming-logs  
& ~

** Per registrare solo i messaggi generati dalla facility kern, utilizza la sintassi sottostante.

kern.*   ?Incoming-logs

I log ricevuti vengono analizzati dal template sopra e saranno memorizzati nel file system locale nella directory /var/log/, in file denominati secondo il nome host del client e la facility client che ha prodotto i messaggi: %HOSTNAME% e %PROGRAMNAME% variabili.

La regola di reindirizzamento sottostante & ~ configura il demone Rsyslog per salvare i messaggi di log in arrivo solo nei file sopra specificati dai nomi delle variabili. Altrimenti, i log ricevuti saranno ulteriormente elaborati e memorizzati anche nel contenuto dei log locali, come il file /var/log/syslog.

Per aggiungere una regola per scartare tutti i messaggi di log relativi alla posta, puoi utilizzare la seguente dichiarazione.

mail.* ~

Altre variabili che possono essere utilizzate per generare nomi di file sono: %syslogseverity%, %syslogfacility%, %timegenerated%, %HOSTNAME%, %syslogtag%, %msg%, %FROMHOST-IP%, %PRI%, %MSGID%, %APP-NAME%, %TIMESTAMP%, %$year%, %$month%, %$day%

A partire dalla versione 7 di Rsyslog, un nuovo formato di configurazione può essere utilizzato per dichiarare un template in un server Rsyslog.

Un esempio di template della versione 7 può apparire come mostrato nelle righe sottostanti.

template(name="MyTemplate" type="string"  
         string="/var/log/%FROMHOST-IP%/%PROGRAMNAME:::secpath-replace%.log"  
        )

Un altro modo in cui puoi scrivere il template sopra può anche essere come mostrato di seguito:

template(name="MyTemplate" type="list") {  
    constant(value="/var/log/")  
    property(name="fromhost-ip")  
    constant(value="/")  
    property(name="programname" SecurePath="replace")  
    constant(value=".log")  
    } *  
***

Per applicare eventuali modifiche apportate al file di configurazione di rsyslog, devi riavviare il demone per caricare la nuova configurazione.

sudo service rsyslog restart
sudo systemctl restart rsyslog

Per controllare quali socket rsyslog in stato di ascolto sono aperti su un sistema Debian Linux, puoi eseguire il comando netstat con privilegi di root. Passa i risultati attraverso un’utilità di filtro, come grep.

sudo netstat –tulpn | grep rsyslog

Tieni presente che devi anche aprire le porte Rsyslog nel firewall per consentire l’instaurazione di connessioni in entrata.

Nelle distribuzioni basate su RHEL con Firewalld attivato, emetti i comandi sottostanti:

firewall-cmd --permanent --add-port=514/tcp
firewall-cmd --permanent --add-port=514/tcp
firewall-cmd –reload

Nelle distribuzioni basate su Debian con firewall UFW attivo, emetti i comandi sottostanti:

ufw allow 514/tcp
ufw allow 514/udp

Regole del firewall iptables:

iptables -A INPUT -p tcp -m tcp --dport 514 -j ACCEPT
iptables -A INPUT -p udp --dport 514 -j ACCEPT

Configura Rsyslog come Client

Per abilitare il demone rsyslog a funzionare in modalità client e inviare messaggi di log locali a un server Rsyslog remoto, modifica il file /etc/rsyslog.conf e aggiungi una delle seguenti righe:

*. *  @IP_REMOTE_RSYSLOG_SERVER:514
*. *  @FQDN_RSYSLOG_SERVER:514

Questa riga abilita il servizio Rsyslog a inviare tutti i log interni a un server Rsyslog distante sulla porta UDP 514.

Per inviare i log tramite protocollo TCP, utilizza il seguente template:

*. *  @@IP_reomte_syslog_server:514

Per inviare solo i log relativi a cron con tutte le priorità a un server rsyslog, utilizza il template sottostante:

cron.* @ IP_reomte_syslog_server:514

Nei casi in cui il server Rsyslog non sia raggiungibile tramite rete, aggiungi le righe sottostanti al file /etc/rsyslog.conf sul lato client per memorizzare temporaneamente i log in un file buffer su disco, fino a quando il server non torna online.

$ActionQueueFileName queue  
$ActionQueueMaxDiskSpace 1g  
$ActionQueueSaveOnShutdown on  
$ActionQueueType LinkedList  
$ActionResumeRetryCount -1

Per applicare le regole sopra, il demone Rsyslog deve essere riavviato per funzionare come client.

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.