version: "3.7" networks: mail: name: pica-mail proxy: external: true volumes: mail-mda-maildir: name: mail-mda-maildir mail-mta-spool: name: mail-mta-spool services: mail-mda: image: registry.picasoft.net/pica-mail-mda:v1.0.2 build: ./pica-mail-mda container_name: pica-mail-mda ports: - "143:143" networks: - mail hostname: pica-mail-mda volumes: - mail-mda-maildir:/home - /DATA/docker/certs/mail.picasoft.net/:/certs-ssl/:ro environment: # Should be an URI, with ldap:// or ldaps:// LDAP_ADDRESS: ldaps://ldap.picasoft.net:636 LDAP_NSS_CN: cn=nss,dc=picasoft,dc=net LDAP_BASE: dc=picasoft,dc=net USER_FILTER: (uid=%n) PASSWORD_FILTER: (uid=%n) env_file: ./secrets/mail.secrets restart: unless-stopped mail-mta: image: registry.picasoft.net/pica-mail-mta:v1.0.3 build: ./pica-mail-mta container_name: pica-mail-mta ports: - "25:25" - "587:587" networks: - mail - proxy volumes: - /var/log/mail.log:/var/log/mail.log - /var/log/opendmarc.log:/var/log/opendmarc.log # For sharing with exporter - mail-mta-spool:/var/spool/postfix # Doit contenir selecteur.domaine.rsa - /DATA/docker/mail/opendkim/:/etc/dkimkeys/ - /DATA/docker/certs/mail.picasoft.net/:/certs-ssl/:ro env_file: ./secrets/mail.secrets environment: # As specified in volume section, this is where # keys generated by Traefik are mounted SSL_CERT: "/certs-ssl/fullchain.pem" SSL_KEY: "/certs-ssl/privkey.pem" # Hostname et port du serveur LMTP i.e. le MDA LMTP_LAN_HOSTNAME: pica-mail-mda 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 LDAP_PROTOCOL: ldaps LDAP_SERVER_HOSTNAME: ldap.picasoft.net LDAP_PORT: 636 # 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=nss,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 # On peut donc créer une adresse valide sans nécessairement lui associer un compte valide : on pourra recevoir des mails dans la boîte, mais on ne pourra pas se connecter en tant que cet utilisateur # Il suffit d'utiliser des attributs LDAP différents : 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 # Préfixe DKIM, utilise pour identifier la clef DKIM_SELECTOR: janv2021 labels: traefik.http.routers.pica-mail-mta.rule: Host(`mail.picasoft.net`) traefik.enable: true tls-certs-monitor.enable: true tls-certs-monitor.action: restart restart: unless-stopped postfix-exporter: image: registry.picasoft.net/postfix-exporter:5a8f146 build: ./postfix-exporter container_name: postfix-exporter volumes: # By default, postfix-exporter reads from /var/log/mail.log, so no need to configure - /var/log/mail.log:/var/log/mail.log - /etc/localtime:/etc/localtime:ro - mail-mta-spool:/var/spool/postfix:ro command: # Listen on all interfaces - "--web.listen-address=0.0.0.0:9154" - "--web.telemetry-path=/metrics/postfix" networks: - proxy labels: traefik.http.routers.mail-metrics.entrypoints: websecure traefik.http.routers.mail-metrics.rule: "Host(`mail.picasoft.net`) && PathPrefix(`/metrics`)" traefik.http.routers.mail-metrics.service: mail-metrics traefik.http.routers.mail-metrics.middlewares: "mail-metrics-auth@docker" traefik.http.middlewares.mail-metrics-auth.basicauth.users: "${METRICS_AUTH}" traefik.http.services.mail-metrics.loadbalancer.server.port: 9154 traefik.enable: true restart: unless-stopped