In Linux, i file di registro sono file che contengono messaggi sulle funzioni di sistema utilizzati dagli amministratori di sistema per identificare eventuali problemi sulle macchine. I registri aiutano gli amministratori a visualizzare gli eventi che si sono verificati nel sistema in periodi di tempo. Di solito, tutti i file di registro vengono conservati in /var/log directory in Linux. In questa posizione sono disponibili diversi tipi di file di registro per la memorizzazione di vari messaggi, come un file di registro per la registrazione di eventi di sistema, un file di registro per i messaggi relativi alla sicurezza, altri file di registro dedicati al kernel, agli utenti o ai lavori cron. Lo scopo principale dei file di registro è quello di risolvere i problemi di sistema. La maggior parte dei file di registro in Linux sono controllati dal servizio rsyslogd. Nelle versioni più recenti delle distribuzioni Linux, i file di registro sono anche controllati e gestiti dal servizio di sistema journald, che fa parte del programma di inizializzazione di systemd. I log archiviati dal demone journal sono scritti in formato binario e sono principalmente volatili, archiviati nella RAM e in un buffer ad anello in /run/log/journal/. Tuttavia, il servizio journal può anche essere configurato per archiviare in modo permanente i messaggi Syslog.
In Linux, il server rsyslog può essere configurato per eseguire un log manager centrale, in un modello di client di servizio, e inviare messaggi di log sulla rete tramite protocolli di trasporto TCP o UDP o ricevere log da dispositivi di rete, server, router, switch o altri sistemi o dispositivi incorporati che generano log.
Il demone Rsyslog può essere configurato per essere eseguito come client e server contemporaneamente. Configurato per essere eseguito come server, Rsyslog sarà in ascolto sulla porta predefinita 514 TCP e UDP e inizierà a raccogliere i messaggi di registro inviati sulla rete da sistemi remoti. Come client, Rsyslog invierà sulla rete i messaggi di registro interni a un server Ryslog remoto tramite le stesse porte TCP o UDP.
Rsyslog filtrerà i messaggi di syslog in base alle proprietà e alle azioni selezionate. I filtri rsyslog sono i seguenti:
- Filatori di strutture o priorità
- Filtri basati sulla proprietà
- Filtri basati su espressioni
La struttura filter è rappresentato dal sottosistema interno di Linux che produce i log. Sono classificati come presentato di seguito:
- auth/authpriv =messaggi prodotti dai processi di autenticazione
- cron =log relativi alle attività cron
- demone =messaggi relativi ai servizi di sistema in esecuzione
- kernel =Messaggi del kernel Linux
- posta =messaggi del server di posta
- syslog =messaggi relativi a syslog o altri demoni (il server DHCP invia i log qui)
- lpr =stampanti o messaggi del server di stampa
- locale0 - locale7 =messaggi personalizzati sotto il controllo dell'amministratore
La priorità o gravità i livelli sono assegnati a una parola chiave e a un numero come descritto di seguito.
- emerge =Emergenza – 0
- avviso =Avvisi – 1
- err =Errori – 3
- avviso =Avvertenze – 4
- avviso =Notifica – 5
- informazioni =Informazioni – 6
- debug =Debug – 7 livelli più alti
Sono disponibili anche alcune parole chiave Rsyslog speciali come l'asterisco (* ) segno per definire tutte
strutture o priorità, il nessuno parola chiave che non specificano priorità, il segno di uguale (= ) che seleziona solo quella priorità e il punto esclamativo (! ) che nega una priorità.
La parte dell'azione del syslog è rappresentata dalla destinazione dichiarazione. 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 named pipe o FIFO. I messaggi di log possono anche essere diretti agli utenti, scartati in un buco nero (/dev/null) o inviati a stdout oa un server syslog remoto tramite il protocollo TCP/UDP. I messaggi di log possono anche essere archiviati in un database, come MySQL o PostgreSQL.
Configura Rsyslog come server
Il demone Rsyslog viene installato automaticamente nella maggior parte delle distribuzioni Linux. Tuttavia, se Rsyslog non è installato sul tuo sistema, puoi emettere uno dei seguenti comandi per installare il servizio> avrai bisogno dei privilegi di root per eseguire i comandi.
Nelle distribuzioni basate su Debian:
sudo apt-get install rsyslog
In distribuzioni basate su RHEL come CentOS:
sudo yum install rsyslog
Per verificare se il demone Rsyslog è stato avviato su un sistema, esegui i comandi seguenti, a seconda della versione della tua distribuzione.
Sulle distribuzioni Linux più recenti con systemd:
stato systemctl rsyslog.service
Nelle versioni precedenti di Linux con init:
stato del servizio rsyslog
/etc/init.d/rsyslog status
Per avviare il demone rsyslog, esegui il comando seguente.
Nelle versioni precedenti di Linux con init:
avvio del servizio rsyslog
/etc/init.d/rsyslog start
Sulle ultime distribuzioni Linux:
systemctl avvia rsyslog.service
Per impostare un programma rsyslog per l'esecuzione in modalità server, modificare il file di configurazione principale in /etc/rsyslog.conf. In questo file apporta le seguenti modifiche come mostrato nell'esempio seguente.
sudo vi /etc/rsyslog.conf
Individuare e rimuovere il commento rimuovendo l'hashtag (#) dalle righe seguenti per consentire la ricezione dei messaggi di registro UDP sulla porta 514. Per impostazione predefinita, la porta UDP viene utilizzata da syslog per inviare-ricevere messaggi.
$ModLoad imudp
$UDPServerRun 514
Poiché il protocollo UDP non è affidabile per lo scambio di dati su una rete, è possibile configurare Rsyslog per inviare messaggi di registro a un server remoto tramite il protocollo TCP. Per abilitare il protocollo di ricezione TCP, apri /etc/rsyslog.conf archiviare e decommentare le seguenti righe come mostrato di seguito. Ciò consentirà al demone rsyslog di eseguire il binding e l'ascolto su un socket TCP sulla porta 514.
$ModLoad imtcp
$InputTCPServerRun 514
Entrambi i protocolli possono essere abilitati in rsyslog per essere eseguiti contemporaneamente.
Se vuoi specificare a quali mittenti permetti 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, *.tuodominio.com
Sarà inoltre necessario creare un nuovo modello che verrà analizzato dal demone rsyslog prima di ricevere i log in arrivo. Il modello dovrebbe indicare al server Rsyslog locale dove archiviare i messaggi di registro in arrivo. Definisci il modello subito dopo $AllowedSender linea come mostrato nell'esempio seguente.
$template Incoming-logs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log"
*.* ?Registri in entrata
&~
Per registrare solo i messaggi generati dalla funzione kern, utilizzare la sintassi seguente.
kern.* ?Log in entrata
I log ricevuti vengono analizzati dal modello di cui sopra e verranno archiviati nel file system locale nella directory /var/log/, in file che prendono il nome dalla struttura client del nome host del client che ha prodotto i messaggi:%HOSTNAME% e %PROGRAMNAME% variabili.
Il sotto &~ la regola di reindirizzamento configura il demone Rsyslog per salvare i messaggi di registro in entrata solo nei file sopra specificati dai nomi delle variabili. In caso contrario, i registri ricevuti verranno ulteriormente elaborati e archiviati anche nel contenuto dei registri locali, come il file /var/log/syslog.
Per aggiungere una regola per eliminare tutti i messaggi di registro correlati alla posta, puoi utilizzare la seguente istruzione.
posta.* ~
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 da Rsyslog versione 7, è possibile utilizzare un nuovo formato di configurazione per dichiarare un modello in un server Rsyslog.
Un esempio di modello della versione 7 può apparire come mostrato nelle righe seguenti.
template(name="MyTemplate" type="string"
string="/var/log/%FROMHOST-IP%/%PROGRAMNAME:::secpath-replace%.log"
)
Un'altra modalità in cui puoi scrivere il modello sopra può essere anche quella mostrata 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 le modifiche apportate al file di configurazione di rsyslog, è necessario riavviare il demone per caricare la nuova configurazione.
riavvio del servizio sudo rsyslog
sudo systemctl riavvia rsyslog
Per verificare quali socket rsyslog in stato di ascolto sono aperti su un sistema Debian Linux, puoi eseguire netstat comando con privilegi di root. Passa i risultati tramite un'utilità di filtro, come grep .
sudo netstat –tulpn | grep rsyslog
Tieni presente che devi anche aprire le porte Rsyslog nel firewall per consentire la creazione di connessioni in entrata.
Nelle distribuzioni basate su RHEL con Firewalld attivato emettere i comandi seguenti:
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 emettere i seguenti comandi:
ufw consente 514/tcp
ufw allow 514/udp
Regole del firewall di 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 consentire l'esecuzione del demone rsyslog in modalità client e l'output di messaggi di registro locali su un server Rsyslog remoto, modificare /etc/rsyslog.conf file e aggiungi una delle seguenti righe:
Questa riga consente al servizio Rsyslog di inviare tutti i registri interni a un server Rsyslog distante sulla porta UDP 514.
Per inviare i log tramite protocollo TCP, utilizzare il seguente modello:
Per inviare solo i registri relativi a cron con tutte le priorità su un server rsyslog, utilizzare il modello seguente:
cron.* @ IP_reomte_syslog_server:514
Nei casi in cui il server Rsyslog non è raggiungibile tramite rete, aggiungere le righe seguenti al file /etc/rsyslog.conf sul lato client per archiviare temporaneamente i registri in un file bufferato su disco, fino a quando il server non è online.
Coda $ActionQueueFileName
$ActionQueueMaxDiskSpace 1g
$ActionQueueSaveOnShutdown on
$ActionQueueType LinkedList
$ActionResumeRetryCount -1
Per applicare le regole di cui sopra, il demone Rsyslog deve essere riavviato per agire come client.