Post

🔔 Ntfy service de notification

🔔 Ntfy service de notification

Ntfy, qui se prononce “notify”, est un service de notification ultra lĂ©ger, permettant d’envoyer des messages vers un smartphone ou un ordinateur via de simples scripts, sans besoin de compte et totalement gratuitement !

Ntfy Installation

Le CLI de ntfy vous permet de publier des messages, de vous abonner Ă  des sujets et d’hĂ©berger vous-mĂȘme votre propre serveur ntfy. C’est trĂšs simple. Il suffit d’installer le binaire, le paquet ou l’image Docker, de le configurer et de l’exĂ©cuter.

Les Ă©tapes suivantes ne sont nĂ©cessaires que si vous voulez hĂ©berger votre propre serveur ntfy ou si vous voulez utiliser le CLI ntfy. Si vous voulez juste envoyer des messages en utilisant ntfy.sh, vous n’avez pas besoin d’installer quoi que ce soit. Vous pouvez simplement utiliser curl.

Le serveur ntfy se prĂ©sente sous la forme d’un binaire liĂ© statiquement et est livrĂ© sous forme de paquetage tarball, deb/rpm et sous forme d’image Docker. Nous supportons amd64, armv7 et arm64.
Veuillez consulter la page des versions pour les binaires et les paquets deb/rpm.

Debian

manuellement

1
2
3
wget https://github.com/binwiederhier/ntfy/releases/download/v2.8.0/ntfy_2.8.0_linux_amd64.deb
sudo dpkg -i ntfy_*.deb
sudo systemctl enable ntfy

Avec le dépÎt

1
2
3
4
5
6
7
8
9
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://archive.heckel.io/apt/pubkey.txt | sudo gpg --dearmor -o /etc/apt/keyrings/archive.heckel.io.gpg
sudo apt install apt-transport-https
sudo sh -c "echo 'deb [arch=amd64 signed-by=/etc/apt/keyrings/archive.heckel.io.gpg] https://archive.heckel.io/apt debian main' \
    > /etc/apt/sources.list.d/archive.heckel.io.list"  
sudo apt update
sudo apt install ntfy
sudo systemctl enable ntfy
sudo systemctl start ntfy

Arch Linux

2 méthodes

Méthode 1
Vous pouvez récupérer le fichier binaire ntfy depuis le dépÎt GitHub

CrĂ©er un utilisateur systĂšme nommĂ© “ntfy”
Utilisez l’option -r (–system) pour crĂ©er un compte d’utilisateur systĂšme

1
sudo useradd -r ntfy

Télécharger la derniÚre version, décompresser, copier binaire dans /usr/local/bin et modifier les droits

1
2
3
4
5
6
7
8
# Téléchargement
wget https://github.com/binwiederhier/ntfy/releases/download/v2.11.0/ntfy_2.11.0_linux_amd64.tar.gz
# Décompresser
tar xzvf ntfy_2.11.0_linux_amd64.tar.gz
# copier binaire
sudo cp ntfy_2.11.0_linux_amd64/ntfy /usr/local/bin/
# modifier les droits
sudo chown ntfy:ntfy /usr/local/bin/ntfy

Méthode 2
installer le paquet

1
yay -S --noconfirm ntfysh-bin

CrĂ©ation groupe et utilisateur Ă  l’installation

1
2
Creating group 'ntfy' with GID 951.
Creating user 'ntfy' (ntfy user) with UID 951 and GID 951.

Alpine Linux

DépÎt communautaire activé

1
sudo apk add ntfy

Configuration du serveur ntfy

Le serveur ntfy peut ĂȘtre configurĂ© de trois maniĂšres :

  1. Par défaut, en utilisant un fichier de configuration (typiquement dans /etc/ntfy/server.yml)
  2. via des arguments de ligne de commande
  3. ou en utilisant des variables d’environnement.

ntfy derriĂšre un proxy

Si vous exĂ©cutez ntfy derriĂšre un proxy, vous devez activer le drapeau behind-proxy. Cela demandera Ă  la logique de limitation de taux d’utiliser l’en-tĂȘte X-Forwarded-For comme identifiant principal d’un visiteur, plutĂŽt que l’adresse IP distante. Si l’indicateur “behind-proxy” n’est pas activĂ©, tous les visiteurs seront comptĂ©s comme un seul, car du point de vue du serveur ntfy, ils partagent tous l’adresse IP du proxy.

Fichier /etc/ntfy/server.yml, les modifications

1
2
3
listen-http: "127.0.0.1:8100"

behind-proxy: true

Démarrer le service

1
sudo systemctl start ntfy

Proxy Nginx

Le fichier proxy /etc/nginx/conf.d/noti.rnmkcy.eu.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
server {
    listen 80;
    listen [::]:80;
    server_name  noti.rnmkcy.eu;

    # redirect all plain HTTP requests to HTTPS
    return 301 https://noti.rnmkcy.eu$request_uri;
}

