Compare commits
7 Commits
bd17601b11
...
081fcafcfb
| Author | SHA1 | Date | |
|---|---|---|---|
| 081fcafcfb | |||
| 2f3b27e894 | |||
| 237f95b0cb | |||
| 4c253e2ce5 | |||
| 67bfdd7378 | |||
| 7776689c23 | |||
| c27a1fae2e |
206
articles/2026/Installer un service ntfy dans votre domaine.md
Normal file
206
articles/2026/Installer un service ntfy dans votre domaine.md
Normal file
@@ -0,0 +1,206 @@
|
|||||||
|
---
|
||||||
|
title: Installer un service ntfy dans votre domaine
|
||||||
|
description:
|
||||||
|
tags: []
|
||||||
|
date: 2026-03-08 16:47
|
||||||
|
lastmod: 2026-03-08 21:16
|
||||||
|
type:
|
||||||
|
- article
|
||||||
|
category:
|
||||||
|
- "[[Guide]]"
|
||||||
|
status: brouillon
|
||||||
|
---
|
||||||
|
Installer son propre serveur **ntfy** sur Proxmox est une excellente idée pour reprendre le contrôle de ses notifications sans dépendre de services tiers.
|
||||||
|
|
||||||
|
Voici un tutoriel pas à pas pour configurer cela dans un conteneur **LXC Debian sur ProxMox**.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. Création du conteneur LXC sur Proxmox
|
||||||
|
|
||||||
|
1. Créez un nouveau conteneur :
|
||||||
|
|
||||||
|
- **Hostname :** `ntfy`
|
||||||
|
|
||||||
|
- **Ressources conseillées :** 1 vCPU, 512 Mo de RAM, et 8 Go de disque (ntfy est très léger).
|
||||||
|
|
||||||
|
- **Réseau :** Attribuez une IP statique ou une réservation DHCP.
|
||||||
|
|
||||||
|
- **Template :** Debian 13.
|
||||||
|
|
||||||
|
2. Démarrez le conteneur et connectez-vous en SSH ou via la console.
|
||||||
|
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Installation de ntfy
|
||||||
|
|
||||||
|
Nous allons utiliser le dépôt officiel pour faciliter les mises à jour.
|
||||||
|
|
||||||
|
```Bash
|
||||||
|
# Mise à jour du système
|
||||||
|
sudo apt update && sudo apt upgrade -y
|
||||||
|
|
||||||
|
# Installation des dépendances
|
||||||
|
sudo apt install -y curl debian-archive-keyring
|
||||||
|
|
||||||
|
# Créer le dossier pour les clés s'il n'existe pas
|
||||||
|
sudo mkdir -p /etc/apt/keyrings
|
||||||
|
|
||||||
|
# Télécharger la nouvelle clé
|
||||||
|
sudo curl -L -o /etc/apt/keyrings/ntfy.gpg https://archive.ntfy.sh/apt/keyring.gpg
|
||||||
|
|
||||||
|
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/ntfy.gpg] https://archive.ntfy.sh/apt stable main" | sudo tee /etc/apt/sources.list.d/ntfy.list
|
||||||
|
|
||||||
|
sudo apt update
|
||||||
|
sudo apt install ntfy -y
|
||||||
|
|
||||||
|
# Activation du service au démarrage
|
||||||
|
sudo systemctl enable ntfy
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Configurer le reverseProxy avec le nom public
|
||||||
|
|
||||||
|
### 1. Publication sur `mon-domaine.fr`
|
||||||
|
|
||||||
|
Pour que cela fonctionne depuis l'extérieur, vous devez configurer votre **Reverse Proxy** (qui doit se trouver sur une autre machine ou un autre LXC) :
|
||||||
|
|
||||||
|
1. **Pointage DNS :** Faites pointer `ntfy.mon-domaine.fr` vers votre IP publique.
|
||||||
|
|
||||||
|
2. **NAT/Port Forwarding :** Sur votre box/routeur, redirigez les ports **80** et **443** vers l'IP de votre Reverse Proxy.
|
||||||
|
|
||||||
|
3. **Config Proxy :** Redirigez les requêtes arrivant sur `ntfy.mon-domaine.fr` vers l'IP locale de votre LXC ntfy sur le port **8080**.
|
||||||
|
|
||||||
|
- _Note importante :_ Assurez-vous d'activer le support des **WebSockets** et de passer les headers `Upgrade` et `Connection`, sinon les notifications sur smartphone ne seront pas instantanées.
|
||||||
|
|
||||||
|
### 2. Le "piège" du Reverse Proxy (Headers)
|
||||||
|
|
||||||
|
Comme vous publiez sur `mon-domaine.fr`, votre Reverse Proxy (Nginx, Traefik ou autre) doit impérativement transmettre l'IP réelle du visiteur à ntfy, sinon ntfy croira que toutes les requêtes viennent de votre proxy.
|
||||||
|
|
||||||
|
Si vous utilisez **Nginx**, votre bloc de configuration devrait ressembler à ceci pour gérer les **WebSockets** (indispensables pour l'app Android/iOS) :
|
||||||
|
|
||||||
|
```Nginx
|
||||||
|
location / {
|
||||||
|
proxy_pass http://IP_DU_LXC_NTFY:80;
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
|
||||||
|
# Ces lignes sont vitales pour les notifications en temps réel
|
||||||
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
|
proxy_set_header Connection "upgrade";
|
||||||
|
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-Host $host;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
|
||||||
|
proxy_connect_timeout 1h;
|
||||||
|
proxy_send_timeout 1h;
|
||||||
|
proxy_read_timeout 1h;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 4. Configuration de ntfy
|
||||||
|
|
||||||
|
Avant de modifier la configuration, nous devons préparer l'environnement de stockage pour que **ntfy** puisse enregistrer ses utilisateurs et le cache des messages de manière persistante.
|
||||||
|
|
||||||
|
Exécutez ces commandes pour créer le répertoire de données et attribuer les permissions correctes à l'utilisateur système `ntfy` :
|
||||||
|
|
||||||
|
```
|
||||||
|
sudo mkdir -p /var/lib/ntfy
|
||||||
|
sudo chown ntfy:ntfy /var/lib/ntfy
|
||||||
|
sudo chmod 700 /var/lib/ntfy
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
Le fichier de configuration principal se trouve dans `/etc/ntfy/server.yml`.
|
||||||
|
|
||||||
|
1. Ouvrez le fichier : `nano /etc/ntfy/server.yml`
|
||||||
|
|
||||||
|
2. Modifiez les lignes suivantes pour correspondre à votre domaine **ntfy.mon-domaine.fr** :
|
||||||
|
|
||||||
|
|
||||||
|
```YAML
|
||||||
|
# L'URL de base est cruciale pour les liens dans les notifications
|
||||||
|
base-url: "https://ntfy.mon-domaine.fr"
|
||||||
|
|
||||||
|
# Écoute sur le port 80 (derrière un reverse proxy)
|
||||||
|
listen-http: ":8080"
|
||||||
|
|
||||||
|
# Lien avec votre broker MQTT existant
|
||||||
|
mqtt-helper-url: "tcp://mqtt.workgroup.lan:1883"
|
||||||
|
mqtt-helper-subscriptions:
|
||||||
|
- topic: "ntfy/#"
|
||||||
|
|
||||||
|
# Recommandé : Activer l'authentification pour éviter les abus sur votre domaine
|
||||||
|
auth-file: "/var/lib/ntfy/user.db"
|
||||||
|
auth-default-access: "deny-all"
|
||||||
|
enable-login: true
|
||||||
|
|
||||||
|
# Permet de conserver les messages si le destinataire est hors ligne
|
||||||
|
cache-file: "/var/lib/ntfy/cache.db"
|
||||||
|
cache-duration: "12h" # Garde les messages 12h par exemple
|
||||||
|
|
||||||
|
auth-file: "/var/lib/ntfy/user.db"
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Redémarrez le service : `sudo systemctl restart ntfy`
|
||||||
|
|
||||||
|
**Note :** Si le service refuse de démarrer, vérifiez les logs avec `journalctl -u ntfy -f`. Une erreur de syntaxe dans le fichier `.yml` (comme un espace en trop) est souvent la cause.
|
||||||
|
|
||||||
|
### Gestion des utilisateurs (Sécurité)
|
||||||
|
|
||||||
|
Puisque la directive `auth-default-access: "deny-all"` est activée, l'accès est verrouillé par défaut. Vous devez impérativement créer un compte administrateur via le terminal pour reprendre la main sur le serveur et commencer à envoyer des notifications.
|
||||||
|
|
||||||
|
#### Création du premier administrateur
|
||||||
|
|
||||||
|
Exécutez les commandes suivantes sur votre serveur :
|
||||||
|
|
||||||
|
```Bash
|
||||||
|
# Créer un utilisateur avec les privilèges d'administrateur
|
||||||
|
ntfy user add --role=admin votre_nom_utilisateur
|
||||||
|
|
||||||
|
# Redémarrer le service pour valider la nouvelle configuration
|
||||||
|
sudo systemctl restart ntfy
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Distinction importante : Interface Web vs CLI
|
||||||
|
|
||||||
|
Il est crucial de ne pas confondre la gestion du serveur avec la gestion de la session locale :
|
||||||
|
|
||||||
|
- **L'interface graphique (Web UI) :** Elle ne permet pas d'ajouter ou de supprimer des utilisateurs dans la base de données du serveur.
|
||||||
|
|
||||||
|
- **Menu "Paramètres" > "Gérer les utilisateurs" :** Cette option sert uniquement à **enregistrer vos identifiants de connexion** dans votre navigateur. Cela permet à l'interface web de s'authentifier auprès du serveur pour afficher vos sujets (topics) privés, mais cela ne crée en aucun cas un compte sur le système.
|
||||||
|
|
||||||
|
|
||||||
|
> **Note :** Toute modification structurelle des permissions ou des comptes doit être effectuée en ligne de commande (CLI) à l'aide de la commande `ntfy user`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
#### Résumé des droits d'accès
|
||||||
|
|
||||||
|
Une fois votre utilisateur créé, vous pouvez affiner les droits selon vos besoins :
|
||||||
|
|
||||||
|
|**Commande**|**Action**|
|
||||||
|
|---|---|
|
||||||
|
|`ntfy user list`|Voir tous les utilisateurs enregistrés.|
|
||||||
|
|`ntfy access <user> <topic> read-write`|Donner un accès complet à un sujet précis.|
|
||||||
|
|`ntfy user change-pass <user>`|Modifier le mot de passe d'un utilisateur.|
|
||||||
|
|
||||||
|
## 5. Test de fonctionnement
|
||||||
|
|
||||||
|
Une fois le domaine et le proxy configurés, vous pouvez tester l'envoi d'une notification via un simple `curl` depuis n'importe quel terminal :
|
||||||
|
|
||||||
|
```Bash
|
||||||
|
curl -u votre_user:votre_password \ -d "Test de notification sécurisée" \ https://ntfy.mon-domaine.fr/test
|
||||||
|
```
|
||||||
|
|
||||||
|
Si vous allez sur `https://ntfy.mon-domaine.fr/test`, vous devriez voir votre message apparaître.
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,75 @@
|
|||||||
|
---
|
||||||
|
title: Maîtriser le Forwarding avec NPMplus et Apache
|
||||||
|
description: Marre de voir l'IP de votre reverse proxy dans vos logs Apache ? Découvrez comment configurer NPMplus et le module mod_remoteip pour restaurer la visibilité de l'IP réelle de vos visiteurs. Un guide détaillé pour DevOps incluant la gestion du header X-Forwarded-For et les bonnes pratiques de sécurité.
|
||||||
|
tags: []
|
||||||
|
date: 2026-03-10 07:43
|
||||||
|
lastmod: 2026-03-10 07:51
|
||||||
|
type:
|
||||||
|
- article
|
||||||
|
category:
|
||||||
|
- "[[Guide]]"
|
||||||
|
status: terminé
|
||||||
|
---
|
||||||
|
|
||||||
|
# Maîtriser le Forwarding avec NPMplus et Apache
|
||||||
|
|
||||||
|
**Par Cédrix** | _Date d'édition : 10 mars 2026_
|
||||||
|
|
||||||
|
Dans l'architecture moderne des micro-services, le **Reverse Proxy** est devenu la pierre angulaire de la sécurité et de la flexibilité. Que ce soit pour la terminaison SSL, le load-balancing ou la gestion des noms de domaine, des outils comme **NPMplus** (Nginx Proxy Manager Plus) facilitent grandement la vie des DevOps.
|
||||||
|
|
||||||
|
Pourtant, un problème récurrent hante les administrateurs : **la disparition de l'adresse IP réelle du client dans les logs applicatifs.** Pourquoi votre serveur Apache ne voit-il que l'IP locale du proxy ? Comment restaurer la visibilité sans briser la chaîne de confiance ? Plongée au cœur des headers HTTP.
|
||||||
|
|
||||||
|
## Le Problème : L'illusion de la connexion directe
|
||||||
|
|
||||||
|
Lorsqu'un utilisateur consulte votre site, il ne parle pas directement à Apache. Il établit une connexion TCP avec **NPMplus**. Pour Apache, le "client", c'est le proxy.
|
||||||
|
|
||||||
|
> **Le risque :** Si votre Apache croit que tout le trafic provient de `192.168.100.95` (votre proxy), vos outils d'analyse (Matomo, AWStats) sont aveugles, et vos outils de sécurité (Fail2Ban) risquent de bannir votre propre infrastructure au premier faux pas d'un utilisateur.
|
||||||
|
|
||||||
|
## La Solution : Le Header `X-Forwarded-For`
|
||||||
|
|
||||||
|
Pour pallier cela, le reverse proxy doit devenir un "messager". Avant de transmettre la requête à Apache, il ajoute une étiquette à l'enveloppe HTTP : le header `X-Forwarded-For` (XFF).
|
||||||
|
|
||||||
|
### 1. La configuration du messager (NPMplus)
|
||||||
|
|
||||||
|
NPMplus utilise Nginx sous le capot. Pour qu'il transmette l'identité du visiteur, il doit injecter ces directives dans la configuration du bloc `location` :
|
||||||
|
|
||||||
|
```Nginx
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
```
|
||||||
|
|
||||||
|
_$proxy_add_x_forwarded_for_ est crucial car il conserve la trace de tous les proxys traversés (si l'utilisateur passe déjà par un VPN ou un CDN comme Cloudflare).
|
||||||
|
|
||||||
|
## Le Récepteur : Configurer Apache avec `mod_remoteip`
|
||||||
|
|
||||||
|
Côté Apache, il ne suffit pas de recevoir le header ; il faut lui donner une valeur légale. C'est ici qu'intervient le module **`mod_remoteip`**.
|
||||||
|
|
||||||
|
### Étape A : Établir la relation de confiance
|
||||||
|
|
||||||
|
Apache refuse par défaut de croire n'importe quel header XFF (car n'importe quel pirate pourrait injecter une fausse IP). Vous devez définir une liste blanche d'IP de confiance.
|
||||||
|
|
||||||
|
Dans votre configuration (`/etc/apache2/conf-available/remoteip.conf`) :
|
||||||
|
|
||||||
|
```Apache
|
||||||
|
RemoteIPHeader X-Forwarded-For
|
||||||
|
RemoteIPInternalProxy 192.168.100.95
|
||||||
|
```
|
||||||
|
|
||||||
|
**Point d'attention :** Une simple erreur de frappe ici, et Apache ignorera le header, revenant à l'affichage de l'IP du proxy.
|
||||||
|
|
||||||
|
### Étape B : Réécrire le format de journalisation
|
||||||
|
|
||||||
|
Par défaut, Apache utilise la variable `%h` (hostname) dans ses logs. Pour afficher l'IP "extraite" par le module remoteip, il faut passer à la variable **`%a`** (peer IP address).
|
||||||
|
|
||||||
|
Modifiez votre `LogFormat` dans `apache2.conf` :
|
||||||
|
|
||||||
|
Apache
|
||||||
|
|
||||||
|
```
|
||||||
|
# Remplacez %h par %a
|
||||||
|
LogFormat "%a %l %u %t \"%r\" %>s %b" combined
|
||||||
|
```
|
||||||
|
|
||||||
|
## Vérification finale
|
||||||
|
|
||||||
|
Un simple `tail -f /var/log/apache2/access.log` vous confirmera immédiatement si le réglage est opérationnel. Si vous voyez une IP publique au lieu de votre IP locale, vous avez réussi votre mise en production !
|
||||||
BIN
static/Pasted image 20260308171916.png
Normal file
BIN
static/Pasted image 20260308171916.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 68 KiB |
BIN
static/Pasted image 20260308172102.png
Normal file
BIN
static/Pasted image 20260308172102.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 47 KiB |
Reference in New Issue
Block a user