Dernière mise à jour : 14/06/2010
Nous allons couvrir dans cet article comment paramétrer un serveur de mail pour s'authentifier à un serveur MySQL (utilisateurs virtuels) et pouvoir envoyer/recevoir des emails de façon transparente avec authentification SMTP/TLS. Ce tutoriel considère que vous avez un apache (ou équivalent) installé avec les modules php5 et mysql activés. Pour plus de sécurité, je conseille d'utiliser une connexion https. J'utilise Debian Squeeze pour cette installation.
Installez les paquets suivants : apt-get install postfix libapache2-mod-php5 mysql-client php5-mysql php5-imap dovecot-imapd dovecot-pop3d. Téléchargez ensuite la dernière version de Postfix Admin. Décompactez la dans /var/www. Ensuite lisez attentivement le fichier d'installation (INSTALL.TXT). Il vous faudra modifier config.inc.php en changeant au moins les valeurs suivantes. Je considère dans cet exemple que votre base de données est locale, que votre utilisateur postfix s'appelle postfixmailuser avec des droits sur la base. Enfin mon exemple utilise https.
$CONF['configured'] = true; $CONF['setup_password'] = 'votre pass'; $CONF['postfix_admin_url'] = 'https://fqdn.domaine.com/postfixadmin-2.3.1'; $CONF['database_host'] = 'localhost'; $CONF['database_user'] = 'postfixmailuser'; $CONF['database_password'] = 'votrepass'; $CONF['database_name'] = 'postfix';
Une fois installé et configuré, vous pouvez lancer le setup, allez à l'adresse : https://fqdn.domaine.com/postfixadmin/setup.php qui vous donnera tous les conseils pour tout avoir bien configuré. Il vous demande alors de créer un administrateur. Vous pouvez l'appeller comme vous le voulez (attention, il utilise une adresse email comme identifiant valide). Vous devez ensuite créer les fichiers de configuration pour MySQL et Postfix. Pour ce faire, allez dans /etc/postfix/ :
# cat mysql_alias.cf user=postfixmailuser password=votrepass dbname=postfix hosts = localhost table = alias select_field = goto where_field = address # cat mysql_domains.cf user=postfixmailuser password=votrepass dbname=postfix hosts = localhost table = domain select_field = domain where_field = domain additional_conditions = and backupmx = '0' and active = '1' # cat mysql_mailbox.cf user=postfixmailuser password=votrepass dbname=postfix hosts = localhost table = mailbox select_field = maildir where_field = username
Modifiez ensuite votre postfix pour avoir au moins cette configuration minimale :
setgid_group = postdrop myhostname = fqdn.domaine.com smtpd_banner = $myhostname ESMTP $mail_name biff = no delay_warning_time = 4h smtpd_helo_required = yes strict_rfc821_envelopes = yes disable_vrfy_command = yes unknown_address_reject_code = 554 unknown_hostname_reject_code = 554 unknown_client_reject_code = 554 smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname, permit alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases myorigin = /etc/mailname mydestination = smtp.frlinux.net relayhost = mynetworks = 127.0.0.0/8, 160.6.207.17, [2001:770:60:cf:5652:ff:fe63:68bf] mailbox_command = procmail mailbox_size_limit = 0 recipient_delimiter = + inet_protocols = all inet_interfaces = all virtual_mailbox_base = /var/mail virtual_mailbox_maps = mysql:/etc/postfix/mysql_mailbox.cf virtual_alias_maps = mysql:/etc/postfix/mysql_alias.cf virtual_mailbox_domains = mysql:/etc/postfix/mysql_domains.cf virtual_transport = virtual virtual_gid_maps = static:5000 virtual_minimum_uid = 5000 virtual_uid_maps = static:5000 smtp_sasl_password_maps = mysql:/etc/postfix/mysql_mailbox.cf mail_owner = postfix unknown_local_recipient_reject_code = 450 smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination smtpd_client_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_invalid_hostname, permit_mynetworks, reject_unauth_destination
Editez ensuite /etc/postfix/master.cf avec les ligness suivantes :
smtp inet n - n - - smtpd pickup fifo n - n 60 1 pickup cleanup unix n - n - 0 cleanup qmgr fifo n - n 300 1 qmgr tlsmgr unix - - n 1000? 1 tlsmgr rewrite unix - - n - - trivial-rewrite bounce unix - - n - 0 bounce defer unix - - n - 0 bounce trace unix - - n - 0 bounce verify unix - - n - 1 verify flush unix n - n 1000? 0 flush proxymap unix - - n - - proxymap smtp unix - - n - - smtp relay unix - - n - - smtp -o fallback_relay= showq unix n - n - - showq error unix - - n - - error discard unix - - n - - discard local unix - n n - - local virtual unix - n n - - virtual lmtp unix - - n - - lmtp anvil unix - - n - 1 anvil scache unix - - n - 1 scache smtp-amavis unix - - n - 2 smtp -o smtp_data_done_timeout=1200 127.0.0.1:10025 inet n - n - - smtpd -o content_filter= dovecot unix - n n - - pipe flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d $(recipient) smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject maildrop unix - n n - - pipe flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient} old-cyrus unix - n n - - pipe flags=R user=cyrus argv=/usr/lib/cyrus-imapd/deliver -e -m ${extension} ${user} cyrus unix - n n - - pipe user=cyrus argv=/usr/lib/cyrus-imapd/deliver -e -r ${sender} -m ${extension} ${user} uucp unix - n n - - pipe flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient) ifmail unix - n n - - pipe flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient) bsmtp unix - n n - - pipe flags=Fq. user=foo argv=/usr/local/sbin/bsmtp -f $sender $nexthop $recipient
Loggez vous ensuite sur l'interface de Postfix Admin (avec le compte admin créé précedemment) puis allez dans Domain List/New Domain. On va partir sur l'exemple domaine.com donc crééz le puis allez dans Virtual List/Create Mailbox. On va utiliser le compte luser@domaine.com, donc renseignez bien tous les champs et appuyez sur Add Mailbox.
Il faut à présent configurer dovecot (alternative à courier que j'utilisais depuis de nombreuses années). Dovecot vous permet de configurer votre POPS/IMAPS de façon très simple. Créez ces deux fichiers :
# cat /etc/dovecot.conf base_dir = /var/run/dovecot/ protocols = imap imaps protocol imap { listen = *:143 ssl_listen = *:993 } protocol pop3 { listen = *:110 } log_timestamp = ?%Y-%m-%d %H:%M:%S ? syslog_facility = mail mail_location = maildir:/var/mail/%u mail_access_groups = mail mail_debug = no first_valid_uid = 150 last_valid_uid = 9000 maildir_copy_with_hardlinks = yes protocol imap { login_executable = /usr/lib64/dovecot/imap-login mail_executable = /usr/lib64/dovecot/imap imap_max_line_length = 65536 } protocol pop3 { login_executable = /usr/lib64/dovecot/pop3-login mail_executable = /usr/lib64/dovecot/pop3 pop3_uidl_format = %08Xu%08Xv } protocol lda { postmaster_address = postmaster@mydomain.com sendmail_path = /usr/lib/sendmail auth_socket_path = /var/run/dovecot/auth-master } auth_verbose = no auth_debug = no auth_debug_passwords = no auth default { mechanisms = plain passdb sql { args = /etc/dovecot/dovecot-mysql.conf } userdb sql { args = /etc/dovecot/dovecot-mysql.conf } user = nobody socket listen { master { path = /var/run/dovecot/auth-master mode = 0660 user = vmail group = mail } client { path = /var/spool/postfix/private/auth mode = 0660 user = postfix group = postfix } } } # cat /etc/dovecot-mysql.conf driver = mysql connect = host=127.0.0.1 dbname=postfix user=postfixmailuser password=votrepass default_pass_scheme = MD5-CRYPT password_query = SELECT password FROM mailbox WHERE username = '%u' user_query = SELECT maildir, 5000 AS uid, 5000 AS gid FROM mailbox WHERE username = '%u'
Créez ensuite votre utilisateur avec les bons droits :
groupadd -g 5000 vmail useradd -u 5000 -g 5000 -d /var/mail vmail chown -R vmail:vmail /var/mail/
Voilà , vous devriez à présent être capables de pouvoir envoyer et recevoir des mails sur votre serveur. Vous pouvez ajouter autant de domaines que vous le voulez. Si vous avez des questions ou des ajouts, merci d'utiliser le forum de préférence.