Migration de sendmail vers postfix dans le laboratoire
Paul Painlevé à Lille
Situation avant la migration
• Sendmail
• Mbox (/var/spool/mail) + NFS
• Différents clients de messagerie :
– Différents emplacements pour les BAL – Différents comportements
– corruptions de BAL
Situation après la migration
• Adresses email = @math.univ-lille1.fr
• MTA = postfix
• MDA = procmail
• Format BAL = maildir
• Wrapper pour contrôle de contenu = amavisd-new – Contrôle antivirus = Clam AV
– Contrôle antispam = SpamAssassin + ...
• Accès aux BAL = IMAPS (courier-imap)
• Webmail = squirrelmail
Calendrier
• Fusion des labos le 1/1/2004
• Début du chantier : mi-2003
• 05/01/2004 : basculement de agat
• 07/01/2004 : basculement de lps
• 12/01/2004 : basculement de ano
Pourquoi postfix ?
• Facile à administrer : variables parlantes
• Sécurisé : non suid/sgid, chroot
• Modulaire : plusieurs queues et binaires
• Compatible avec sendmail
• Plus rapide que sendmail
Pourquoi maildir ?
• Mbox = plusieurs mails dans 1 seul fichier
– Pb de vitesse d'accès pour des gros fichiers – Un seul accès read/write à la fois
– Pbs de locking
• Maildir = un fichier par mail
– Supprimer 1 mail = supprimer un fichier
– Accès concurrents
Pourquoi amavisd-new ?
• S'interface bien avec postfix
• Reconnaît plusieurs antivirus (31)
• Peut-être configuré pour faire un contrôle antispam
• En fait, choix basé sur une synthèse de ce
qui existe sur le net
Pourquoi Clam AV ?
• Open source
• Très facile à mettre en place
• Fournit FreshClam pour la MAJ
automatique des bases de signatures
• Reconnaît le format maildir
• Reconnu par amavisd-new
Pourquoi SpamAssassin ?
• Bonne réputation
• Peut être renforcé avec d'autres techniques :
– Contrôle bayesien
– Bases de filtrage collaboratif : razor, pyzor, dcc
• Reconnu par amavisd-new
Pourquoi IMAPS seulement ?
• On voulait un accès uniquement par
protocole sans visibilité directe du système de fichiers (tant pis pour le grep !)
• On voulait éviter de multiplier les
protocoles pour éviter les manips non intentionnelles
• Même visibilité indépendamment du lieu et
du client de messagerie utilisé
Pourquoi Courier-imap ?
• Reconnaît le format maildir
• IMAP
• Support pour ssl
• Pas de format spécifique contrairement à cyrus par exemple
• Plusieurs modules d'authentification
• Shared folders
Pourquoi Squirrelmail ?
• Très simple et très facile à mettre en place
• Possibilité de rajouter des plugins
• Configurable pour courier-imap
• Pb : ne reconnaît pas IMAPS
Pourquoi mailman ?
• Et pourquoi pas ?
Pourquoi un serveur dédié ?
• Découpler la messagerie des comptes utilisateurs
– Meilleure disponibilité au cas où le serveur nfs (/home) est en panne
– Protection contre les mauvaises manips
• Problèmes :
– Gestion des .forward, .procmailrc, etc.
Architecture de postfix
• 4 files principales :
– Maildrop – Incoming – Active – Deferred
• Un ensemble de processus qui
communiquent par sockets ou FIFOs
Postfix : Réception de mail
Postfix : Délivrance de mail
Postfix : config et admin
• Fichiers de configuration
– /etc/postfix.master.cf – /etc/postfix/main.cf
• Lookup tables
– aliases, canonical, virtual, transport, ...
• Outils de gestion de postfix
– postconf, postfix, postmap, postalias,
postsuper, ...
Planification de la migration
• Approche incrémentale :
– Passage d'un « null-client » sous postfix – Passage de tous les « null-clients » sous
postfix
– Passage du serveur de mail actuel de sendmail vers postfix
– Basculement vers le nouveau serveur
– Contrôle, réglages, etc.
Passage d'un null-client sous postfix (Linux RedHat)
- arrêter sendmail : service sendmail stop
- passer de sendmail à postfix :
alternatives –set mta /usr/sbin/sendmail.postfix - /etc/postfix/main.cf :
myhostname = machine1.univ-lille1.fr mydomain = agat.univ-lille1.fr
myorigin = $mydomain
relayhost = olympe.univ-lille1.fr mydestination =
mynetworks = 127.0.0.0/8, 134.206.80.0/24 - démarrer postfix :
service postfix start
- tester (/var/log/maillog)
Passage d'un null-client sous postfix (Solaris)
- voir http://www.math.cnrs.fr/archives/mathrice/msg03272.html
Passage de tous les null-clients sous postfix
• Septembre 2003
• Utilisation de cfengine pour reconfigurer
les null-clients
Passage du serveur sendmail actuel sous postfix
- « sanity checks » : /etc/passwd, aliases, revaliases, mailing-lists - dans /etc/postfix/main.cf :
alias_database = dbm:/etc/postfix/aliases myhostname = olympe.univ-lille1.fr
mydomain = univ-lille1.fr
myorigin = agat.univ-lille1.fr
relayhost = mailserv.univ-lille1.fr
mydestination = $myhostname, $myorigin, localhost.$mydomain inet_interfaces = $myhostname, localhost
masquerade_domains = $myorigin masquerade_exceptions = root
mynetworks = 127.0.0.0/8, 134.206.80.0/24, 134.206.81.0/24,
134.206.83.0/24, 134.206.85.0/24, 134.206.1.0/24, 193.49.225.0/24 home_mailbox = Mailbox
mail_spool_directory = /var/mail mailbox_command = /usr/bin/procmail alias_maps = dbm:/etc/postfix/aliases
canonical_maps = dbm:/etc/postfix/canonical
Passage du serveur sendmail actuel sous postfix (suite)
- dans /etc/postfix/transport : agat.univ-lille1.fr local:
gat.univ-lille1.fr local:
- dans /etc/postfix/aliases (aliases sous sendmail) : Prenom.Nom: login
- dans /etc/postfix/aliases (aliases sous sendmail) : labo: :include:/etc/mail/listes/labo
- dans /etc/postfix/canonical (revaliases sous sendmail) : login Prenom.Nom
postalias /etc/postfix/aliases postmap /etc/postfix/canonical postmap /etc/postfix/transport
Passage du serveur sendmail actuel sous postfix (suite)
• tail -f /var/log/syslog
• Arrêt de sendmail
• Démarrage de postfix
• Tests
– Avec un compte utilisateur (mail entrant et sortant) – Avec une liste
• Seul pb rencontré : oubli d'autoriser certains relais du CRI à nous envoyer du courier (mynetworks dans main.cf)
Basculement : feuille de route
• Installation et configuration du nouveau serveur
• Préparation du basculement côté ancien serveur
• Préparation du basculement côté nouveau serveur
• Simulation du basculement
• Basculement effectif
• Garder les mêmes infos sur les comptes utilisateurs (login, passwd, uid, gid)
Installation et configuration du nouveau serveur
• Octobre 2003 : nilus.univ-lille1.fr
• Demande au CRI de relayer le courier @math.univ-lille1.fr vers nilus et d'ouvrir les ports IMAPS et HTTP(S)
• Tests avec qques comptes bidons (envoi, réception, etc.)
• Ne pas trop s'éloigner de la config par défaut pour faciliter le debugging
Préparation du basculement côté ancien serveur
• Création de comptes pour les users des labos ano et lps
• Ajustement des gids sur olympe (de >=100 à >=500)
• Scripts :
– « sanity checks »
– A partir de nisplus, construction d'un fichier à la / etc/passwd mais sans les comptes système
– Récupérer les fichiers aliases, revaliases et les mailing- lists
– Récupérer les fichiers .procmailc
Préparation du basculement côté nouveau serveur
• Scripts de création (suppression) en masse des comptes :
– À partir des fichiers passwd et revaliases sur l'ancien serveur :
• groupadd et useradd (/bin/false)
• maildirmake /home/$login/Maildir
• Ajout d'une entrée dans /etc/postfix/aliases
• Ajout d'une entrée dans /etc/postfix/canonical – Regénération des maps et reload de postfix
• Finir avec ce qui reste dans l'ancien fichier aliases (mailing-lists, etc.)
Préparation du basculement côté nouveau serveur (suite)
• Monter en NFS les BALs principales au format mbox (/var/spool/mail/ de l'ancien serveur)
• Pour chaque user, convertir /var/spool/mail/$user au format maildir dans /home/$user/Maildir/
– Script perl mb2md (option -m)
• Pour les anciens mails, conversion après basculement : l'utilisateur doit tout préparer dans un répertoire oldmail/
puis on fait mb2md -s oldmail/ -R
Simulation du basculement
• Exécution des tâches prévues sur l'ancien serveur
• Création des comptes et des mailings-listes sur le nouveau serveur
• Conversions des BALs principales
• Tests d'envoi/réception/accès (pour tout ce
qui n'est pas @math, telnet sur le port 25)
Entre temps ...
• Sondage (une petite appli en PHP) au niveau des
utilisateurs pour avoir une connaissance sur les clients de messagerie utilisés :
– Au labo – Chez eux – Ailleurs
• Sensibilisation des utilisateurs sur le basculement
• Planification d'une séance de (in)formation (2 dates mi- décembre)
• Helpdesk (document illustré sur la config des clients)
Basculement
• Calendrier en concertation avec le CRI : – 05/01/2004 : basculement de agat – 07/01/2004 : basculement de lps – 12/01/2004 : basculement de ano
• Il y a eu des échanges avec les responsables de ano et lps pour bien réussir la migration
– lps : utilisation de exmh – ano : rien de particulier
Basculement (suite)
• Sur l'ancien serveur : – Arrêt du service smtp
– Unshare /var/spool/mail/ et déplacer tout son contenu vers un autre répertoire (/var/spool/mail/ doit rester vide une fois que tout reparte)
– Prévoir la redirection vers le nouveau serveur (/etc/postfix/transport) :
agat.univ-lille1.fr smtp:nilus.univ-lille1.fr gat.univ-lille1.fr smtp:nilus.univ-lille1.fr
– Exécution des scripts prévus
Basculement (suite)
• Sur le nouveau serveur : – Création des comptes – Conversion des BALs
– Traitement des mailings-lists
– Traitement des .forward et .procmailrc
• Informer le CRI pour rediriger les mails @gat et @agat vers le nouveau serveur
• Redémarrage du service smtp sur l'ancien serveur
L'après basculement
• Traitement des anciennes BALs
• Les null-clients s'adressent dorénavant au nouveau serveur (mathsmtp dans la
variable relayhost dans main.cf)
• Assistance auprès des utilisateurs
Problèmes rencontrés
• Problèmes de connexion IMAPS :
– Dans /usr/lib/courier-imap/etc/imapd
• MAXDAEMONS (40 par défaut)
• MAXPERIP (4 par défaut)
• Problèmes avec certains users qui ont du mal avec le changement
• Forte demande pour pine
– pine -f {mathimaps.univ-lille1.fr/ssl/novalidate-cert}#allfolders.inbox.[]
• Problèmes avec le contrôle anti-spam
– Réglage dans amavisd-new ($local_domains_acl)
• Montée de charge à cause de httpd
Si la mise en place d'un tel serveur vous intéresse ...
• http://math.univ-lille1.fr/lmsp/