Installer Postfix + Maildrop, Comptes Virtuels avec gestion Mysql
Par beneth le 8 avril 2007, 00:55 - informatique - Lien permanent
Je considère pour la suite que vous avez un serveur mysql qui tourne et qui est fonctionnel.
Ps: Pour une meilleure lisibilité, retrouver cet article sur mon wiki : http://blog.beneth.fr/wiki/doku.php[...]
Postfix
Postfix
Vous aurez Besoin d'installer Postfix et Postfix-mysql
Sous debian :
apt-get install postfix postfix-mysql
Rendez-vous ensuite dans la configuration basique de Postfix
Editez le fichier : /etc/postfix/main.cf
Et modifez les valeurs comme suit :
myhostname = {VOTRE HOSTNAME}
mydestination = {HOSTNAME}, localhost.localdomain, localhost
mynetworks = 127.0.0.0/8
home_mailbox = Maildir/
Après chaque changement sur main.cf, il faut redémarer Postfix.
postfix reload
OU :
/etc/init.d/postfix reload
Vous pouvez allez jeter un oeil dans le fichier /etc/aliases (pas le même fichier sous toute les distribs, enfin cela dépent d'ou pointe par defaut la valeur de alias_maps dans le main.cf )
Attention:A chaque changement de fichier tel que /etc/aliases, vous devez regénérer le fichier de db :
postmap /etc/aliases
Normalement, vous en avez fini avec la configuration basique de Postfix et vous devriez pouvoir recevoir des mails pour les utilisateurs possédant des comptes UNIX sur le serveur. (Si ce n'est pas le cas, mieux vaut résoudre le problème avant de passer à la suite. Petit coup d'oeil dans /var/log/mail.log/)
Création des Tables Mysql
Vous aurez besoin de créer des Tables mysql renseignant toute les informations pour chaque utilisateur.
Je vous propose de suivre cette structure : mailsql.sql
- Une table `alias` correspondant au fichier /etc/aliases
- Une table `transport` pour chaque domaine on utilise quel transport de courier (on mettra en général maildrop)
- Une table `users` permettant d'avoir les informations utilisateur. On s'en servira pour le serveur IMAP
- Une table `virtual` pour faire simplement de la redirection de mail
Maildrop
Il vous faut maintenant installer maildrop pour le transport du courrier. J'utiliserai ici le paquet courier-maildrop (il vous faut également l'authentification par mysql)
apt-get install courier-maildrop courier-authlib-mysql
Editez maintenant le fichier authdaemonrc dans /etc/courier/ et rajouter à la ligne 'authmodulelist=' authmysql
vi /etc/courier/authdaemonrc
authmodulelist="authmysql authpam"
Editez maintenant le fichier authmysqlrc et renseignez-y les informations d'accés à votre base de donnée (je vous conseille fortement de créer un utilisateur qui a accès seulement à la Base mailsql)
Voici quelques paramètres à changer :
MYSQL_SERVER localhost
MYSQL_USERNAME {votreLogin}
MYSQL_PASSWORD {votrePass}
MYSQL_DATABASE mailsql
MYSQL_USER_TABLE users
MYSQL_CLEAR_PWFIELD password
MYSQL_UID_FIELD uid
MYSQL_GID_FIELD gid
MYSQL_LOGIN_FIELD email
MYSQL_HOME_FIELD maildir
MYSQL_NAME_FIELD nameLes autres configurations doivent être Commentées.
J'ai ici été confronté à un problème. J'ai mis maildir sur le champ MYSQL_HOME_FIELD car c'est la seul solution que j'ai trouvé pour obtenir la variable $HOME à mettre dans le /etc/maildroprc [Cela permet d'avoir la Maildir dans le bon répertoire].Il faudrait trouver en fait la variable correspondant à la ligne MYSQL_MAILDIR_FIELD si quelqu'un à une solution je serai très heureux qu'il m'en fasse part, ça simplifierait grandement les règles de filtrages par la suite.
Editez le fichier /etc/maildroprc afin d'avoir seulement la ligne :
DEFAULT="$HOME/"
Petit up: Suite aux commentaires de Seb, vous aurez besoin de vérifier qu'il existe un lien symbolique dans /etc/courier/ pointant vers /etc/maildroprc. (Par default sous debian, apparemment ce n'est pas le cas sous Ubuntu Server.)
Suite de mon problème : j'aimerai ici pouvoir définir deux variables la DEFAULT pour le transport du courier au bon endroit et une autre avec un home qui soit le même pour tout un groupe d'utilisateur afin de créer des règles de filtrages de mail pour tout le monde. Si quelqu'un à une solution merci de poster en commentaire.
Serveur IMAP (Dovecot)
Avant d'installer dovecot, on va créer un nouvel utilisateur système qui gérera les boites aux lettres virtuelles.
adduser --disabled-login --disabled-password --uid 5000 --gid 5000 vmail
On peut maintenant installer Dovecot
apt-get install dovecot-imapd
Il faut configurer Dovecot pour passer par Mysql
vous devriez avoir un fichier de configuration de cette forme la : /etc/dovecot/dovecot.conf
protocols = imap imaps
listen = *
log_timestamp = “%Y-%m-%d %H:%M:%S”
mail_extra_groups = vmail
ssl_disable = yes
auth_verbose = yes
mail_debug = yes
auth_debug_passwords = yes
base_dir = /var/run/dovecot/
default_mail_env = maildir:/home/vmail/%d/%n
first_valid_uid = 1029
disable_plaintext_auth = no
protocol imap {
mail_plugins = quota imap_quota
}
auth default {
mechanisms = plain login digest-md5 cram-md5
passdb sql {
args=/etc/dovecot/dovecot-sql.conf
#args =
}
userdb sql {
args= /etc/dovecot/dovecot-sql.conf
}
user = root
count = 2
}
plugin {
quota = maildir:storage=1000000
}
ps : La ligne Quota permet de définir la taille des boites mails. Ici, j'autorise 1Go de Stockage.
Vous devez maintenant configurer le fichier de conf pour accéder à mysql : /etc/dovecot/dovecot-sql.conf
(Les lignes ci-dessous sont celles à laisser et à configurer, les autres sont à commenter)
driver = mysql
connect = host=localhost dbname=mailsql user={votreLogin} password={votrePassword}
default_pass_scheme = SHA
password_query = SELECT password FROM users WHERE email = '%u' AND postfix = 'y'
user_query = SELECT uid, gid FROM users WHERE email = '%u'
Configuration Finale de Postfix
Il faudra que vous créez 5 fichiers dans /etc/postfix/ qui donneront les requêtes sql à effectuer.
hosts = 127.0.0.1
user = {votre_Login}
password = {Votre_Password}
dbname = mailsql
query = SELECT destination FROM alias WHERE alias='%s'
Fichier: /etc/postfix/mysql-relocated.cf
hosts = 127.0.0.1
user = {Votre Login}
password = {Votre Password}
dbname = mailsql
query = SELECT destination FROM relocated WHERE email='%s'
Fichier: /etc/postfix/mysql-transport.cf
hosts = 127.0.0.1
user = {votre login}
password = {Votre Password}
dbname = mailsql
query = SELECT destination FROM transport WHERE domain='%d'
Fichier: /etc/postfix/mysql-virtual.cf
hosts = 127.0.0.1
user = {votre login}
password = {votre password}
dbname = mailsql
query = SELECT destination FROM virtual WHERE email='%s'
Fichier: /etc/postfix/mysql-virtual-maps.cf
hosts = 127.0.0.1
user = {votre login}
password = {votre password}
dbname = mailsql
query = SELECT maildir FROM users WHERE email='%s' AND postfix='y'
Editez maintenant le fichier de configuration de Postfix
/etc/postfix/main.cf
Vous devriez avoir un fichier de configuration qui ressemble a celui ci-dessous:
myhostname = {Votre Hostname}
alias_maps = mysql:/etc/postfix/mysql-aliases.cf
relocated_maps = mysql:/etc/postfix/mysql-relocated.cf
myorigin = /etc/mailname
mydestination = {votre Hostname}, localhost.localdomain, localhost
relayhost =
mynetworks = 127.0.0.0/8
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
home_mailbox = Maildir/
local_transport = local
local_recipient_maps = $alias_maps $virtual_mailbox_maps unix:passwd.byname
maildrop_destination_recipient_limit = 1
virtual_mailbox_domains = {Liste de vos domaines qui recoivent du courrier, exemple j'ai @exemple.com et @exemple.net je met : exemple.com exemple.net}
transport_maps = mysql:/etc/postfix/mysql-transport.cf
virtual_transport = $transport_maps
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-maps.cf
virtual_minimum_uid = 100
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual.cf
virtual_mailbox_base = $virtual_mailbox_mapsPour plus de lisibilité, vous pouvez récupérer mon main.cf ici : http://blog.beneth.fr/public/postfix/main.cf
Vous en avez normalement Fini avec Postfix, N'oubliez pas un petit postfix reload
Et maintenant ?
Et bien, vous pouvez ajouter des utilisateurs depuis votre base de donnée. Vous pouvez ajouter des alias: Rappel: j'envoie le courrier à postmaster qui est alias de root qui est alias de l'utilisateur beneth. L'utilisateur beneth recevra donc le courier de postmaster.
Vous devez ajouter vos domaines dans la table transport sous la forme : domaine: @domaine.com et Destination: maildrop: .
Je viens de m'apercevoir que l'on doit les rajouter dans le main.cf de postfix; je reglera ça rapidement pour passer par mysql plutot.
La partie la plus interressante est la possibilité de créer des utilisateurs virtuels dans la table users.
Vous devez dans le champ email renseigner l'adresse email complète de l'utilisateur user@domaine.net. Cela est Important car comme vous avez pu le voir on peut ainsi séparer les emails des différents domaines. L'adresse email complete est %u, le domaine est %d et le nom est %n (pour dovecot tout du moins; c'est un peu différent pour postfix, vous avez du voir les %s...)
Si votre utilisateur vmail créé avec l'uid 5000 et gid 5000, vous aurez toujours à mettre ces valeurs dans la table users (c'est les valeurs par défaut que je vous ai mis dans le fichier de structure sql)
Enfin, vous devez spécifier le chemin vers la Maildir. Le serveur IMAP configuré comme ci-dessus voudra un chemin de la forme /home/vmail/DOMAINE(%d)/USER(%n)
Le dernier champ Postfix doit être laissé à 'y' pour autoriser la connection de l'utilisateur. Cela est pratique pour désactiver temporairement un utilisateur.
Pour aller Plus loin ....
Je vous conseille de télécharger Roundcube un exellent webmail qui vous permettra de gérer facilement vos mails et de la même façon de n'importe quel ordinateur.
Spamassassin et Mailfilter
Vous avez besoin d'installer Spamc (le démon de Spamassassin) et mailfilter pour filtrer vos mails
Quelque précision sur la Maildir: vos dossier doivent être précédé d'un point. Je vous conseille de les creer avec Roundcube, et par exemple si vous voulez qu'un dossier apparaisse comme un sous dossier de la INBOX , vous créer un dossier dans roundcube qui s'appelle INBOX.votredossier, et ensuite vous créez vos règles de filtrage de mail.
Le fichier de filtrage est à mettre à la racine de la Maildir sous le nom .mailfilter . Voici mon fichier pour vous aider un peu sur la syntaxe :
xfilter "/usr/bin/spamc"
if (/^X-Spam-Flag:.*YES/)
to "$DEFAULT/.Junk/"
if (/^To:.*debian-user-french\@lists.debian.org.*$/)
to "$DEFAULT/.INBOX.debian.user-french/"
if (/^TO:.*debian-announce\@lists.debian.org.*$/)
to "$DEFAULT/.INBOX.debian.announce/"
if (/^TO:.*debian-security-announce\@lists.debian.org.*$/)
to "$DEFAULT/.INBOX.debian.security/"
if (/^TO:.*debian-news-french\@lists.debian.org.*$/)
to "DEFAULT/.INBOX.debian.news/"
Voilà, j'espère vous avoir aider et avoir été assez clair.
S'il y a des points obscures, demandez moi, je pourrais peut-être vous aider.
Si certain point ne marche pas, prenez le réflexe de consulter vos fichier de log ( /var/log/mail.log ), en général le problème est bien indiqué.
Et si vous trouvez qu'il y a des problèmes (de sécurité ou autre) dites le moi !
J'utilise ce système depuis presque un mois, et j'en suis très satisfait. Je consulte maintenant mes mails avec Roundcube; Seul petit hic c'est un petit peu lent mais on s'y habitue.
Il ne reste plus maintenant qu'a développer un petit script PHP pour gérer facilement les comptes mail.
--
Quelques Liens qui m'ont aidés:
Doc Postfix en Francais : http://x.guimard.free.fr/postfix/
Doc Gentoo : http://www.gentoo.org/doc/en/virt-mail-howto.xml
Doc Maildrop: http://www.free-4ever.net/index.php/Mail:Configuration_maildrop

