Howto migration de qmail vers Postfix avec vpopmail
Introduction
Un client a besoin de définir des limitations d'anvil sur son MTA.
Exemple no 1 : Un utilisateur ne peut utiliser le SMTP qu'en ayant au maximum 5 connexions par adresse IP.
Exemple no 2 : Un utilisateur ne peut effectuer que 25 envois maximum par minute.
Le soucis est que qmail est incapable de gérer ce genre de réglages.
On ne peut pas arrêter d'utiliser vpopmail, on est obligé de s'appuyer dessus pour réaliser l'authentification. Il est en effet trop compliqué de migrer TOUS les domaines et comptes vers un autre système d'authentification, cela demanderait un redéveloppement complet de l'extranet servant à gérer les mails du client.
qmail doit continuer d'écouter sur le port 25 pour gérer les mails entrants, en effet Postfix doit servir exclusivement aux utilisateurs finaux, qui attaqueront le Postfix sur le port submission (587).
Aucun guide de migration de qmail vers Postfix en utilisant vpopmail n’est disponible, nous avons donc dû créer le nôtre.
Voici la configuration actuelle :
- qmail ? vpopmail ? envoi du mail
- courier-imap ? vpopmail ? récupération du mail
On veut que ça fonctionne comme ça maintenant :
- SMTP to SMTP ? qmail
- User’s MUA to SMTP (submission) ? Postfix
Première idée :
Postfix ? SASL ? cyrus/sasl ? saslauthd/rimap ? courier-imap ? vpopmail
Cette idée aurait pu fonctionner mais aurait été très lourde et contraignante à maintenir ainsi qu’à monitorer.
Seconde idée :
Se servir du fait que Postfix sait maintenant se servir de la brique SASL de Dovecot pour baser l’authentification sur SASL qui interroge Dovecot qui lui sait parler à vpopmail.
postfix ? dovecot-sasl/dovecot ? vpopmail
C’est la solution retenue.
Remplacement de courier par Dovecot pour l’IMAP
Compilation de Dovecot :
Use flag à activer pour Dovecot :
net-mail/dovecot suid vpopmail ssl -mysql -pam
Contenu de /etc/dovecot/dovecot.conf :
{literal}
base_dir = /var/run/dovecot/
protocols = imap
shutdown_clients = yes
disable_plaintext_auth = no
# ssl_disable = yes
# Si vous desirez utiliser seulement TLS
#disable_plaintext_auth = yes
ssl_disable = no
ssl_cert_file = /var/qmail/control/servercert.pem
ssl_key_file = /var/qmail/control/servercert.pem
login_dir = /var/run/dovecot/login
login_process_per_connection = yes
login_greeting = Imap ready.
mail_debug = no
## UID et GID de votre utilisateur vpopmail
mail_uid = 89
mail_gid = 89
first_valid_uid = 89
last_valid_uid = 89
first_valid_gid = 89
last_valid_gid = 89
## Ou sont stockes vos maildir ?
mail_location = maildir:~/.maildir
protocol imap {
listen = 0.0.0.0:143
login_executable = /usr/libexec/dovecot/imap-login
mail_max_userip_connections = 32
mail_plugin_dir = /usr/lib/dovecot/imap
}
auth_verbose = no
auth_debug = no
auth default {
## Socket indispensable pour SASL
socket listen {
client {
path = /var/spool/postfix/private/auth
mode = 0660
user = postfix
group = postfix
}
}
## Le mecanisme login est obligatoire pour autoriser les
## clients mal developpes (comme Outlook Express) a interroger SASL via Dovecot.
mechanisms = plain login
passdb vpopmail {
}
userdb vpopmail {
}
user = vpopmail
}
{/literal}
Il faut donc couper courier-imap ainsi que courier-authlib et lancer Dovecot.
/etc/init.d/courier-imap stop /etc/init.d/courier-authlib stop /etc/init.d/dovecot start rc-update add dovecot default rc-update del courier-imap default
Couper qmail-submissiond :
cd /service/qmail-submissiond rm /service/qmail-submissiond svc -dx . log
Postfix
Compilation de Postfix :
Use flag à activer pour Postfix :
mail-mta/postfix -mysql -sasl dovecot-sasl
Portage va signaler lors de la compilation de Postfix que qmail est déjà installé. Il faut donc forcer la compilation de Postfix.
FEATURES="-protect-owned" emerge -Oav postfix
Dans notre cas on veut que /usr/sbin/sendmail continue d’être géré par qmail.
ln -snvf /var/qmail/bin/sendmail /usr/sbin/sendmail
Notre première étape est de désactiver le SMTP du port 25 et de n’activer seulement que le port submission.
Contenu partiel de /etc/postfix/master.cf :
#smtp inet n - n - - smtpd submission inet n - n - - smtpd
Ceci est dû à un setup particulier, si vous souhaitez que Postfix gère tout, décommentez #smtp
Pour la configuration de Postfix pour communiquer avec vpopmail par le biais de dovecot-sasl, voici le contenu de /etc/postfix/main.cf :
# make the following changes : myhostname = srvxxxx.sd-france.net mydomain = sd-france.net inet_interfaces = all mydestination = $myhostname, localhost.$mydomain, localhost #local_recipient_maps = proxy:unix:passwd.byname $alias_maps mynetworks = $config_directory/mynetworks alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases #virtual_transport = virtual fallback_transport = vdelivermail #mailbox_command = env EXT="$EXTENSION" HOST="$DOMAIN" /var/vpopmail/bin/vdelivermail '' bounce-no-mailbox luser_relay = vpopmail-$local@domain maildrop_destination_recipient_limit = 1 # Transport map # transport_maps = hash:/etc/postfix/transport vacation_destination_recipient_limit = 1 smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_auth_enable = yes broken_sasl_auth_enable = yes ## Pour autoriser Outlook a s'authentifier via SASL broken_sasl_auth_clients = yes smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination smtpd_sasl_security_options = noanonymous ################################################################################### ### ENABLE TLS SUPPORT ( "STARTTLS" ... enables SSL to be negotiated during a SMTP connection ) smtp_use_tls = no smtpd_use_tls = yes smtpd_tls_auth_only = no smtpd_tls_key_file = /etc/postfix/servercert.pem smtpd_tls_cert_file = /etc/postfix/servercert.pem smtpd_tls_session_cache_database = btree:/var/lib/postfix/tls_smtpd_scache smtpd_tls_loglevel = 1 smtpd_tls_received_header = yes #### Limitations de protection sur anvil ## http://www.postfix.org/TUNING_README.html # Un client ne peut effectuer que 5 connexions simultanees smtpd_client_connection_count_limit = 5 # Un client ne peut effectuer que 8 connexions en 60 secondes smtpd_client_connection_rate_limit = 8 # Nombre maximum d'adresses destinatrices qu'un client peut joindre en 60 secondes smtpd_client_recipient_rate_limit = 25 # temporisation du anvil anvil_rate_time_unit = 60 # exception sur les limitations globales # les comptes domain.tld ne sont pas limites smtpd_client_event_limit_exceptions = domain.tld
Postfix a besoin d’un fichier de référence d’alias (comme indiqué dans le fichier de configuration postfix/main.cf par les lignes alias_maps et alias_database). Il faut donc créer ce fichier (qui peut être vide) et le faire prendre en compte :
touch /etc/aliases newaliases
Il faut ensuite veiller à ce que Postfix se lance au démarrage :
rc-update add postfix default /etc/init.d/postfix start
Dernières étapes
Désactivez l’authentification sur le port 25 sur qmail afin que les utilisateurs ne puissent plus utiliser qmail mais soient obligés d’utiliser Postfix sur le port submission.
Grâce à cette méthode nous sommes sûrs et certains que les utilisateurs sont forcément limités par anvil de Postfix.
Éditez /var/qmail/control/conf-smtpd.
Commentez
#QMAIL_SMTP_CHECKPASSWORD="/var/vpopmail/bin/vchkpw"
puis relancez qmail-smtpd :
svc -t /service/qmail-smtpd
Ce how-to peut très facilement s’adapter à toutes les distributions et pour une migration en douceur de qmail vers Postfix.
On n’est pas obligé de garder qmail, nous avons fait le choix de le garder pour des raisons de flexibilité d’une API qu’utilise notre client.
