Skip to content
Snippets Groups Projects
Verified Commit 91f99656 authored by Quentin Duchemin's avatar Quentin Duchemin
Browse files

[Mail] Merge MTA and MDA, add doc, build via Compose and secrets

parent eea5b62b
No related branches found
No related tags found
1 merge request!50Remove CI
Showing
with 136 additions and 101 deletions
**Fusionner `pica-mail-mta` et `pica-mail-mda` et ajouter le fichier Compose `mail.yml`**.
version: "3"
services:
mail-mda:
image: pica-mail-mda
container_name: pica-mail-mda
ports:
- "143:143"
- "993:993"
networks:
- mail
hostname: pica-mail-mda
volumes:
- /var/lib/docker/volumes/mail-mda-maildir/_data:/home
- /DATA/docker/mail/ssl/:/certs-ssl/:ro
environment:
LDAP_ADDRESS: ldap.picasoft.net
LDAP_NSS_CN: cn=mail,ou=Services,dc=picasoft,dc=net
LDAP_DNPASS:
LDAP_BASE: dc=picasoft,dc=net
USER_FILTER: (uid=%n)
PASSWORD_FILTER: (uid=%n)
mail-mta:
image: pica-mail-mta
container_name: pica-mail-mta
ports:
- "25:25"
- "465:465"
- "587:587"
networks:
- mail
volumes:
- /var/lib/docker/volumes/mail-mta-log/_data:/var/log
#doit contenir selecteur.domaine.rsa
- /DATA/docker/mail/opendkim/:/etc/dkimkeys/
- /DATA/docker/mail/ssl/:/certs-ssl/
environment:
#adresse et port du serveur LMTP i.e. le MTA
LMTP_LAN_HOSTNAME: pica-mail-mda.pica_mail
LMTP_PORT: 24
#nom d'hôte sous lequel Postfix répondra aux requêtes SMTP
MY_HOSTNAME: mail.picasoft.net
#domaine des mails
MY_DOMAIN: picasoft.net
#domaines mails qu'on s'autorise à relayer (qui ont le droit de passer à travers notre serveur si ils sont en expéditeur ou destinataire)
RELAY_DOMAINS: picasoft.net
#réglage de la connexion au serveur LDAP: protocole (ldap ou ldaps), hôte et port
LDAP_PROTOCOL: ldap
LDAP_SERVER_HOSTNAME: ldap.picasoft.net
LDAP_PORT: 389
#réglage du bind : login et mot de passe d'un compte qui a suffisamment de droits pour lire l'arborescence (à l'exception des mots de passe)
LDAP_BIND_DN: cn=mail,ou=Services,dc=picasoft,dc=net
LDAP_BIND_PW:
#réglage de la manière dont on répertorie les comptes et les adresses existantes
#la config actuelle fait que la possession d'une adresse mail se fait ainsi : login => login@picasoft.net
#cependant, nous avons quand même deux couches différentes: l'existence d'un compte (SASL) et l'existence d'une adresse
#ce qui fait qu'on peut créer une adresse valide sans nécessairement lui associer un compte valide
#ainsi, on pourra recevoir des mails dans la boîte, mais on ne pourra pas se connecter en tant que cet utilisateur
#pour ce faire, il suffit d'utiliser des attributs LDAP différents
#nous utilisons donc le cn pour l'existence d'un compte LDAP, et l'uid pour l'existence d'une adresse
#niveau de l'arborescence à partir duquel les entrées sont trouvées:
LDAP_SEARCH_BASE: dc=picasoft,dc=net
#filtre permettant de répertorier les comptes SASL
LDAP_SASL_FILTER: "cn=%u"
#filtre permettant de répertorier les adresses mail
LDAP_VIRTUAL_MAILBOX_FILTER: "uid=%s"
#ajout de listes noires pour éviter le SPAM. La décision politique et l'éthique associée sortent du cadre de la conception de cette image et doivent être discutées par l'asso; en tout cas, si on lève cette restriction, elle doit être remplacée par une autre (un spamassassin par exemple).
SMTPD_CLIENT_RESTRICTIONS: reject_rbl_client sbl.spamhaus.org, reject_rbl_client dnsbl.sorbs.net
#prefixe DKIM, utilise pour identifier la clef
DKIM_SELECTOR: janv2019
labels:
- "traefik.frontend.rule=Host:mail.picasoft.net"
- "traefik.port=80"
- "traefik.enable=true"
- "traefik.docker.network=pica_mail"
mail-copy-certs:
image: pica-mail-copy-certs
container_name: pica-mail-copy-certs
volumes:
#contient acme.json
- /DATA/docker/traefik/certs/:/DATA/docker/traefik/certs/
#output
- /DATA/docker/mail/ssl/:/DATA/docker/mail/ssl/
environment:
- DOMAIN=mail.picasoft.net
networks:
mail:
#attention, docker-compose préfixe le nom du réseau créé par le nom du projet (contenu dans le .env, sinon c'est le nom du dossier)
......@@ -38,7 +38,7 @@ Il y a trois types d'utilisateurs :
### Lancement
Copier `grafana.secrets.example` dans `grafana.secrets` et remplacer les valeurs.
Copier `grafana.secrets.example` dans `grafana.secrets` et remplacer les valeurs. Le mot de passe LDAP de `grafana` se trouve dans le [pass](https://gitlab.utc.fr/picasoft/interne/pass).
Lancer :
```bash
......
File moved
## Serveur mail de Picasoft
Ce dossier contient les ressources pour lancer le serveur mail de Picasoft.
Toutes les images sont personnalisées selon nos besoins et construites à la main.
Cette documentation se limite à Docker. Pour plus d'informations sur le serveur mail en général, voir [la documentation sur le Wiki](https://wiki.picasoft.net/doku.php?id=technique:mail:start).
### Construction des images
Deux images sont nécessaires pour le serveur mail : le MTA et le MDA.
Les deux Dockerfile sont présents dans les dossier [pica-mail-mda](./pica-mail-mda) et [pica-mail-mta](./pica-mail-mta).
Pour plus de facilité, Docker Compose sait construire ces images simultanément : il suffit de lancer
```bash
docker-compose build
```
Puis de les pousser sur le registre de production :
```bash
docker-compose push
```
### Configuration
La configuration se fait essentiellement via les variables d'environnement de [Compose](./docker-compose.yml).
Deux dossiers supplémentaires doivent exister :
* `/DATA/docker/mail/opendkim`, dont le contenu sera peuplé [comme indiqué dans la documentation](https://wiki.picasoft.net/doku.php?id=technique:mail:dkim).
* `/DATA/docker/mail/ssl`, qui doit contenir les certificats SSL du serveur mail. Pour le moment, ils sont extraits de Traefik avec [ces commandes](../deprecated/pica-mail-copy-certs/update-certs-pica-mail.sh), mais dans le futur ils devront être gérés par [TLS Certs Monitor](../pica-tls-certs-monitor).
### Lancement
Copier `mail.secrets.example` dans `mail.secrets` et remplacer les valeurs. Le mot de passe LDAP du compte `mail` est sur le [pass](https://gitlab.utc.fr/picasoft/interne/pass).
Lancer :
```bash
docker-compose up -d
```
### Mise à jour
Il suffit de mettre à jour les Dockerfile. Il sera alors de bon ton de créer un fichier `CHANGELOG.md` pour expliquer les changements et d'ajouter un tag aux images pour faire la différence.
En cas de modification de la configuration, pas besoin de changer le tag.
version: "3.7"
#attention, docker-compose préfixe le nom du réseau créé par le nom du projet (contenu dans le .env, sinon c'est le nom du dossier)
networks:
mail:
volumes:
mail-mda-maildir:
name: mail-mda-maildir
mail-mta-log:
name: mail-mta-log
services:
mail-mda:
image: registry.picasoft.net/pica-mail-mda
build:
dockerfile: ./pica-mail-mda/Dockerfile
container_name: pica-mail-mda
ports:
- "143:143"
- "993:993"
networks:
- mail
hostname: pica-mail-mda
volumes:
- mail-mda-maildir:/home
- /DATA/docker/mail/ssl/:/certs-ssl/:ro
environment:
LDAP_ADDRESS: ldap.picasoft.net
LDAP_NSS_CN: cn=mail,ou=Services,dc=picasoft,dc=net
LDAP_BASE: dc=picasoft,dc=net
USER_FILTER: (uid=%n)
PASSWORD_FILTER: (uid=%n)
env_file: ./secrets/mail.secrets
mail-mta:
image: registry.picasoft.net/pica-mail-mta
build:
dockerfile: ./pica-mail-mta/Dockerfile
container_name: pica-mail-mta
ports:
- "25:25"
- "465:465"
- "587:587"
networks:
- mail
volumes:
- mail-mta-log:/var/log
#doit contenir selecteur.domaine.rsa
- /DATA/docker/mail/opendkim/:/etc/dkimkeys/
- /DATA/docker/mail/ssl/:/certs-ssl/
env_file: ./secrets/mail.secrets
environment:
#adresse et port du serveur LMTP i.e. le MTA
LMTP_LAN_HOSTNAME: pica-mail-mda.pica_mail
LMTP_PORT: 24
#nom d'hôte sous lequel Postfix répondra aux requêtes SMTP
MY_HOSTNAME: mail.picasoft.net
#domaine des mails
MY_DOMAIN: picasoft.net
#domaines mails qu'on s'autorise à relayer (qui ont le droit de passer à travers notre serveur si ils sont en expéditeur ou destinataire)
RELAY_DOMAINS: picasoft.net
#réglage de la connexion au serveur LDAP: protocole (ldap ou ldaps), hôte et port
LDAP_PROTOCOL: ldap
LDAP_SERVER_HOSTNAME: ldap.picasoft.net
LDAP_PORT: 389
#réglage du bind : login d'un compte qui a suffisamment de droits pour lire l'arborescence (à l'exception des mots de passe)
LDAP_BIND_DN: cn=mail,ou=Services,dc=picasoft,dc=net
#réglage de la manière dont on répertorie les comptes et les adresses existantes
#la config actuelle fait que la possession d'une adresse mail se fait ainsi : login => login@picasoft.net
#cependant, nous avons quand même deux couches différentes: l'existence d'un compte (SASL) et l'existence d'une adresse
#ce qui fait qu'on peut créer une adresse valide sans nécessairement lui associer un compte valide
#ainsi, on pourra recevoir des mails dans la boîte, mais on ne pourra pas se connecter en tant que cet utilisateur
#pour ce faire, il suffit d'utiliser des attributs LDAP différents
#nous utilisons donc le cn pour l'existence d'un compte LDAP, et l'uid pour l'existence d'une adresse
#niveau de l'arborescence à partir duquel les entrées sont trouvées:
LDAP_SEARCH_BASE: dc=picasoft,dc=net
#filtre permettant de répertorier les comptes SASL
LDAP_SASL_FILTER: "cn=%u"
#filtre permettant de répertorier les adresses mail
LDAP_VIRTUAL_MAILBOX_FILTER: "uid=%s"
#ajout de listes noires pour éviter le SPAM. La décision politique et l'éthique associée sortent du cadre de la conception de cette image et doivent être discutées par l'asso; en tout cas, si on lève cette restriction, elle doit être remplacée par une autre (un spamassassin par exemple).
SMTPD_CLIENT_RESTRICTIONS: reject_rbl_client sbl.spamhaus.org, reject_rbl_client dnsbl.sorbs.net
#prefixe DKIM, utilise pour identifier la clef
DKIM_SELECTOR: janv2019
labels:
- "traefik.frontend.rule=Host:mail.picasoft.net"
- "traefik.port=80"
- "traefik.enable=true"
- "traefik.docker.network=pica_mail"
File moved
**Doit être mis à jour pour respecter le formalisme du dépôt et inclure le Docker Compose**.
# Pour construire l'image :
```
......
File moved
File moved
**Doit être mis à jour pour respecter le formalisme du dépôt et inclure le Docker Compose**.
# Conteneur MTA (Postfix)
## Pour build:
```
......
File moved
File moved
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment