HowTo/PostfixAndDovecotSASL – Dovecot Wiki.

Postfix and Dovecot SASL

Since version 2.3, Postfix supports SMTP AUTH through Dovecot SASL as introduced in the Dovecot 1.0 series. If using Postfix obtained from a binary (such as a .rpm or .deb file), you can check if Postfix was compiled with support for Dovecot SASL by running the command:

postconf -a

Once you have verified that your installation of Postfix supports Dovecot SASL, it’s very simple to configure:

Example conf.d/10-master.conf excerpt

service auth {

unix_listener /var/spool/postfix/private/auth {
mode = 0660
# Assuming the default Postfix user and group
user = postfix
group = postfix
}

}

Example Postfix main.cf excerpt

smtpd_sasl_type = dovecot

# Can be an absolute path, or relative to $queue_directory
# Debian/Ubuntu users: Postfix is setup by default to run chrooted, so it is best to leave it as-is below
smtpd_sasl_path = private/auth

# and the common settings to enable SASL:
smtpd_sasl_auth_enable = yes
# With Postfix version before 2.10, use smtpd_recipient_restrictions
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

Using SASL with Postfix submission port

When Dovecot is used as the authentication backend for Postfix it is good practice to use a dedicated submission port for the MUAs (TCP 587). Not only can you specify individual parameters in master.cf overriding the global ones but you will not run into internet mail rejection while the Dovecot Auth Mechanism is unavailable. In this example Postfix is configured to accept TLS encrypted sessions only, along with several other sanity checks:

Verification of alias ownership via Login Maps
Domainname and recipient plausibility

master.cf

submission inet n – - – - smtpd
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=private/auth
-o smtpd_sasl_security_options=noanonymous
-o smtpd_sasl_local_domain=$myhostname
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o smtpd_sender_login_maps=hash:/etc/postfix/virtual
-o smtpd_sender_restrictions=reject_sender_login_mismatch
-o smtpd_recipient_restrictions=reject_non_fqdn_recipient,reject_unknown_recipient_domain,permit_sasl_authenticated,reject

Dans la partie auth default :

mechanisms = plain login

# Commenter la partie passdb pam

# Décommenter la partie passdb sql avec comme paramètres :

args = /etc/dovecot/dovecot-sql.conf

Dans la partie userdb static :

args = uid=5000 gid=5000 home=/home/var/vmail/%d/%n allow_all_users=yes

Dans la partie socket listen :

master {

path = /var/run/dovecot/auth-master

mode = 0600

user = vmail

}

client {

path = /var/spool/postfix/private/auth

mode = 0660

user = postfix

group = postfix

}

viaServeur de mail : postfix, dovecot, dspam, clamav (Serveur Web sur Debian Lenny) – NyroBlog.

3.4 Dovecot LDA

Postfix possède son propre agent de livraison (LDA ou MDA pour Local ou Mail Delivery Agent) mais cette documentation propose d’utiliser le LDA de Dovecot qui est beaucoup plus riche fonctionnellement : il permet notamment de gérer les quotas sur les Maildir et apporte le support des filtres Sieve.

Pour indiquer à Postfix que le nouvel agent de livraison pour les utilisateurs virtuels est Dovecot, il suffit d’ajouter les lignes suivantes dans /etc/postfix/main.cf :

# Dovecot LDA

virtual_transport = dovecot

dovecot_destination_recipient_limit = 1

Il faut maintenant définir le transport utilisé ci-dessus dans le fichier /etc/postfix/master.cf :

# Dovecot LDA

dovecot unix – n n – – pipe

flags=DRhu user=vmail:mail argv=/usr/lib/dovecot/deliver -d $recipient

Dovecot requiert également quelques modifications dans /etc/dovecot/dovecot.conf pour activer le LDA :

# MDA Configuration

protocol lda {

postmaster_address = postmaster

auth_socket_path = /var/run/dovecot/auth-master

}

Après un redémarrage de Dovecot et de Postfix, les mails seront donc transmis à deliver qui se chargera de les enregistrer dans la boite de l’utilisateur.

# /etc/init.d/dovecot restart

# /etc/init.d/postfix restart

viaDebian GNU/Linux :: Serveur :: Mail.

postfixUn petit mémo sur la façon de configurer postfix et dovecot pour héberger des domaines de mail multiples et virtuels, le tout sur une seule et même installation, sans passer par l’usine à gaz qu’est MySql (enfin, tant que vous n’avez pas des milliers d’utilisateurs)

Dans postfix

* main.cf, la section qui autorise les domaines virtuels est la suivante:

virtual_mailbox_domains = hash:/etc/postfix/vdomains

virtual_mailbox_base = /home/vmail

virtual_mailbox_maps = hash:/etc/postfix/vmailbox

virtual_uid_maps = hash:/etc/postfix/virtual_uids

virtual_gid_maps = hash:/etc/postfix/virtual_gids

### 200 Mo ( a peu pres )

virtual_mailbox_limit = 200000000

local_recipient_maps = proxy:unix:passwd.byname $alias_maps $virtual_mailbox_maps

N’oubliez pas de postmaper les fichiers qui sont indiqués après hash:/ !!

* vdomains est de la forme:

domain1.tld pouet

domain2.tld pouet

domain3.tld pouet

* vmailbox est de la forme:

#user@domain domain/user/

user1@domain1.tld domain1.tld/user1/

user2@domain2.tld domain2.tld/user2/

* virtuals_uids et virtual_gids sont de la forme:

#virtuals_gids

#grep -i vmail /etc/group

#@tutu.com 5000 (pour vmail)

#####################

@domain1.tld 5000

@domain2.tld 5000