server {
    # ipv4 listening port/protocol
    listen       443 ssl http2;
    # ipv6 listening port/protocol
    listen           [::]:443 ssl http2;
    server_name  noti.rnmkcy.eu;

    include /etc/nginx/conf.d/security.conf.inc;

  location / { 
    proxy_pass              http://127.0.0.1:8100;
    proxy_http_version 1.1;

    proxy_set_header Host $host;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_connect_timeout 3m;
    proxy_send_timeout 3m;
    proxy_read_timeout 3m;

    client_max_body_size 0; # Stream request body to backend
  } 

}

Vérifier et recharger nginx

1
sudo nginx -t && sudo systemctl reload nginx

PremiĂšre connexion depuis un navigateur firefox https://noti.rnmkcy.eu

AprÚs avoir installé le serveur ntfy, accessibilité lien https://noti.rnmkcy.eu

Instance publique

Application android ntfy

Installer l’application android ntfy
Pour s’abonner à un sujet, il suffit de lancer l’application et de cliquer sur le bouton +

Nous Ă©crivons ensuite le nom du sujet auquel nous voulons nous abonner (le nom est complĂštement arbitraire), et, pour utiliser notre instance Ntfy auto-hĂ©bergĂ©e, nous cochons « Utiliser un serveur diffĂ©rent » et entrons l’IP de notre serveur ; enfin, nous cliquons sur « ABONNER »

Pour envoyer une notification au sujet, il suffit d’envoyer une requĂȘte POST ou PUT au serveur, en utilisant le langage de programmation de notre choix ou notre outil de ligne de commande prĂ©fĂ©rĂ© (commande ntfy pub ou une requĂȘte POST via curl).

1
2
curl -d "Ceci est une notification ntfy" https://noti.rnmkcy.eu/notif_infos
ntfy pub notif_infos "Ceci est une notification ntfy"

La notification push devrait apparaĂźtre sur notre appareil client android

Affichage des messages au format JSON

1
{"topic":"monsujet","message":"Ceci est une notification ntfy","time":1622656800}

Exemples d’utilisation
Recevoir une alerte Ă  chaque connexion SSH en utilisant ntfy

Instance ntfy privée

Configurer server.yml

La façon la plus simple de configurer une instance privée est de définir auth-default-access: deny-all dans le fichier /etc/ntfy/server.yml :

1
2
auth-file: /var/lib/ntfy/user.db
auth-default-access: "deny-all"

Le fichier de configuration /etc/ntfy/server.yml

1
2
3
4
5
listen-http: "127.0.0.1:8100"
auth-file: /var/lib/ntfy/user.db
auth-default-access: "deny-all"
behind-proxy: true
# web-root: "disable"

Explications

  • Listen-http - Le port sur lequel le serveur Web HTTP Ă©coute (par dĂ©faut = 80). Vous pouvez Ă©galement ajouter une adresse IP Ă  laquelle vous connecter (listen-http : "127.0.0.1:8100")
  • auth-file - Emplacement du user.dbfichier d’authentification.
  • auth-default-access - DĂ©finir ceci sur “deny-all” forcera tous les sujets Ă  ĂȘtre privĂ©s par dĂ©faut.
  • behind-proxy - Si ntfy est dĂ©ployĂ© derriĂšre un proxy comme Caddy, nginx, etc., alors cela doit ĂȘtre dĂ©fini sur true.
  • web-root - Emplacement du rĂ©pertoire racine pour ntfy. Le rĂ©glage sur « dĂ©sactiver » dĂ©sactive le client Web.

Redémarrer le serveur ntfy

1
sudo systemctl restart ntfy

Créer utilisateur

Passer en mode su : sudo -s

Créer utilisateur dans NTFY (Users and roles)
Puisque nous avons dĂ©jĂ  dĂ©fini l’ attribut auth-file et auth-default-access, nous pouvons passer Ă  l’ajout de notre premier utilisateur administrateur “notif”.

1
ntfy user add --role=admin notif

L’appel de cette commande avec un nom d’utilisateur vous invitera automatiquement Ă  crĂ©er un mot de passe pour le nouvel utilisateur.
Saisir un mot de passe pour “notif”
user leno added with role admin

Une fois l’utilisateur créé, nous pouvons l’abonner Ă  notre premier sujet de notification.

1
ntfy access notif notif_infos rw

Explications

  • rw spĂ©cifie le niveau d’accĂšs de l’utilisateur notif pour le sujet notif_infos. Puisque cet utilisateur sera utilisĂ© pour envoyer des notifications, nous devons lui donner la possibilitĂ© d’écrire sur le sujet.
  • wo “write-only” (Ă©criture seule)
  • rw “read-write” (lecture-Ă©criture)
  • ro “read-only” (lecture seule)

Vous pouvez modifier les autorisations d’accĂšs Ă  tout moment, en rĂ©exĂ©cutant la commande ci-dessus avec un niveau d’accĂšs diffĂ©rent.

Créez maintenant un deuxiÚme utilisateur notifmob avec les autorisations sur le sujet en lecture seul.
Ce deuxiÚme utilisateur sera utilisé pour notre application mobile.

1
2
ntfy user add notifmob
ntfy access notifmob notif_infos ro

Liste des commandes pour la gestion des utilisateurs

