XMPP

I tuoi amici nerd ti bullizzano perché usi ancora software proprietario come Telegram e non sei migrato a Matrix?
Rilancia hostando con Prosody il tuo server XMPP personale! (Sì, il vecchio caro Jabber di fine anni ’90…)

Consumando solo una 40ina di MB di RAM e pochi MB di disco può girare su piccoli server virtuali, sistemi embedded, hardware di recupero…
Grazie alle librerie di gateway Slidge puoi creare dei bridge verso altri network come WhatsApp o Telegram proprio come fa Matrix.

Per rendere il server XMPP ancora più sicuro e far rosicare i tuoi amici consiglio di non renderlo disponibile in chiaro su Internet, ma tramite reti anonime come TOR, Yggdrasil o I2P.

Basterà installare il pacchetto “prosody” sulla vostra distro preferita e configurarlo come segue:

Se vogliamo lasciare che i nuovi utenti possano creare un account basterà scrivere nel file di configurazione /etc/prosody/prosody.cfg.lua

allow_registration = true

Altrimenti (scelta consigliata se vogliamo gestire una piattaforma per pochi intimi) possiamo creare manualmente gli utenti col comando

prosodyctl adduser

A seguire un esempio di file prosody.cfg.lua
È stata permessa la creazione di utenti e oltre al server principale su Yggdrasil ci sono due virtualhost su TOR e I2P.
Non ho abilitato tls perché non mi serve dato che lo uso su reti già cifrate, mentre il modulo “muc” serve per la creazione di stanze

/etc/prosody/prosody.cfg.lua

daemonize = true
pidfile = "/run/prosody/prosody.pid"

modules_enabled = {
"roster"; "saslauth";
-- "tls";
"dialback"; "disco";#/etc/prosody/prosody.cfg.lua
"carbons"; "pep";
"private"; "blocklist";
"vcard4"; "vcard_legacy";
"version"; "uptime";
"time"; "ping";
"admin_shell";
--"muc";
}

allow_registration = false
authentication = "internal_hashed"
storage = "internal"
log = {
info = "/var/log/prosody/prosody.log";
error = "/var/log/prosody/prosody.err";
}
c2s_require_encryption = false
s2s_secure_auth = false
interfaces = { "127.0.0.1", "::1" }
VirtualHost "blablablablabalbalblablablablabalblabalbalblablabalba.b32.i2p"
enabled = true
Component "conference.blablablablabalbalblablablablabalblabalbalblablabalba.b32.i2p" "muc"
muc_room_cache_size = 100
restrict_room_creation = "local"
VirtualHost "blablablablabalbalblablablablabalblabalbalblablabalbalbalb.onion"
enabled = true
Component "conference.blablablablabalbalblablablablabalblabalbalblablabalbalbalb.onion" "muc"
muc_room_cache_size = 100
restrict_room_creation = "local"

A seguire anche le modifiche sui file di configurazione di TOR e I2P

/etc/tor/torrc

HiddenServiceDir /var/lib/tor/xmpp/
HiddenServicePort 5222 127.0.0.1:5222

/etc/i2pd/tunnels.conf

[xmpp]
type = server
host = 127.0.0.1
port = 5222
keys = xmpp.dat

Assemblea dei soci 2026

Il giorno martedì 10 gennaio 2026 si è tenuta l’assemblea ordinaria dei soci per l’anno in corso, con ordine del giorno:

  • Approvazione bilancio e relazione attività 2025
  • Elezione delle cariche previste dallo Statuto
  • Programmazione attività 2026
  • Destinazione degli eventuali utili
  • Varie ed eventuali

Al termine dell’assemblea, vengono prodotti i seguenti documenti:

Yggdrasil, la rete a prova di futuro

L’ostacolo principale per l’affermazione di una nuova tecnologia non è la sua complessità, ma l’esistenza di una tecnologia precedente che riesca, sebbene in maniera parziale, a svolgerne funzioni simili.

Questo è il motivo per il quale, nonostante l’IPv6 e le connessioni Internet a banda larga esistano da oltre 20 anni, l’utente medio impreca ancora col NAT e non può godersi un IP statico.

La rete Yggdrasil, che non ha niente a che fare con la storica distribuzione Linux Plug&Play dei primi anni ’90, vi permetterà di sperimentare l’ebrezza di avere un IPv6 statico bypassando l’inerzia dei vostri provider!
Si tratta infatti di una rete mesh VPN IPv6 con cifratura end-to-end, praticamente una rete privata dove ogni partecipante è sia host che client, che si auto-organizza senza autorità centrale e che cifra tutte le connessioni.

Funzionalità

  • Mesh Networking: protocollo di routing distribuito basato su una Distributed Hash Table (DHT), simile a Kademlia. Ogni nodo si connette ad altri nodi formando una rete, a differenza di quanto accada con le normali reti geografiche.
  • Cifratura end-to-end: tutto il traffico è cifrato in maniera simile ad una VPN, ma integrato. Più o meno come era stata pensata la cifratura nativa di IPv6 con IPsec.
  • IPv6 nativo: Assegna indirizzi IPv6 univoci e permanenti, basati sull’hash di una chiave pubblica che genera al primo avvio

In pratica

1) Si installa il software Yggdrasil sul dispositivo
2) Ci si connette ad almeno un altro nodo Yggdrasil (un amico, un server pubblico) impostandolo su /etc/yggdrasil.conf
3) Il programma scopre automaticamente altri nodi e crea i percorsi ottimali
4) Viene creata una nuova interfaccia di rete tun0 alla quale è attribuito un indirizzo IPv6 univoco (es.: 200:x:x:x::/64)
5) Adesso si è pronti per comunicare con qualsiasi altro dispositivo presente sulla rete Yggdrasil

