Utilizzo di postfix
per la segnalazione dei processi del server¶
Prerequisiti¶
- Completo comfort nell'operare dalla riga di comando su un server Rocky Linux
- Familiarità con un editor di vostra scelta (questo documento utilizza l'editor vi, ma potete sostituirlo con il vostro editor preferito)
- Conoscenza del DNS (Domain Name System) e dei nomi host
- L'abilità di assegnare variabili in uno script bash
- Conoscenza di ciò che fanno i comandi
tail
,more
,grep
, edate
Introduzione¶
Molti amministratori di server Rocky Linux scrivono script per eseguire attività specifiche, come i backup o la sincronizzazione dei file, e molti di questi script generano log che contengono informazioni utili e talvolta molto importanti. Tuttavia, il solo fatto di avere i registri non è sufficiente. Se un processo fallisce e ne viene registrato il fallimento, ma l'amministratore impegnato non esamina il registro, potrebbe verificarsi una catastrofe.
Questo documento mostra come utilizzare l'MTA (mail transfer agent) di postfix
per acquisire i dettagli del log da un particolare processo e inviarli via e-mail. Inoltre, tratta dei formati delle date nei registri e aiuta a identificare il formato da utilizzare nella procedura di creazione dei rapporti.
Ricordate che questa è solo la punta dell'iceberg di ciò che potete fare con la segnalazione tramite postfix
. Da notare che è sempre una buona strategia di sicurezza limitare i processi in esecuzione solo a quelli di cui si ha bisogno per tutto il tempo.
Questo documento mostra come attivare postfix solo per le attività di invio dei rapporti necessarie e poi spegnerlo di nuovo.
Definizione postfix
¶
postfix
è un demone server utilizzato per l'invio di e-mail. È più sicuro e più semplice di sendmail, un altro MTA che per anni è stato l'MTA predefinito. È possibile utilizzarlo come parte di un server di posta completo.
Installazione di postfix
¶
Oltre a postfix
, è necessario mailx
per verificare la capacità di inviare e-mail. Per installare queste e le eventuali dipendenze necessarie, inserire quanto segue nella riga di comando del server Rocky Linux:
dnf install postfix mailx
Modifiche a Rocky Linux 9.0
Questa procedura funziona perfettamente in Rocky Linux 9.0. La differenza è data dalla provenienza del comando mailx
. Mentre in 8.x è possibile installarlo per nome, in 9.0 mailx
proviene dal pacchetto appstream s-nail
. Per installare i pacchetti necessari, è necessario utilizzare:
dnf install postfix s-nail
Test e configurazione di postfix
¶
Prima il test della Posta¶
Prima di configurare postfix
, è necessario conoscere l'aspetto della posta quando lascia il server, poiché probabilmente si desidera modificarlo. Per farlo, avviare postfix
:
systemctl start postfix
Eseguire il test con mail
fornito da mailx
(o s-nail
):
mail -s "Testing from server" myname@mydomain.com
Verrà visualizzata una riga vuota. Digitare qui il messaggio di prova:
testing from the server
Premete invio e inserite un singolo punto:
.
Il sistema risponde con il seguente messaggio:
EOT
Lo scopo di questa operazione è di vedere come la nostra posta appare al mondo esterno. Si può avere un'idea di questo dal maillog che si attiva all'avvio di postfix
.
Utilizzare questo comando per visualizzare l'output del file di log:
tail /var/log/maillog
Si vedrà qualcosa di simile a questo, anche se il file di registro avrà domini diversi per l'indirizzo e-mail e altri elementi:
Mar 4 16:51:40 hedgehogct postfix/postfix-script[735]: starting the Postfix mail system
Mar 4 16:51:40 hedgehogct postfix/master[737]: daemon started -- version 3.3.1, configuration /etc/postfix
Mar 4 16:52:04 hedgehogct postfix/pickup[738]: C9D42EC0ADD: uid=0 from=<root>
Mar 4 16:52:04 hedgehogct postfix/cleanup[743]: C9D42EC0ADD: message-id=<20210304165204.C9D42EC0ADD@somehost.localdomain>
Mar 4 16:52:04 hedgehogct postfix/qmgr[739]: C9D42EC0ADD: from=<root@somehost.localdomain>, size=457, nrcpt=1 (queue active)
Mar 4 16:52:05 hedgehogct postfix/smtp[745]: connect to gmail-smtp-in.l.google.com[2607:f8b0:4001:c03::1a]:25: Network is unreachable
Mar 4 16:52:06 hedgehogct postfix/smtp[745]: C9D42EC0ADD: to=<myname@mydomain.com>, relay=gmail-smtp-in.l.google.com[172.217.212.26]
:25, delay=1.4, delays=0.02/0.02/0.99/0.32, dsn=2.0.0, status=sent (250 2.0.0 OK 1614876726 z8si17418573ilq.142 - gsmtp)
Mar 4 16:52:06 hedgehogct postfix/qmgr[739]: C9D42EC0ADD: removed
L'indirizzo "somehost.localdomain" indica che è necessario apportare alcune modifiche. Arrestare prima il demone postfix
:
systemctl stop postfix
Configurazione di postfix
¶
Poiché non si sta configurando un server di posta completo e perfettamente funzionante, le opzioni di configurazione da utilizzare non sono numerose. La prima cosa da fare è modificare il file main.cf (letteralmente il file di configurazione principale di postfix
). Eseguire prima una copia di backup:
cp /etc/postfix/main.cf /etc/postfix/main.cf.bak
Modificarlo:
vi /etc/postfix/main.cf
Nel nostro esempio, il nome del server è "bruno" e il nome del dominio è "nostrodominio.com". Trovare la riga nel file:
#myhostname = host.domain.tld
È possibile rimuovere l'annotazione (#) o aggiungere una riga sotto questa riga. In base al nostro esempio, la riga si leggerà:
myhostname = bruno.ourdomain.com
Quindi, trovare la riga per il nome di dominio:
#mydomain = domain.tld
Anche in questo caso, rimuovete il commento e modificatelo, oppure aggiungete una riga sotto di esso:
mydomain = ourdomain.com
Infine, andate in fondo al file e aggiungete questa riga:
smtp_generic_maps = hash:/etc/postfix/generic
Salvare le modifiche (in vi
, sarà Shift : wq!
) e uscire dal file.
Prima di continuare a modificare il file generico, è necessario vedere come si presenterà l'e-mail. In particolare, si vuole creare il file " generic " a cui si fa riferimento nel file main.cf di cui sopra:
vi /etc/postfix/generic
Questo file comunica a postfix
l'aspetto di qualsiasi e-mail proveniente da questo server. Ricordate la nostra e-mail di prova e il file di log? È qui che risolviamo tutto questo:
root@somehost.localdomain root@bruno.ourdomain.com
@somehost.localdomain root@bruno.ourdomain.com
Successivamente, occorre indicare a postfix
di utilizzare tutte le nostre modifiche. Questo si può fare con il comando postmap:
postmap /etc/postfix/generic
Avviate postfix
e testate di nuovo la vostra email con la stessa procedura usata sopra. Ora si vedrà che tutte le istanze di "localdomain" sono ora il dominio effettivo.
Il comando date e una variabile denominata Today¶
Non tutte le applicazioni utilizzano lo stesso formato di registrazione della data. Potrebbe essere necessario essere creativi con qualsiasi script si scriva per il reporting in base alla data.
Supponiamo di voler esaminare il registro di sistema come esempio e di voler estrarre tutto ciò che ha a che fare con dbus-daemon per la data odierna e di inviarlo via e-mail a noi stessi. (Probabilmente non è l'esempio migliore, ma vi darà un'idea di come potreste farlo)
È necessario utilizzare una variabile nello script. Chiamiamolo "today". Si vuole che si riferisca all'output del comando "date" e che lo formatti in un modo specifico, in modo da poter ottenere i dati necessari dal log del sistema. (in /var/log/messages). Per cominciare, fate alcune indagini.
Per prima cosa, inserite il comando date nella riga di comando:
date
In questo modo si otterrà l'output predefinito della data di sistema, che potrebbe essere simile a questa:
Thu Mar 4 18:52:28 UTC 2021
Controllate il registro di sistema e verificate come registra le informazioni. A tale scopo, utilizzare i comandi more
e grep
:
more /var/log/messages | grep dbus-daemon
Il risultato è qualcosa di simile a questo:
Mar 4 18:23:53 hedgehogct dbus-daemon[60]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher'
Mar 4 18:50:41 hedgehogct dbus-daemon[60]: [system] Activating via systemd: service name='org.freedesktop.nm_dispatcher' unit='dbus-org.freedesktop.nm-dispatcher.service' requested by ':1.1' (uid=0 pid=61 comm="/usr/sbin/NetworkManager --no-daemon " label="unconfined")
Mar 4 18:50:41 hedgehogct dbus-daemon[60]: [system] Successfully activated service 'org.freedesktop.nm_dispatcher
La data e gli output del registro devono essere esattamente gli stessi nel nostro script. Vediamo come formattare la data con una variabile chiamata " today ".
Analizzate cosa dovete fare con la data per ottenere lo stesso risultato del log di sistema. È possibile fare riferimento alla pagina man di Linux o digitare man date
sulla riga di comando per richiamare la pagina di manuale della data per ottenere le informazioni necessarie.
Per formattare la data allo stesso modo di /var/log/messages, è necessario usare le stringhe di formato %b e %e, con %b che è il mese di 3 caratteri e %e che è il giorno riempito con spazi.
Lo script¶
Per il nostro script bash, possiamo dedurre che utilizzeremo il comando date
e una variabile chiamata "today". (Tenete presente che il termine "today" è arbitrario. Questa variabile può essere chiamata in qualsiasi modo). In questo esempio, lo script verrà chiamato test.sh
e collocato in /usr/local/sbin:
vi /usr/local/sbin/test.sh
All'inizio, si noti che anche se il commento nel nostro file dice che si stanno inviando questi messaggi alla posta elettronica, per ora li si sta solo inviando a un log output standard per verificare che siano corretti.
Inoltre, nella prima esecuzione dello script, vengono acquisiti tutti i messaggi per la data corrente, non solo i messaggi di dbus-daemon. Ce ne occuperemo a breve.
Tenete presente che il comando grep
restituisce il nome del file in uscita, cosa che in questo caso non è desiderata. Per rimuoverlo, aggiungete l'opzione "-h" a grep. Inoltre, quando si imposta la variabile " today", è necessario cercare l'intera variabile come stringa, il che richiede la stringa all'interno delle virgolette:
#!/bin/bash
# set the date string to match /var/log/messages
today=`date +"%b %e"`
# grab the dbus-daemon messages and send them to email
grep -h "$today" /var/log/messages
Per il momento è tutto. Salvate le modifiche e rendete lo script eseguibile:
chmod +x /usr/local/sbin/test.sh
Testatelo:
/usr/local/sbin/test.sh
Se tutto funziona correttamente, si otterrà un lungo elenco di tutti i messaggi presenti in /var/log/messages di oggi, compresi, ma non solo, i messaggi di dbus-daemon. Il passo successivo consiste nel limitare i messaggi ai messaggi di dbus-daemon. Modificare nuovamente lo script:
vi /usr/local/sbin/test.sh
#!/bin/bash
# set the date string to match /var/log/messages
today=`date +"%b %e"`
# grab the dbus-daemon messages and send them to email
grep -h "$today" /var/log/messages | grep dbus-daemon
Eseguendo nuovamente lo script, si otterranno solo i messaggi di dbus-daemon e solo quelli che si sono verificati oggi.
Rimane un ultimo passo da compiere. Ricordate che dovete inviare questo documento via e-mail all'amministratore per la revisione. Poiché si utilizza postfix
su questo server solo per la reportistica, non si vuole lasciare il servizio in esecuzione. Avviatelo all'inizio dello script e fermatelo alla fine. In questo caso, il comando sleep
fa una pausa di 20 secondi, assicurando l'invio dell'e-mail prima di chiudere nuovamente postfix
. Questa modifica finale aggiunge i passaggi stop, start e sleep appena discussi e invia il contenuto all'e-mail dell'amministratore.
vi /usr/local/sbin/test.sh
E modificare lo script:
#!/bin/bash
# start postfix
/usr/bin/systemctl start postfix
# set the date string to match /var/log/messages
today=`date +"%b %e"`
# grab the dbus-daemon messages and send them to email
grep -h "$today" /var/log/messages | grep dbus-daemon | mail -s "dbus-daemon messages for today" myname@mydomain.com
# make sure the email has finished before continuing
sleep 20
# stop postfix
/usr/bin/systemctl stop postfix
Eseguite di nuovo lo script e avrete un'e-mail dal server con i messaggi di dbus-daemon.
È ora possibile utilizzare un crontab per programmare l'esecuzione a un'ora specifica.
Conclusioni¶
Utilizzando postfix
si può tenere traccia dei log dei processi che si desidera monitorare. È possibile utilizzarlo insieme allo scripting bash per avere una solida padronanza dei processi di sistema ed essere informati in caso di problemi.
Author: Steven Spencer
Contributors: Ezequiel Bruni, Ganna Zhyrnova