Réseau et filtrage

Adressage

L’ensemble de l’infrastructure est dual stack IPv4 et IPv6, les communications internes privilégient IPv6, notamment les tunnels IPSec entre hôtes routent les préfixes IPv6.

Chaque hôte dispose d’une adresse IPv4 d’administration, d’une ou plusieurs adresses IPv4 exposant des services, et d’un /56 IPv6. Sur ce préfixe sont choisies une adresse d’administration, autant d’adresses exposant des services qu’en IPv4, et chaque conteneur dispose d’une adresse globale routable.

Plan DNS

Trois domaines principaux sont exploités par l’infrastructure :

  • tedomum.in pour le coeur de l’infrastructure ;
  • tedomum.net pour les services ;
  • tedomum.org pour le reste.

tedomum.in contient :

  • une paire d’enregistrements A et AAAA par machine physique, avec les adresses d’administration ;
  • une paire d’enregistrements A et AAAA par adresse exposant des services ;
  • des enregistrements NS avec GLUE pour le bootstraping DNS.

tedomum.net contient un enregistrement CNAME par service, pointant vers l’enregistrment tedomum.in correspondant. Pour les services ne supportant pas l’emploi de CNAME (MX, Matrix, Jabber, etc.) les enregistrements A et AAAA sont répliqués dans tedomum.net.

tedomum.org contient les enregistrements accessoires, tels que les reverse DNS de bouncers IRC, les noms de services non publics, etc.

Exposition des services

L’exposition des services a fait l’objet de nombreuses expérimentations. L’exposition de ports utilisant le proxy userland de Docker est exclue car les conteneurs ne disposent plus de l’adresse source de la connexion ; l’apport pour la privée est intéressant mais plusieurs conteneurs font usage de cette adresse, notamment l’antispam à la réception des mails.

L’exposition grâce aux règles iptables configurées par Docker n’est pas satisfaisante car ne couvrant pas IPv6. La doctrine classique consiste à assigner des adresses fixes IPv6 par conteneur, l’approche nécessiterait toutefois une maintenance alourdie, en termes d’assignation d’adresses, de DNS, etc.

Le support des règles d’exposition Docker Compose incluant des adresses IPv6 a été contribué au projet et publié dans la version 1.15. Ce support est couplé à un script docker-jinja parcourant régulièrement la liste des conteneurs pour mettre à jour une configuration nftables et l’appliquer. La configuration complète est documentée dans core/front.

Filtrage

Le filtrage déployé est modérément strict : les hôtes sont limités aux flux légitimes entrants et sortants. Les conteneurs peuvent établir des flux entre eux et vers Internet.

Les connexions entrantes sont autorisées exclusivement à destination des ports exposés explicitement par chaque conteneur. L’ensemble du filtrage est assuré par le script nftables décrit ci-dessus.