article tranféré sur zimagix
Mise à jour de l'article le 08/09/2026
Version 1.0.26 - Mise à jour avec "installation classique" voir 1.2
ZFW est un module pare-feu hôte développé par chicohaager pour ZimaOS, conçu pour combler l'absence de pare-feu natif dans le système.
Il s'installe en tant que module sysext et apparaît comme une tuile sur le tableau de bord ZimaOS, offrant une interface web et un tableau de bord de sécurité en temps réel.
Les caractéristiques techniques principales incluent :
- Politique de sécurité : Une liste autorisée par défaut pour les ports natifs (INPUT) et une liste bloquante pour les ports publiés par Docker (filtrage via la chaîne DOCKER-USER).
- Sécurité "Safe-Apply" : Un mécanisme de dead-man qui révoque automatiquement les règles après 120 secondes si l'administrateur ne les confirme pas, empêchant le verrouillage à distance.
- Fonctionnalités : Support IPv6, détection de menaces via GeoIP, et classification en direct des ports TCP (LAN, bloqué, boucle locale).
- Compatibilité : Il permet de conserver l'accès via Tailscale, ZeroTier et Pangolin/Newt tout en sécurisant les services comme Samba et NFS.
Il est disponible pour les architectures amd64 (ZimaBoard/ZimaCube) et arm64 (Lattepanda/Raspberry Pi).
ZFW- v1.0.26
Traduction Google :
Version actuelle : v1.0.26 — une règle peut désormais prendre un flux de liste de blocage comme source, et l'onglet Pare-feu indique où se trouve ZFWINPUT. Un flux est une liste tierce de réseaux connus pour leurs abus, conservés/DATA/zfw/feeds/ et mis en correspondance sous forme d'ipset. Le catalogue est fixe dans le démon (FireHOL Niveau 1, Spamhaus DROP) et il n'y a délibérément aucun champ URL : un flux décide de ce que votre pare-feu supprime, et une URL modifiable transmettrait cette décision à celui qui contrôle l'extrémité éloignée. Cela est dit clairement, car il est facile de survendre : sur une chaîne d'hôtes à refus par défaut, un flux n'ajoute rien — tout ce qui n'est pas explicitement autorisé est de toute façon abandonné. Les aliments gagnent leur vie sur les ports que vous ouvrez au monde, sur les ports à conteneurs publiés et sortant, où une règle de refus avec une source d'alimentation empêche un conteneur compromis d'atteindre une infrastructure connue pour être défectueuse. Derrière un tunnel Cloudflare ou Pangolin, un flux ne voit que l'adresse du tunnel, exactement comme un blocage géographique. Garde-corps, mesurés et non supposés : FireHOL niveau 1 expédie , , (Tailscale), , , , et — chargé textuellement, il supprimerait chaque paquet LAN et Tailscale, de sorte que les plages d'utilisation spéciale sont supprimées sans condition, tout comme le LAN et l'adresse hôte de et chaque homologue de synchronisation. Mesuré sur un ZimaCube le 07/09/2026 : 4691 lignes brutes, 8 plages à usage spécial supprimées, 4650 réseaux chargés dans le noyau en 10 ms. Une actualisation s'exécute en arrière-plan toutes les 12 heures (, 0.0.0.0/810.0.0.0/8100.64.0.0/10127.0.0.0/8169.254.0.0/16172.16.0.0/12192.168.0.0/16224.0.0.0/3rules.jsonZFW_FEEDS_REFRESH0 désactive) et ne touche jamais aux règles : le nouveau contenu entre dans un ensemble temporaire et est échangé, de sorte quecompiled.sh les chaînes actives restent octet par octet ce qu'elles étaient. L'échange n'est pas de goût — le chargement dans le set live le laisse à moitié rempli pendant un moment (mesuré : 111 000 sur 200 000 entrées à mi-chargement). L'onglet Pare-feu obtient une carte d'état avec le nombre d'entrées, les paquets correspondants, la prochaine actualisation et la mise à jour maintenant. Deuxième moitié de la version : la grille d'état indique désormais où se trouve ZFW-ININPUT et ce qui l'attend. ZFW s'insère en premier et ne repousse jamais, donc un outil installé plus tard peut se retrouver devant — inoffensif s'il est plus strict, un contournement silencieux s'il accepte. ZFW le signale et le porte comme constat d'audit M9 ; il ne se bat pas pour le créneau. Et un bug que le flux a découvert, présent depuis la v0.5.6 : la suppression de la dernière règle sortante a laissé la chaîne sortante en cours d'exécution. Les deux émetteurs ont ignoré tout le bloc sortant lorsqu'aucune règle sortante n'existait — correct pour un hôte qui n'en a jamais eu, incorrect pour un hôte dont l'un vient d'être supprimé : est resté renseigné et est resté connecté, donc le noyau a continué à supprimer le trafic qu'aucune règle ne demandait et rien dans l'interface utilisateur ou dans ZFW-OUTOUTPUTrules.json je l'ai dit. Mesuré sur un ZimaCube le 07/09/2026 avec une règle d'alimentation sortante ; les deux chemins — le script ligne par ligne et le script atomiqueiptables-restore préféré par le moteur — décrochent, vident et suppriment désormais la chaîne lorsqu'elle n'est plus nécessaire, chacun avec un test qui échoue sans lui.
1. Installation de ZFW
1.1. Installation simplifiée (non proposée pour la v1.0.26)
Depuis la version 1.0.21, vous pouvez installer ZFW en une simple ligne de code.
Activez – Accès SSH – vous pourrez le désactiver après l’opération sur la console. Puis cliquez sur la flèche de la ligne – Terminal basé sur le Web. Un nouvel onglet – page web s’ouvre.
Indiquez votre login, puis valider touche entrée. Votre mot de passe – je rappelle, que vous tapez à l’aveugle – et validez.
Puis, passez en root en tapant la commande qui suit et ressaisissez votre mot de passe
sudo -iPuis, copier-coller le code que vous trouverez sur la page du GitHub
docker run --rm --privileged --pid=host -v /:/host chicohaager/zfw:1.0.23Capture d'écran sur la v1.0.21
1.2. Installation classique
Ouvrez sur votre navigateur la page web des versions éditées pour ZFW à https://github.com/chicohaager/zfw/releases/ .
Ensuite, au niveau du chapitre Assets choisissez la version de l'architecture de votre CPU (amd64 ou arm64).
Cliquez sur le lien du fichier se terminant par tar.gz pour le télécharger (via SMB) directement dans le dossier /DATA/Download de votre ZimaOS.
Activez – Accès SSH – vous pourrez le désactiver après l’opération sur la console. Puis cliquez sur la flèche de la ligne – Terminal basé sur le Web. Un nouvel onglet – page web s’ouvre.
Indiquez votre login, puis valider touche entrée. Votre mot de passe – je rappelle, que vous tapez à l’aveugle – et validez.
Puis, passez en root en tapant la commande qui suit et ressaisissez votre mot de passe
sudo -iPositionnez-vous maintenant sur le dossier, dans lesquel vous avez téléchargé le fichier, avec la commande cd - pour cet article sur /DATA/Downloads
cd /DATA/DownloadsProcédez à l'extraction avec la commande tar suivi du nom du fichier téléchargé (ici en amd64)
Attention : modifiez le nom du fichier en fonction de la version.
tar xzf zfw-1.0.26-amd64.tar.gzAttention : modifiez le nom du fichier en fonction de la version.
Puis, positionnez vous sur le dossier décompressé avec la commande cd
cd zfw-1.0.26-amd64Et activez le fichier d'installation du module avec la commande sh
sudo sh install.shLe module ZFW est installé. Déconnectez vous en tapant deux fois exit et fermez la console SSH
Capture d'écran sur la v1.0.10
2. Mise à jour de ZWF
Pour mettre à jour ZWF sur une nouvelle version, rendez-vous sur la page GitHub et téléchargez le nouveau dossier zip ou copiez le nouveau code (si disponible).
Répétez l'opération d'installation ci-dessus (simple ou classique). ZWF sera mis à jour sans aucune incidence sur vos configurations.
3. Configuration ZWF
Revenez sur l'interface de ZimaOS - rafraichissez la page - une nouvelle icône a été créée : ZFW Firewall
3.1. Principales fonctionnalités
Cliquez sur la tuile pour ouvrir l'interface web graphique du Pare-feu.
1. Onglet Firewall (Pare-Feu)
La page d'atterrissage la première ouverture, vous indique que le Pare-Feu est désactivé (off).
Le bouton Safe Apply vous permet de tester la configuration et d'activer le Pare-Feu pendant deux minutes. Au bout de ce temps si vous n'avez pas confirmé, le Pare-Feu se désactivera à nouveau. Vous disposez, avec cette fonctionnalité de tout le temps qu'il vous est nécessaire pour vérifier que tous vos services restent accessibles pour l'administration et / ou exposés (si publiques).
2. Onglet Rules (Règles)
Ce sont les ports qui sont autorisés pour un accès aux fonctionnalités (WebUI, SMB, zéro-conf) et aux applications actives sur votre ZimaOS.
Si vous constatez qu'une application déployée sur votre serveur n'est pas répertoriée (accès bloqué), vous pouvez ajouter manuellement le port correspondant. Si vous débutez laisser la "zone" en "Automatic"
NB Plex (host), lors de mes tests, n'apparait pas pour un accès local (port 32400). Pour cette application, vous devrez l'ajouter (bouton New rule + Save rules après l'ajout)
3. Activation
Après avoir testé (Safe Apply) l'accès effectif aux services et applications actifs, activez le Pare-Feu avec le bouton Confirm.
Vous pouvez consulter aussi les différents onglets complémentaires
Exposure (exposition des ports) : Action du Pare-Feu et configuration avancée.
Events : Journal des évènements
Connections, Audit et Versions
4. Accès de secours
Par prudence, activez la connection Zero-Tier (application ZimaOS) pour un accès en cas d'erreur de configuration.
5. Pour un guide d'utilisation complet — rester accessible, ordre des règles, blocage géographique limites et récupération — voir MEILLEURES PRATIQUES.md.
3.2. Récapitulatif & Principes
Principe 1 : le pare-feu ferme tous les ports d'écoute du réseau local (en IPv4) des piles docker qui ne sont pas autorisés (onglet Rules) + autorise l'accès à Zéro Tiers et SSH local (pour ne pas se retrouver à la porte en cas de fausse manip).
Principe 2 : lors de la première installation du Pare-Feu (par défaut désactivé), les ports d'écoute de chacune des piles docker déjà installées sont reconnues et inscrites dans l'onglet "Rules". Il faut ajouter (si seule liaison en locale) les piles en "host" comme Plex en 32400. Ainsi que l'accès à l'interface ZimaOS si changé de 80 à autre (comme 82) pour cause de Proxy inversé installé (utilise les ports 80, 81, 443).
Il faut supprimer ou ne pas ajouter deux fois le même port local si plusieurs fonctionnalités qui l'utilisent. Exemple : le port de l'interface est connu en 80 + le Proxy-Inversé en 80 aussi (donc supprimer l'une des lignes).
Principe 3 : par défaut seul le réseau local est autorisé et uniquement en IPv4. Par exemple si le 443 est autorisé, il ne fonctionnera que sur le réseau local, mais pas en externe.
Principe 4 : avant d'activer le Pare-Feu, ZWF permet de tester pendant 2 minutes une simulation d'activation et revient en désactivation, avec le bouton "Safe Apply".
Principe 5 : pour ouvrir un port à l'externe accessible aux IPv4 et IPv6, il faut indiquer la source en mode "any".
Ci-après une capture d'écran du début de la configuration de l'onglet "Rules" de mon serveur.
Important :
1. Lors de la création dune nouvelle pile docker, il ne faut pas oublier d'inscrire le port d'écoute local si nécessaire.
2. Pour la validation d'un NDD, il ne faudra pas oublier d'ouvrir momentanément le port 80 en source "Any".
3. Normalement mon Plex ne passe que par un NDD (443) pour l'externe. Sur la capture d'écran (pour test sur une install classique), il est indiqué en 32401 (externe) et 32400 (local).
4. Tester l'accès externe avec, par exemple à domicile, un téléphone portable déconnecté de la WiFi.
En résumé, pour un accès externe indiquer la règle du port concerné en "Any + Auto" (en + du routeur bien sûr).
NB1 Pour l'aspect pratique, indiquez le nom du service pour chaque port si vous avez pas mal d'apps docker.
NB2 Il y a possibilité d'autoriser et/ou d'interdire des IP ainsi que des Pays (création des "Rules").
NB3 Comme sur un Pare-Feu "classique", l'ordre hiérarchique des colonnes (1, 2, 3...) ⇾ la première règle prime sur la seconde.
3.3. Utilisateurs de VPN
Traduction de la note pour la v1.0.24:
Remarque pour les utilisateurs de VPN en général
L'wg+autorisation automatique ne s'applique que lorsque WireGuard se termine sur l'hôte ZimaOS. Si votre VPN se termine sur votre routeur (une Freebox, une passerelle UniFi, un Fritz !Box), les clients arrivent sur l'interface LAN avec une adresse source du sous-réseau VPN, et les règles de démarrage —qui sont épinglées sur le LAN CIDR ZFW détecté au moment de l'installation— ne leur correspondront pas. Ajoutez une règle d’autorisation avec ce sous-réseau VPN comme source, dans la bonne zone.
4. Nouvelles applications
N'oubliez pas d'ajouter à Rules les ports locaux (si nécessaires) lors de l'ajout de nouvelles applications.
5. Désinstallation
Pour désinstaller ZWF, téléchargez le fichier ci-après dans le dossier /DATA/Downloads de votre serveur ZimaOS.
Contenu du fichier uninstall.sh
#!/bin/sh
# uninstall.sh — completely remove the ZFW host firewall from a ZimaOS host.
#
# Run this ON the ZimaOS host as root:
# sh uninstall.sh
# (or, as the unprivileged user: echo '<password>' | sudo -S sh uninstall.sh)
#
# It undoes everything install.sh and the daemon set up, in a safe order:
# 1. revert all firewall rules -> back to stock ACCEPT (engine `revert`)
# 2. stop + disable the UI service and the boot watchdog timer
# 3. remove the watchdog units written into /etc
# 4. remove the sysext module and refresh the overlay
# 5. remove the engine, config and daemon data
#
# Every step is best-effort: a partial install (or one that was never
# committed) still uninstalls cleanly. Re-running it is harmless.
set -u
NAME="zfw"
EXT_DIR="/var/lib/extensions"
ENGINE_DIR="/DATA/zfw"
DATA_DIR="/DATA/AppData/zfw"
UI_SERVICE="zfw-ui.service"
WATCHDOG_TIMER="zfw-ui-watchdog.timer"
WATCHDOG_SERVICE="zfw-ui-watchdog.service"
PERSIST_UNIT="/etc/systemd/system/zfw.service"
WATCHDOG_SVC_PATH="/etc/systemd/system/zfw-ui-watchdog.service"
WATCHDOG_TIMER_PATH="/etc/systemd/system/zfw-ui-watchdog.timer"
say() { echo "[zfw-uninstall] $*"; }
die() { echo "[zfw-uninstall] ERROR: $*" >&2; exit 1; }
[ "$(id -u)" -eq 0 ] || die "must run as root — try: sudo sh $0"
# --- 1. revert all firewall rules: removes ZFW-IN / ZFW-OUT / DOCKER-USER
# edits (v4 + v6), restores stock ACCEPT, and disables + deletes the
# boot-persistence unit. This is the step that makes the firewall stop
# affecting traffic — do it first so the host is reachable for the rest.
if [ -x "$ENGINE_DIR/$NAME" ]; then
say "reverting firewall rules (stock state) ..."
"$ENGINE_DIR/$NAME" revert || say "revert reported an error — continuing cleanup"
else
say "engine not found at $ENGINE_DIR/$NAME — skipping rule revert"
fi
# --- 2. stop + disable the UI service and the boot watchdog timer ---
say "stopping services ..."
systemctl stop "$WATCHDOG_TIMER" 2>/dev/null || true
systemctl disable "$WATCHDOG_TIMER" 2>/dev/null || true
systemctl stop "$WATCHDOG_SERVICE" 2>/dev/null || true
systemctl stop "$UI_SERVICE" 2>/dev/null || true
systemctl disable "$UI_SERVICE" 2>/dev/null || true
# --- 3. remove the watchdog units the daemon wrote into /etc ---
rm -f "$WATCHDOG_SVC_PATH" "$WATCHDOG_TIMER_PATH" 2>/dev/null || true
# revert already removes $PERSIST_UNIT, but delete it again in case revert
# was skipped (engine missing).
rm -f "$PERSIST_UNIT" 2>/dev/null || true
# --- 4. remove the sysext module and refresh the overlay ---
if [ -f "$EXT_DIR/$NAME.raw" ]; then
rm -f "$EXT_DIR/$NAME.raw"
say "removed sysext module -> $EXT_DIR/$NAME.raw"
fi
say "refreshing sysext overlay ..."
systemd-sysext refresh 2>/dev/null || say "sysext refresh failed — a reboot will clear it"
systemctl daemon-reload 2>/dev/null || true
# --- 5. remove engine, config and daemon data ---
rm -rf "$ENGINE_DIR" 2>/dev/null || true
rm -rf "$DATA_DIR" 2>/dev/null || true
say "removed $ENGINE_DIR and $DATA_DIR"
# --- verify ---
LEFT=""
[ -f "$EXT_DIR/$NAME.raw" ] && LEFT="$LEFT $EXT_DIR/$NAME.raw"
[ -e "$ENGINE_DIR" ] && LEFT="$LEFT $ENGINE_DIR"
[ -e "$DATA_DIR" ] && LEFT="$LEFT $DATA_DIR"
[ -f "$WATCHDOG_TIMER_PATH" ] && LEFT="$LEFT $WATCHDOG_TIMER_PATH"
if [ -n "$LEFT" ]; then
say "WARNING: these items could not be removed:$LEFT"
say "remove them manually, then reboot."
else
say "done — ZFW fully removed. The firewall is OFF (stock ACCEPT)."
say "the ZimaOS dashboard tile disappears after the next page reload."
fiConnectez-vous en SSH et en root.
Déplacez-vous sur le dossier où est situé le fichier téléchargé (ici sur /Downloads)
cd /DATA/DownloadsEt activez le fichier de désinstallation du module avec la commande sh
sudo sh uninstall.shL'ensemble de ZFW (tuile et dossier) est à présent désinstallé.