1
2
3
4
5
6
7
sudo ntfy user list                     # Shows list of users (alias: 'ntfy access')
sudo ntfy user add phil                 # Add regular user phil  
sudo ntfy user add --role=admin phil    # Add admin user phil
sudo ntfy user del phil                 # Delete user phil
sudo ntfy user change-pass phil         # Change password for user phil
sudo ntfy user change-role phil admin   # Make user phil an admin
sudo ntfy user change-tier phil pro     # Change phil's tier to "pro"

Une fois que vous avez fait cela, vous pouvez publier et vous abonner en utilisant l’authentification de base avec le nom d’utilisateur/mot de passe donnĂ©. Veillez Ă  utiliser HTTPS pour Ă©viter les Ă©coutes et l’exposition de votre mot de passe.

Authentification

Doc ntfy

A - Utilisateur et mot de passe

Username + password
Lorsque l’agent utilisateur souhaite envoyer des informations d’authentification au serveur, il peut utiliser le champ d’en-tĂȘte Authorization

Le champ d’en-tĂȘte Authorization est construit comme suit :

  • Le nom d’utilisateur et le mot de passe sont combinĂ©s avec un seul deux-points ( :). Cela signifie que le nom d’utilisateur lui-mĂȘme ne peut pas contenir de deux points.
  • La chaĂźne rĂ©sultante est encodĂ©e en une sĂ©quence d’octets. Le jeu de caractĂšres Ă  utiliser pour cet encodage est par dĂ©faut non spĂ©cifiĂ©, tant qu’il est compatible avec US-ASCII, mais le serveur peut suggĂ©rer l’utilisation d’UTF-8 en envoyant le paramĂštre charset.
  • La chaĂźne rĂ©sultante est encodĂ©e Ă  l’aide d’une variante de Base64 (+/ et avec remplissage).
  • La mĂ©thode d’autorisation et un caractĂšre d’espacement (par exemple “Basic “) sont ensuite ajoutĂ©s Ă  la chaĂźne encodĂ©e.

Par exemple, si le navigateur utilise Aladdin comme nom d’utilisateur et open sesame comme mot de passe, la valeur du champ est le codage Base64 de Aladdin:open sesame, ou QWxhZGRpbjpvcGVuIHNlc2FtZQ==. Le champ d’en-tĂȘte Authorization se prĂ©sente alors comme suit :

1
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== 

Pour gĂ©nĂ©rer l’en-tĂȘte d’autorisation, utilisez la norme base64 pour encoder les <nom d'utilisateur>:<mot de passe> sĂ©parĂ©s par deux points et ajoutez-y le mot Basic, c’est-Ă -dire Authorization : Basic base64(<username>:<password>).
Voici un pseudo-code qui, je l’espùre, l’explique mieux :

1
2
3
username = "testuser"
password = "fakepassword"
authHeader = "Basic " + base64(username + " :" + password) // -> Basic dGVzdHVzZXI6ZmFrZXBhc3N3b3Jk

La commande suivante génÚre la valeur appropriée pour vous sur les systÚmes *nix :

1
echo "Basic $(echo -n 'testuser:fakepassword' | base64)"

INFO: EntĂȘte autorisation au format utilisateur:Mot_de_passe base 64
echo -n 'leno:mot de passe' | base64
Renvoie –> eWFubjptb3QgZGUgcGFzc2U=

curl

1
2
3
4
curl \
    -u leno:mypass \
    -d "accĂšs avec authentification" \
    https://noti.rnmkcy.eu/yan_infos

POST http

1
2
3
curl \
 -i -s -X POST -H "Authorization: Basic bGVubzpRpbjpvsZW5vNDk=" \
 -d "POST/HTTP accĂšs avec authentification" "https://noti.rnmkcy.eu/yan_infos"

JavaScript

1
2
3
4
5
6
7
fetch('https://ntfy.example.com/mysecrets', {
    method: 'POST', // PUT works too
    body: 'Look ma, with auth',
    headers: {
        'Authorization': 'Basic cGhpbDpteXBhc3M='
    }
})

Go

1
2
3
4
req, _ := http.NewRequest("POST", "https://ntfy.example.com/mysecrets",
    strings.NewReader("Look ma, with auth"))
req.Header.Set("Authorization", "Basic cGhpbDpteXBhc3M=")
http.DefaultClient.Do(req)

Python

1
2
3
4
5
requests.post("https://ntfy.example.com/mysecrets",
    data="Look ma, with auth",
    headers={
        "Authorization": "Basic cGhpbDpteXBhc3M="
    })

PHP

1
2
3
4
5
6
7
8
9
file_get_contents('https://ntfy.example.com/mysecrets', false, stream_context_create([
    'http' => [
        'method' => 'POST', // PUT also works
        'header' => 
            'Content-Type: text/plain\r\n' .
            'Authorization: Basic cGhpbDpteXBhc3M=',
        'content' => 'Look ma, with auth'
    ]
]));

ntfy CLI

1
2
3
4
ntfy publish \
    -u phil:mypass \
    ntfy.example.com/mysecrets \
    "Look ma, with auth"

B - Jetons (Tokens)

Le jeton peut ĂȘtre utilisĂ© Ă  la place du nom d’utilisateur et du mot de passe lors de l’envoi de messages. (Access tokens)

En plus de l’authentification par nom d’utilisateur/mot de passe, ntfy fournit Ă©galement une authentification par jetons d’accĂšs. Les jetons d’accĂšs sont utiles pour Ă©viter d’avoir Ă  configurer votre mot de passe dans plusieurs applications de publication/abonnement. Par exemple, vous pouvez utiliser un jeton dĂ©diĂ© pour publier Ă  partir de votre hĂŽte de sauvegarde, et un autre Ă  partir de votre systĂšme domotique.

Vous pouvez crĂ©er des jetons d’accĂšs en utilisant la commande ntfy token, ou dans l’application web dans la section “Compte” (lorsque vous ĂȘtes connectĂ©). Voir les jetons d’accĂšs pour plus de dĂ©tails.

Une fois le jeton d’accĂšs créé, vous pouvez l’utiliser pour vous authentifier auprĂšs du serveur ntfy, par exemple lorsque vous publiez ou vous abonnez Ă  des sujets.

La commande ntfy token permet de gĂ©rer les jetons d’accĂšs des utilisateurs. Les jetons peuvent avoir des Ă©tiquettes, et ils peuvent expirer automatiquement (ou ne jamais expirer). Chaque utilisateur peut avoir jusqu’à 20 jetons (codĂ©s en dur).

Exemples de commandes (tapez ntfy token –help ou ntfy token COMMAND –help pour plus de dĂ©tails)

1
2
3
4
5
ntfy token list # Affiche la liste des jetons pour tous les utilisateurs
ntfy token list phil # Affiche la liste des jetons de l'utilisateur phil
ntfy token add phil # Crée un jeton pour l'utilisateur phil qui n'expire jamais
ntfy token add --expires=2d phil # Crée un jeton pour l'utilisateur phil qui expire dans 2 jours
ntfy token remove phil tk_th2sxr...  # Supprimer le jeton

CrĂ©ation d’un jeton d’accĂšs :

1
2
3
4
5
ntfy token add notif
ntfy token add --expires=30d --label="backups" notif
ntfy token list
utilisateur notif
- tk_AgQdq7mVBoFD37zQVN29RhuMzNIz2 (sauvegardes), expire le 15 mars 23 14:33 EDT, accédé depuis 0.0.0.0 le 13 février 23 13:33 EST

Une fois le jeton d’accĂšs créé, vous pouvez l’utiliser pour vous authentifier auprĂšs du serveur ntfy, par exemple lorsque vous publiez ou vous abonnez Ă  des sujets.

Voici un exemple utilisant Bearer auth, avec le jeton tk_AgQdq7mVBoFD37zQVN29RhuMzNIz2 :

curl

1
2
3
4
curl \
  -H "Authorization: Bearer tk_AgQdq7mVBoFD37zQVN29RhuMzNIz2" \
  -d "Look ma, with auth" \
  https://ntfy.example.com/mysecrets

POST http

1
2
3
4
5
POST /mysecrets HTTP/1.1
Host: ntfy.example.com
Authorization: Bearer tk_AgQdq7mVBoFD37zQVN29RhuMzNIz2

Look ma, with auth

JavaScript

1
2
3
4
5
6
7
fetch('https://ntfy.example.com/mysecrets', {
    method: 'POST', // PUT works too
    body: 'Look ma, with auth',
    headers: {
        'Authorization': 'Bearer tk_AgQdq7mVBoFD37zQVN29RhuMzNIz2'
    }
})

Go

1
2
3
4
req, _ := http.NewRequest("POST", "https://ntfy.example.com/mysecrets",
strings.NewReader("Look ma, with auth"))
req.Header.Set("Authorization", "Bearer tk_AgQdq7mVBoFD37zQVN29RhuMzNIz2")
http.DefaultClient.Do(req)

Python

1
2
3
4
5
requests.post("https://ntfy.example.com/mysecrets",
data="Look ma, with auth",
headers={
    "Authorization": "Bearer tk_AgQdq7mVBoFD37zQVN29RhuMzNIz2"
})

PHP

1
2
3
4
5
6
7
8
9
file_get_contents('https://ntfy.example.com/mysecrets', false, stream_context_create([
    'http' => [
        'method' => 'POST', // PUT also works
        'header' =>
            'Content-Type: text/plain\r\n' .
            'Authorization: Bearer tk_AgQdq7mVBoFD37zQVN29RhuMzNIz2',
        'content' => 'Look ma, with auth'
    ]
]));

ntfy CLI

1
2
3
4
ntfy publish \
  --token tk_AgQdq7mVBoFD37zQVN29RhuMzNIz2 \
  ntfy.example.com/mysecrets \
  "Look ma, with auth"

Android ntfy (PRIVE)

Installer android ntfy

Installer l’application ntfy disponible sur F-Droid

Aprùs ouverture de l’application

Il faut saisir utilisateur et mot de passe car notification privée

Configurer application mobile ntfy

