Conteneurisation du serveur SMTP Postfix
  • Go Template 84.5%
  • Dockerfile 10.9%
  • Shell 4.6%
Find a file
Marie 942acc6b42 feat: improve mail rejection rules
Tweak rejection rules to filter invalid incoming emails.

refers to collectivit/collectivit#99
2026-10-25 21:36:33 +01:00
config feat: improve mail rejection rules 2026-10-25 21:36:33 +01:00
scripts feat: configure incoming mail distribution 2026-08-31 19:06:55 +02:00
third-party fix: use mo instead of gomplate / envsubst 2026-08-23 23:14:17 +02:00
.pre-commit-config.yaml fix: use mo instead of gomplate / envsubst 2026-08-23 23:14:17 +02:00
Dockerfile chores: bump packages version 2026-10-21 21:40:17 +02:00
README.md feat: improve mail rejection rules 2026-10-25 21:36:33 +01:00

docker-postfix

Aperçu

Ce dépôt contient la déclaration d'un container Docker qui exécute le serveur SMTP Postfix1. Le serveur est configuré pour interroger une base LDAP pour récupérer la configuration de distribution du courrier (comptes locaux, alias...).

Le serveur écoute sur 3 ports:

  • Le port 25 reçoit les mails interne, originant de machines de confiances. Le protocole PROXY est désactivé sur ce port.

  • Le port 465 reçoit les mails envoyés par les utilisataires CollectivIT, la connexion est encryptée par TLS implicite. Le protocole PROXY est désactivé sur ce port.

  • Le port 1025 reçoit les mails venant d'internet. Postfix s'attends à ce que le traffic respecte le protocole PROXY.

Les utilisataires souhaitant envoyer des mails doivent le faire sur le port 465.

Authentification

Sur le port de soumission (465), un login et un mot de passe sont demandés pour envoyer des mails. L'authentification est faite via SASL avec le serveur Dovecot pairé à ce serveur Postfix (via la variable d'environnement DOVECOT_SERVER). C.F https://www.postfix.org/SASL_README.html#server_dovecot pour plus d'informations.

TLS

Le service de soummission (port 465) utilise SMTPS (SMTP over TLS), les autres ports proposent le TLS opportuniste (STARTLS). Le certificat utilisés pour encrypter la connexion est stocké à /etc/postfix/certificate.key et /etc/postfix/certificate.pem. Pour personaliser le certificat utilisé, il faut le monter à ces emplacements. C.F https://www.postfix.org/TLS_README.html pour plus d'informations.

Anti-spam

Les mails reçus d'internet (port 25) sont filtrés en plusieurs étapes :

  • Postscreen2 rejette les clients qui parlent avant d'avoir reçu la bannière du serveur.

  • smtpd rejette les clients qui annoncent un nom d'hôte (HELO) invalide, les expéditeurs et destinataires invalides ou dont le domaine n'existe pas, et les clients qui n'attendent pas les réponses du serveur avant d'envoyer leurs commandes.

  • Les mails acceptés sont analysés par les milters configurés via la variable MILTERS, par exemple rspamd (C.F docker-rspamd), qui peut les rejeter ou les marquer comme spam. C'est rspamd qui interroge les listes noires et blanches DNS (Spamhaus, SpamCop...).

Configuration des comptes mails via LDAP

Les comptes mails sont configurés via un schéma LDAP définit dans le container docker-openldap, dans config/collectivit-mail.schema. Ce schéma permet de :

  • Définir des alias qui sont distribués à certains comptes ou groupes de comptes utilisataires.
  • Définir quels comptes et groupes utilisataires sont autorisés à envoyer des emails sous une certaine identité.
  • Définir des addresses de transfert externes pour chaque utilisataire.
  • Activer ou désactiver la boîte mail locale des utilisataires, que des transfert soient définis sur son compte ou pas.

Voir le schema cité ci-dessus pour plus de détails sur les objets et les champs définis pour permettre ça.

Variables d'environnement

Les variables d'environnement suivantes doivent ou peuvent être définies dans le container pour configurer l'instance de Postfix :

Général

  • HOSTNAME (requis) : Le nom d'hôte de l'instance de Postfix. Ce nom sera annoncé lors des échanges SMTP avec d'autres serveurs Postfix, et devra donc correspondre avec le reverse-dns de l'IP sortante publique du container Postfix.

  • DOMAIN (requis): Le domaine de l'instance postfix. Ce domaine sera ajouté dans les addresses d'origine des mails provenant de ce container.

  • MILTERS: liste de milters (mail filters) à configurer. Les milters permettent d'ajouter des outils dans le pipeline de traitement des emails, comme les signer outils les vérifier avec OpenDKIM par exemple. Le de cette variables est inet:addresse_milter1:port_milter1[, inet:addresse_milter2:port_milter2 ...].

    C.F https://www.postfix.org/MILTER_README.html#config pour plus d'informations.

  • DOVECOT_SERVER (requis): Addresse ou nom d'hôte du serveur Dovecot jumelé à ce service Postfix. Le serveur Dovecot doit exposer un service d'authentification par SASL sur le port 4300, pour authentifier les utilisataires qui désirent envoyer du courrier via ce serveur SMTP.

LDAP

  • LDAP_HOST (aucun défaut, requis): Nom d'hôte du serveur LDAP à interroger pour la configuration de la distribution du courrier.

  • LDAP_PORT (défaut: 389): Port du serveur LDAP à interroger pour la configuration de la distribution du courrier.

  • LDAP_BIND_DN (aucun défaut, requis): Compte à utiliser pour interroger la configuration de la distribution du courrier.

  • LDAP_BIND_PASSWORD (aucun défaut, requis): Mot de passe du compte à utiliser pour interroger la configuration de la distribution du courrier.

  • LDAP_BASE_DN (aucun défaut, requis): Racine de la recherche pour interroger la configuration de la distribution du courrier.