Postfix, Dovecot, et des utilisateurs virtuels sans Mysql
Par effraie le mercredi 11 juin 2008, 00:27 - Logiciel libre - Lien permanent
par souci de lisibilité et de référencement, j'ai finalement scindé mon précédent billet en deux: un sujet, un billet.
Un 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).
Vos commentaires, sur la méthode, le script ou n'importe quoi d'autre, sont les bienvenus.
- mv flickr /dev/null
- NO DATA RETENTION
- Freedom not fear : le 11, journée mondiale d'action contre la société de la surveillance
- Vive le minitel libre!
- Pourquoi les militants délaissent les médias libres au profit des groupes capitalistes ?
- Dodeline.net, des blogs pour les cop-ains/ines
- Nouveautés: DotAddict, del.icio.us, et autres futilités
- Prochaine session: Vim
- Petit guide informatique pour cell-eux qui voudraient être libres
- Amélioration du service «emails» sur effraie.org
- Configurer Thunderbird pour l'IMAPs sur effraie.org
- Créer son propre site
- FaceBook se fiche du monde
- Le réseau des pirates
- Mes extension firefox préférées...
- Du nouveau sur le serveur
- Sauvegardes extensives
- En vrac
- Mise en page des listings par défaut dans apache (fancy index)
- Un script python pour calculer l'Hyperfocale (MAJ)
- Prochaine session classroom, demain!
- Migration: Work in progress
- Flux de travail numérique pour le photographe sous Ubuntu
- Les licences et la notion de liberté
- Un script python pour calculer l'Hyperfocale
- [Blogs] rewriting.net
- Internet, le retour: effraie.org est up!
- Antispam: Greylisting et Postfix
- Y'en a j'te jure...
- Office 2007, le piége
- La sonde ColorVision Spyder fonctionnelle sous Linux avec Argyll/CMS
- Release (2) de mon thème
- xbelld : un beep system au doigt et à l'oeil
- MPD et icecast2 - Webradio ou lecteur ultime?
- Internet est dangereux, Nadine Morano veille sur votre sécurité
- Calibration d'écran, profil ICC et gestion des couleurs sous Ubuntu
- Créer un diaporama de photos avec image2mpeg
- Pistes recyclables
- Le futur ministre de l'économie numérique vous présente tous ses vœux...
- Bibble 5, la sortie prochaine se précise!
- La liberté, Gougueule, et tout ça...
- Lenny est stable :)
- Appel à dons - Coupure du 31 octobre
- Feisty Fawn sur Power-PC
- Photo Dilemme
- Prochaine session classroom: Initiation au packaging Debian/Ubuntu
- MeFab, ou l'intéret de crasher une architecture rare
- Backport de CenterICQ (feisty2dapper)
- Nouveaux hébergés
- Rando, c'est parti!
- [Blogs] Le monolecte
- Nouveau venu sur le serveur!
- Nouveautés sur le serveur
- [Revue de Web] Les mots sont importants
- les Tanneries menacées d'expulsion!
- Nouveau venu sur le serveur: Profs en grève!
- Thème RedLight
- Stickers Ubuntu : n'habite plus à l'adresse indiquée
- MAJ du serveur prochaine
- Serveur down
- [revue-de-web] Des Bandes dessinées en ligne
- À propos des stickers Ubuntu
- Prochaine session Classroom : Votre propre Live CD
- Ardour et la MAO libre sous GNU/Linux
- PPC - Java Plugin dans Firefox
- Pourquoi GNOME est-il le meilleur bureau
- DRM de merde!
- Invitation a un Week-end d'initiation et d'échange de savoirs
- Youtube, google.video sur Linux/PPC
- Mise a disposition du thème Effraie, et ouverture du demo-blog
- Nouveau design, sous l'impulsion de sonia!
- Firefox, Thunderbird et Tango-old-plain-grey
- Wifi sous ubuntu-ppc avec la carte Airport-extrem
- Un nouveau site sur le serveur
- Le droit de lire...
- Badvista: la Free Software Foundation dénonce l'arrivée de TCPA avec windows® Vista™
- Webradio
- [Revue de web] Coup de gueule: mv virusphoto /dev/null
- Accélération graphique sur ubuntu-ppc
- Ubuntu-ppc, combien de divisions?
- Autosatisfaction photographique...
- Le spectacle s'étend...
- Vacances randonnée!
- Ubuntu sur G5 rev C (isight)
- Un abandon du support officiel des PowerPCs?
- Edgy, PPC, carte son - workaround
- Trackpad Apple récent sous Ubuntu
- Beryl/Emerald sur Edgy-PPC
- Lettre de RESF au ministre de la honte, des charters et des expulsions
- Dépôts et sources.list pour Ubuntu-ppc
- Beryl & Emerald sur ppc
- Un dépôt ubuntu/ppc
- Personne ne vous demande de faire de la délation
- Hélo dans le grand nord
- E17 empaqueté pour ubuntu edgy PPC
- Les pancartes et slogans politiques sont des délits
- Voici le témoignage ahurissant de Hélène du RESF de Paris nord ouest qui n'a de crimes à son actif que que de gérer la liste des alertes rafles
- [revue de web] Le blog de marcel
- Une fois n'est pas coutume, je parle de mon boulot
- Les logiciels manquant sur Ubuntu-PPC
- Vol d'image
- Extraire le son d'une vidéo
- Labo noir et blanc : c'est parti!
- Ubuntu sur mac, quelques astuces.
- Clavier français sur mac
- Mark Shuttleworth, a propos du (futur) support des PowerPCs
- Émuler les boutons 2 & 3 d'une souris
- À partir de quel moment doit on considérer que l'on vit dans un régime policier ?
- Les chroniques de l'état policier
- La nuit sécuritaire
- Psychiatrie : encore une bonne nouvelle !
- Formats non libres sous ubuntu-ppc
- Nouveau thème pour Dotclear 2
- Le retour en vrac
- Stickers ubuntu
- Screenshots de vos pages web dans différents navigateurs
- Fortune
- Homoparentalité: ça bouge!
- Dorclear2 peut-être a la veille d'une refonte...
- PowerPC: la fin du suspens...
- Call for witnesses: Sexual police violence during the protests against the G8 in Heiligendamm 2007
- Inclusion des paquets ubuntu-ppc sur le dépôt edevelop
- Ubuntu-member
- L'économie en campagne!
- Guerre de basse intensitée au Chiapas: terrorisme d'état et paramilitaires
- Aperture First
- École pour Ubunter@s: appel à contributeurs
- Vague de repression contre les structures allemandes anti-g8
- Homoparentalité, droit et politique.
- Retour sur les Feistyvités parisiennes
- Un de plus!
- Théme ''Effraie'': Un bug génant sous IE7 (IE6 non testé)
- Qu'est-ce qu'un "flux RSS" et comment s'en servir?
- [BD] XKCD, le meilleur des webzines
- Dieu: FAQ (foire aux questions) officielle
- [Photos Blog] onexposure.net
- Rachida Dati persiste et signe...
- 3 nouveaux venus sur le serveur
- Délit d'opinion
- Abandon du support officiel des PowerPCs
- Ubuntu sur PlayStation 3, soubresauts du support PPC.
- Vi/vim : feuille de triche
- Société sécuritaire: ou l'on marche sur la tête...
- HOWTO Encourage Women in Linux (En français)
- La meilleure défense... c'est l'attaque!
- A consommer avec modération...
- Statistiques: satisfaction
- Statistiques: OS et navigateurs utilisés sur ce site
- Mes galeries photos en ligne
- Puppetmastaz pôwa!




