Modifications entre les versions 9 et 18 (s'étendant sur 9 versions)
Version 9 à la date du 2007-11-30 11:01:28
Taille: 6227
Éditeur: ThomasNoël
Commentaire: je crois que j'ai tout mis pour 576+TLS+SASL (rfc2476)... il faudra en faire une page à part, un jour
Version 18 à la date du 2010-08-26 17:11:38
Taille: 6828
Éditeur: MoussaNombre
Commentaire: aliasauforg.auf
Texte supprimé. Texte ajouté.
Ligne 2: Ligne 2:

<<TableOfContents(2)>>
Ligne 10: Ligne 12:
Ligne 13: Ligne 14:
attachment:schéma%20général.png
attachment:schéma%20général.svg
{{attachment:schéma général.png}}
[[attachment:schéma général.svg]]
Ligne 20: Ligne 21:
  * hôte : (localhost) smtp.ca.auf.org
  * bd : mail
  * tables :
   * auforg_virtual : pour les redirections vers p.n@secours et p.n@xx.auf.org (`/etc/postfix/auforg_virtual.cf`)
   * auf_org_alias : pour les alias en @auf.org (`/etc/postfix/mysql-alias-auforg.cf`). http://aliasauforg.auf est une interface django/admin pour la gestion de ces alias.
Ligne 66: Ligne 72:
Documenter :
 * config' Postfix + MySQL
 * config' Dovecot + MySQL
 * anti-spam + exceptions
=== Postfix ===

 La configuration postfix mysql est [[Postfix/BackendMysql|classique]], basée sur les virtual_mailbox_domains pour les domaines ''ca.auf.org'' et ''secours''. Les paramètres d'accés à mysql sont définis dans {{{/etc/postfix/virtual_mailbox_maps.cf}}}. La tâche {{{/etc/cron.d/synchro-mysql}}} effectue une synchronisation régulière avec la base de données postgresql présente sur {{{intranet.auf}}}.

=== Dovecot ===

 La configuration dovecot mysql est tout aussi [[Dovecot/BackendMysql|classique]], si ce n'est que la requête permet l'authentification avec ou sans le "@auf.org" final de l'adresse email (pour des raisons de compatibilité avec l'historique).
{{{
password_query = SELECT username as user, password FROM users WHERE username='%u' or (%n=username and %d='auf.org')
}}}

 /!\ Pour le moment, l'option {{{disable_plaintext_auth = no}}} (mot de passe en clair sur un canal en clair) a été laissée activée, le temps que tous les clients sont basculés en "TLS : OUI", d'ici la fin décembre 2007. Il faudra repasser cette option à "= yes" dès que les derniers clients de messagerie auront été reconfigurés.

=== Anti-Spam ===

 + les exceptions
