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 eu la brillante idée d'utiliser des éléments déjà présents dans OpenBSD; à savoir :

Voici donc comment installer vger.

# pkg_add vger

La lecture du readme nous apprend la suite de la procédure.

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

127.0.0.1:11965 stream tcp nowait _vger /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):

localhost:11965 stream tcp  nowait gemini_user /usr/local/bin/vger vger -d /var/www/chezmoi.tld/ -i
localhost:11965 stream tcp6 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 (localhost) sur le port 11965 et renvoie la requête vers vger, invoqué en tant qu'utilisateur "_vger". Cela permet de restreindre les possibilités de vger s'il devait être compromis.

De plus, une ligne supplémentaire avec "tcp6" a été ajoutée : cela permet de servir aussi en IPv6. Il faut toutefois avoir correctement rempli le fichier /etc/hosts :

127.0.0.1   localhost
::1         localhost

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 localhost port 11965
}
relay "gemini6" {
        listen on $ext_ip6 port 1965 tls
        protocol "gemini"
        forward to localhost port 11965
}

Quelques explications :

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

# rcctl enable inetd relayd
# rcctl start inetd relayd

Enfin, ouvrez le port 1965 en TCP dans /etc/pf.conf

Et voilà, tous les fichiers avec l'extension seront servis. Par défaut, si un fichier "index.gmi" est trouvé, il est affiché.

Quelques liens pour aller plus loin:

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