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 aussi 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" pour 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), activer l'auto-indexation des dossiers ne contenant pas de fichier index.gmi (-i) ou encore permettre le support des "virtualhosts" (-v). Ce dernier point est intéressant si vous souhaitez servir plusieurs domaines : vger ira ouvrir un dossier "chezmoi.tld" situé dans "/var/gemini" si un client demande "gemini://chezmoi.tld". Vous pouvez donc ainsi héberger plusieurs capsules en utilisant un dossier portant le nom du domaine à servir.

# serve files in /var/gemini/chezmoi.tld
localhost:11965 stream tcp6 nowait _vger /usr/local/bin/vger vger -v -d /var/gemini/ -i
localhost:11965 stream tcp nowait _vger /usr/local/bin/vger vger -v -d /var/gemini/ -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".

Quelques liens pour aller plus loin:

Site officiel Gemini

Analyse de vger point de vue sécurité

Code source de vger