Mise à jour de l'article le 22/08/2026 (et ajout de : note VPN)
Version 1.0.24 - 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.24
L'accès à distance de ZimaOS a été abandonné par ZFW
ZimaOS est livré / Zima Net — le maillage d'accès à distance intégré d'IceWhale, un EasyTier intégré — et il possède l'interface. ZFW a contourné tous les autres maillages (ZeroTier, WireGuard) mais pas celui-là, donc chaque paquet entrant arrivant via Zima Net a atteint le DROP fourre-tout.znettun0tailscale0zt+wg+
Mesuré sur un ZimaCube :
ZFW-IN-DROP IN=tun0 SRC=10.126.126.243 DST=10.126.126.1 PROTO=TCP DPT=9527
125 SYN abandonnés en une seule tentative de connexion. Le client de bureau s'est bloqué indéfiniment lors de la « connexion » tandis quetun0 le compteur de transactions est resté à 668 octets pendant des jours. L'ajout du contournement l'a déplacé en deux secondes.
Corrigé : tun0 se trouve désormais dans la liste de contournement des quatre chaînes émises —ZFW-IN ,ZFW-IN6 ,DOCKER-USER et de son homologue IPv6. Le premier correctif, appliqué à la main, ne couvrait que et était doncZFW-IN incomplet ; le test affirme désormais les quatre sorties de la chaîne, de sorte qu'une addition partielle ne peut plus réussir.
Qui est affecté — mesuré, non supposé
Zima Net n'est pas nouveau dans la version 1.7.1-beta1. Le bundle officiel ZimaOS 1.7.0, téléchargé et vérifié par rapport auchecksums.txt (0c990f24…0df570) publié, contient déjà :
| Chemin dans le rootfs stock 1.7.0 | |
|---|---|
usr/bin/znet |
le binaire |
usr/lib/systemd/system/znet.service |
l'unité |
usr/lib/systemd/system-preset/80-znet.preset |
contientenable znet.service — activé par défaut |
etc/systemd/system/multi-user.target.wants/znet.service |
lien symbolique déjà intégré à l'image |
usr/share/zimanet/VERSION |
0.1.0-2.6.4 |
usr/share/casaos/modules/zimanet.json |
enregistré en tant que module ZimaOS |
Ainsi, chaque hôte ZimaOS 1.7.0 standard exécutant ZFW ≤ 1.0.23 supprime le trafic Zima Net, pas seulement les hôtes 1.7.1-beta1. Les notes de publication d'IceWhale ne mentionnent Zima Net dans aucune des deux versions — l'absence d'un journal des modifications n'est pas une absence de l'image. Les anciennes versions de ZimaOS n'ont pas été vérifiées ; l'affirmation est délibérément « depuis au moins la version 1.7.0 ».
Le fait qu'il s'agisse du composant propre d'IceWhale plutôt que d'un reste tiers est également mesuré : 161easytier chaînes dans le binaire expédié, plus des racines IceWhale codées en dur (et trois autres régions).planet.net.icewhale.ioroot.remote-eu-central-1a.icewhale.io
Comment savoir si c'est votre problème
Sur l'hôte : ip -br link | grep tun— stun0'il existe avec une adresse dans10.126.126.0/24 , Zima Net est en cours d'exécution. Dans l'interface utilisateur ZFW, l'onglet Événements affiche les gouttes, avec l'IP source et le port de destination.
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.
Vérification
gofmt/go vet/go test nettoyer ; CI vert sur les cinq tâches. La charge utile amd64 expédiée et déballée contient lazfw-amd64.raw chaîne de version1.0.24 (et aucune autre1.0.2x) et letun0 contournement sur les chaînes ACCEPT et RETURN. LREADME.md'intérieur de la boule tar mène au bloc v1.0.24. Les sommes de contrôle Tarballmod-store/zfw.yaml proviennentdist/*.sha256 de cette version exacte.
amd64 b6fcfad24cd9ad31a6656d9817c7007b3c0dcd24c378c7256a6ad08f211665c2
arm64 9a5f117471d84659b41ee71fb91824b285a9290a46cc331a9ba06764be531520
1. Installation de ZFW
1.1. Installation simplifiée
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.24-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.24-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é.