Commentaires
Salut,
Pour l'interface PHP de gestion des comptes mails, ne réinvente pas la roue : http://sourceforge.net/projects/pos...
Merci, je ne connaissais pas !
Salut j'aimerais savoir comment tu fais pour ajouter un compte utilisateurs, et surtout si la boite mail est crée automatiquement ou si on doit le faire
merci
Salut,
Si l'utilisateur vmail à le droit d'écriture, oui elle serai crée automatiquement.
Pour ajouter un utilisateur tu l'ajoutes dans la base de donnée 'users'; son login sera son adresse email, son password devrait être crypté en sha1, et sa maildir qui pointe vers la bonne adresse.
Pourrais-tu nous ta config pour roundcube a partir de ton install car j'ai pas mal de problème.
Merci
Je vais faire un Billet pour installer Roundcube, beaucoup de monde ont eu du mal avec l'installation.
En effet, j'ai réussi une fois a me connecter depuis roundcube tout à l'heure. Depuis, j'ai rajouté toutes les adresses email dans la base et depuis impossible de se connecter depuis roundcube.
Sinon dans le main.cf j'ai remplacé virtual_mailbox_domains pour qu'il aille chercher dans la table transport sinon ca amenait des erreurs lors d'un envoi vers une boite locale.
Maintenant j'arrive à me logger via roundcube à envoyer des mails à l'extérieur, et au compte unix. En revanche impossible de récupérer les mails envoyés aux comptes virtuels. Malgré que les logs m'indiquent que les mails sont correctements envoyés, je ne trouve pas où ils sont redirigés.
Je te laisse mon mail si tu peux m'aider theyankee76 (at) gmail (dot) com
il me semble que j'avais essayé d'aller chercher les virtual mailbox domains dans la table transport mais en vain. Justement il y avait un problème de redirection des mails.
Il faut entrer chaque domaine de ton serveur susceptible de recevoir des mails .
Exemple : dans mon main.cf j'ai :
virtual_mailbox_domains = rampant.fr beneth.fr
Bonne chance !
edit: voici mon main.cf complet: http://blog.beneth.fr/public/postfix/main.cfOk merci, mon main.cf est quasi identique. Dans ton cas, comment postfix retrouve le path de ta boite mail. Dans mon cas, si je veux envoyer un mail à contact@ownsport.fr, il recherche le compte unix contact, qui biensur n'existe pas vu qu'il est virtuel. Du coup lorsque j'envoie un mail, j'ai l'erreur unknown user et le status bounced.
Peux-tu me dire exactement ce que tu mets dans les tables de ta base de données ?
Merci
Prennons comme exemple mon domaine beneth.fr
Pour commencer dans la Table `transport` j'ai :
id | domain | transport
x | beneth.fr | maildrop: (les ':' sont important.)
Ensuite, dans la table users j'ai :
email:
bmauduit@beneth.Fr (sert aussi de login pour dovecot)
uid = 5000
gid = 5000 ( Doit correspondre au gid uid de l'utilisateur vmail ! )
homedir = /home/vmail (le même pour tout les utilisateurs, mais dans mon cas, je ne m'en sert pas...)
maildir = /home/vmail/beneth.fr/bmauduit/ (c'est ici ton problème peut-être. La Maildir devrait se créer automatiquement si vmail a les droits d'écriture dans ce répertoire.
postfix = 'y'
(pratique pour désactiver temporairement un utilisateur.)
Ok, c'est exactement ce que j'ai, je vois vraiment pas d'où vient mon problème. Quand tu envoies un mail, tu obtiens quoi comme relay, local ou virtuel ? Je parle dans le fichier /var/log/mail.log
Voici le log d'erreur en question
Jun 24 21:01:17 ns23283 postfix/local[11003]: BE4771B8B1: to=<seb@ns23283.ovh.net>, relay=local, delay=0.05, delays=0.03/0.01/0/0.01, dsn=5.1.1, status=bounced (unknown user: "seb")
Jun 24 21:01:17 ns23283 postfix/cleanup[11001]: C7C241B8B2: message-id=<20070624190117.C7C241B8B2@ns23283.ovh.net>
Jun 24 21:01:17 ns23283 postfix/bounce[11004]: BE4771B8B1: sender non-delivery notification: C7C241B8B2
Jun 24 21:01:17 ns23283 postfix/qmgr[10777]: BE4771B8B1: removed
Merci encore
Pour la maildir, elle se crée automatiquement lorsque je me connecte avec roundcube, mais lorsque j'envoi un mail j'ai l'impression qu'il ne trouve pas son path, car il recherche un utilisateur unix, et non un utilisateur virtuel de vmail.
Bon, j'ai trouvé une partie de mon erreur dans la table transport, j'avais un @ devant les domaines. Maintenant le relay est bien maildrop, et le status est bien sent mais je ne retrouve pas les mails au bon endroit. Il y a-t-il un fichier de log pour maildrop ?
Voici le log
Jun 24 23:15:57 ns23283 postfix/pipe[15968]: 3D3E51B8B2: to=<seb@ns23283.ovh.net>, relay=maildrop, delay=0.04, delays=0.03/0.01/0/0.01, dsn=2.0.0, status=sent (delivered via maildrop service)
Jun 24 23:15:57 ns23283 postfix/qmgr[15166]: 3D3E51B8B2: removed
Bon j'avance encore. Je recois bien les mails dans les bons répertoires mais ils sont tous stockés dans un fichier nommé Maildir. Tu as une idée sur ce problème ? Cela vien de maildrop car si j'envois un mail a un compte unix, il part bien dans le dossier new de la boite.
Peut-être ton fichier /etc/maildroprc qui doit contenir :
DEFAULT="$HOME/"
Avec le "/" derrière pour indiquer que c'est une maildir.
Bonne chance ! ça marche presque !
La configuration d'un serveur de mail n'est pas une chose facile...
Ouff, c'est bon tout marche enfin. Une petite correction dans ton doc. Le fichier maildroprc doit etre dans le dossier /etc/courrier et non dans /etc/ en tout cas sur les distrib ubuntu server
Merci de ton aide.
Sous debian on a un lien symbolique dans /etc/courier pointant vers /etc/maildroprc .
J'en prend note merci !
Salut,
Une interface Windows pour gérer les comptes email : http://postfixwinadmin.jwhosting.eu...
Slt,
J'ai encore un petit probleme. J'ai testé la redirection, et elle fonctionne très bien. En revanche j'aimerai savoir s'il est possible de rediriger le mail, mais aussi de le laisser sur la boite mail.
C'est bon je pense avoir trouvé. Dans virtual je met
email = contact@monsite.com
destination = moi@gmail.com, contact@monsite.com
Bonjour
est ce que quelqu'un peut me dire comment reamiser une page spamassassin dans postfixadmin avec des preferences par utilisateur afin que chacun puisse déterminser ses criteres spam
Merci d'avance,
salut,
As tu créé ton billet pour l'install de roundcube avec des mailbox virtuelles? Je galère vraiment... login failed tout le temps.
merci
Salut,
je me suis basé sur ton tuto pour créer mon serveur mail. J'ai modifié pa smal de petis truc, pour que ca corresponde à ce que je souhaite, mais ton article est parfais pour y voir clair :D
J'ai juste une petite question concernant l'authentification dovecot.
J'arrive a m'authentifier si je mets les pass en "plain", mais j'aimerais qu'ils soient cryptées en md5. Coté mysqk, j'utilise la fonction "md5('pass')", mais comment dire a dovecot de prendre cela en compte (ou alors c'est au client mail de le dire ?).
Ensuite je voudrais savoir s'il est possible de n'autoriser l'envoie SMTP via postifix QUE pour les utilisateurs (j'ai l'impression que je peux mettre n'importe quel login, il transmets tjr le mail).
Voila :D
bon en cherchant j'ai repondu a tout ca :D
Salut,
Tout d'abord merci pour ce tutoriel vraiment interessant et indispensable a la mise en place d'un serveur de messagerie.
Je voudrais avoir une petite précision. En fait, pour la gestion des quotas, au depart je le faisait avec maildrop car j'utilisais courier, mais maintenant que j'utilise dovecot, je voulais savoir si il etait possible de rester avec les quotas geres par maildrop, et si oui comment faire.
Sinon, auriez vous une autres solution pour la gestion des quotas?
D'avance merci beaucoup.
nbvcxw12343
Bonjour ;
A noter que vous n'avez pas besoin de spécifier 'virtual_transport = $transport_maps' dans le fichier main.cf de postfix. En effet, le paramètre 'transport_maps' surcharge automatiquement ce paramètre.
cf . http://www.postfix.org/transport.5....
Bonjour à tous,
J'aimerais une petite aide concernant la config, voilà je dois presenter postfix pour les cours et j'aimerais le configurer pour une utilisation local, alors j'aimerais savoir ce que je dois mettre dans les parametres hostname, ...
mais j'aimerai notament un eclaircisement sur les test a faire, par ex par l'envoye d'un, mail, comment on test cela?
Merci
Wow, now if Microsoft hadn't of messed with Kerberos http://www.frogmix.com/search/Kerbe... and made their implementation proprietary (cough AD cough), everyone could be using the open source authentication...
Bonsoir, j'ai essayé d'aller sur le lien (http://blog.beneth.fr/post/2007/04/...) ou il y a les structures de la base de données mysql mais le lien n'est plus valide,est-ce que vous pouvez mettre un lien valide ?
Merci.
Bonjour
Tout d'abord je tiens a vous remercier pour ce tutoriel, vraiment interessant
j'ai fait toutes les etapes que vous avez cité mais j'ai un petit probleme, j'ai pa trouvé ni le fichier /etc/maildroprc ni son lien symbolic
j'ai fait une installation sous debian
merci d'avance
bonjour j'ai crée le fichier manuelement, mais quand j' envoie un message à un utilisateur qui existe dans la base de donnée il m'affiche l'erreur suivante dans le fichier mail.log
si tu peux m aider merci
delays=0.05/0.02/0/0.07, dsn=5.1.6, status=bounced (User has moved to lahcen@bc2i.ma)
Aug 25 22:01:43 debian postfix/cleanup[3237]: D16167C56: message-id=<20100825200143.D16167C56@smtp.bc2i.ma>
Aug 25 22:01:43 debian postfix/qmgr[3087]: D16167C56: from=<>, size=2189, nrcpt=1 (queue active)
Aug 25 22:01:43 debian maildrop[3249]: Unable to change to home directory.
Aug 25 22:01:43 debian postfix/bounce[3248]: B46F67C55: sender non-delivery notification: D16167C56
Aug 25 22:01:43 debian postfix/qmgr[3087]: B46F67C55: removed
Aug 25 22:01:43 debian postfix/pipe[3238]: D16167C56: to=<tahiri@bc2i.ma>, relay=maildrop, delay=0.12, delays=0.05/0/0/0.06, dsn=4.3.0, status=deferred (temporary failure. Command output: /usr/bin/maildrop: Unable to change to home directory. )
Merci bcp pour ce tutoriel,
Cependant le fichier mailsql.sql n'est plus accessible :s
how to build a foundation?
how to build a foundation?
как построить птицефабрику?
как построить скворечник?
как построить скалодром?
how to build a pig farm?
как построить сруб?
how to build a poultry farm?
как построить септик?
how to build uly?
как построить шестигранник?
how to build a church?