Configuration de l’application mobile Android
TĂ©lĂ©chargez d’abord l’application depuis f-droid , et aprĂšs son installation, lancez-la.

Au premier lancement, vous serez accueilli par un Ă©cran vide sans aucun sujet. Pour configurer l’application pour votre instance auto-hĂ©bergĂ©e, ouvrez le menu des paramĂštres (menu Ă  3 points > paramĂštres)

et accédez à « Gérer les utilisateurs » sous Général.

Appuyez sur « Ajouter un nouvel utilisateur » et dans le Service URLchamp, entrez l’URL que vous avez utilisĂ©e pour votre instance ntfy ci-dessus . Les champs Nom d’utilisateur et Mot de passe seront le deuxiĂšme utilisateur que vous avez créé prĂ©cĂ©demment
Une fois les champs remplis, appuyez sur « AJOUTER UN UTILISATEUR ».

Votre section utilisateur devrait alors ressembler à l’image suivante

Appuyez sur la flĂšche de retour (ou faites glisser votre doigt vers l’arriĂšre), entrez le paramĂštre Serveur par dĂ©faut et saisissez Ă  nouveau votre URL ntfy.

Maintenant, appuyez ou faites glisser votre doigt pour revenir Ă  l’écran d’accueil. Pour dĂ©sactiver la notification de livraison instantanĂ©e, qui s’affiche dans votre tiroir de notification, faites glisser votre doigt vers le sĂ©lecteur d’application et appuyez longuement sur l’icĂŽne de l’application ntfy
Appuyez ensuite sur « Informations sur l’application ».

Sur la page des paramĂštres de l’application, appuyez sur Notifications et dĂ©sactivez la notification « Service d’abonnement » sous « Autre » ???.

S’abonner à un sujet
ATTENTION :Pour s'abonner Ă  un sujet, il faut que le sujet existe.
Sur l’écran d’accueil de l’application, appuyez sur le bouton vert « + » et saisissez le nom du sujet que vous avez créé prĂ©cĂ©demment lors de l’ Ă©tape d’accĂšs utilisateur . Appuyez ensuite sur « S’ABONNER ».

Si cela est fait correctement, votre nouveau sujet devrait apparaĂźtre sur l’écran d’accueil de votre application.

Les paramĂštres de l’abonnement peuvent ĂȘtre ajustĂ©s en appuyant dessus puis en appuyant sur le menu Ă  3 points. Appuyez ensuite sur « ParamĂštres d’abonnement » dans le menu. Ici, vous pouvez modifier les prĂ©fĂ©rences de notification ainsi que l’icĂŽne et le nom d’affichage de l’abonnement.

ntfy - Ligne de commande

Sécuriser

Pour Ă©viter que n’importe qui puisse envoyer ou recevoir des messages, vous pouvez utiliser un mot de passe.

1
2
ntfy publish -u admin:myp@ssw0rd ntfy.example.com/monsujet "This is a message"
curl -u admin:myp@ssw0rd -d "This is a message" https://ntfy.example.com/monsujet

Cela implique un hébergement du serveur ntfy

Envoi

1
ntfy publish -u utilisateur:mot_de_passe  ntfysrv.eu/test "Nouveau test depuis PC1 en ligne de commande" |jq

Affichage message expédié

1
2
3
4
5
6
7
8
{
  "id": "WqRBXcEmOoqv",
  "time": 1708692353,
  "expires": 1708735553,
  "event": "message",
  "topic": "test",
  "message": "Nouveau test depuis PC1 en ligne de commande"
}

Réception

Se mettre en attente d’un message

1
2
3
4
# Mot de passe sur serveur privé
ntfy sub -u utilisateur:mot_de_passe  ntfysrv.eu/test |jq
# Clé token tk_xxxxxxxxxxx
ntfy sub -s all --token tk_xxxxxxxxxxx https://ntfysrv.eu/test |jq

Affichage Ă  la rĂ©ception d’un message

1
2
3
4
5
6
7
8
9
{
  "id": "BY9zD5GQqCI9",
  "time": 1708693062,
  "expires": 1708736262,
  "event": "message",
  "topic": "test",
  "title": "Firefox PC1",
  "message": "Nouvel essai depuis le navigateur"
}

Utilitaire jq pour un affichage au format json

Réception avec notify-send

Pour afficher vos notifications directement sur votre environnement de bureau, vous pouvez utiliser la commande ntfy sub avec notify-send.

1
2
3
4
# Mot de passe sur serveur privé
ntfy sub -u utilisateur:mot_de_passe  ntfysrv.eu/test 'notify-send -t 0 "ntfy" "$m"'
# Clé token tk_xxxxxxxxxxx
ntfy sub --token tk_xxxxxxxxxxx https://ntfysrv.eu/test 'notify-send -t 0 "ntfy" "$m"'

Voir tous les anciens messages

Si vous souhaitez voir l’historique des messages, vous pouvez utiliser le paramùtre -s all

1
ntfy sub -s all monsujet

Notification token + curl

L’utilisateur notif a les droits en lecture/Ă©criture et possĂšde une clĂ© token qui englobe utilisateur/mot de passe

Ligne de commande

