Compare commits

...

7 Commits

Author SHA1 Message Date
081fcafcfb vault backup: 2026-03-10 07:51:11 2026-03-10 07:51:11 +01:00
2f3b27e894 vault backup: 2026-03-08 21:46:41 2026-03-08 21:46:41 +01:00
237f95b0cb vault backup: 2026-03-08 21:16:41 2026-03-08 21:16:41 +01:00
4c253e2ce5 vault backup: 2026-03-08 18:46:36 2026-03-08 18:46:37 +01:00
67bfdd7378 vault backup: 2026-03-08 18:16:35 2026-03-08 18:16:35 +01:00
7776689c23 vault backup: 2026-03-08 17:46:34 2026-03-08 17:46:34 +01:00
c27a1fae2e vault backup: 2026-03-08 17:16:34 2026-03-08 17:16:34 +01:00
4 changed files with 281 additions and 0 deletions

View 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.
![](Pasted%20image%2020260308171916.png)
---
## 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.

View File

@@ -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 !

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB