Ricerca nel sito web

Come creare un server di registro centralizzato con Rsyslog in CentOS/RHEL 7


Affinché l'amministratore di sistema possa identificare o risolvere un problema su un sistema server CentOS 7 o RHEL 7, deve conoscere e visualizzare gli eventi accaduti sul sistema in uno specifico periodo di tempo dai file di registro memorizzati nel sistema nella directory /var/log.

Il server syslog su una macchina Linux può fungere da punto di monitoraggio centrale su una rete in cui tutti i server, i dispositivi di rete, i router, gli switch e la maggior parte dei servizi interni che generano log, siano essi relativi a specifici problemi interni o semplicemente messaggi informativi, possono inviare i propri log .

Su un sistema CentOS/RHEL 7, il demone Rsyslog è il server di registro principale preinstallato, seguito da Systemd Journal Daemon (journald forte>).

Il server Rsyslog è costruito come servizio di architettura client/server e può svolgere entrambi i ruoli contemporaneamente. Può essere eseguito come server e raccogliere tutti i registri trasmessi da altri dispositivi nella rete oppure può essere eseguito come client inviando tutti gli eventi interni del sistema registrati a un server syslog endpoint remoto.

Quando rsyslog è configurato come client, i log possono essere archiviati localmente in file sul file system locale o possono essere inviati in remoto anziché scriverli in file archiviati sulla macchina o scrivere file di log degli eventi localmente e inviarli a un server syslog remoto su lo stesso tempo.

Il server Syslog gestisce qualsiasi messaggio di registro utilizzando il seguente schema:

type (facility).priority (severity)  destination(where to send the log)

R. La struttura o i dati del tipo sono rappresentati dai processi interni del sistema che generano i messaggi. In Linux i processi interni (strutture) che generano i log sono standardizzati come segue:

  • auth = messaggi generati dai processi di autenticazione (login).
  • cron= messaggi generati da processi pianificati (crontab).
  • daemon = messaggi generati dai demoni (servizi interni).
  • kernel = messaggi generati dal kernel Linux stesso.
  • mail = messaggi generati da un server di posta.
  • syslog = messaggi generati dal demone rsyslog stesso.
  • lpr = messaggi generati da stampanti locali o da un server di stampa.
  • local0 – local7 = messaggi personalizzati definiti da un amministratore (local7 viene solitamente assegnato per Cisco o Windows).

B. Anche i livelli di priorità (gravità) sono standardizzati. Ad ogni priorità viene assegnata una sigla standard ed un numero come di seguito descritto. La settima priorità è il livello più alto di tutti.

  • emerg = Emergenza – 0
  • avviso = Avvisi – 1
  • err = Errori – 3
  • avvisare = Avvisi – 4
  • avviso = Notifica – 5
  • info = Informazioni – 6
  • debug = Debug – 7

Parole chiave speciali Rsyslog:

  • *=tutte le strutture o priorità
  • none=le strutture non hanno priorità specificate Es: mail.none

C. La terza parte dello schema syslog è rappresentata dalla direttiva destinazione. Il demone Rsyslog può inviare messaggi di log da scrivere in un file sul filesystem locale (principalmente in un file nella directory /var/log/) o da inviare tramite pipe a un altro processo locale o da inviare a un console utente locale (a stdout), oppure invia il messaggio a un server syslog remoto tramite il protocollo TCP/UDP, o addirittura scarta il messaggio su /dev/null.

Per configurare CentOS/RHEL 7 come server di registro centrale, dobbiamo prima verificare e assicurarci che la partizione /var in cui sono registrati tutti i file di registro sia sufficientemente grande ( minimo qualche GB) per poter archiviare tutti i file di log che verranno inviati da altri dispositivi. È una buona decisione utilizzare un'unità separata (LVM, RAID) per montare la directory /var/log/.

Requisiti

  1. Procedura di installazione di CentOS 7.3
  2. RHEL 7.3 Procedura di installazione

Come configurare Rsyslog nel server CentOS/RHEL 7

1. Per impostazione predefinita, il servizio Rsyslog viene installato automaticamente e dovrebbe essere in esecuzione in CentOS/RHEL 7. Per verificare se il demone è avviato nel sistema, emettere il seguente comando con privilegi di root.

systemctl status rsyslog.service

Se il servizio non è in esecuzione per impostazione predefinita, eseguire il comando seguente per avviare il demone rsyslog.

systemctl start rsyslog.service

2. Se il pacchetto rsyslog non è installato sul sistema che intendi utilizzare come server di registrazione centralizzato, immetti il comando seguente per installare il pacchetto rsyslog.

yum install rsyslog

3. Il primo passo che dobbiamo fare sul sistema per configurare il demone rsyslog come server di log centralizzato, in modo che possa ricevere messaggi di log per client esterni, è aprire e modificare, utilizzando il tuo editor di testo preferito, il file di configurazione principale da /etc/rsyslog.conf, come presentato nell'estratto seguente.

vi /etc/rsyslog.conf

