🍺 Buy me a beer
🏰🌐✉️

arx · nomina · missus

Tre pannelli web per Debian: hosting nginx, DNS authoritative, mail server. Zero Docker, zero database centrale, zero SaaS. La famiglia NetForge per chi ha deciso che self-hosted non deve fare schifo.

"Mailcow tira su 15 container, Plesk costa 600€/anno, BIND lo configuro a mano e DKIM non funziona mai al primo colpo." — ogni sysadmin nel 2026, prima di scoprire questa suite.

01 / 12

La suite NetForge

Tre pannelli, una filosofia, zero compromessi sulla sanità mentale.

🏭 Tre prodotti, un'unica firma

arx, nomina e missus sono tre pannelli web autonomi che condividono la stessa filosofia, lo stesso stack tecnologico e la stessa avversione viscerale per le complicazioni inutili. Sono indipendenti: puoi installarne uno solo, due, tutti e tre o nessuno (in quest'ultimo caso però chiudi questa pagina).

Tutti e tre sono pacchetti .deb nativi per Debian 12/13. Niente Docker, niente Kubernetes, niente "container orchestration layer". Si installano con apt install come una qualunque cosa che funziona da vent'anni.

🏰

arx

citadel
Hosting nginx + PHP + reverse proxy

🌐

nomina

i nomi
DNS authoritative su BIND9

✉️

missus

colei che è inviata
Mail server Postfix+Dovecot+Rspamd

🧠 L'analogia

Sono come tre attrezzi della stessa cassetta: il martello, il cacciavite, la pinza. Ognuno fa una cosa sola. Non esiste il "martello che fa anche da cacciavite e fischietta": esiste il martello, e funziona benissimo perché fa solo il martello. arx ospita siti, nomina serve DNS, missus consegna mail. Punto.

🔗 Famiglia NetForge. Tutti e tre fanno parte della stessa famiglia di NetForge — il toolkit di security audit (di cui hai già la guida dedicata). Stessi autori, stessa logica: software che fa una cosa, la fa bene, e non ti chiede iscrizioni cloud.

02 / 12

Il problema che risolvono

Un VPS Debian, tre servizi essenziali, e uno scenario che non ha soluzioni decenti.

🤯 Lo stato dell'arte (2026)

Hai un VPS Debian. Vuoi: ospitare 5 siti, servire DNS authoritative per 3 domini, ricevere mail per 2 domini. Operazioni triviali singolarmente, sintesi disastrosa nell'insieme. Le opzioni sul mercato:

Le alternative dolorose

  • cPanel / Plesk: 200-600€/anno, fa tutto, sembra del 2008
  • Mailcow: 15+ container Docker, RAM 4GB minimo, "sostituisci ClamAV con altro? buona fortuna"
  • iRedMail: gratis, ma "leggi i config files"
  • Mail-in-a-Box: un dominio, prendere o lasciare
  • BIND a mano: zone files, seriali da incrementare, "hai dimenticato il punto finale dell'FQDN"
  • Webmin: esiste dal 1997, si vede
  • SaaS (Mailgun/Postmark/etc): 30€/mese, dati in cloud altrui

La famiglia NetForge

  • 3 .deb nativi, totale ~50 MB
  • Stack singolo per servizio: nginx, BIND9, Postfix — quelli che già conosci
  • Zero database centrale: file su disco = source of truth
  • Migrazione = rsync /srv/ + apt install + rehydrate
  • Backup = tar -czf di una cartella
  • Pannello web per chi vuole, CLI per chi non vuole
  • Tutto leggibile: ogni config è un file di testo standard
⚠️ Stato del progetto. Tutti e tre sono in early development. arx è il più avanzato, missus ha l'auth funzionante e gli stack ancora in stub, nomina sta crescendo. Non sono production-ready oggi: sono qui perché la filosofia (e la roadmap) merita di essere conosciuta. Aggiornamenti su netforge.it.
🧠 Perché "non Docker"?

Docker è un grande strumento. Ma per un VPS singolo con 3 servizi, aggiungere un container runtime, un demone Docker, una rete bridge, un sistema di volumi e 7 immagini significa aggiungere 6 layer di astrazione che non ti servono. Quando alle 3 di notte un sito non risponde, vuoi nginx -t e journalctl -u nginx, non docker exec -it nginx-container-7f8a /bin/sh seguito da "perché questo container non vede l'altro?".

03 / 12 · ARX

arx — la cittadella nginx

Pannello hosting per siti statici, PHP e reverse proxy. Su un VPS, fortificato di default.

🏰 arx

arx (lat.) — cittadella, fortezza. Un piccolo posto dove i tuoi siti vivono ben difesi.

Un dashboard web in Python per gestire siti nginx su un singolo VPS Debian 13. Tre tipi di sito (statico, PHP, reverse proxy), sicurezza reale di default, niente database centrale.

nginx PHP-FPM certbot Squid WireGuard nftables fail2ban

Cosa fa, in concreto

3 tipi di sito

Statico (html/css/js), PHP (con pool FPM dedicato per sito), reverse proxy (verso un'app sul backend). Senza Docker, senza orchestration.

Isolation per sito

Un utente Unix per sito, processo PHP-FPM dedicato con open_basedir, disable_functions e systemd sandbox. SSH/SFTP isolato per utente.

certbot integrato

TLS Let's Encrypt automatico, rinnovo via timer systemd (arx-renew.timer), zero crontab -e.

RPZ delegata a nomina (opt-in)

Se nomina è sulla stessa macchina, arx droppa file di zona in /srv/nomina/rpz/arx-<sito>.zone e nomina li include nelle response-policy. arx non possiede mai BIND9. Senza nomina, la feature è disattivata e Squid resta il gate autoritativo.

Squid (SNI peek + splice) + nftables per-UID

Outbound proxy. Il traffico di ogni sito esce da una catena nftables marcata col suo UID e viene NAT-redirect su una porta Squid dedicata, che legge l'SNI in chiaro dal ClientHello e applica l'ACL del sito (allow / splice transparent / drop). Nessun MitM TLS: niente CA da fare trustare ai client.

WireGuard per admin

SSH dietro VPN, con heartbeat-rollback quando chiudi la porta 22 pubblica (se non riesci più a entrare, riapre da solo).

Edge trust manager

Modalità "dietro Cloudflare": fetch automatico delle CIDR Cloudflare, configura real_ip_header CF-Connecting-IP, ban con IP veri.

2FA TOTP, audit log

Login pannello con TOTP (Google Authenticator, Aegis, ...), ogni azione amministrativa finisce in un append-only log.

fail2ban con backend nftables

Jail per sshd, nginx-auth, wp-login, panel-auth. Ban via nftables (no iptables legacy).

Hardening "vero" di default

  • noexec, nosuid, nodev su /tmp, /var/tmp, /dev/shm (chi ti scrive PHP malevolo non può eseguire da lì)
  • IPv6 first-class: nftables family inet, IPv4+IPv6 in un'unica regola — il "ip6tables gotcha" è impossibile per costruzione
  • ICMPv6 preservato (Path MTU Discovery, Neighbor Discovery, RA): IPv6 funziona davvero
  • Open_basedir per sito: PHP non può leggere fuori dalla sua home
  • Disable_functions: exec, system, passthru, shell_exec, proc_open, ... default off
  • BIND RPZ: il sito può risolvere solo i nomi nella sua whitelist; la chiamata HTTP a CDN non autorizzati semplicemente non risolve
🎯 Per chi è. Sysadmin solitari, piccole agenzie, freelance che gestiscono una manciata di VPS. Non è uno strumento di fleet management: fa una macchina alla volta, e la fa bene.
🚫 Cosa non è. Non è multi-webserver (nginx only). Non è multi-OS (Debian 13 only). Non è per fleet enterprise. Non è Docker-based. Non è "ospita 200 clienti su un nodo".
04 / 12 · NOMINA

nomina — i nomi, finalmente gestibili

DNS authoritative su BIND9 con un pannello che non finge che BIND non esista.

🌐 nomina

nomina (lat.) — i nomi. Ospita i nomi, e ti lascia leggere ogni configurazione che produce.

Pannello web per BIND9 authoritative su Debian 12/13. Master, slave, forward zones. DNSSEC in un click. RPZ per security filtering. Propagation check live su Cloudflare e Quad9 in parallelo.

BIND9 DNSSEC KASP RPZ TSIG AXFR FastAPI nftables fail2ban

Le cose che funzionano

Per-zone choice

Master (la authority), slave (replica via AXFR), forward (rigira a un altro server). Scelta per zona, non globale.

DNSSEC un click

KASP (Key And Signing Policy) gestisce KSK + ZSK automaticamente. Genera, ruota, esporta DS pronto da incollare al registrar.

RPZ con feed curati

Response Policy Zones per filtering. Feed pronti: URLhaus, Hagezi, OISD, NetForge mining. Aggiornamento periodico, blocco al volo.

Propagation check live

Modifichi un record? nomina interroga in parallelo 1.1.1.1, 8.8.8.8, 9.9.9.9 e ti dice chi già vede l'aggiornamento. Niente watch dig.

Zone files = source of truth

I file BIND su disco sono la verità. Niente database che può divergere. rsync /srv/nomina/ è il backup completo.

TSIG keys integrate

Per AXFR e DDNS sicuri. Il pannello genera, distribuisce, ruota le chiavi TSIG — tu non vedi mai una shared secret a mano.

Layout su disco

/srv/nomina/
zones/<zone>.db            # BIND zone file — fonte autoritativa
rpz/<feed>.zone            # RPZ zones (whitelist, custom, feeds)
named.conf.local           # included da /etc/bind/named.conf
response-policy.conf       # blocco RPZ dentro options{}
dnssec/<zone>/             # KSK + ZSK + KASP key state
keys/tsig.conf             # chiavi TSIG per AXFR / DDNS
admins.json                # admins pannello (Argon2id)
server.json                # opzioni named-level
audit.jsonl                # append-only log azioni admin
backups/                   # snapshot tarball
💡 Non è un registrar. nomina gestisce le tue zone; la delega NS al registrar (OVH, Namecheap, Cloudflare DNS-only) la fai tu, una volta sola, e nomina ti dice esattamente cosa scrivere.
⚠️ Non è un resolver pubblico. Authoritative è il mestiere. Recursion è opt-in, e quando attiva è locked ai client trusted (i tuoi). Niente "open resolver" usato per attacchi DNS amplification.
🧠 L'analogia

BIND9 da solo è come un trattore senza cabina: potente ma scomodo, ti spiove addosso al primo errore di sintassi. nomina ci mette intorno una cabina che ti permette di guidarlo senza imparare il manuale O'Reilly da 800 pagine, senza nascondertelo: i file BIND restano leggibili, modificabili a mano, e nomina li rispetta.

05 / 12 · MISSUS

missus — mail self-hosted senza piangere

Postfix + Dovecot + Rspamd con un pannello che non è mailcow.

✉️ missus

missus (lat.) — "colei che è inviata". La radice di missiva. Spedisce i tuoi messaggi senza drammi.

Mail server panel per Debian. Stack tradizionale e collaudato (Postfix MTA + Dovecot IMAP/POP3 + Rspamd antispam) con dashboard web che fa quello che dovrebbe da sempre: login, vedi, click, funziona.

Postfix Dovecot Rspamd DKIM DMARC SPF Sieve certbot

Perché serviva

La mail self-hosted è il task più difficile dell'amministrazione Linux. Tradizione consolidata. Eppure le opzioni sono:

  • Mailcow: fa tutto, ma sono 15+ container Docker, RAM 4GB minimum, "vuoi cambiare ClamAV? rifatti tutta l'orchestration"
  • iRedMail: gratis, ma "leggi i config files" è la documentazione
  • Mail-in-a-Box: un dominio, niente flessibilità
  • Proxmox Mail Gateway: enterprise-only
  • SaaS: $20-200/mese, dati altrui

Nessuno l'ha resa facile. missus risponde a quel gap.

Cosa fa

DNS advice con verifica live

Genera record SPF, DKIM, DMARC pronti da copiare. Poi li interroga per dirti se sono propagati. Niente più dig +short TXT _dmarc.example.com ogni 5 minuti.

Email tracking by message-id

Dashboard mostra "questa mail è arrivata, è passata da queue, Rspamd ha dato score 1.2, consegnata a inbox". Niente tail -f /var/log/mail.log | grep.

DMARC aggregate dashboard

I report rua= finiscono in un cruscotto built-in che ti mostra chi sta cercando di spoofare il tuo dominio. Feature che SaaS fanno pagare $20-200/mese.

Backup granulare

Restore full, per-domain o per-mailbox. Maildir = file su disco = backup è tar. Niente lock di database.

Sane defaults

Greylisting, postscreen, DKIM auto-signed sull'outbound, rate limit per utente. L'admin che non apre mai "Advanced" ha già un setup decente.

Sieve per regole

Filtri server-side via Sieve / pigeonhole. Le regole funzionano sul server prima che il client le veda — coerenti tra Thunderbird, K-9, web.

Cosa non include (per scelta)

  • Niente ClamAV. Le firme AV catturano malware vecchio. Rspamd con heuristics + reputation copre la superficie moderna (phishing, macro, ZIP cifrati, zero-day). Se serve "spuntare la casella AV" per compliance, lo metti fuori.
  • Niente CalDAV / CardDAV. È un mail server, non Exchange. Calendari? Radicale, davical, Baikal a parte.
  • Niente cluster HA. SMTP è asincrono di natura: server giù 4h = zero mail perse, i sender riprovano per giorni. MX failover (due record DNS, due missus, priorità diverse) copre il 95% dei bisogni reali.
  • Niente Docker. Pacchetti Debian nativi, systemd, /etc.
🎯 Target hardware. VPS con 2 GB RAM, Raspberry Pi 4 con 4 GB, LXC su Proxmox, homelab. Non servono 32 core e 64 GB per ricevere 200 mail al giorno.
06 / 12

Lo stack comune

Tre prodotti, le stesse fondamenta. Conoscine uno, conoscili tutti.

Componente Tecnologia Perché
Linguaggio backendPython 3.10+Tutti e tre. Stessa skill, stessa codebase familiare.
Web frameworkFastAPI + Jinja2Server-side rendering, asincrono dove serve, niente SPA.
FrontendVanilla HTML/CSS/JSZero React, zero build step, zero node_modules da 800 MB.
Storage statoFile su disco + JSON/SQLite minimoZone files BIND, Maildir, nginx conf — tutto leggibile a mano.
OS targetDebian 12 (bookworm) + 13 (trixie)Solo questi. Niente Ubuntu, niente RHEL, niente "should work on Arch".
Packaging.deb nativiapt install, dipendenze risolte, postinst pulito.
Service managersystemdUnit files standard, journalctl, timer per i job periodici.
Firewallnftables (family inet)IPv4+IPv6 in un'unica ruleset. Niente legacy iptables.
Banfail2ban (backend nftables)Jail per ssh, panel-auth, e service-specific.
TLScertbot (Let's Encrypt)standalone o DNS-01, rinnovo via timer systemd.
Auth pannelloArgon2id + 2FA TOTPNiente bcrypt vecchio, niente "password in chiaro nel JSON".
Audit logaudit.jsonl append-onlyUna riga JSON per azione, immutabile per default.
🧠 Filosofia "boring tech". Niente Rust dove va Python, niente WebAssembly dove va systemd, niente Kafka dove va una append-only file. Lo stack è noioso apposta: il sysadmin che ti rileva tra 3 anni lo capisce in 10 minuti.

Layout su disco (uniforme)

convenzione comune
/srv/<prodotto>/          # source of truth (state, config, dati)
/etc/<prodotto>/env       # env vars (SESSION_SECRET, etc)
/var/log/<prodotto>/      # log + journalctl
/usr/lib/<prodotto>/      # venv Python + binari
/etc/systemd/system/      # unit files: <prodotto>.service + .timer

Stessa convenzione per arx, nomina e missus. Tutto sotto /srv/<prodotto>/ è ciò che ti serve per il backup. Punto.

Coesistenza sullo stesso VPS

Il sysadmin tipico mette tutti e tre i pannelli su una sola macchina (o tre LXC su un solo Proxmox). La regola operativa è semplice: un daemon, un proprietario; gli altri sono client.

Daemon / risorsa Posseduto da Gli altri pannelli
nginxarxnessuno tocca /etc/nginx/
BIND9nominaarx droppa file di zona RPZ in /srv/nomina/rpz/arx-<sito>.zone (opt-in)
Postfix / Dovecot / Rspamdmissusarx è un client SMTP submission (smarthost 127.0.0.1:587 con SASL)
Tabelle nftablesognuno la suatable inet arx, table inet nomina, table inet missus — nessuno scrive nelle altrui
fail2ban jailsognuno il suosolo /etc/fail2ban/jail.d/<prodotto>.local, mai jail.local globale
certbot hooksognuno i suoipre/post idempotenti, ognuno reload solo del proprio service
🧠 Conseguenza pratica. Quando installi nomina su una macchina che ha già arx, niente si rompe: arx non possiede BIND9, non ha mai scritto in /etc/bind/. Quando installi missus, arx smette di mandare la mail di sistema via "nessuno" (oggi via env mail null) e inizia a parlare submission al suo nuovo vicino. Stessa direzione per ogni nuovo pannello che aggiungi alla famiglia.
07 / 12

Estensibilità: il core risolve il caso d'uso, i plugin sono opzionali

Plugin discovery via Python entry_points esiste in tutti e tre i pannelli. Ma il core, da solo, copre il caso d'uso al 100% — nessun plugin obbligatorio, nessuna installazione "incompleta".

🧩 Architettura

Ogni pannello ha un PluginRegistry che scopre estensioni installate come pacchetti Python separati e registrati nel group arx.plugins / missus.plugins / nomina.plugins. Un plugin può contribuire route HTTP, voci di sidebar, comandi CLI, hook pre/post-apply. Il core non importa nessun plugin di default: il modulo entra nel processo solo se installato esplicitamente.

Il principio guida è core completo, plugin facoltativi:

  • Le funzioni che servono al 95% degli admin sono nel core. Hosting nginx + PHP-FPM + SSL + firewall + WireGuard + edge trust + smarthost + backup — tutto out-of-the-box, nessun plugin da installare.
  • I plugin coprono casi specializzati o tier premium. DMARC scaling per gestori che ricevono milioni di report al giorno, multi-tenant authz, integrazione Grafana, queue worker S3 multi-region. Roba che non serve all'agenzia con 20 siti, ma serve all'ISP con 2000.
  • Domini che non sono del pannello restano fuori. Un MariaDB serio non vive nel pannello hosting; vive sul suo host (o LXC, o RDS gestito) e arx parla TCP. Un MTA pubblico è missus, non un mini-Postfix dentro arx. Anche con plugin disponibili, certe scelte di architettura non si discutono.

Cosa non finisce in un plugin

💾

Backup è nel core

Tarball di /srv/arx/ + rsync verso destinazione configurata (host:path o rclone S3-like). Feature core configurabile, non plugin separato — serve a tutti, non è specializzata.

✉️

Mail relay = smarthost

arx non possiede Postfix — né come modulo né come plugin. Configura un smarthost esterno (host/porta/SASL): missus su 127.0.0.1:587 se presente, oppure Mailgun, Postmark, AWS SES — uguale.

🔒

Database = altro host

arx non gestisce MySQL/Postgres/Redis — né come modulo né come plugin. Bring-your-own-host (separato), le app dei siti si connettono in rete. Riduce la blast radius e separa i fault domain.

🧠 Per chi estende. Vuoi qualcosa di custom — push a Slack quando un sito cade, dashboard Grafana, queue worker tuo — hai due strade: (1) mattoni Linux standard (cron, script, service systemd), che è stabile da 30 anni e non si rompe con gli upgrade del pannello; (2) plugin Python via entry_points, se vuoi route nel pannello, voci di sidebar, comandi CLI integrati. Entrambe le strade convivono: scegli in base a quanto profondo è l'integrazione che vuoi.
08 / 12

Backup & migration

Il vero test di un pannello: trasferirlo da una macchina all'altra senza piangere.

💾 Il modello: rsync + apt + rehydrate

Tutti e tre i pannelli rispettano la stessa logica: i dati vivono in /srv/<prodotto>/, e il binario sa ricostruire tutto il resto da quei dati. Migrazione = 3 comandi.

esempio: migrare arx da vecchio a nuovo VPS
# 1. Sul nuovo VPS, installa
new$ sudo apt install ./arx_0.1.0-1_all.deb

# 2. Trasferisci /srv/arx/ dal vecchio
old$ sudo systemctl stop arx
old$ rsync -avz /srv/arx/ root@new-vps:/srv/arx/

# 3. Sul nuovo, ricostruisci configurazioni native (nginx, certbot, ...)
new$ sudo arx rehydrate
new$ sudo systemctl start arx
# Tutti i siti, tutti i certificati, tutti i pool PHP — rigenerati e attivi.
🏰

arx

/srv/arx/ contiene siti, conf, certificati, utenti

🌐

nomina

/srv/nomina/ contiene zone, RPZ, DNSSEC keys, TSIG

✉️

missus

/srv/missus/ contiene Maildir, domini, DKIM, alias

🧠 Il test definitivo

Un pannello è serio quando puoi spegnere il VPS, distruggerlo, comprarne un altro, fare apt install + rsync + restart, e tutto torna come prima. Mailcow ti chiede uno script di backup-restore custom. Plesk ti vende un servizio. Questi tre fanno rsync e basta.

💾 Backup strategy. Cron giornaliero: tar -czf /backup/arx-$(date +%F).tar.gz /srv/arx/, sync remoto a Wasabi/B2/MinIO con rclone. Stessa cosa per missus e nomina, ognuno col suo /srv/<prodotto>/. Per missus c'è in più il restore per-mailbox dal pannello: utente cancella errore, recuperi solo la sua casella, non tutto il server.
09 / 12

Installazione

Il processo è volutamente noioso. Esattamente come dovrebbe essere.

💾 Prerequisiti

  • Debian 12 (bookworm) o Debian 13 (trixie). Niente Ubuntu, niente RHEL, niente WSL.
  • arx: Debian 13 only (richiede nftables family inet completo).
  • Accesso root o sudo.
  • Per missus: porte 25, 465, 587, 993 aperte verso internet.
  • Per nomina: porta 53 udp+tcp aperta (e una zona delegata da un registrar).
  • Per arx: porta 80, 443 aperte (per certbot Let's Encrypt).

Aggiungi il repository APT pubblico

🔒 Distribuzione via repository APT pubblico — arx, missus e nomina sono gratis per uso personale e non-commerciale (homelab, studio, fai-da-te). Nessuna registrazione, nessuna password, nessuna credenziale: apt update && apt install e basta. L'uso commerciale (clienti paganti, produzione a scopo di lucro) richiede una licenza NetForge attiva — il pannello è identico, la licenza regola l'uso non l'accesso ai pacchetti.
setup repository APT NetForge
# Aggiungi la chiave GPG e la lista APT (codename: bookworm o trixie)
$ curl -fsSL https://apt.netforge.it/netforge.asc | sudo tee /etc/apt/keyrings/netforge.asc
$ echo "deb [signed-by=/etc/apt/keyrings/netforge.asc] https://apt.netforge.it/free trixie main" \
    | sudo tee /etc/apt/sources.list.d/netforge.list
$ sudo apt update

Installa quello che ti serve

arx — hosting nginx
$ sudo apt install arx
$ sudo arx admin create selif       # crea primo admin
$ sudo systemctl start arx
$ ssh -L 9443:127.0.0.1:9443 selif@vps
# Browser: http://127.0.0.1:9443/
nomina — DNS authoritative
$ sudo apt install nomina
$ sudo nomina admin create selif
$ sudo systemctl start nomina
$ ssh -L 8443:127.0.0.1:8443 selif@vps
# Browser: http://127.0.0.1:8443/
missus — mail server
$ sudo apt install missus
$ sudo missus admin create selif
$ sudo systemctl start missus
$ ssh -L 8443:127.0.0.1:8443 root@vps
# Browser: http://127.0.0.1:8443/
🔒 Pannello su localhost only. Nessuno dei tre apre il pannello su internet. Si raggiunge via SSH tunnel (ssh -L) o WireGuard (per arx, è integrato). Niente porta 9443 esposta al mondo che vada in pasto a fail2ban tutto il giorno.

Setup post-install: cosa succede dietro

L'installazione del .deb fa postinst pulito. Non ti chiede mille domande in modo TUI. Cosa esegue:

  • Crea utente di sistema dedicato (arx, nomina, missus) e gruppo
  • Crea /srv/<prodotto>/ con permessi 0750, owner: utente di sistema
  • Genera secret di sessione in /etc/<prodotto>/env
  • Installa unit systemd e timer (rinnovo TLS, rotation log, ...)
  • Per arx: scrive /etc/nginx/conf.d/zz-arx.conf (include marker)
  • Per nomina: scrive /etc/bind/named.conf con include di /srv/nomina/named.conf.local
  • Per missus: configura Postfix transport map verso il backend Dovecot LMTP, abilita Rspamd milter
  • Abilita unit (systemctl enable), non avvia (lo fai tu dopo aver creato l'admin)

Licenza & telemetry

Licenza proprietaria, dual-use. Termini binding completi su netforge.it/terms.

  • Gratis per uso personale e non-commerciale: homelab, studio, posta/DNS/hosting in casa per te o una non-profit, valutazione prima dell'acquisto. Nessuna registrazione, nessun pagamento.
  • Uso commerciale (clienti paganti, produzione a scopo di lucro, integrazione in un prodotto venduto a terzi): permesso solo a chi ha una licenza NetForge attiva per l'anno in corso.
  • Niente redistribuzione, reverse engineering, sublicensing.
  • Niente operazione come servizio gestito per terze parti senza accordo scritto separato.
  • Legge italiana, foro del titolare.

Telemetry — "Brave-lite". Ogni pannello effettua un ping giornaliero a ping.netforge.it con i seguenti dati e nient'altro:

  • Versione del pannello (es. 0.1.3)
  • Distribuzione OS (debian-13 via /etc/os-release)
  • Contatori operativi bucketati nelle 5 fasce 0 · 1-5 · 6-20 · 21-100 · 100+ (per arx: siti; per missus: domini + caselle; per nomina: zone + zone DNSSEC)

Niente install_id, niente UUID, niente correlazione per-installazione. Modello ispirato all'analytics privacy-preserving di Brave: il server non può collegare un singolo ping a una specifica installazione. Fuori dallo scope GDPR per costruzione, niente dato personale.

Opt-out in due righe se preferisci:

arx telemetry disable        # missus / nomina identici
echo 'NETFORGE_TELEMETRY=off' >> /etc/arx/env

Esegui <prodotto> telemetry status per vedere esattamente cosa verrebbe mandato la prossima volta.

10 / 12

CLI

Per chi non vuole aprire il browser. Tutti e tre hanno la loro CLI.

arx CLI

ComandoDescrizione
arx admin create <user>Crea admin pannello (chiede password)
arx admin passwd <user>Reset password admin
arx site create <dominio>Nuovo sito (chiede tipo: static/php/proxy)
arx site listLista siti gestiti
arx cert renew <dominio>Forza rinnovo TLS
arx rehydrateRicostruisce config native da /srv/arx/
arx backup --out FILETarball completo di /srv/arx/

nomina CLI

ComandoDescrizione
nomina admin create <user>Crea admin pannello
nomina zone add <zone> --type masterAggiungi zona authoritative
nomina zone listLista zone
nomina dnssec enable <zone>Genera KSK+ZSK e firma la zona
nomina dnssec ds <zone>Stampa DS record da incollare al registrar
nomina propagation <zone> <record>Check live su Cloudflare/Quad9
nomina rehydrateRiscrive named.conf + zone files da /srv/nomina/

missus CLI

ComandoDescrizione
missus admin create <user>Crea admin pannello
missus domain add <dominio>Aggiungi dominio mail
missus mailbox add <user@dom>Crea casella (chiede password)
missus dns advice <dominio>Stampa SPF/DKIM/DMARC da pubblicare
missus dns verify <dominio>Verifica live i record sul DNS
missus queue listMail in coda Postfix
missus dmarc report <dominio>Aggregato report DMARC ricevuti
missus restore --domain <d> --from FILERestore granulare
📝 Output JSON. Tutti e tre supportano il flag --json per output machine-readable. Esempio: nomina zone list --json | jq '.[] | select(.dnssec == true)' per vedere solo le zone firmate.
Exit codes coerenti. 0 = ok, 1 = errore generico, 2 = errore di sintassi/argomenti. Scriptabile con set -e tranquillamente in cron e Ansible.
11 / 12

Cosa NON fanno (per scelta)

Le anti-feature, dichiarate. Sapere cosa non fa uno strumento è più importante di sapere cosa fa.

Cosa fanno bene

  • Una macchina alla volta, fatta bene
  • Stack tradizionale, ben documentato
  • File su disco = source of truth
  • Backup = tar di una cartella
  • Migrazione = rsync + rehydrate
  • 2FA TOTP, audit log, hardening reale
  • Pannello web + CLI + API equivalenti
  • Plugin .deb opzionali (arx)

Cosa NON fanno

  • Multi-server / fleet management (no Ansible-replacement)
  • Docker / Kubernetes (no container)
  • Multi-OS (Debian only)
  • Multi-webserver (arx: nginx only)
  • SaaS / cloud (no account online, esecuzione 100% locale)
  • Calendari / contatti (missus: mail only)
  • Cluster HA (failover via DNS, basta)
  • "200 clienti su un nodo" (non è Plesk)
🤔 Se hai bisogno di fleet management, usa Ansible sopra a questi tre prodotti. Sono pensati apposta per essere provisioned da fuori (file su disco + comandi CLI = playbook semplice).
🧠 La filosofia in una frase

"Vogliamo che sia fattibile per uno, non impressionante per cento." Tre pannelli costruiti per il sysadmin solitario, il freelance, l'agenzia da 5 persone, la PMI con un VPS. Se devi gestire 500 server, esistono altri strumenti, e vanno benissimo. Per gli altri 95% dei casi, c'è questa suite.

12 / 12

Cheat sheet

I comandi che ti serviranno davvero, in una pagina da stampare.

arx — quotidiano

arx daily ops
# Stato + log
$ sudo systemctl status arx
$ sudo journalctl -u arx -f

# Nuovo sito statico
$ sudo arx site create blog.example.com --type static
$ sudo arx cert issue blog.example.com

# Nuovo sito PHP (con pool FPM dedicato)
$ sudo arx site create wp.example.com --type php --php 8.3

# Reverse proxy verso un'app
$ sudo arx site create api.example.com --type proxy --backend http://127.0.0.1:3000

# Backup completo
$ sudo arx backup --out /backup/arx-$(date +%F).tar.gz

nomina — quotidiano

nomina daily ops
# Aggiungi zona master, poi DNSSEC
$ sudo nomina zone add example.com --type master
$ sudo nomina dnssec enable example.com
$ sudo nomina dnssec ds example.com
# → copia il DS record nel pannello del registrar

# Modifica record + check propagazione live
$ sudo nomina record set example.com www A 1.2.3.4
$ sudo nomina propagation example.com www
# → mostra: 1.1.1.1 OK, 8.8.8.8 OK, 9.9.9.9 in attesa...

# Slave su un secondary box
$ sudo nomina zone add example.com --type slave --master 1.2.3.4

# RPZ: blocca un dominio per i client che usano questo resolver
$ sudo nomina rpz block bad-domain.com

missus — quotidiano

missus daily ops
# Setup primo dominio + DNS advice
$ sudo missus domain add example.com
$ sudo missus dns advice example.com
# → stampa SPF, DKIM, DMARC pronti da pubblicare

# Pubblicati i record? Verifica live
$ sudo missus dns verify example.com
# → SPF: OK, DKIM: OK, DMARC: OK (policy: quarantine)

# Crea casella
$ sudo missus mailbox add [email protected]

# Coda Postfix (chi sta ancora aspettando di partire)
$ sudo missus queue list
$ sudo missus queue flush

# Aggregato DMARC settimanale
$ sudo missus dmarc report example.com --since 7d

Backup & restore (tutti e tre)

backup pattern
# Backup giornaliero, cron in /etc/cron.daily/netforge-backup
#!/bin/bash
DATE=$(date +%F)
DEST=/backup
mkdir -p $DEST

for svc in arx nomina missus; do
    if [ -d /srv/$svc ]; then
        tar -czf $DEST/$svc-$DATE.tar.gz /srv/$svc/
    fi
done

# Sync remoto (Wasabi/B2/MinIO)
rclone sync $DEST remote:nf-backups/ --max-age 30d
restore pattern
# Su un VPS nuovo, dopo apt install <prodotto>
$ sudo systemctl stop arx
$ sudo tar -xzf arx-2026-04-30.tar.gz -C /
$ sudo arx rehydrate
$ sudo systemctl start arx
# Stesso pattern per nomina e missus.

Diagnosi rapida quando qualcosa non va

troubleshooting
# Pannello non risponde — tail dei log
$ sudo journalctl -u arx -n 100 --no-pager

# nginx complain — test sintassi
$ sudo nginx -t

# BIND complain — check config
$ sudo named-checkconf
$ sudo named-checkzone example.com /srv/nomina/zones/example.com.db

# Postfix — check generale
$ sudo postfix check
$ sudo journalctl -u postfix -f

# Audit log: chi ha fatto cosa, quando
$ sudo tail -f /srv/arx/audit.jsonl | jq

🚀 Vuoi seguire la suite?

I tre prodotti sono in early development — le release pubbliche escono via netforge.it. Ne stiamo parlando, non vendendo: la guida è qui per dirti che esiste qualcuno che la pensa così sul self-hosted.

netforge.it →
📚 Guide collegate: NetForge (security toolkit), Ansible (per provisionare questi tre da fuori), AppArmor (hardening complementare), Linux Admin (le basi).