C’est tout dans postfix. Il faut créer un utilisateur qui accédera aux Maildir. J’ai choisi de créer un user system vmail, d’uid:gid 5000:5000

Les mails seront distribués dans: /home/vmail/domain1.tld/user1/

Maintenant, nous devons permettre aux utilisateurs d’accéder à ces boites emails, et ça va être le travail de dovecot (best imap server ever!)

Dans dovecot

La configuration de dovecot, comme d’habitude, est hyper simple:

protocols = imaps

listen = *

disable_plaintext_auth = yes

log_path = /var/log/dovecot/dovecot.log

info_log_path=/var/log/dovecot/dovecot.log

log_timestamp = « %Y-%m-%d %H:%M:%S  »

login_greeting = ready….

auth default {

mechanisms = plain cram-md5

user = root

userdb passwd-file {

args = /etc/dovecot/dovecot.users

}

#fallback to PAM

userdb passwd {

}

passdb passwd-file {

args = /etc/dovecot/dovecot.users

}

#fallback to PAM

passdb pam {

}

socket listen {

client {

# Assuming the default Postfix $queue_directory setting

path = /var/spool/postfix/private/auth

mode = 0660

# Assuming the default Postfix user and group

user = postfix

group = postfix

}

}

}

mail_extra_groups = mail

protocol imap {

}

protocol pop3 {

}

dict {

}

plugin {

}

Le fallback vers PAM me permet de supporter une phase de transition depuis des utilisateurs systèmes vers des utilisateurs virtuels, mais va disparaître sous peu.

Le truc important ici, c’est le fichier /etc/dovecot/dovecot.users, qui est en fait notre table de correspondance user, password, chemin vers le Maildir.

Il est de la forme:

user1@domain1.tld:{HMAC-MD5}12999732f70a30191be8c552bff077b3876d7a1fe89b9e61389b941ab598cf15:5000:5000::::userdb_mail=maildir:/home/vmail/domain1.tld/user1/

user2@domain2.tld:{HMAC-MD5}a91cbc2e844e773e464eb76786cebd6edd0c7baf5d64de09c8a4ed67851e961e:5000:5000::::userdb_mail=maildir:/home/vmail/domain2.tld/user2/

les passwords sont salés en HMAC-MD5 (ce qui n’est pas de la grande cryptographie, entendons nous bien, mais inutile de casser ceux là, ce sont des fakes), et générés avec la commande:

dovecotpw -p le_mot_de_passe

Bien sur, c’est fastidieux à faire à la main, alors voici un petit script qui ajoute un email de façon entièrement automatisée (lancez le script en root, répondez aux questions (nom, domaine, et mot de passe) et voila). Si par hasard vous vous en serviez (il est probablement très laid!), pensez à le lire, a comprendre ce qu’il fait, et à l’adapter à vos besoins, bien sur.

#!/usr/bin/perl

use strict;

use POSIX;

#script sous licence WTFPL http://sam.zoy.org/wtfpl/

# mathieu – http://blog.effraie.org/

#

#Créer un email pour un utilisateur

#tester que le script est lancé avec les droits root

my $uid = getuid();

if ($uid != 0) {

print « Vous devez etre root pour lancer ce script.\n »;

exit(0);

}

#récupérer le nom, le domaine, le pass

print « Nom du nouvel utilisateur mail: » . « \n »;

my $name = <STDIN>;

chomp($name);

print « Domaine du nouveau mail: » . « \n »;

my $domain = <STDIN>;

chomp($domain);

print « Mot de passe: » . « \n »;

my $clear_pass = <STDIN>;

chomp($clear_pass);

my $newmail = « $name\@$domain »;

#tests de base

die « Le nom domaine n’est pas défini. » . « \n » unless ($domain);

die « Le nom n’est pas défini. » . « \n » unless ($name);

die « Le mot de passe n’est pas valide. » . « \n » unless ($clear_pass);

# vérifier la validité du domaine

my $test_domain = « grep $domain /etc/postfix/vdomains > /dev/null »;

system($test_domain);

if ($? != 0) {

print « le domaine n’est pas valide » . « \n »;

exit (0);

}

# vérifier la validité du noveau mail

my $test_mail = « grep $name\@$domain /etc/postfix/vmailbox > /dev/null »;

system($test_mail);

if ($? == 0) {

print « Ce mail est déjà attribué » . « \n »;

exit (0);

}

#saler le pass pour dovecot

my $salted_pass = `dovecotpw -p $clear_pass`;

chomp($salted_pass);

#ajouter le mail dans postfix

`echo « $newmail $domain/$name/ » | tee -a /etc/postfix/vmailbox && postmap /etc/postfix/vmailbox`;

#autoriser l’user dans dovecot

`echo « $newmail:$salted_pass:5000:5000::::userdb_mail=maildir:/home/vmail/$domain/$name/ » | tee -a /etc/dovecot/dovecot.users`;

#redémarrer les services

`/etc/init.d/postfix reload && /etc/init.d/dovecot restart 2>&1 /dev/null`;

#envoyer un mail de bienvenue

`cat /home/effraie/scripts/welcome_mail | mail $newmail -s « Bienvenue sur $domain ! »`;

print « le Mail $newmail a bien été créé, avec le pass: $clear_pass » . « \n »;

exit (0);

Voila voila, ça n’a rien d’un tutoriel, c’est juste un petit mémo perso que je partage, dans l’hypothèse ou il puisse servir à quelqu’un (moi ça m’aurait bien aidé, heureusement, il y a Uggy).

viaPostfix, Dovecot, et des utilisateurs virtuels sans Mysql – Effraie@blog.