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.