Commentaires
Ben écoute ça ne m'a pas encore servi, mais je l'ai bookmarké ton article, car je prévois de passer mes boîtes mails sous mysql.
Donc merci par avance.
euh, précisément, là, c'est c'est virtuel, mais sans mysql ;)
Ah vi j'ai lu trop vite le titre ;)
Bref ca m'interesse quand meme :D
trop de la balle le test
Yop guy!
En relisant, je m'appercois d'un truc.. je ne pense pas qu'il soit nécesaire de rajouter $virtual_mailbox_maps dans local_recipient_maps
En effet il est deja par defaut dans proxy_read_maps
? non ?
A+
;)
J'ai rammé sur le fichier dovecot et maintenant ça marche donc je vous file le mien !
listen = *
pop3_uidl_format = %08Xu%08Xv
protocols = imap
disable_plaintext_auth = no
log_timestamp = "%Y-%m-%d %H:%M:%S "
protocol managesieve {
}
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 {
}
Merci, c'est rapide et ça marche.
A noter quand même qu'il faut enlever domain.tld de $mydestination (il ne doivent absolument pas être dans $virtual_mailbox_domains ET $mydestination)
Bonjour,
J'ai un soucis avec ma config postfix, dovecot , j'arrive à m'envoyer des mails locaux et distants mais seulement grace à la commande mail.
Sinon je recois des mails distants aussi, en revanche ya pas moyen de configurer un client mail (ou alors je me suis cogné trop fort lol) et je comptait sur ton tuto pour configurer des users virtuels.
Donc en fait j'aurais deux questions, la première étant pourquoi je n'arrive pas à configurer mon client alors que je me suis tapé un week end de tutos sur le net et tu entends quoi par "postmaper" les fichiers?
Merci