Nel file di configurazione principale di rsyslog, cerca e decommenta le seguenti righe (rimuovi il segno dell'hashtag # all'inizio della riga) per fornire la ricezione del trasporto UDP al server Rsyslog tramite 514 porta. UDP è il protocollo standard utilizzato per la trasmissione dei log da Rsyslog.

$ModLoad imudp 
$UDPServerRun 514

4. Il protocollo UDP non ha il sovraccarico TCP, che lo rende più veloce nella trasmissione dei dati rispetto al protocollo TCP. D'altra parte, il protocollo UDP non garantisce l'affidabilità dei dati trasmessi.

Tuttavia, se è necessario utilizzare il protocollo TCP per la ricezione dei log, è necessario cercare e decommentare le seguenti righe dal file /etc/rsyslog.conf per configurare il demone Rsyslog per associare e ascoltare un socket TCP su 514 porta. I socket di ascolto TCP e UDP per la ricezione possono essere configurati simultaneamente su un server Rsyslog.

$ModLoad imtcp 
$InputTCPServerRun 514 

5. Nel passaggio successivo, non chiudere ancora il file, crea un nuovo modello che verrà utilizzato per ricevere messaggi remoti. Questo modello indicherà al server Rsyslog locale dove salvare i messaggi ricevuti inviati dai client della rete syslog. Il modello deve essere aggiunto prima dell'inizio del blocco DIRETTIVE GLOBALI come illustrato nell'estratto seguente.

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

La direttiva $template RemoteLogs di cui sopra indica al demone Rsyslog di raccogliere e scrivere tutti i messaggi di registro ricevuti su file distinti, in base al nome della macchina client e alla struttura client remota (applicazione) che ha generato i messaggi in base al proprietà definite presenti nella configurazione del modello: %HOSTNAME% e %PROGRAMNAME%.

Tutti questi file di registro verranno scritti nel file system locale in un file dedicato denominato in base al nome host della macchina client e archiviato nella directory /var/log/.

La regola di reindirizzamento & ~ indica al server Rsyslog locale di interrompere ulteriormente l'elaborazione del messaggio di registro ricevuto e di eliminare i messaggi (non di scriverli nei file di registro interni).

Il nome RemoteLogs è un nome arbitrario assegnato a questa direttiva del modello. Puoi utilizzare il nome che ritieni più adatto al tuo modello.

Per scrivere tutti i messaggi ricevuti dai client in un unico file di registro denominato in base all'indirizzo IP del client remoto, senza filtrare la struttura che ha generato il messaggio, utilizzare l'estratto seguente.

$template FromIp,"/var/log/%FROMHOST-IP%.log" 
. ?FromIp & ~ 

Un altro esempio di modello in cui tutti i messaggi con flag di funzionalità di autenticazione verranno registrati in un modello denominato "TmplAuth".

$template TmplAuth, "/var/log/%HOSTNAME%/%PROGRAMNAME%.log" 
authpriv.*   ?TmplAuth

Di seguito è riportato un estratto da una definizione di modello dal server Rsyslog 7:

template(name="TmplMsg" type="string"
         string="/var/log/remote/msg/%HOSTNAME%/%PROGRAMNAME:::secpath-replace%.log"
        )

L'estratto del modello sopra può anche essere scritto come:

template(name="TmplMsg" type="list") {
    constant(value="/var/log/remote/msg/")
    property(name="hostname")
    constant(value="/")
    property(name="programname" SecurePath="replace")
    constant(value=".log")
    }

Per scrivere modelli RSYSLOG complessi, leggi il manuale del file di configurazione RSYSLOG emettendo il comando man rsyslog.conf o consultare la documentazione online RSYSLOG.

6. Dopo aver modificato il file di configurazione RSYSLOG con le tue impostazioni come spiegato sopra, riavviare il demone RSYSLOG per applicare le modifiche emettendo il seguente comando:

service rsyslog restart

7. A questo punto, il server Rsyslog dovrebbe essere configurato per fungere da server di registro centralizzato e registrare messaggi dai client syslog. Per verificare i socket di rete Rsyslog, esegui il comando netstat con privilegi root e utilizza grep per filtrare la stringa rsyslog.

netstat -tulpn | grep rsyslog 

8. Se SELinux è abilitato in CentOS/RHEL 7, immetti il comando seguente per configurare SELinux in modo da consentire il traffico rsyslog in base al tipo di socket di rete.

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

9. Se il firewall è abilitato e attivo, esegui il comando seguente per aggiungere le regole necessarie per l'apertura delle porte rsyslog in Firewalld.

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

È tutto! Rsyslog è ora configurato in modalità server e può centralizzare i registri da client remoti. Nel prossimo articolo vedremo come configurare il client Rsyslog sul server CentOS/RHEL 7.

Utilizzando il server Rsyslog come punto di monitoraggio centrale per i messaggi di registro remoti è possibile ispezionare i file di registro e osservare lo stato di integrità dei client o eseguire il debug dei problemi del client più facilmente quando i sistemi si bloccano o sono sottoposti a qualche tipo di attacco.