1
curl -H "Title: Test envoi notification" -u :token_utilisateur_notif https://noti.rnmkcy.eu/notif_infos -d "ceci est un message de test"

Différentes publications Publishing

1
2
3
4
5
6
7
8
9
10
11
12
curl \
 -H "Title: Alerte!" \
 -H "Authorization: Bearer tk_AgQdq7mVBoFD37zQVN29RhuMzNIz2" \
 -H "X-Tags: warning,mailsrv13,daily-backup" \
 -d "Envoi en cas d'erreur!" \
 https://noti.rnmkcy.eu/notif_infos

curl \
  -H "Authorization: Bearer tk_AgQdq7mVBoFD37zQVN29RhuMzNIz2" \
  -d "Look ma, with auth" \
  https://ntfy.example.com/mysecrets

Alerte sur connexion SSH

Alerte en cas de connexion SSH

Le fichier /etc/pam.d/sshd

1
2
# Ă  la fin du fichier
session optional pam_exec.so /usr/bin/ntfy-ssh-login.sh

Le fichier /usr/bin/ntfy-ssh-login.sh

1
2
3
4
5
6
7
8
9
10
#!/bin/bash
if [ "${PAM_TYPE}" = "open_session" ]; then
  curl \
    -H "Title: Alerte connexion SSH!" \
    -H "Authorization: Bearer tk_cpifjh59xo3zu2bgi2jyfkif4wsbf" \
    -H prio:high \
    -H tags:warning \
    -d "SSH ${HOSTNAME} user: ${PAM_USER} from ${PAM_RHOST}" \
    https://noti.rnmkcy.eu/notif_infos
fi

Le rendre exécutable : chmod +x /usr/bin/ntfy-ssh-login.sh

Message en cas de connexion

Web Push (INACTIF)

Description

Web Push (RFC8030) permet Ă  ntfy de recevoir des notifications push, mĂȘme lorsque l’application web ntfy (ou mĂȘme le navigateur, selon la plateforme) est fermĂ©e. Une fois activĂ©, l’utilisateur peut activer les notifications de fond pour leurs sujets dans l’application Web sous ParamĂštres. Une fois activĂ© par l’utilisateur, ntfy transmettra les messages publiĂ©s au paramĂštre push, qui les transmettra ensuite au navigateur.

Pour configurer Web Push, vous devez générer et configurer un keypair VAPID (via ntfy webpush keys), une base de données pour suivre les abonnements du navigateur et une adresse email admin (vous):

  • Web-push-public-key est la clĂ© publique VAPID gĂ©nĂ©rĂ©e, exemple: AA1234BBCCddvveekaabcdfqwertyuiopasdfghjklzxcvbnm1234567890
  • Web-push-private-key est la clĂ© privĂ©e VAPID gĂ©nĂ©rĂ©e, exemple: AA2BB1234567890abcdefzxcvbnm1234567890
  • web-push-file est un fichier de base de donnĂ©es pour suivre les paramĂštres d’abonnement du navigateur, exemple:
    /var/lib/ntfy/webpush.db
  • Web-push-email-address est l’adresse email d’administration envoyĂ©e au fournisseur push, exemple:
    sysadmin@exemple.com
  • web-push-startup-queries est une liste optionnelle de requĂȘtes Ă  exĂ©cuter au dĂ©marrage

Limites:

  • Comme les notifications de navigateur de premier plan, les notifications de poussĂ©e de fond exigent que l’application web soit desservie par HTTPS. Un certificat valide est requis, car les travailleurs de services ne fonctionneront pas sur des origines avec des certificats non fiables.
  • Web Push n’est supportĂ© que pour le mĂȘme serveur. Vous ne pouvez pas utiliser s’abonner Ă  web push sur un sujet sur un autre serveur. Ceci est dĂ» Ă  une limitation de l’API Push, qui n’autorise pas plusieurs serveurs push pour la mĂȘme origine.

Mise en place

Sur le serveur ntfy

Pour configurer les clĂ©s VAPID, les gĂ©nĂ©rer d’abord : ntfy webpush keys
Ensuite copiez les valeurs gĂ©nĂ©rĂ©es dans le fichier serveur.yml ou utilisez les variables d’environnement correspondantes ou les arguments en ligne de commande

1
2
3
4
web-push-public-key: AA1234BBCCddvveekaabcdfqwertyuiopasdfghjklzxcvbnm1234567890
web-push-private-key: AA2BB1234567890abcdefzxcvbnm1234567890
web-push-file: /var/cache/ntfy/webpush.db
web-push-email-address: sysadmin@example.com
  • Le web-push-file est utilisĂ© pour stocker les abonnements push. Les abonnements inutilisĂ©s envoient un avertissement aprĂšs 7 jours et expirent automatiquement aprĂšs 9 jours (non configurable). Si la passerelle renvoie une erreur (par exemple 410 Gone quand un utilisateur s’est dĂ©sabonnĂ©), les abonnements sont Ă©galement supprimĂ©s automatiquement.
  • L’application web rafraĂźchit les abonnements au dĂ©but et rĂ©guliĂšrement sur un intervalle, mais ce fichier doit ĂȘtre maintenu Ă  travers les redĂ©marrages. Si le fichier d’abonnement est supprimĂ© ou perdu, les applications web qui ne sont pas ouvertes ne recevront pas de nouvelles notifications de poussĂ©e web avant d’ouvrir.
  • Il n'est pas recommandĂ© de changer votre paire de clĂ©s publique/privĂ©e. Les navigateurs n’autorisent qu’une seule identitĂ© de serveur (clĂ© publique) par origine, et si vous les modifiez, les clients ne pourront pas s’abonner via la poussĂ©e web jusqu’à ce que l’utilisateur efface manuellement la permission de notification.

