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.

Mots-clefs :, , , , , ,