[Ita, Eng N/A]
Intro
“Self-hosting” inteso come fornire servizi (per se stessi o persone amiche) da un computer o server di cui si ha il completo controllo (hardware, software).
Esempio di servizi possono essere: sito/blog, istanza pleroma/mastodon, server xmpp, repository codice, archiviazione/condivisione file, ecc…
Questi servizi possono essere limitati alla rete lan o wifi locale oppure esposti su Internet per essere raggiungibili anche quando non si è in casa.
Fare self-hosting richiede tempo ma può essere una cosa meravigliosa se pensiamo che stiamo evitando di fornire i nostri dati a grandi multinazionali che lucrano proprio su queste informazioni!
Installazione
Una volta recuperato l’hardware, ad esempio un vecchio PC, possiamo seguire i passaggi di installazione descritti qui: Chapter 2. Installing FreeBSD
In pratica:
- Download dell’immagine, io sceglierei la “-memstick.img” da https://download.freebsd.org/releases/amd64/amd64/ISO-IMAGES/13.2/ per la versione 13.2
- Scrittura dell’immagine su una chiavetta USB
- Boot del PC dalla chiavetta
- Installazione
- Avvio di FreeBSD da disco
I passaggi di installazione sono abbastanza semplici, per certi versi più semplici dell’installazione di Debian.
Hint: usa zfs
Per quanto riguarda i componenti opzionali se non si hanno necessità particolari, io sceglierei solo “lib32” e “ports”, o forse anche solo quest’ultimo.
Per quanto riguarda invece i servizi da attivare, prenderei solo “sshd”, “ntpd” e “powerd”.
Per chi ha un background Linux-centrico, questa pagina riassume le principali differenze tra FreeBSD e Linux in generale: FreeBSD Quickstart Guide for Linux® Users
Fun
La parte divertente inizia accendendo i servizi da offrire in rete.
Siccome dobbiamo farlo in modo sicuro, non li installiamo direttamente nel sistema operativo ma li isoliamo in modo tale che, se un servizio dovesse essere compromesso, non venga compromesso tutto il server, o comunque cerchiamo di rendere la vita difficile alle persone malintenzionate.
Su FreeBSD uno dei modi per isolare un servizio dal resto del sistema è l’uso di una “jail” (Chapter 17. Jails), anche se il nome ci sta molto antipatico :-(
Le jail si basano su concetti simili a quelli dei container su Linux.
Uno degli strumenti più in voga per amministrare le jail (possiamo farne quante ne vogliamo, ad esempio una per servizio o gruppo di servizi) è Bastille.
Preparazione di Bastille:
server> pkg install bastille server> sysrc bastille_enable=YES server> sysrc cloned_interfaces="lo1" server> sysrc ifconfig_lo1_name="bastille0" server> service netif cloneup
Modifica del file “/usr/local/etc/bastille/bastille.conf”, questo è il mio:
bastille_prefix="/bastille" bastille_backupsdir="${bastille_prefix}/backups" bastille_cachedir="${bastille_prefix}/cache" bastille_jailsdir="${bastille_prefix}/jails" bastille_releasesdir="${bastille_prefix}/releases" bastille_templatesdir="${bastille_prefix}/templates" bastille_logsdir="/var/log/bastille" bastille_sharedir="/usr/local/share/bastille" bastille_bootstrap_archives="base ports" bastille_tzdata="" bastille_resolv_conf="/etc/resolv.conf" bastille_url_freebsd="http://ftp.freebsd.org/pub/FreeBSD/releases/" bastille_url_hardenedbsd="http://installer.hardenedbsd.org/pub/hardenedbsd/" bastille_url_midnightbsd="https://www.midnightbsd.org/ftp/MidnightBSD/releases/" bastille_zfs_enable="YES" bastille_zfs_zpool="zroot" bastille_zfs_prefix="bastille" bastille_zfs_options="-o compress=lz4 -o atime=off" bastille_compress_xz_options="-0 -v" bastille_decompress_xz_options="-c -d -v" bastille_compress_gz_options="-1 -v" bastille_decompress_gz_options="-k -d -c -v" bastille_network_loopback="bastille0" bastille_network_shared="" bastille_network_gateway="" bastille_network_gateway6="" bastille_template_base="default/base" bastille_template_empty="" bastille_template_thick="default/thick" bastille_template_clone="default/clone" bastille_template_thin="default/thin" bastille_template_vnet="default/vnet"
Installazione template base (scelgo di usare la stessa versione FreeBSD del sistema):
server> bastille bootstrap 13.2-RELEASE
Come esempio di servizio, possiamo accendere una jail con Gitea (strumento per appoggiare codice, documentazione, ecc).
Qui “em0” è l’interfaccia di rete fisica del server collegata alla LAN di casa e “10.0.0.10” è un indirizzo IP libero della LAN che sarà assegnato alla jail.
server> bastille create gitea 13.2-RELEASE 10.0.0.10 em0 server> bastille pkg gitea update server> bastille pkg gitea install ca_root_nss git openssl gitea
Entriamo nella jail per configurare Gitea
server> bastille console gitea gitea> mkdir -p /data/repos gitea> chown -R git:git /data/repos gitea> vi /usr/local/etc/gitea/conf/app.ini # queste le mie modifiche, il resto invariato: ROOT = /data/repos ROOT_URL = http://git.local.lan:3000/ DISABLE_SSH = true # salva il file con <Esc> :wq gitea> exit
Finiamo la jail con Bastille:
server> bastille sysrc gitea gitea_enable=YES server> bastille service gitea gitea start
Teoricamente adesso navigando alla URL http://10.0.0.10:3000/ dovremmo poter accedere all’interfaccia web di Gitea.
The fun is back!