Dovecot deliver comme LDA et Sieve / Pigeonhole

Pour remettre un message localement dans le bon répertoire de la bonne boîte aux lettres, un système de messagerie utilise un LDA (Local Delivery Agent). Le MTA (Mail Transfer Agent) Postfix est souvent utilisé pour cette tache par l’intermédiaire de son daemon virtual qui fait exactement cette tache, sans fioritures. C’est lorsque l’on veut un peu plus de fonctionnalités et de souplesse qu’il est intéressant de changer de LDA, dans ce tutoriel ce sera pour celui de Dovecot que nous connaissons déjà pour avoir mis en œuvre un serveur complet de messagerie basé sur Postfix et Dovecot. Le LDA de Dovecot se nomme deliver et la prochaine étape de ce tutoriel consistera à modifier notre configuration pour l’utiliser.

Continuer la lecture de « Dovecot deliver comme LDA et Sieve / Pigeonhole »

Ajouter le support TLS à Postfix et Dovecot

TLS (qui s’appelait SSL avant 2001) signifie Transport Layer Security. Il s’agit d’une couche qui crypte la communication entre deux hôtes. En utilisant SMTP AUTH (voir cet article) avec les mécanismes PLAIN ou LOGIN, le nom d’utilisateur ainsi que le mot de passe transitent en clair et sont exposés à quiconque sniffe le réseau. C’est là que la couche TLS peut résoudre ce point faible.
Pour utiliser le cryptage, il faut un certificat qui valide notre authenticité pour le client qui va se connecter au serveur de messagerie. Normalement un tel certificat doit s’acheter auprès d’une autorité compétente comme Thawte ou Verisign. L’autre solution est d’auto-signer son certificat, c’est bien entendu gratuit, mais n’étant pas officiel (mais reste légal!), les utilisateurs du serveur de messagerie devront vous faire confiance en acceptant ce certificat « maison ». Cette soluton est décrite ci-dessous.

Continuer la lecture de « Ajouter le support TLS à Postfix et Dovecot »

Postfix SASL avec Dovecot

L’authentification SMTP (SMTP Auth) est un mécanisme de contrôle d’accès qui permet de ne relayer que les utilisateurs autorisés, ainsi toute personne non authentifiée est rejetée. Depuis la version 2.3, Postfix supporte SMTP AUTH au travers de Dovecot SASL (introduit depuis Dovecot 1.0). Il est possible de vérifier si votre installation de Postfix est compilée avec le support de SASL avec la commande :

# postconf -a

Continuer la lecture de « Postfix SASL avec Dovecot »

Installation et configuration d’un serveur de messagerie simple avec Postfix et Dovecot

Ce tutoriel aide à l’installation et la configuration d’un serveur de messagerie SMTP et IMAP basé sur Postfix et Dovecot.

Par serveur simple, j’entends par là, pas de SSL, de MySQL et de fonctions avancées. Ces fonctions viendront par la suite dans de prochains articles. La solution proposée est à base de Postfix pour le MTA et Dovecot comme serveur IMAP.

Il gérera des boîtes aux lettres virtuelles – c’est-à-dire indépendantes des comptes systèmes – d’autant d’utilisateurs et de domaines que ce soit.

Pour la suite des opérations, la machine utilisée est sous Fedora, le tutoriel pourra donc convenir aux utilisateurs de CentOS et de Red Hat. On supposera qu’elle s’appelle monhostname.local.mondomaine.net. C’est parti ^.^



Postfix

L’installation se fait naturellement avec yum :

# yum install postfix

Afin de préparer le terrain, il faut créer l’arborescence qui accueillera les boîtes aux lettres virtuelles et l’utilisateur/groupe de celles-ci. Pour ce faire, ajouter un utilisateur vmail et un groupe du même nom ayant tout deux des uid et gid non réservés, par exemple 6000. Le home de cet utilisateur sera /home/vmail, c’est ici que les BAL seront construites :

# groupadd -g 6000 vmail
# useradd -d /home/vmail -m -u 6000 -g 6000 -s /dev/null vmail

On change les droits et le propriétaire des répertoires pour plus de sécurité :

# chmod -R 750 /home/vmail/
# chown -R vmail:vmail /home/vmail/

Les fichiers de configuration Postfix se situent sous /etc/postfix et c’est main.conf qui nous intéresse. Je vais juste copier-coller le mien ci-dessous, pour plus de renseignement sur ses paramètres, voir cet article.

alias_database = $alias_maps
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
broken_sasl_auth_clients = yes
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
debug_peer_level = 2
delay_warning_time = 4h
html_directory = no
inet_interfaces = all
mail_owner = postfix
mailbox_transport = lmtp:unix:/var/lib/imap/socket/lmtp
mailbox_size_limit = 512000000
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
masquerade_domains = mondomaine.net
message_size_limit = 50000000
mydestination = $myhostname, localhost.$myhostname, localhost
mydomain = mondomaine.net
myhostname = monhostname.local.mondomaine.net
mynetworks = 192.168.1.0/24, 127.0.0.0/8
myorigin = $myhostname
newaliases_path = /usr/bin/newaliases
queue_directory = /var/spool/postfix
readme_directory = no
recipient_delimiter = +
relayhost = [smtp.sfr.fr]
sendmail_path = /usr/sbin/sendmail
setgid_group = postdrop
smtp_generic_maps = hash:/etc/postfix/generic
smtpd_banner = $myhostname ESMTP
smtpd_recipient_limit = 50
unknown_local_recipient_reject_code = 550
virtual_alias_maps = hash:/etc/postfix/user_aliases
virtual_gid_maps = static:6000
virtual_mailbox_base = /home/vmail
virtual_mailbox_domains = /etc/postfix/domains
virtual_mailbox_limit = 512000000
virtual_mailbox_maps = hash:/etc/postfix/user_mailboxes_path
virtual_minimum_uid = 6000
virtual_uid_maps = static:6000