ntfy - Application bureau

Utilisation application web progressive (PWA)

Bien que ntfy n’ait pas d’application de bureau native, il est construit comme une application web progressive (PWA) et peut donc ĂȘtre installĂ© sur les appareils de bureau et mobiles.

Cela lui donne son propre lanceur (par exemple raccourci sur Windows, application sur macOS, raccourci de lancement sur Linux, icĂŽne d’écran d’accueil sur iOS et icĂŽne de lancement sur Android), une fenĂȘtre autonome, des notifications de poussĂ©e et un badge d’application avec le compte de notification non lu.

L’installation de l’application Web est prise en charge sur (voir tableau de compatibilitĂ© pour plus de dĂ©tails):

  • Chrome: Android, Windows, Linux, macOS
  • Safari : iOS 16.4+, macOS 14+
  • Edge : Windows
  • Firefox: Android, ainsi que sur Windows/Linux via une extension

Notez que pour les serveurs auto-organisĂ©s, Web Push doit ĂȘtre configurĂ© pour que le PWA fonctionne.

Installation

Chrome sur le bureau
Pour installer et enregistrer l’application web via Chrome, cliquez sur l’icîne “install app” . Aprùs l’installation, vous pouvez trouver l’application dans votre tiroir :

Chrome/Firefox sur Android
Pour Chrome sur Android, soit cliquez sur la banniĂšre “Ajouter Ă  l’écran d’accueil” au bas de l’écran, ou sĂ©lectionnez “Installer l’application” dans le menu, puis cliquez sur “Installer” dans le menu contextuel. AprĂšs l’installation, vous pouvez trouver l’application dans votre tiroir et sur votre Ă©cran d’accueil.

Pour Firefox, sĂ©lectionnez “Installer” dans le menu, puis cliquez sur “Ajouter” pour ajouter une icĂŽne Ă  votre Ă©cran d’accueil:

Firefox archlinux bureau
via une extension

Setup Progressive Web Apps for Firefox –> Accept agreement


Installer le paquet archlinux : sudo pacman -S firefoxpwa

Notifications arriĂšre-plan

Les notifications de fond via le web push sont activĂ©es par dĂ©faut et ne peuvent pas ĂȘtre dĂ©sactivĂ©es lorsque l’application est installĂ©e, car les notifications ne seraient pas livrĂ©es de maniĂšre fiable autrement. Vous pouvez muter des sujets pour lesquels vous ne voulez pas recevoir de notifications.

Sur le bureau, vous avez gĂ©nĂ©ralement besoin de votre navigateur ou de l’application Web ouverte pour recevoir des notifications, bien que l’onglet ntfy n’ait pas besoin d’ĂȘtre ouvert. Sur mobile, vous n’avez pas besoin d’avoir l’application Web ouverte pour recevoir des notifications. Regardez les documents web pour une ventilation dĂ©taillĂ©e.

Ntfy Alpine Linux

Alpine Linux, processus d’installation de ntfy, un outil qui envoie des notifications de bureau quand une commande Ă  long terme finit d’exĂ©cuter

Installer ntfy

Outils

1
sudo apk add curl net-tools

installer ntfy

1
sudo apk add ntfy

Activer et lancer le service ntfy

1
2
3
4
# syntaxe commande
sudo rc-update add ntfy
# OU
sudo rc-update add ntfy default

Renvoie le résultat suivant

* service ntfy added to runlevel default

Démarrer le service ntfy

1
2
3
sudo rc-service ntfy start
# OU
sudo service ntfy start

Renvoie le résultat suivant

1
2
3
4
5
6
 * Caching service dependencies ...                                                    [ ok ]
 * /var/log/ntfy.log: creating file
 * /var/log/ntfy.log: correcting owner
 * /var/lib/ntfy: creating directory
 * /var/lib/ntfy: correcting owner
 * Starting ntfy ...                                                                   [ ok ]

Port en écoute : 8080

Créer une instance ntfy privée

Voir doc Instance privée

Configurer server.yml

Le fichier de configuration /etc/ntfy/server.yml

1
2
3
4
5
listen-http: ":8083"

