_index.md 2.83 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
---
title: 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.