In un homelab con diverse VM, il monitoraggio degli aggiornamenti deve essere un processo automatico. L’obiettivo non è verificare periodicamente e manualmente la disponibilità di nuovi pacchetti, ma fare in modo che il sistema rilevi automaticamente gli aggiornamenti disponibili e generi una notifica, consentendo di intervenire tempestivamente, evitando update automatici e conseguenti brutte sorprese.

updates

Esistono strumenti dedicati alla gestione centralizzata degli aggiornamenti e delle patch di sicurezza, anche piuttosto complessi e multipiattaforma, come PatchMon.

Tuttavia, quando l’esigenza consiste esclusivamente nel ricevere una notifica alla presenza di un pacchetto da aggiornare, l’invio di una email rimane una soluzione semplice ed efficace.

Mentre, per gli aggiornamenti di sicurezza, si consiglia di configurare gli unattended upgrades.

Monitoraggio degli aggiornamenti degli host Linux

SMTP (Simple Mail Transfer Protocol) è uno dei protocolli utilizzati per l’invio e la ricezione delle email.

Per l’invio di un messaggio sono necessari due componenti:

  • un server SMTP, generalmente fornito dal provider del servizio di posta elettronica (o selfhostato)
  • un client SMTP, installato sul sistema dal quale deve essere effettuato l’invio

SSMTP è, appunto, un client SMTP, disponibile come pacchetto in diverse distribuzioni Linux; la disponibilità può essere verificata nei repository della distribuzione utilizzata.

Per installare il pacchetto SSMTP in Debian e derivate, eseguire il comando:

apt install ssmtp

Configurazione di SSMTP

La configurazione del client deve essere effettuata inserendo i parametri del server SMTP e le relative credenziali nel file /etc/ssmtp/ssmtp.conf.

Un esempio di configurazione è il seguente:

# Config file for sSMTP sendmail
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
root=updates@example.com

# The place where the mail goes. The actual machine name is required no
# MX records are consulted. Commonly mailhosts are named mail.domain.com
mailhub=mail.example.com:465

# The full hostname
hostname=example.com

# Are users allowed to set their own From: address?
# YES - Allow the user to specify their own From: address
# NO - Use the system generated From: address
FromLineOverride=YES
AuthMethod=LOGIN
UseSTARTTLS=NO
UseTLS=YES

AuthUser=updates@example.com
AuthPass=

Il valore di AuthPass deve contenere la password associata all’account SMTP. Per motivi di sicurezza, è opportuno che il file sia leggibile e scrivibile solamente dall’utente root: chmod 600 /etc/ssmtp/ssmtp.conf.

Per verificare che la configurazione sia corretta, eseguire un semplicissimo test:

echo "Questa è una mail di test" | mail -s "Email di test" -r updates@example.com to-mailbox@example.com

Script per il controllo degli aggiornamenti

Una volta configurato il sistema per l’invio delle email, è possibile automatizzare il controllo degli aggiornamenti attraverso un semplicissimo script, come /opt/system-updates.sh:

#!/bin/bash

apt update >> /dev/null
PACKAGES=$(apt list --upgradable 2>/dev/null | grep -v "Listing...")

HOSTNAME=$(hostname -f)
FROM="updates@example.com"
TO=""

if [ -n "$PACKAGES" ]; then
    echo -e "Sono presenti i seguenti aggiornamenti:\n\n$PACKAGES" | mail -s "$HOSTNAME: aggiornamenti disponibili" -r $FROM $TO
fi

exit 0

Lo script esegue apt update, verifica la presenza di pacchetti aggiornabili e, qualora vengano rilevati aggiornamenti, invia una email contenente l’elenco dei pacchetti interessati.

La variabile HOSTNAME contiene il nome completo della macchina, mentre FROM e TO definiscono rispettivamente il mittente e il destinatario della notifica.

Per evitare l’esecuzione manuale dello script, l’avvio deve essere pianificato attraverso un cron.

Creare un file dedicato in /etc/cron.d/ col seguente contenuto:

SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

00 21 * * * /opt/system-updates.sh

Con questa configurazione, ogni giorno alle 21:00 viene eseguito lo script. Se sono disponibili aggiornamenti, viene generata una email contenente l’elenco dei pacchetti aggiornabili.

email-updates

Monitoraggio degli aggiornamenti dei container Docker

Per i container Docker può essere utilizzato Watchtower (un container che monitora se stesso e tutti gli altri container presenti sulla stessa macchina).

watchtower

Si consiglia di configurare Watchtower in modalità monitor_only: il software verifica la disponibilità di nuove versioni delle immagini senza procedere automaticamente all’aggiornamento dei container. Alla presenza di una nuova immagine, viene inviata una email all’indirizzo specificato.

Un docker compose di esempio è il seguente:

services:
  watchtower:
    image: nickfedor/watchtower
    env_file: .env
    mem_limit: 64m
    restart: always
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    cap_drop:
      - ALL
    security_opt:
      - no-new-privileges:true
    environment:
      WATCHTOWER_SCHEDULE: "0 0 21 * * *"
      TZ: Europe/Rome
      WATCHTOWER_MONITOR_ONLY: true
      WATCHTOWER_CLEANUP: true
      WATCHTOWER_NOTIFICATION_URL: ${WATCHTOWER_NOTIFICATION_URL}

I parametri relativi alle notifiche possono essere definiti nel file .env:

WATCHTOWER_NOTIFICATIONS_HOSTNAME="Home.lan"
WATCHTOWER_NOTIFICATION_URL="smtp://user:secret@smtp.example.com:465/?fromaddress=sender@example.com&toaddresses=recipient@example.com"

In questo modo, anche per i container Docker il controllo degli aggiornamenti diventa automatico.

Riferimenti