Astuce : Si comme moi, le serveur est sur un domaine local (monhostname.local.mondomaine.net), quelques difficultés vont être rencontrées lors de l’envoi de message vers l’extérieur, la machine de relai [smtp.sfr.fr] va refuser d’acheminer les emails car le domaine n’est pas enregistré sur la toile : Sender address rejected: Domain not found. Pour remédier à cela, il faut substituer l’adresse de l’émetteur en ajoutant ceci dans /etc/postfix/generic :

@monhostname.local.mondomaine.net       @mondomaine.net

On compile ce fichier avec postmap avant de relancer Postfix :

# postmap /etc/postfix/generic

Pour savoir où délivrer le courrier, le système va lire le nom des domaines virtuels gérés dans le fichier domains et les adresses emails ainsi que leur chemin seront dans user_mailboxes_path, tout deux toujours sous /etc/postfix. Il suffit d’ajouter des domaines séparés par des retours ligne, comme suit :

mondomaine.net
monautredomaine.com

Et pour les boîtes aux lettres virtuelles :

tutu@mondomaine.net mondomaine.net/tutu/
toto@monautredomaine.com monautredomaine.com/toto/

Noter le / (slash) de fin important pour indiquer qu’il s’agit de boîtes au format Maildir.

On ajoute un alias pour par exemple rediriger le courrier de toto@monautredomaine.com vers l’adresse tutu@mondomaine.net dans user_aliases :

toto@monautredomaine.com tutu@mondomaine.net

Et pour fignoler, on redirige le courrier de root – qui arrive sous /var/mail/root – vers une adresse virtuelle pour que la lecture des courriers important du système soit facilité. Ceci ce fait dans le fichier /etc/aliases :

root: tutu@mondomaine.net

Postfix ne lit pas ce genre de fichier tel quel, il faut comme pour le fichier generic le compiler pour créer le fichier de base de données grâce à la commande postmap, comme ceci :

postmap /etc/postfix/user_mailboxes_path
postmap /etc/postfix/user_aliases

Les alias locaux eux se compilent avec la commande :

newaliases

Une fois les changements effectués, on recharge Postfix :

# service postfix reload

On peut désormais faire un petit essai d’envoi d’email :

# "Email test" | mail -s "Test email root" root

Le message doit arriver dans /home/vmail/mondomaine.net/tutu/new/, l’arborescence étant créée automatiquement par Postfix dès réception de l’email.
A noter qu’il est préférable d’avoir un champ MX mondomaine.net dans vos zones DNS pour que le courrier soit bien acheminé.



Dovecot

Comme le dit le site sur lequel je me suis inspiré, recevoir du courrier c’est bien, pouvoir le lire c’est mieux. Pour cela, il faut installer Dovecot que l’on utilisera en serveur IMAP.

# yum install dovecot

Le fichier de configuration se situant sous /etc/dovecot/dovecot.conf, on l’édite comme suit :

# On veut des BAL IMAP
protocols = imap

# Chemin des les logs
log_path = /var/log/dovecot.log
info_log_path = /var/log/dovecot-info.log

# Je ne veux pas de SSL
ssl_disable = yes
disable_plaintext_auth = no

# Les BAL seront au format Maildir
mail_location = maildir:/home/vmail/%d/%n

# Optimisations
dotlock_use_excl=yes
maildir_copy_with_hardlinks=yes

# Configuration de l'authentification
auth_verbose = yes
auth default {
    mechanisms = plain
    passdb passwd-file {
        # Chemin vers les utilisateurs dovecot (les adresses email gérées)
        args = /etc/dovecot/passwd
    }
    userdb static {
        # Chemin vers les BAL
        args = uid=vmail gid=vmail home=/home/vmail/%d/%n/
    }
}

Maintenant il faut créer les utilisateurs (adresses emails) et les mots de passes associés pour accèder aux BAL dans le fichier /etc/dovecot/passwd :

echo "tutu@mondomaine.net:`dovecotpw -p lemotdepasse`" >> /etc/dovecot/passwd

On démarre Dovecot :

service dovecot start

Et voilà, c’est fini! Il ne reste plus qu’à le tester. On peut commencer par essayer d’accéder à une BAL en telnet sur le port 143 :

$ telnet monhostname.mondomaine.net 143
Trying 127.0.0.1...
Connected to monhostname.mondomaine.net.
Escape character is '^]'.
* OK Dovecot ready.
1 login tutu@mondomaine.net motdepasse

1 OK Logged in.
2 select inbox
* FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
* OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft \*)] Flags permitted.

* 1 EXISTS
* 0 RECENT
* OK [UIDVALIDITY 1217314075] UIDs valid

* OK [UIDNEXT 15] Predicted next UID
2 OK [READ-WRITE] Select completed.

3 list "" *
* LIST (\HasNoChildren) "." "Drafts"
* LIST (\HasNoChildren) "." "Sent"
* LIST (\HasNoChildren) "." "Trash"
* LIST (\HasNoChildren) "." "INBOX"

3 OK List completed.

Si cela fonctionne, vous pouvez essayer avec un vrai client (Thunderbird, Mail.app, Claws Mail, Outlook). Sinon, il faut aller voir d’où vient le problème dans les logs sous /var/log et mieux vaut lire et relire les documentations (voir ci-dessous).


En complément :


Les bases de cet article à l’origine pour Arch Linux datent du 29 juillet 2008, c’est une sorte de re-publication un peu mise-à-jour pour Fedora et un transfert de Joomla vers WordPress.