auth-file: /var/lib/ntfy/user.db
auth-default-access: "deny-all"
behind-proxy: true
  • Listen-http - Le port sur lequel le serveur Web HTTP Ă©coute (par dĂ©faut = 80). Vous pouvez Ă©galement ajouter une adresse IP Ă  laquelle vous connecter (listen-http : “127.0.0.1:8080”)
  • auth-file - Emplacement du user.dbfichier d’authentification.
  • auth-default-access - DĂ©finir ceci sur “deny-all” forcera tous les sujets Ă  ĂȘtre privĂ©s par dĂ©faut.
  • behind-proxy - Si ntfy est dĂ©ployĂ© derriĂšre un proxy comme Caddy, nginx, etc., alors cela doit ĂȘtre dĂ©fini sur true.

Redémarrer le serveur ntfy

1
sudo service ntfy restart 

Proxy nginx noti.rnmkcy.eu

/etc/nginx/conf.d/noti.rnmkcy.eu.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
server {
    listen 80;
    listen [::]:80;
    server_name  noti.rnmkcy.eu;

    # redirect all plain HTTP requests to HTTPS
    return 301 https://noti.rnmkcy.eu$request_uri;
}

server {
    # ipv4 listening port/protocol
    listen       443 ssl;
    # ipv6 listening port/protocol
    listen           [::]:443 ssl;
    server_name  noti.rnmkcy.eu;

    include /etc/nginx/conf.d/ssl-modern.inc;

  location / { 
    proxy_pass              http://192.168.0.223:8083;
    proxy_http_version 1.1;

    proxy_set_header Host $host;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_connect_timeout 3m;
    proxy_send_timeout 3m;
    proxy_read_timeout 3m;

    client_max_body_size 0; # Stream request body to backend
  } 

}

Créer utilisateur

Passer en mode su : sudo -s

Créer utilisateur dans NTFY (Users and roles)
Puisque nous avons dĂ©jĂ  dĂ©fini l’ attribut auth-file et auth-default-access
Ajout de notre premier utilisateur administrateur “notif”.

1
ntfy user add --role=admin notif

Second utilisateur “notifmob”

1
ntfy user add notifmob

Une fois l’utilisateur créé, nous pouvons l’abonner Ă  notre premier sujet de notification.

1
ntfy access notifmob yan_infos rw
1
2
3
4
granted read-write access to topic yan_infos

user notifmob (role: user, tier: none)
- read-write access to topic yan_infos

Jetons (Tokens)

Le jeton peut ĂȘtre utilisĂ© Ă  la place du nom d’utilisateur et du mot de passe lors de l’envoi de messages. (Access tokens)

1
ntfy token add notif

Une fois le jeton d’accĂšs créé, vous pouvez l’utiliser pour vous authentifier auprĂšs du serveur ntfy, par exemple lorsque vous publiez ou vous abonnez Ă  des sujets.

ntfy curl + token

1
2
3
4
5
6
7
curl \
    -H "Title: Information!" \
    -H "Authorization: Bearer tk_fjh5bfo3zu2cpibgi2jyfkif49xws" \
    -H prio:low \
    -H tags:info \
    -d "Notification utilisant un jeton d'accĂšs" \
    https://noti.rnmkcy.eu/yan_infos

ntfy CLI + token

1
2
3
4
ntfy publish \
  --token tk_AgQdq7mVBoFD37zQVN29RhuMzNIz2 \
  ntfy.example.com/mysecrets \
  "Look ma, with auth"

Notifications par courriel

Pour permettre la transmission de messages par e-mail, vous pouvez configurer un serveur SMTP pour les messages sortants. Une fois configurĂ©, vous pouvez dĂ©finir l’en-tĂȘte X-Email pour envoyer des messages par e-mail (par exemple curl -d “hi here” -H “X-Email: phil@example.com” ntfy.sh/mytopic).

À ce jour, seuls les serveurs SMTP avec PLAIN auth et STARTLS sont pris en charge. Pour activer l’envoi d’e-mails, vous devez dĂ©finir les paramĂštres suivants :

  • base-url est l’URL racine du serveur ntfy; cela est nĂ©cessaire pour le pied de page de messagerie
  • smtp-sender-addr est le nom d’hĂŽte:port du serveur SMTP
  • smtp-sender-user et smtp-sender-pass sont le nom d’utilisateur et le mot de passe de l’utilisateur SMTP
  • smtp-sender-from est l’adresse Ă©lectronique de l’expĂ©diteur

Ajouter ce qui suit au fichier de configuration /etc/ntfy/serveur.yml pour le courrier sortant

1
2
3
4
5
base-url: "https://noti.rnmkcy.eu"
smtp-sender-addr: "mx1.xoyize.xyz:587"
smtp-sender-user: "yack@cinay.eu"
smtp-sender-pass: "Abd13Kf+sfAk2Dzifjafldk"
smtp-sender-from: "yack@cinay.eu"

Redémarrer le service ntfy

1
sudo service ntfy restart

Tester

1
2
3
4
5
6
7
8
curl \
    -H "X-Email: ntfy@cinay.eu" \
    -H "Title: Information!" \
    -H "Authorization: Bearer tk_xxxxxxxxxxxxxxxxxxxxxx" \
    -H prio:low \
    -H tags:info \
    -d "Notification utilisant un jeton d'accĂšs" \
    https://noti.rnmkcy.eu/yan_infos

Message reçu

Cet article est sous licence CC BY 4.0 par l'auteur.