Casi d’uso principali

  • Alternativa (a prova di utonto) ai tradizionali software VPN come Wireguard o OpenVPN
  • Alternativa a VPN commerciali
  • Comunicazioni sicure senza dipendere dalla cifratura del protocollo di comunicazione (http, ftp, telnet, imap…)
  • Reti comunitarie in aree con internet limitato (es. università, laboratori, uffici…)
  • Creazione di servizi decentralizzati (chat, file sharing, hosting)

Indice delle principali pagine web su Yggdrasil
http://[21e:a51c:885b:7db0:166e:927:98cd:d186]/

Alpine Linux, perché buttare l’hardware è peccato!

Avevo bisogno di un serverino domestico per alcuni esperimenti e per taccagneria passione per il trashware ho deciso di recuperare il mio “vecchio” (2007) EeePC 701 (Celeron M 900MHz, 2GB RAM, 4GB SSD).

Sono consapevole che un Raspberry Pi 4 sarebbe molto più performante, ma quanto ci avrei messo ad ammortizzare l’investimento?
L’EeePC 701 consuma:

  • 9,5V – 2,5A max → ~24W di picco
  • frequenza media della CPU su un uptime di 62 giorni: 113 MHz:32.73%, 225 MHz:21.17%, 338 MHz:15.11%, 450 MHz:10.52%, 563 MHz:6.91%, 675 MHz:2.72%, 788 MHz:3.57%, 900 MHz:7.28%
  • Una stima verosimile si attesta attorno ad una media di 11W

Tradotto in Euro significa:

  • 11 W × 24 h × 365 giorni = 96.360 Wh ≈ 96 kWh / anno
  • costo medio dell’elettricità in Italia nel 2025 = 0,30 €/kWh
    96 kWh × 0,30 € = ~28,80 € / anno

Un Raspberry Pi 4 Model B invece consuma:

  • 4,5 W × 24 × 365 = 39.420 Wh ≈ 39 kWh / anno
  • 39 kWh × 0,30 € = ~11,70 € / anno

Un Raspberry mi farebbe risparmiare circa 17€ l’anno, ma nuovo costa un centinaio di euro e per rientrare dell’investimento mi occorrerebbero circa 6 anni!

Ma veniamo ai problemi pratici: CPU a 32bit e disco da soli 4GB! Forse non ve ne siete accorti, ma la maggior parte delle distribuzioni ha deprecato il supporto all’architettura Intel 32-bit.

Nell’ordine ho quindi scartato:

  • Debian 12 (supporta i686 ufficialmente “solo” fino a giugno 2028), da amante del retrocomputing non mi ha entusiasmato la scelta di Debian di eliminare il supporto agli Intel a 32bit. L’installazione di base occupa circa 750MB.
  • Slackware 15/current: stabile, ma è complicato contenere la dimensione del sistema di base. L’installazione della maggior parte dei pacchetti delle serie a, ap, l ed n occupa circa 1200-1300MB, in oltre per il software extra ci si deve affidare a repository non ufficiali o ai maledetti Slackbuild.
  • Gentoo: RICOMPILARE UNA DISTRO MODERNA SU UN PC A 900MHZ?!!
  • Slitaz: progetto leggero ed interessante, ma non ha i pacchetti per il software che mi serve.
  • Tiny Core: stesso discorso di Slitaz.
  • Free/Net/OpenBSD: girano tutti senza problemi anche su i586, ma l’installazione minima richiede rispettivamente 1.3GB, 900MB e 1.2GB.
  • Arch Linux 32: uso Arch da 20 anni, c’era ancora installata una vecchia Arch sull’EeePC quando l’ho riesumato, ma mi sono ricordato di questo fork quando ormai era troppo tardi.
  • Void Linux: ha il miglio rapporto leggerezza-facilità d’installazione. Scartata perché ha un gestore di pacchetti con una sintassi troppo particolare per i miei gusti. L’installazione minima richiede circa 700MB.
  • Alpine Linux: non è solo sinonimo di container, può essere installata anche su hardware reale. Usa musl al posto di glibc ed è più leggera e performante di tutte le soluzioni precedenti. Purtroppo il suo installer non permette di gestire manualmente le partizioni, ma dato che l’installazione minima richiede meno di 200 MB ho deciso che valesse la pena effettuare l’installazione tramite chroot (stile Arch).

Installazione Alpine Linux tramite chroot

1. Configurazioni base

setup-hostname -n serverino
setup-keymap it it
setup-timezone -z Europe/Rome
setup-interfaces
passwd

2. Preparare il disco per btrfs

apk add btrfs-progs
cfdisk… [partizioni GPT con sda1 BIOS BOOT e sda2 Linux]
mkfs.btrfs /dev/sda2
modprobe btrfs
mount /dev/sda2 /mnt
cd /mnt
btrfs subvolume create rootvol
umount /mnt
mount /dev/sda2 -o subvol=rootvol,compress=lzo,sdd /mnt
mount –bind /dev /mnt/dev
mount –bind /proc /mnt/proc
mount –bind /sys /mnt/sys
mount -t devpts devpts /mnt/dev/pts -o gid=5,mode=620

3. Installare il sistema di base

setup-disk -m sys /mnt
chroot /mnt /bin/ash
apk update
apk upgrade
apk add grub grub-bios
grub-mkconfig -o /boot/grub/grub.cfg
grub-install /dev/sda