Come ricevere notifiche push istantanee per accessi SSH su Linux Debian con PAM e ntfy

Configura notifiche SSH istantanee con PAM e ntfy self-hosted: alert push veloci sul telefono, massima privacy, zero dipendenze da Google. Guida per server Linux Debian.

Sapere chi accede al proprio server Linux è una buona pratica di sicurezza che può fare la differenza tra individuare tempestivamente un accesso non autorizzato e scoprirlo troppo tardi. Se gestisci un VPS, che tu sia l’unico ad avere accesso o che tu lavori in team, avere visibilità in tempo reale sulle connessioni SSH ti dà un livello di consapevolezza e controllo aggiuntivo.

Il problema con molte soluzioni esistenti è che si basano su email (lente e spesso dipendenti da servizi di terze parti come Gmail) o su script complessi che monitorano i log. La soluzione che ti propongo è diversa: sfrutta PAM (Pluggable Authentication Modules) per integrarsi direttamente nel processo di autenticazione e ntfy self-hosted per inviare notifiche push istantanee al tuo smartphone ogni volta che qualcuno (incluso tu) accede al tuo VPS via SSH, SFTP o Cockpit.

Requisiti

Prima di iniziare, assicurati di avere:

  • Un VPS con Debian 12, Ubuntu o distribuzione simile
  • Un server ntfy già configurato e funzionante (se non ce l’hai, consulta la documentazione ufficiale su https://docs.ntfy.sh)
  • Accesso root o sudo al server
  • curl installato (di solito già presente)

Perché ntfy self-hosted? Tre motivi fondamentali:

  • Velocità: le notifiche push arrivano in pochi secondi, non minuti come le email.
  • Privacy: tutto gira sul tuo server, nessun dato passa per servizi esterni.
  • Controllo totale: nessun servizio di terze parti può interrompere il tuo sistema di notifiche.

In questa guida ti mostrerò come configurare questo sistema passo dopo passo.

Come abilitare gli avvisi di accesso SSH utilizzando PAM

PAM (Pluggable Authentication Modules) è il sistema modulare che Linux usa per gestire l’autenticazione. È uno dei componenti più potenti e meno conosciuti del sistema: decide chi può accedere, come e quando.

Quando qualcuno accede con SSH, il sistema richiede istruzioni al PAM. Di solito, il PAM controlla password, chiavi o 2FA, ma possiamo anche dirgli: “Ogni volta che inizia una nuova sessione SSH, esegui questo script”. In questo modo, lo script ottiene dettagli utili come il nome utente e l’indirizzo IP e può inviarti immediatamente una notifica, senza bisogno di scansionare i log o eseguire daemon aggiuntivi.

Passo 1: Creiamo lo script di notifica

Verrà eseguito automaticamente da PAM ad ogni login riuscito e si occuperà di raccogliere le informazioni e inviarle a ntfy.

Apri il terminale e crea il file:

sudo nano /usr/local/bin/pam-ssh-notify.sh

Copia al suo interno questo codice:

#!/bin/bash
# Script PAM per notifiche accessi SSH via ntfy
# Viene eseguito automaticamente ad ogni login SSH riuscito

# IMPORTANTE: Ignora eventi di chiusura sessione
# Vogliamo notifiche solo all'apertura, non alla disconnessione
[ "${PAM_TYPE}" = "close_session" ] && exit 0

# ==========================================
# CONFIGURAZIONE - Modifica questi valori
# ==========================================
NTFY_URL="https://ntfy.tuodominio.com/ssh-login"
NTFY_TOKEN="tk_xxxxxxxxxxxxxxxxxx"  # Il tuo token ntfy

# ==========================================
# INFORMAZIONI
# ==========================================
# PAM ci fornisce automaticamente queste variabili:
USER_NAME="${PAM_USER:-unknown}"      # Utente che fa login
SRC_IP="${PAM_RHOST:-localhost}"      # IP sorgente della connessione
HOST_NAME="$(hostname -f 2>/dev/null || hostname)"  # Hostname del server
TIMESTAMP="$(date '+%Y-%m-%d %H:%M:%S')"             # Data e ora

# ==========================================
# MESSAGGIO
# ==========================================
TITLE="SSH Login"
MESSAGE="Nuovo accesso SSH rilevato

Utente: ${USER_NAME}
IP sorgente: ${SRC_IP}
Server: ${HOST_NAME}
Data/Ora: ${TIMESTAMP}"

# ==========================================
# INVIO NOTIFICA
# ==========================================
# Eseguiamo in background (&) per non rallentare il login
# Output rediretto a /dev/null per evitare interferenze
curl -sS -X POST \
     -H "Authorization: Bearer ${NTFY_TOKEN}" \
     -H "Title: ${TITLE}" \
     -H "Priority: urgent" \
     -d "${MESSAGE}" \
     "${NTFY_URL}" >/dev/null 2>&1 &

# Ritorniamo sempre successo per non bloccare il login
exit 0

Prima di salvare, nella sezione CONFIGURAZIONE sostituisci:

  • https://ntfy.tuodominio.com con l’URL del tuo server ntfy
  • /ssh-login con il topic che vuoi usare per le notifiche SSH.Puoi lasciare ssh-login o scegliere un nome diverso come vps-access, server-alerts, ecc…
  • tk_xxxxxxxxxxxxxxxxxx con il tuo token ntfy

Sul tuo client ntfy (app o web) ti iscrivi al topic per ricevere le notifiche.

Salva il file (Ctrl+O), Invio ed esci (Ctrl+X).

Passo 2: Impostiamo i permessi corretti

Ora rendiamo lo script eseguibile e proteggiamolo:

sudo chmod 700 /usr/local/bin/pam-ssh-notify.sh

poi

sudo chown root:root /usr/local/bin/pam-ssh-notify.sh

I permessi 700 significano che:

  • Il proprietario (root) può leggere, scrivere ed eseguire
  • Il gruppo non ha alcun permesso
  • Gli altri utenti non hanno alcun permesso

Questo protegge il token ntfy presente nello script: solo root può leggerlo. Altri utenti del sistema non possono vedere il contenuto del file.

Passo 3: Integriamo lo script con PAM

Ora dobbiamo dire a PAM di eseguire il nostro script ad ogni login SSH. Questo si fa modificando il file di configurazione PAM per il servizio SSH.

Apri il file:

sudo nano /etc/pam.d/sshd

Scorri fino alla fine del file. Troverai diverse righe che iniziano con session, che definiscono cosa succede durante l’apertura e la chiusura di una sessione. Dopo la fine di tutte queste righe session, aggiungi:

session optional pam_exec.so /usr/local/bin/pam-ssh-notify.sh

Salva (Ctrl+O, Invio) ed esci (Ctrl+X).

Passo 4: Verifichiamo che tutto funzioni

Prima di provare un vero login, testiamo lo script manualmente simulando le variabili PAM da Terminale:

sudo PAM_USER=testuser \
     PAM_RHOST=192.168.1.100 \
     PAM_TYPE=open_session \
     /usr/local/bin/pam-ssh-notify.sh

Se tutto è configurato correttamente, dovresti ricevere una notifica su ntfy con:

Utente: testuser
IP sorgente: 192.168.1.100
Server: il tuo hostname
Data e ora corrente

Conclusione

Configurare PAM per le notifiche SSH è la soluzione più pulita: si aggancia direttamente al processo di autenticazione, senza bisogno di monitorare log o tenere daemon sempre attivi. Una volta impostato, sai subito chi si è connesso (utente), da dove (IP) e quando (data e ora). Se vedi un accesso che non riconosci, lo noti immediatamente.

Con ntfy self-hosted hai notifiche push veloci sul telefono, tutto gira sul tuo server. Ogni accesso SSH, SFTP o Cockpit genera un alert istantaneo.

Le notifiche sono utili, ma non bastano da sole. Servono anche:

Fail2Ban o SSHGuard – Bloccano automaticamente chi prova a entrare con brute-force. Le notifiche ti dicono chi è entrato, Fail2Ban impedisce a chi non deve di provarci troppo.

Chiavi SSH al posto delle password – Disabilita completamente l’autenticazione a password. Le chiavi SSH sono infinitamente più sicure e rendono inutili i tentativi di indovinare la password.

Autenticazione a due fattori (2FA) – Anche se qualcuno ruba le tue credenziali, senza il secondo fattore (Authenticator o simili) non entra.

Firewall configurato bene – Limita quali IP possono raggiungere la porta SSH. Se ti connetti sempre dagli stessi posti, metti in whitelist solo quelli.

Port knocking o VPN – Per paranoia massima: nascondi proprio la porta SSH finché non “bussi” nella sequenza giusta, o richiedi VPN prima ancora di vedere SSH.

Se questa guida ti è stata utile, condividila. Se hai domande o vuoi raccontare come l’hai adattata al tuo setup, scrivilo nei commenti: mi fa sempre piacere leggere come viene usata nella pratica.

Grazie per aver letto fin qui!

emanuelegori
emanuelegori

emanuelegori è un blogger appassionato di FOSS e autore di questo blog.

Su Homelab Notes trovi guide pratiche, spunti e consigli per scoprire il mondo del software libero, delle soluzioni self-hosted e delle alternative open source ai servizi commerciali più diffusi.
Quando non scrive, è online nel Fediverso con spirito indipendente e tanta voglia di condividere conoscenza.

Lascia una risposta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Leave the field below empty!