Ligne 73: Ligne 91:
 1. Mise en place du chiffrage TLS :
   {{{# TLS parameters, ajouté dans /etc/postfix/main.cf :
smtpd_tls_cert_file=/etc/postfix/ssl/smtp-sortant-ca-auf-org.crt
smtpd_tls_key_file=/etc/postfix/ssl/smtp-sortant-ca-auf-org.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache
C'est une configuration TLS+SASL classique, avec le service submission activé dans le `master.cf`. Voir [[Postfix/Chiffrement]] et [[Postfix/Authentification]].

Une particularité se situe au niveau de PAM, car dans la table MySQL on a deux lignes pour chaque source : la ligne vers @xx.auf.org et la ligne vers @secours. Pour que la requête SQL ne renvoie qu'un seul résultat valide (celui concernant @xx.auf.org), on y ajoute une contrainte `WHERE length(password)>1` qui indique que la ligne doit posséder un mot de passe de plus d'un caractère (c'est-à-dire différent de "!", mais comme on ne peut mettre de guillemets dans la ligne de configuration de ce module PAM... astuces, astuces...).

Le fichier `/etc/pam.d/smtp` :
   {{{
# (attention, la suite ne fait que deux lignes, c'est votre nagivateur web qui coupe)
auth required pam_mysql.so user=messagerie passwd=vousrevez host=localhost db=mail table=auforg_virtual [where=length(password)>1] usercolumn=source passwdcolumn=password crypt=1
account sufficient pam_mysql.so user=messagerie passwd=vousrevez host=localhost db=mail table=auforg_virtual [where=length(password)>1] usercolumn=source passwdcolumn=password crypt=1
Ligne 82: Ligne 102:
 1. Mise en place de l'authentification SASL :
  a. dans `/etc/default/saslauthd`, on demande à SASL de passer par PAM :
   {{{START=yes
MECHANISMS="pam"
MECH_OPTIONS=""
THREADS=5
OPTIONS="-r -m /var/spool/postfix/var/run/saslauthd"
}}}
  a. dans `/etc/pam.d/smtp`, on dit à PAM d'utiliser MySQL pour le service smtp :
   {{{# (attention, la suite ne fait que deux lignes, c'est votre nagivateur web qui coupe)
auth required pam_mysql.so user=messagerie passwd=vousrevez host=127.0.0.1 db=mail table=auforg_virtual [where=length(password)>1] usercolumn=source passwdcolumn=password crypt=1
account sufficient pam_mysql.so user=messagerie passwd=vousrevez host=127.0.0.1 db=mail table=auforg_virtual [where=length(password)>1] usercolumn=source passwdcolumn=password crypt=1
}}}
  a. dans `/etc/postfix/sasl/smtpd.conf` on configure SASL au niveau de Postfix pour lui dire de passer par saslauthd :
   {{{pwcheck_method: saslauthd
mech_list: PLAIN LOGIN ANONYMOUS
log_level: 7
}}}
  a. et enfin dans `/etc/postfix/main.cf` on dit à Postfix d'utiliser SASL, de ne permettre l'authentification QUE si le canal est crypté en TLS, et on libéralise l'utilisation pour les gens authentifiés :
   {{{# lignes ajoutées dans /etc/postfix/main.cf :
# on active l'authentification SASL
smtpd_sasl_auth_enable = yes
# l'authentification n'est possible que sur une connexion cryptée en TLS
smtpd_tls_auth_only = yes
# si une personne est authentifiée, elle peut envoyer des messages à n'importe qui
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
}}}
== Basculement d'un domaine xx.auf.org en urgence sur le serveur IMAP de Montréal ==
Ligne 110: Ligne 104:
A partir de là, le port 25 est déjà capable de recevoir des messages avec TLS+SASL. Cependant, comme le port 25 est de plus en plus filtré (lutte anti-spam) on va utiliser le port 587 comme le recommande la [http://www.ietf.org/rfc/rfc2476.txt RFC 2476] : '''ce port sera ouvert uniquement en TLS et forcera l'authentification'''. == Synchronisation des comptes utilisateurs ==
Ligne 112: Ligne 106:
Pour cela, on active un nouveau service au niveau du fichier `/etc/postfix/master.cf` :  Les données des comptes proviennent de la base postgresql "AUF" sur {{{intranet.auf}}}. Une synchronisation régulière est faite avec les bases mysql utilisées par les divers composant du système de messagerie. La synchronisation se fait par un script lancé à intervalles réguliers sur intranet.auf. Les fichiers correspondant sont :
Ligne 114: Ligne 108:
   {{{# lignes ajoutées dans /etc/postfix/master.cf pour activer submission (rfc 2476) :
# sur le service submission (présent dans /etc/services) on force le chiffrage TLS
# et l'authentification SASL.
# service type private unpriv chroot wakeup maxproc command + args
submission inet n - - - - smtpd
        -o smtpd_enforce_tls=yes
        -o smtpd_client_restrictions=permit_sasl_authenticated,reject
}}}
||'''Fichier'''||'''Description'''||
||/usr/local/sbin/synchro-mail-mysql.pl||Script de synchronisation||
||/etc/synchro-mail-mysql.conf||Fichier de configuration||
||/etc/cron.d/synchro-mail-mysql||Fichier ''cron'' d'execution régulière||
Ligne 123: Ligne 113:
Voir les commentaires du fichier de configuration pour en connaitre le format.
Ligne 124: Ligne 115:
== Basculement d'un domaine xx.auf.org en urgence sur le serveur IMAP de Montréal == Les tables synchronisées sont :
 * users
 * auforg_virtual
 * auforg_vacation

Messagerie de Montréal

Le système de messagerie de Montréal gère plusieurs aspects de la messagerie de l'agence :

  • le MX principale du domaine auf.org

  • la messagerie locale du domaine ca.auf.org, avec un serveur IMAP

  • les listes de diffusions dans le domaine auf.org

  • un relais SMTP avec authentification, pour les postes nomades
  • les boîtes aux lettres de secours

Schéma général de la messagerie

schéma général.png schéma général.svg

Serveur pour le domaine auf.org

Documenter :

  • Postfix + MySQL
    • hôte : (localhost) smtp.ca.auf.org
    • bd : mail
    • tables :
      • auforg_virtual : pour les redirections vers p.n@secours et p.n@xx.auf.org (/etc/postfix/auforg_virtual.cf)

      • auf_org_alias : pour les alias en @auf.org (/etc/postfix/mysql-alias-auforg.cf). http://aliasauforg.auf est une interface django/admin pour la gestion de ces alias.

  • vacations
  • boîtes de secours
  • anti-spam + exceptions
  • transports pour ca.auf.org

  • choix de la valeur du délai avant avertissement (warning)

  • choix de la valeur d'expiration des mails en queue

Adresses en auf.org et ré-écriture des adresses

  • Aucune boite aux lettres n'est présente sur ce serveur, tous les domaines en destination finale sont traités en domaines virtuels (liste des domaines dans la variable virtual_alias_domains). Cela permet d'activer le smtpd_reject_unlisted_sender pour rejeter les adresses en ...@auf.org qui n'existerait pas :

# pour rejeter les mails from: xxx@auf.org  avec xxx qui n'existerait pas
smtpd_reject_unlisted_sender = yes
unverified_sender_reject_code=550

Les adresses qui existent sont listée dans la variable virtual_alias_maps :

# attention : expressions regulieres dans le fichier mailman :
# toujours le laisser en dernier
virtual_alias_maps = proxy:mysql:/etc/postfix/auforg_virtual.cf, 
        hash:/etc/postfix/virtual-auf.org, 
        regexp:/etc/postfix/virtual-mailman
  • auforg_virtual.cf : une table MySQL qui correspond à la liste du personnel, extraite automatiquement du PostgreSQL de intranet.auf.

  • virtual-auf.org : un fichier hash géré à la main, pour toutes les exceptions

  • virtual-mailman : une expression régulière, pour renvoyer tout ce qui ressemble à des adresses administratives Mailman vers listes.auf.org.

Relais des sous-domaines auf.org

  • Le domaine auf.org est géré directement par le serveur, en destination finale, via virtual_alias_domains, qui ne tiens pas compte des sous-domaines. La variable relay_domains doit donc seulement tenir compte des sous-domaines xx.auf.org.

# a lire comme "tous les sous-domaines de auf.org SAUF auf.org lui-meme
relay_domains = .auf.org,!auf.org
# a verifier, mais on peut *suremement* laisser cette variable completement vide
# l'important est que relay_domains ne soit pas listé dedans
parent_domain_matches_subdomains = debug_peer_list,fast_flush_domains,mynetworks,permit_mx_backup_networks,qmqpd_authorized_clients,smtpd_access_maps

Serveur pour le domaine ca.auf.org

Postfix

  • La configuration postfix mysql est classique, basée sur les virtual_mailbox_domains pour les domaines ca.auf.org et secours. Les paramètres d'accés à mysql sont définis dans /etc/postfix/virtual_mailbox_maps.cf. La tâche /etc/cron.d/synchro-mysql effectue une synchronisation régulière avec la base de données postgresql présente sur intranet.auf.

Dovecot

  • La configuration dovecot mysql est tout aussi classique, si ce n'est que la requête permet l'authentification avec ou sans le "@auf.org" final de l'adresse email (pour des raisons de compatibilité avec l'historique).

password_query = SELECT username as user, password FROM users WHERE username='%u' or (%n=username and %d='auf.org')
  • /!\ Pour le moment, l'option disable_plaintext_auth = no (mot de passe en clair sur un canal en clair) a été laissée activée, le temps que tous les clients sont basculés en "TLS : OUI", d'ici la fin décembre 2007. Il faudra repasser cette option à "= yes" dès que les derniers clients de messagerie auront été reconfigurés.

Anti-Spam

  • + les exceptions

Reception de mail sur le port 587 (submission) avec TLS et authentification obligatoire

C'est une configuration TLS+SASL classique, avec le service submission activé dans le master.cf. Voir Postfix/Chiffrement et Postfix/Authentification.

Une particularité se situe au niveau de PAM, car dans la table MySQL on a deux lignes pour chaque source : la ligne vers @xx.auf.org et la ligne vers @secours. Pour que la requête SQL ne renvoie qu'un seul résultat valide (celui concernant @xx.auf.org), on y ajoute une contrainte WHERE length(password)>1 qui indique que la ligne doit posséder un mot de passe de plus d'un caractère (c'est-à-dire différent de "!", mais comme on ne peut mettre de guillemets dans la ligne de configuration de ce module PAM... astuces, astuces...).

Le fichier /etc/pam.d/smtp :

  • # (attention, la suite ne fait que deux lignes, c'est votre nagivateur web qui coupe)
    auth required pam_mysql.so user=messagerie passwd=vousrevez host=localhost db=mail table=auforg_virtual [where=length(password)>1] usercolumn=source passwdcolumn=password crypt=1
    account sufficient pam_mysql.so user=messagerie passwd=vousrevez host=localhost db=mail table=auforg_virtual [where=length(password)>1] usercolumn=source  passwdcolumn=password crypt=1

Basculement d'un domaine xx.auf.org en urgence sur le serveur IMAP de Montréal

Synchronisation des comptes utilisateurs

  • Les données des comptes proviennent de la base postgresql "AUF" sur intranet.auf. Une synchronisation régulière est faite avec les bases mysql utilisées par les divers composant du système de messagerie. La synchronisation se fait par un script lancé à intervalles réguliers sur intranet.auf. Les fichiers correspondant sont :

Fichier

Description

/usr/local/sbin/synchro-mail-mysql.pl

Script de synchronisation

/etc/synchro-mail-mysql.conf

Fichier de configuration

/etc/cron.d/synchro-mail-mysql

Fichier cron d'execution régulière

Voir les commentaires du fichier de configuration pour en connaitre le format.

Les tables synchronisées sont :

  • users
  • auforg_virtual
  • auforg_vacation

Listes de diffusion

  • forwarding via smtp.ca.auf.org à travers le transport auf: ; expliquer pourquoi

  • synchro' des listes de diffusions ; les scripts

ZA/Montréal/ArchitectureDeLaMessagerie (dernière édition le 2010-08-26 17:11:38 par MoussaNombre)