⌂ Self-hosting

ntfy: notifiche push dal server di casa al telefono

Notifiche push dai servizi di casa con ntfy: argomenti, invio con curl, priorità e tag, controllo degli accessi e consegna immediata anche su iPhone.

Un server di casa fa molte cose quando nessuno lo guarda: backup notturni, aggiornamenti, controlli sui dischi. Il problema è sapere quando qualcosa va storto. Le email di avviso finiscono spesso in una cartella che nessuno apre, e molti servizi di notifica commerciali richiedono account e chiavi presso terzi. ntfy è un servizio di notifiche push libero e semplicissimo: si invia un messaggio con una richiesta HTTP e arriva sul telefono un attimo dopo.

Come funziona

ntfy ragiona per argomenti (topic). Un argomento è semplicemente un nome, per esempio backup-casa. Chi vuole ricevere i messaggi si iscrive all'argomento dall'app per Android o iOS, oppure dal browser. Chi vuole inviare pubblica un messaggio su quell'argomento con una normale richiesta HTTP. Non servono librerie, SDK o registrazioni: basta qualunque strumento capace di fare una richiesta web.

L'invio più semplice, da qualunque script:

curl -d "Backup notturno completato" https://ntfy.casa.esempio/backup-casa

Il server è disponibile come eseguibile singolo o immagine container, consuma pochissime risorse e si configura con un file YAML.

Messaggi più ricchi

Le intestazioni HTTP permettono di arricchire il messaggio senza complicare lo script:

Intestazione Effetto
Title Titolo della notifica
Priority Da 1 (minima) a 5 (massima); la massima suona e vibra con insistenza
Tags Etichette ed emoji mostrate accanto al titolo
Click Indirizzo da aprire quando si tocca la notifica
Actions Pulsanti con azioni, per esempio aprire una pagina o inviare una richiesta

Un esempio per un errore di backup:

curl -H "Title: Backup fallito" -H "Priority: 4" -H "Tags: warning" \
  -d "Il disco esterno non risponde" https://ntfy.casa.esempio/backup-casa

Usare le priorità con giudizio è importante: se tutto è urgente, nulla lo è. Riservo la priorità massima ai problemi che richiedono un intervento immediato, come un disco che segnala errori, e uso quella bassa per i resoconti di routine.

Proteggere gli argomenti

Per impostazione predefinita un server ntfy permette a chiunque conosca il nome di un argomento di leggere e scrivere. Su un'istanza privata conviene invertire la logica:

  1. Impostare l'accesso predefinito a «nega tutto» (auth-default-access: deny-all) e indicare il file del database degli utenti (auth-file).
  2. Creare un utente per il telefono, con permesso di sola lettura sugli argomenti che deve ricevere.
  3. Creare token di accesso per gli script e i servizi che inviano, con permesso di sola scrittura.

In questo modo uno script compromesso può al massimo inviare messaggi, e chi trova il nome dell'argomento non può leggerli.

La consegna su iPhone

Su Android l'app ntfy può mantenere una connessione diretta con il proprio server e ricevere i messaggi immediatamente. Su iOS le notifiche push passano obbligatoriamente attraverso il servizio di Apple, che accetta solo messaggi inviati da server autorizzati. Per questo l'istanza privata si configura con l'opzione upstream-base-url che punta al server pubblico del progetto: quando arriva un messaggio, il proprio server invia al server pubblico solo un avviso di risveglio, e l'app scarica poi il contenuto dal server di casa. Il testo del messaggio non transita dal server pubblico.

Cosa collegare

Molti servizi supportano ntfy direttamente o tramite webhook generici. Alcune idee pratiche:

  • Backup: un messaggio alla fine di ogni esecuzione, con priorità alta solo in caso di errore.
  • Salute dei dischi: avvisi quando i controlli SMART rilevano problemi.
  • Monitoraggio dei servizi: molti strumenti di controllo della disponibilità hanno ntfy tra i canali di notifica.
  • Aggiornamenti disponibili: gli strumenti che sorvegliano le nuove versioni delle immagini possono inviare un riepilogo.
  • Accessi: un messaggio quando qualcuno entra via SSH nel server, inviato da uno script di login.

Non sostituisce il monitoraggio

ntfy consegna messaggi: non si accorge da solo che qualcosa si è fermato. Se il server di casa si spegne, nessuno script invierà l'avviso. Per coprire anche questo caso serve un controllo esterno che si accorga dell'assenza di segnali, per esempio un servizio che si aspetta un «battito» periodico e avvisa quando non arriva. Ospitare ntfy sulla stessa macchina che si vuole sorvegliare è comodo, ma va tenuto presente questo limite.

In sintesi

  • ntfy invia notifiche push con una semplice richiesta HTTP, senza account esterni.
  • Titoli, priorità, tag e azioni si aggiungono con le intestazioni.
  • Su un'istanza privata conviene negare tutto e usare utenti e token con permessi minimi.
  • Su iOS la consegna immediata passa per un server pubblico che riceve solo il risveglio.
  • Per accorgersi di un server spento serve anche un controllo esterno.
MM
Marco Marzaduri

Marco Marzaduri si occupa di cybersecurity, informatica forense e sviluppo web. Laureato in informatica, unisce il rigore dell'analisi tecnica all'attenzione per le persone che usano la tecnologia.

Leggi anche