Gemini avec vger

Gemini est un nouveau protocole internet qui se veut plus simple et plus léger que http. Il bénéficie des "bonnes" limitations de gopher et évite les problèmes inhérents à http (javascript, publicités, tracage des visiteurs...).

C'est un moyen idéal pour publier ses écrits en privilégiant d'abord le contenu plutôt que le contenant.

Cette documentation est d'ailleurs disponible via le protocole gemini. 😁

Il existe plusieurs serveurs, mais je voudrais donner quelques éléments pour installer vger, un serveur gemini spécialement concu pour OpenBSD qui met à profit ses méthodes de sécuisation (unveil, pledge...).

Afin de garder vger aussi simple que possible, solene (développeuse de vger) a au la brillante idée d'utiliser des éléments déjà présents dans OpenBSD; à savoir :

Voici donc comment installer vger.

Tout d'abord, récupérer son code source, décompressez-le puis installez-le :

$ ftp https://tildegit.org/solene/vger/archive/master.tar.gz
$ tar xvzf master
$ cd vger
$ make && doas make install

Ouvrez le port 1965 en TCP dans /etc/pf.conf

Éditez le fichier /etc/inetd.conf pourr y indiquer la façon dont vger sera invoqué :

127.0.0.1:11965 stream tcp nowait gemini_user /usr/local/bin/vger vger

Par défaut, vger ira chercher les fichiers dans /var/gemini.

Vous pouvez préciser des options, par exemple pour changer le dossier dans lequel est situé la capsule/le site (-d) et actier l'auto-indexation des dossiers ne contenant pas de fichier index.gmi (-i):

127.0.0.1:11965 stream tcp nowait gemini_user /usr/local/bin/vger vger -d /var/www/chezmoi.tld/ -i

Si vous avez été attentif à la ligne ci-dessus, vous aurez remarqué qu'inetd écoute en local (127.0.0.1) sur le port 11965 et renvoie la requête vers vger, invoqué en tant qu'utilisateur "gemini_user". Avant d'aller plus loin, créez cet utilisateur dédié. Cela permet de restreindre les possibilités de vger si son code devait être compromis:

useradd -s /sbin/nologin gemini_user

Vous voyez qu'on désactive ce compte en lui attribuant le shell "/sbin/nologin".

Ensuite, on ajoute une configuration à relayd dans /etc/relayd.conf:

ext_ip4 = "192.0.2.2"
ext_ip6 = "2001:db8::2"
log connection

tcp protocol "gemini" {
        tls keypair chezmoi.tld
}

relay "gemini" {
        listen on $ext_ip4 port 1965 tls
        protocol "gemini"
        forward to 127.0.0.1 port 11965
}
relay "gemini6" {
        listen on $ext_ip6 port 1965 tls
        protocol "gemini"
        forward to 127.0.0.1 port 11965
}

Quelques explications :

Il ne reste plus qu'à activer et lancer les services :

# rcctl enable inetd relayd
# rcctl start inetd relayd

Et voilà, tous les fichiers avec l'extension seront servis.

Quelques liens pour aller plus loin:

Site officiel Gemini
Analyse de vger point de vue sécurité
Code source de vger
leadership