Skip to content

C o s e

cretox

  • Info

Put the fun back into self-hosting with FreeBSD and jails

Posted on 11/07/2023 by cretox

Put the fun back into self-hosting with FreeBSD and jails

[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!

Posted in GeneralTagged freebsd, fun, jails

Post navigation

I love you (ascii)doctor <3
A short journey towards the field of lesser-known code editors


Supporta:

Questo weblog esiste ed è visibile sulla rete grazie al Collettivo Autistici/Inventati che offre il servizio e mette a disposizione i mezzi (banda e macchine). Il progetto ha costi notevoli ma vive solo delle donazioni: nessun amministratorə verrà mai a casa tua a chiederti il canone.
Se vuoi che questo blog e la miriade di altri servizi offerti da A/I continuino ad esistere, sarebbe molto carino se impegnassi qualche euro in questo senso. Per fare una donazione, visita questa pagina.


Follow this blog on:

Follow this blog
Proudly powered by WordPress | Theme: micro, developed by DevriX.