<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Le blog de Michauko &#187; POP3</title>
	<atom:link href="http://michauko.org/blog/tag/pop3/feed/" rel="self" type="application/rss+xml" />
	<link>http://michauko.org/blog</link>
	<description>Si tu ne comprends pas le titre de l&#039;article, passe ton chemin</description>
	<lastBuildDate>Tue, 29 Nov 2011 11:45:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>postfix : utilisateurs &#171;&#160;virtuels&#160;&#187; MySQL ; accès POP3[S], IMAP[S], SASL et TLS ; quota (bingo, j&#8217;ai tout mis dans le titre)</title>
		<link>http://michauko.org/blog/2009/10/20/postfix-utilisateurs-virtuels-mysql-acces-pop3s-imaps-sasl-et-tls-quota-bingo-jai-tout-mis-dans-le-titre/</link>
		<comments>http://michauko.org/blog/2009/10/20/postfix-utilisateurs-virtuels-mysql-acces-pop3s-imaps-sasl-et-tls-quota-bingo-jai-tout-mis-dans-le-titre/#comments</comments>
		<pubDate>Tue, 20 Oct 2009 14:48:16 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[mails]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[courier-authdaemon]]></category>
		<category><![CDATA[courier-imap]]></category>
		<category><![CDATA[courier-imap-ssl]]></category>
		<category><![CDATA[courier-pop]]></category>
		<category><![CDATA[courier-pop-ssl]]></category>
		<category><![CDATA[imap]]></category>
		<category><![CDATA[IMAPS]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[POP3]]></category>
		<category><![CDATA[POP3s]]></category>
		<category><![CDATA[postfix]]></category>
		<category><![CDATA[postfix-mysql]]></category>
		<category><![CDATA[SASL]]></category>
		<category><![CDATA[TLS]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=829</guid>
		<description><![CDATA[Introduction Hop, Après ma doc d&#8217;initiation Debian, où un rapide chapitre est consacré au montage d&#8217;un serveur postfix, spamassassin, greylisting etc, dans une configuration simple, Après cet article sur le montage complet cette fois, en incluant amavisd-new, anti-virus etc, => Voici le complément idéal, par exemple en PME (et même plus gros) : Gestion d&#8217;utilisateurs [...]]]></description>
			<content:encoded><![CDATA[<h1>Introduction</h1>
<p>Hop,<br />
Après <a href="http://michauko.org/docs/debian_testing/">ma doc d&#8217;initiation Debian</a>, où un rapide chapitre est consacré au montage d&#8217;un serveur postfix, spamassassin, greylisting etc, dans une configuration simple,<br />
Après <a href="http://michauko.org/blog/2009/09/21/montage-dun-serveur-de-mail-complet-postfix-postgrey-amavisd-new-clamav-spamassassin-etc/">cet article sur le montage complet cette fois</a>, en incluant amavisd-new, anti-virus etc,<br />
=> Voici le complément idéal, par exemple en PME  (et même plus gros) :</p>
<ul>
<li>
Gestion d&#8217;utilisateurs virtuels, entendez par là  &laquo;&nbsp;utilisateurs définis en base de données et non pas utilisateurs réels de l&#8217;OS&nbsp;&raquo;.
</li>
<li>Mise en place de tout ce qu&#8217;il faut pour lire les mails (POP3, POP3S, IMAP, IMAPS) via les outils &laquo;&nbsp;courier-*&nbsp;&raquo;
</li>
<li>Authentification via SASL
</li>
<li>Mise en place d&#8217;authentification sécurisée plus forte pour l&#8217;envoi (TLS).
</li>
</ul>
<p>Pour le webmail, j&#8217;en ai parlé déjà  quelques fois sur mon blog et dernièrement, la version 0.3 de roundcubemail a fait de gros progrès par rapport à  la 0.1. Ca s&#8217;installe en 3 clics. Si j&#8217;ai le temps je ferai un article, mais c&#8217;est mal barré.<span id="more-829"></span></p>
<h2>Situation de départ</h2>
<p>Avoir un serveur postfix correctement monté, avec (ou pas) amavis, spamassassin, un anti-virus, du greylisting, un nom correct etc. Bref, un serveur qui fonctionne et qui accepte les mails correspondant à  des Maildir d&#8217;utilisateur de l&#8217;OS. En gros, ce qui est <a href="http://michauko.org/blog/2009/09/21/montage-dun-serveur-de-mail-complet-postfix-postgrey-amavisd-new-clamav-spamassassin-etc/">expliqué là </a>.<br />
Je ne parlerai pas d&#8217;ouverture de ports réseaux etc, mais ça tombe sous le sens. Ni du fait qu&#8217;il vous faudra une base MySQL en état de marche.</p>
<p>Je n&#8217;ai pas trouvé de doc officielle sur le sujet. En gros, on a <code>postfix-mysql</code> qui permet de faire le lien entre le serveur de mails et la base, mais rien dans un gros fichier README qu&#8217;on a habituellement avec ce genre de paquet. Ou alors je l&#8217;ai loupé.<br />
Le &laquo;&nbsp;<em>postfix mysql howto</em>&nbsp;&raquo; est juste résumé à  ça : <a href="http://www.postfix.org/MYSQL_README.html">http://www.postfix.org/MYSQL_README.html</a> et ça : <a href="http://www.postfix.org/mysql_table.5.html">http://www.postfix.org/mysql_table.5.html</a>. Et pour le coup, ce n&#8217;est pas très sexy.</p>
<p>J&#8217;ai donc compilé tout un tas de différents articles le sujet, parfois incomplet, parfois des articles décrivant des méthodes à grand coup de compilation-c-est-pénible-et-stupide-pour-suivre-les-mises-à -jour etc. Parfois sans gestion de quota, parfois avec. Et en général, en expliquant rien du tout. Donc dans mon cas, je tâche d&#8217;expliquer ce qu&#8217;on fait.</p>
<p>Alors, comme à  mon habitude, je laisserai trainer 2/3 bugs que j&#8217;ai pu rencontrer (de ma faute), ça peut permettre d&#8217;aider si vous faites les mêmes erreurs. Et on y apprend l&#8217;existence de quelques outils pour tester en ligne de commande.</p>
<p><strong>Remarque pour la partie quota qui ne fonctionne pas nativement dans postfix</strong>, je la passe sous silence volontairement au début et y consacre un chapitre à  la fin. En effet, c&#8217;est relativement dissocié de tout le reste et ça implique de recompiler postfix (ou d&#8217;utiliser un .deb fourni par je ne sais qui, mais vous êtes dépendant de lui pour les mises à  jour). Comme certains se moqueront des quotas, je le traite à  la fin. Beaucoup de guides de mise en place mélangent tout et prévoient des fonctions qu&#8217;ils n&#8217;exploitent pas. J&#8217;essaye pour ma part de faire des briques dissociables.</p>
<p>J&#8217;ai aussi tout installé sur un unique serveur. Ce n&#8217;est pas une nécessité, sur une grosse installation par exemple.</p>
<h2>Autres documentations</h2>
<p>A ce propos, j&#8217;ai lu à  peu près tout ce qui suit (et plein d&#8217;autres) pour monter le serveur, notamment les 2 premiers lien. J&#8217;ai même en gros simplement repompé, traduit et expliqué :</p>
<ul>
<li>
<a href="http://library.linode.com/email-guides/postfix/postfix-courier-mysql-debian-5-lenny" target="_blank">http://library.linode.com/email-guides/postfix/postfix-courier-mysql-debian-5-lenny</a>
</li>
<li>
<a href="http://www.howtoforge.com/virtual-users-domains-postfix-courier-mysql-squirrelmail-debian-lenny" target="_blank">http://www.howtoforge.com/virtual-users-domains-postfix-courier-mysql-squirrelmail-debian-lenny</a>
</li>
<li>
Quelques survols de docs ici : <a href="http://www.postfix.org/docs.html" target="_blank">http://www.postfix.org/docs.html</a>
</li>
</li>
<li>Un psycho de la recompilation : <a href="http://www.phparchitecture.com/howto_show.php?id=2">http://www.phparchitecture.com/howto_show.php?id=2</a>, mais y&#8217;a 2/3 trucs à  prendre
</ul>
<h2>Grandes étapes de la procédure</h2>
<p>En gros, on va :</p>
<ul>
<li>
1) Installer les applicatifs,
</li>
<li>
Créer la structure en base,
</li>
<li>
Décrire cette structure à  postfix pour qu&#8217;il sache l&#8217;interroger
</li>
<li>
2) Créer ce qu&#8217;il faut pour stocker les boites virtuelles
</li>
<li>
Faire quelques tests de livraison de mails pour valider la partie &laquo;&nbsp;utilisateurs définis en base&nbsp;&raquo;
</li>
<li>
3) Paramétrer les outils pour récupérer les mails (courier-POP, IMAP et versions sécurisées par SSL)
</li>
<li>
Tester ces protocoles pour la récupération des mails
</li>
<li>
Voir l&#8217;analyse de quelques erreurs sur la partie &laquo;&nbsp;courier&nbsp;&raquo;
</li>
<li>
4) Paramétrer les mécanismes d&#8217;authentification pour l&#8217;envoi (SASL, TLS)
</li>
<li>
Tester l&#8217;envoi, en TLS ou pas
</li>
<li>
Voir l&#8217;analyse de quelques erreurs sur la partie authentification pour l&#8217;envoi
</li>
<li>
5) Optionnel : activer les quotas
</li>
<li>
Et enfin, voir ce que je n&#8217;ai pas traité
</li>
</ul>
<h1>Installation des paquets</h1>
<p>Pour une fois, tout ne descend pas par dépendance, car les différents modules d&#8217;authentification (identification via une base MySQL) ne sont pas obligatoires, donc pas de dépendance. Donc pour une fois il faut absolument tout copier-coller. Pour illustrer, installer <code>courier-authlib</code> n&#8217;amène pas forcément <code>courier-authlib-mysql</code>.</p>
<p>On a donc :</p>
<pre>
aptitude install postfix-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl postfix-tls  libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl courier-authdaemon courier-authlib-mysql</pre>
<p>Vous pouvez à  la limite zapper certains, comme le POP, si vous ne comptez pas l&#8217;utiliser. Notez que les webmails tapent en IMAP, si vous ne le saviez pas.</p>
<h1>Connexion postfix <-> MySQL</h1>
<h2>Création de la base de données</h2>
<p>J&#8217;ai vu des définitions de base hyper complète, pour désactiver le POP (ou je ne sais quoi d&#8217;autre) par utilisateur. Sachez qu&#8217;il sera toujours temps d&#8217;ajouter une colonne à  une table, de mettre des valeurs par défaut et d&#8217;ajouter une règle dans postfix pour prendre en compte une nouvelle fonctionnalité (c&#8217;est d&#8217;ailleurs ce qu&#8217;on fera pour les quotas de boîtes mails). Donc faisons simple au début.</p>
<p>On crée une base et un utilisateur dédié, avec des droits pas trop larges. Une fois connecté en root dans votre base (exemple : <code>mysql -u root -p</code>), on crée la base et donne des droits à cet utilisateur qu&#8217;on crée au passage :</p>
<pre>mysql> create database postfix;
Query OK, 1 row affected (0.00 sec)

mysql> grant select,insert,update,delete on postfix.* TO 'mail_adm'@'localhost' identified by 'monpassadmin';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)</pre>
<blockquote><p>ATTENTION : dans toute la suite, le nom de la base, le nom des tables, les identifiants etc sont à  modifier pour refléter votre installation. Attention à  ne pas copier-coller trop vite.</p></blockquote>
<p>Ensuite, dans la base &laquo;&nbsp;postfix&nbsp;&raquo;, on crée quelques tables :</p>
<pre>use postfix;

CREATE TABLE domains (
        domain varchar(50) NOT NULL,
        PRIMARY KEY (domain)
);
CREATE TABLE forwardings (
        source varchar(80) NOT NULL,
        destination TEXT NOT NULL,
        PRIMARY KEY (source)
);
CREATE TABLE users (
        email varchar(80) NOT NULL,
        password varchar(20) NOT NULL,
        PRIMARY KEY (email)
);
CREATE TABLE transport (
        domain varchar(128) NOT NULL default '',
        transport varchar(128) NOT NULL default '',
        UNIQUE KEY domain (domain)
);</pre>
<p>Ces 4 tables permettront, dans l&#8217;ordre, de :</p>
<ul>
<li>
définir la liste des domaines qu&#8217;on gère
</li>
<li>
créer des alias (renvoyer toto@domaine.fr vers tata@blabla.com + titi@blibli.com)
</li>
<li>
définir nos comptes et leurs propriétés
</li>
<li>
définir une table de transport, au besoin
</ul>
<h2>Création des requêtes pour savoir comment interroger ces tables</h2>
<p>Le principe est le suivant : on a créé des tables avec des noms de colonnes et de tables libres (on aurait pu tout changer), on doit donc indiquer à  postfix comment vérifier un mot de passe, voir s&#8217;il y a un forward etc. Pour chaque action, on a une directive dans <code>/etc/postfix/main.cf</code> et un fichier de conf décrivant la base et la requête.<br />
Le truc énorme, c&#8217;est qu&#8217;on pourrait ajouter n&#8217;importe quelle colonne (attribut) pour ajouter un test. Exemple stupide : le password est OK entre 8h et 20h, sinon impossible de relever ses mails.<br />
On ajouterait une colonne et une clause supplémentaire dans le WHERE, tenant compte de l&#8217;heure et d&#8217;horaires autorisés pour tel utilisateur.</p>
<p>Voici les 4 fichiers de conf pour les 4 tables précédement créées :<br />
Fichier <code>/etc/postfix/mysql-virtual_domains.cf</code> :</p>
<pre>user = mail_adm
password = monpassadmin
dbname = postfix
query = SELECT domain AS virtual FROM domains WHERE domain=&apos;%s&apos;
hosts = 127.0.0.1</pre>
<p>Fichier <code>/etc/postfix/mysql-virtual_forwardings.cf</code> :</p>
<pre>user = mail_adm
password = monpassadmin
dbname = postfix
query = SELECT destination FROM forwardings WHERE source=&apos;%s&apos;
hosts = 127.0.0.1</pre>
<p>Fichier <code>/etc/postfix/mysql-virtual_mailboxes.cf</code> :</p>
<pre>user = mail_adm
password = monpassadmin
dbname = postfix
query = SELECT CONCAT(SUBSTRING_INDEX(email,&apos;@&apos;,-1),&apos;/&apos;,SUBSTRING_INDEX(email,&apos;@&apos;,1),&apos;/&apos;)
        FROM users WHERE email=&apos;%s&apos;
hosts = 127.0.0.1</pre>
<p>Fichier <code>/etc/postfix/mysql-virtual_transports.cf</code> :</p>
<pre>user = mail_adm
password = monpassadmin
dbname = postfix
query = SELECT transport FROM transport WHERE domain=&apos;%s&apos;
hosts = 127.0.0.1</pre>
<p>Ensuite on sécurise ces fichiers qui contiennent des infos sensibles sur la base d&#8217;authentification de mails :</p>
<pre>chown root:postfix /etc/postfix/mysql*cf
chmod 640 /etc/postfix/mysql*cf</pre>
<h2>Création de la structure de stockage des boîtes</h2>
<p>Le principe est le suivant : on indique un répertoire racine, avec un utilisateur dédié sous lequel tout est stocké.<br />
On aura une belle arborescence de ce type :</p>
<pre>/ma/racine/des/maildirs/
        - /mon.domaine.fr/
                - user1
                        - cur
                        - new
                        - tmp
                        + .autre.sous.rep.de.maildir.genre.Sent
                + user2
        - /autre.domaine.a.moi.fr/
                + userX</pre>
<p>Donc, disons que que le répertoire racine de stockage des boîtes mails sera <code>/vmailboxes</code>. On crée l&#8217;utilisateur avec un ID arbitraire :</p>
<pre>groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /vmailboxes -m</pre>
<p>Attention, vous allez aussi recopier le contenu de /etc/skel dans /vmailboxes, le home de &laquo;&nbsp;vmail&nbsp;&raquo;. Ce n&#8217;est pas forcément utile. Adaptez au besoin.</p>
<h2>On indique tout ça à  postfix</h2>
<p>Dans un premier temps, je n&#8217;ajoute pas toute la conf dans <code>/etc/postfix/main.cf</code>. On va y aller progressivement vu ce qu&#8217;on vient d&#8217;installer. On ajoute donc :</p>
<pre>virtual_alias_domains =
virtual_alias_maps = hash:/etc/postfix/virtual,proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf
virtual_mailbox_base = /vmailboxes
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_create_maildirsize = yes
virtual_maildir_extended = yes
transport_maps = proxy:mysql:/etc/postfix/mysql-virtual_transports.cf
proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps \
             $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains \
             $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps \
             $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks
</pre>
<p>Les fichiers de conf MySQL en &laquo;&nbsp;mode proxy&nbsp;&raquo; (si on peut dire) permettent d&#8217;optimiser les accès en conservant en mémoire le contenu. Pratique pour éviter une tonne d&#8217;accès disque inutile.</p>
<p><em>N&#8217;oubliez pas de générer le fichier virtual.db, la &laquo;&nbsp;version base de données&nbsp;&raquo; associée au fichier &laquo;&nbsp;virtual&nbsp;&raquo;. Il vous sert à faire suivre par exemple certains comptes locaux vers d&#8217;autres adresses e-mails. Pour centraliser vos remontées de serveur autre part.</em></p>
<p>Rechargez postfix, ça devrait bien se passer. Allez voir dans <code>/var/log/mail.info</code> ou <code>syslog</code> sinon.<br />
On va pouvoir tester.</p>
<h2>Quelques tests de livraison de mails</h2>
<p>Pour créer une boîte, il faudra au minimum :</p>
<ul>
<li>
Avoir déclaré le domaine qu&#8217;on gère
</li>
<li>
Avoir déclaré le compte
</li>
<li>
Avoir envoyé un mail de bienvenue, localement, pour forcer la création de boîte (arborescence
</li>
<li>
Eventuellement avoir ajouté des sous-répertoires pour que le webmail (si vous en mettez un) soit content : Sent, Trash, Drafts, Junk.<br />
</il></ul>
<h3>Ajout d&#8217;un domaine</h3>
<p>Tout comme en postfix &laquo;&nbsp;normal&nbsp;&raquo;, on indique dans &laquo;&nbsp;mydestination&nbsp;&raquo; la liste des noms de domaines gérés, il faut ici les indiquer dans la base. Et les supprimer de &laquo;&nbsp;mydestination&nbsp;&raquo; si vous les gériez localement jusqu&#8217;alors. On crée simplement un enregistrement en base :</p>
<pre>INSERT INTO domains (domain) VALUES (&apos;mxtest.mondomaine.fr&apos;);</pre>
<p>(Je suppose que <code>mxtest.mondomaine.fr</code> existe et que l&#8217;enregistrement MX existe aussi et pointe vers notre serveur.</p>
<h3>Création d&#8217;un utilisateur</h3>
<p>Simplissime, dans la base aussi :</p>
<pre>INSERT INTO users (email, password) VALUES (&apos;jacques@mxtest.mondomaine.fr&apos;, ENCRYPT(&apos;mon_pass_en_clair&apos;));</pre>
<h3>Initialisation de sa boîte mail</h3>
<p>Connecté localement, par exemple, sur la machine, envoyez un mail en ligne de commande, avec mailx, mutt. Ce que vous voulez.<br />
Là , ô magie, vous devriez voir l&#8217;arborescence /vmailboxes se peupler, par exemple avec /vmailboxes/mxtest.mondomaine.fr/jacques/<br />
C&#8217;est une arborescence &laquo;&nbsp;Maildir&nbsp;&raquo; classique, avec <code>cur</code>, <code>new</code>, <code>tmp</code>.<br />
Si le mail est arrivé, on peut pour l&#8217;instant le lire en ligne de commande en allant dans le répertoire, tout bêtement.</p>
<h3>Création des autres sous-répertoires</h3>
<p>Dans cette procédure de création d&#8217;un compte, je suggère d&#8217;ajouter, pour le webmail, la création des répertoires habituels d&#8217;un compte en IMAP. Si vous ne comptez livrer que des boîtes récupérables en POP, ne vous cassez pas la tête, c&#8217;est inutile.<br />
Sinon :</p>
<pre>su - vmail
cd /vmailboxes/mxtest.mondomaine.fr/jacques
for i in Sent Trash Drafts Junk
do
        maildirmake .$i #le . est important
done</pre>
<p>Vous devriez voir les sous-répertoires .Sent, .Junk etc avec à  chaque fois le cur/tmp/new et des permissions restreintes à  l&#8217;utilisateur vmail.</p>
<p>Voilà , la boîte sait recevoir et postfix sait gérer nos comptes virtuels, pour livrer le courier dans les boîtes virtuelles.</p>
<h3>Abonnement aux répertoires IMAP ; pour le webmail ou la consultation IMAP</h3>
<p>Si besoin, pensez à inclure la création du fichier suivant dans votre procédure de création de boîte mail :</p>
<pre>mxtest:/vmailboxes/mxtest.mondomaine.fr/jacques# cat courierimapsubscribed
INBOX
INBOX.Sent
INBOX.Drafts
INBOX.Trash
INBOX.Junk</pre>
<h3>Annexe : création d&#8217;un alias</h3>
<p>Dans la table forwardings, à base de :</p>
<pre>INSERT INTO forwardings VALUES (&apos;mon_alias@bla.fr&apos;, &apos;dest1@toto.fr&apos;, &apos;dest2@tata.fr&apos;);</pre>
<p>Actif immédiatement. Pas plus compliqué que ça <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<h1>Partie lecture des mails, via &laquo;&nbsp;courier-*&nbsp;&raquo; utilisant MySQL pour l&#8217;authentification</h1>
<p>Ici, on voit créer les services POP, IMAP et leurs versions sécurisées. Le tout sur fond d&#8217;authentification des utilisateurs définis en base MySQL.</p>
<h2>Indiquer au &laquo;&nbsp;daemon&nbsp;&raquo; courier d&#8217;utiliser MySQL</h2>
<p>Simplement, dans <code>/etc/courier/authdaemonrc</code>, changer la liste des modules utilisés pour l&#8217;authentification :</p>
<pre>#authmodulelist="authpam"
authmodulelist="authmysql"</pre>
<p>Dans <code>/etc/courier/authmysqlrc</code>, il faut positionner les variables suivantes :<br />
MYSQL_SERVER localhost<br />
MYSQL_USERNAME mail_adm<br />
MYSQL_PASSWORD monpassadmin<br />
MYSQL_PORT 0<br />
MYSQL_DATABASE postfix<br />
MYSQL_USER_TABLE users<br />
MYSQL_CRYPT_PWFIELD password<br />
MYSQL_UID_FIELD 5000<br />
MYSQL_GID_FIELD 5000<br />
MYSQL_LOGIN_FIELD email<br />
MYSQL_HOME_FIELD &laquo;&nbsp;/vmailboxes&nbsp;&raquo;<br />
MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,&apos;@&apos;,-1),&#8217;/',SUBSTRING_INDEX(email,&apos;@&apos;,1),&#8217;/')<br />
#MYSQL_NAME_FIELD       name # NE PAS LAISSER CETTE VARIABLE, voir plus bas, cas d&#8217;erreur pour moi</p>
<p>Ici, bien évidemment, les valeurs indiquées reflètent les noms choisis en base.</p>
<h2>Générer les certificats pour le POP3S et IMAPS</h2>
<p>Cette partie est optionnelle, si vous ne voulez pas du POP3S et IMAPS. Dans ce cas vous pouvez aussi désinstaller <code>courier-*-ssl</code>.</p>
<p>On modifie les fichiers de conf de génération des certificats des daemon POP et IMAP sécurisés :</p>
<pre>mxtest:/etc/courier# cat pop3d.cnf

RANDFILE = /usr/lib/courier/pop3d.rand

[ req ]
default_bits = 1024
encrypt_key = yes
distinguished_name = req_dn
x509_extensions = cert_type
prompt = no

[ req_dn ]
C=FR
ST=France
L=PARIS
O=Courier Mail Server
OU=Automatically-generated POP3 SSL key
CN=mondomaine.fr
emailAddress=certif@mondomaine.fr

[ cert_type ]
nsCertType = server</pre>
<p>Et pour, l&#8217;IMAP :</p>
<pre>

mxtest:/etc/courier# cat imapd.cnf

RANDFILE = /usr/lib/courier/imapd.rand

[ req ]
default_bits = 1024
encrypt_key = yes
distinguished_name = req_dn
x509_extensions = cert_type
prompt = no

[ req_dn ]
C=FR
ST=France
L=PARIS
O=Courier Mail Server
OU=Automatically-generated IMAP SSL key
CN=mondomaine.fr
emailAddress=certif@mondomaine.fr

[ cert_type ]
nsCertType = server</pre>
<p>Et on génère les certificats à partir de ces modèles. Ca ne fait que connaître à l&#8217;avance certains paramètres :</p>
<pre>mxtest:/etc/courier# mkimapdcert
cp: not writing through dangling symlink `/usr/lib/courier/imapd.pem'
chmod: cannot operate on dangling symlink `/usr/lib/courier/imapd.pem'
chown: ne peut effectuer une déférence sur `/usr/lib/courier/imapd.pem': Aucun fichier ou répertoire de ce type
Generating a 1024 bit RSA private key
................++++++
....++++++
writing new private key to '/usr/lib/courier/imapd.pem'
-----
1024 semi-random bytes loaded
Generating DH parameters, 512 bit long safe prime, generator 2
This is going to take a long time
..............+.....................................................................................+..+.....................
.........+.............................+....+...+........+...................................................................
.............+..........+...........+..+...+..............................+....................+......................+......
........................+.....+.+......+..........................................................+..........................
.........................................................+...........+.........+.......................+.....................
..+..........++*++*++*++*++*++*
subject= /C=FR/ST=France/L=PARIS/O=Courier Mail Server/OU=Automatically-generated IMAP SSL 

key/CN=mondomaine.fr/emailAddress=certif@mondomaine.fr
notBefore=Oct  7 15:17:54 2009 GMT
notAfter=Oct  7 15:17:54 2010 GMT
SHA1 Fingerprint=9D:62:E6:CF:B7:39:80:C8:4E:F9:09:9C:61:36:14:8F:0B:EF:3C:6E
</pre>
<p>Et :</p>
<pre>
mxtest:/etc/courier# mkpop3dcert
cp: not writing through dangling symlink `/usr/lib/courier/pop3d.pem'
chmod: cannot operate on dangling symlink `/usr/lib/courier/pop3d.pem'
chown: ne peut effectuer une déférence sur `/usr/lib/courier/pop3d.pem': Aucun fichier ou répertoire de ce type
Generating a 1024 bit RSA private key
..++++++
..................++++++
writing new private key to '/usr/lib/courier/pop3d.pem'
-----
1024 semi-random bytes loaded
Generating DH parameters, 512 bit long safe prime, generator 2
This is going to take a long time
...............+..........................++*++*++*++*++*++*
subject= /C=FR/ST=France/L=PARIS/O=Courier Mail Server/OU=Automatically-generated POP3 SSL 

key/CN=mondomaine.fr/emailAddress=certif@mondomaine.fr
notBefore=Oct  7 15:18:10 2009 GMT
notAfter=Oct  7 15:18:10 2010 GMT
SHA1 Fingerprint=DD:8D:7C:0D:87:9D:19:9D:62:BE:5B:9A:B2:D8:43:80:CF:47:E2:14</pre>
<h2>Redémarrer tout ce bazar</h2>
<p>Ayé, tout est prêt, les certificats sont générés, on redémarre tout ce monde :</p>
<pre>/etc/init.d/courier-authdaemon restart
/etc/init.d/courier-imap restart
/etc/init.d/courier-imap-ssl restart
/etc/init.d/courier-pop restart
/etc/init.d/courier-pop-ssl restart</pre>
<h2>Tests pour l&#8217;envoi, quelques erreurs analysées</h2>
<p>Déjà , faites un telnet sur chaque port, 143, 993, 110, 995 pour voir si ça répond bien.<br />
Ensuite, testez chaque protocole. Par exemple avec Thunderbird. Sur un poste Windows, pensez à  la version &laquo;&nbsp;portable&nbsp;&raquo; qui n&#8217;interfèrera pas avec votre actuel Thunderbird. Sous Linux, vous pouvez jouer avec vos ~/.mozilla-thunderbird (j&#8217;ai plus le nom précis en tête) pour ne pas abîmer votre conf actuelle.</p>
<h2>Erreurs rencontrées</h2>
<p>Ces erreurs m&#8217;ont permis de découvrir la commande authtest pour faire des tests d&#8217;aut</p>
<h3>Oubli de package</h3>
<p>J&#8217;ai commencé par tester l&#8217;authentification IMAP en local (depuis un webmail, roundcube, installé sur la même machine). Ca ne passait pas. J&#8217;ai testé depuis Thunderbird, pareil (pas étonnant), mais cette fois ça a généré un message dans les logs, genre <code>syslog</code> ou <code>mail.info</code> je ne sais plus :</p>
<pre>Oct  8 16:10:32 ns305192 authdaemond: libauthmysql.so: cannot open shared object file: No such file or directory</pre>
<p>Oops, il manquait le package <code>courier-authlib-mysql</code>.<br />
Heureusement, ce ne sera pas votre cas, c&#8217;est bien écrit dans le <code>aptitude install</code> du début.</p>
<h3>Erreur sur MYSQL_NAME_FIELD</h3>
<p>Ensuite, j&#8217;ai eu le droit à une vraie erreur :</p>
<pre>Oct  8 16:53:56 serveur imapd: authentication error: Input/output error</pre>
<p>C&#8217;est l&#8217;occasion de mentionner la commande <code>authtest</code> (faites <code>man authtest</code>. Ca peut aider :</p>
<pre>authtest ducon@lajoie.fr monpasswd
Authentication FAILED: Input/output error</pre>
<p>Activez le debug dans <code>/etc/courier/authdaemonrc</code> avec DEBUG_LOGIN=1, redémarrez le service et allez voir les logs. Ca m&#8217;a permis de voir les erreurs SQL :</p>
<pre>Oct  8 18:39:21 ns305192 authdaemond: mysql_query failed, reconnecting: Unknown column 'name' in 'field list'</pre>
<p>En cherchant un peu, j&#8217;ai vu qu&#8217;il restait le champ MYSQL_NAME_FIELD dans <code>/etc/courier/authdaemonrc</code>. Une fois modifié, ça passe :</p>
<pre>mxtest:/etc/courier# !auth
authtest bla@bla.fr monpassword
Authentication succeeded.

     Authenticated: bla@bla.fr (uid 5000, gid 5000)
    Home Directory: /vmailboxes
           Maildir: mondomaine.fr/jacques/
             Quota: (none)
Encrypted Password: OXXXXgfT0lXjI
Cleartext Password: monpassword
           Options: (none)</pre>
<p>A ce moment là, tout marche pour la récupération, webmail aussi (puisque IMAP aussi).</p>
<h1>Partie authentification des utilisateurs, pour l&#8217;envoi</h1>
<p>Pour bien comprendre, on va activer 2 modes : SASL et TLS &#8211; encore que le mode TLS reste optionnel. Vous pourriez dans ce cas désinstaller les paquets concernés.<br />
Le premier (SASL) pour avoir un mécanisme d&#8217;authentification pour le SMTP &laquo;&nbsp;normal&nbsp;&raquo;, port 25.<br />
Le deuxième (TLS) pour avoir un mécanisme plus sécurisé, avec certificat etc, en TLS (anciennement SMTPS, ou SMTP avec SSL). C&#8217;est aussi sur le port 25 (pas 465), et, de ce que j&#8217;en ai compris, ça tend à  remplacer le SMTPS, sur port 465. <a href="http://postfix.traduc.org/index.php/TLS_README.html">C&#8217;est expliqué là </a> et j&#8217;ai peut-être un peu abrégé l&#8217;explication violemment.</p>
<h2>Paramétrage de toute la chaîne postfix/sasl/pam/mysql</h2>
<p>Pour ne pas se perdre, il faut comprendre que postfix va déléguer l&#8217;authentification à  une couche d&#8217;abstraction, SASL. On va dire à  SASL de se baser sur le mécanisme PAM (Pluggable Authentication Module) et on va dire à  PAM de contrôler les logins/passwords dans une base MySQL, en lui décrivant cette base. Pigé ?</p>
<h3>Dire à  SASL d&#8217;utiliser PAM pour l&#8217;authentification</h3>
<p>SASL est chrooté (je ne me souviens plus bien, mais c&#8217;est le boxon, j&#8217;ai dû en parler dans des <a href="http://michauko.org/blog/?s=sasl">posts précédents</a>)<br />
On crée son environnement de &laquo;&nbsp;chroot&nbsp;&raquo; :</p>
<pre>mkdir --parents /var/spool/postfix/var/run/saslauthd</pre>
<p>Ensuite, on paramètre le daemon SASL correctement :<br />
Positionner <code>START=yes</code> dans <code>/etc/default/saslauthd</code><br />
et modifier la fin du fichier comme suite :</p>
<pre>#OPTIONS="-c -m /var/run/saslauthd"
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"</pre>
<p>Le reste du fichier par défaut doit être bon (DESC=&nbsp;&raquo;SASL Authentication Daemon&nbsp;&raquo;, NAME=&nbsp;&raquo;saslauthd&nbsp;&raquo;, MECHANISMS=&nbsp;&raquo;pam&nbsp;&raquo;, MECH_OPTIONS=&nbsp;&raquo;", THREADS=5).</p>
<p>Vous pourrez voir au passage qu&#8217;on indique (via le paramètre MECHANISMS) à  SASL d&#8217;utiliser PAM.<br />
Maintenant, on va dire à PAM d&#8217;utiliser MySQL.</p>
<h3>Demander à  PAM d&#8217;utiliser MySQL en décrivant notre structure</h3>
<p>Dans <code>/etc/pam.d/smtp</code> (à  créer je crois), on indique qu&#8217;on va utiliser le module MySQL pour PAM :</p>
<pre>
mxtest:/etc/pam.d# cat smtp
auth    required   pam_mysql.so user=mail_adm passwd=monpassadmin host=127.0.0.1 db=postfix table=users usercolumn=email passwdcolumn=password crypt=1
account sufficient pam_mysql.so user=mail_adm passwd=monpassadmin host=127.0.0.1 db=postfix table=users usercolumn=email passwdcolumn=password crypt=1
</pre>
<h3>Ensuite, dire à  postfix de faire confiance à  SASL pour l&#8217;authentification</h3>
<p>Maintenant que SASL sait faire le boulot en base de données, on configure postfix pour authentifier les utilisateurs via SASL/PAM/MYSQL.<br />
Dans <code>/etc/postfix/sasl/</code>, s&#8217;assurer du contenu de <code>smtpd.conf</code> :</p>
<pre>pwcheck_method: saslauthd
mech_list: plain login
allow_plaintext: true
auxprop_plugin: mysql
sql_hostnames: 127.0.0.1
sql_user: mail_adm
sql_passwd: monpassadmin
sql_database: postfix
sql_select: select password from users where email = &apos;%u&apos;</pre>
<p>Ajoutez l&#8217;utilisateur postfix au groupe sasl :</p>
<pre>adduser postfix sasl</pre>
<p>Enfin, expliquer à  postfix de bien vouloir relayer les envois d&#8217;utilisateurs authentifiés via SASL. Ce qui donne par exemple dans <code>/etc/postfix/main.cf</code> :</p>
<pre>smtpd_sender_restrictions = permit_sasl_authenticated
        reject_unauth_pipelining
        permit_mynetworks
        reject_unauth_destination
        reject_unknown_sender_domain
        reject_non_fqdn_sender
        check_policy_service inet:127.0.0.1:60000</pre>
<p>C&#8217;est surtout le &laquo;&nbsp;permit_sasl_authenticated&nbsp;&raquo; qui nous intéresse là.<br />
Voilà, postfix sait maintenant contrôler les expéditeurs avec l&#8217;aide de SASL. Ils doivent se signer et exister dans la base.<br />
Maintenant on met en place le TLS, si vous voulez utiliser du vrai cryptage SSL pour l&#8217;authentification.</p>
<h2>TLS : certificat et configuration</h3>
<p>Dans <code>/etc/postfix/</code>,on crée les clefs de cryptage :</p>
<pre>mxtest:/etc/postfix# openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 3650 -x509
Generating a 2048 bit RSA private key
................................................+++
................................................+++
writing new private key to 'smtpd.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:FR
State or Province Name (full name) [Some-State]:France
Locality Name (eg, city) []:PARIS
Organization Name (eg, company) [Internet Widgits Pty Ltd]:MASOCIETE
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:mondomaine.fr
Email Address []:certif@mondomaine.fr</pre>
<p><strong>IMPORTANT </strong>: le &laquo;&nbsp;Common Name&nbsp;&raquo; doit correspondonre à  votre <code>/etc/mailname</code><br />
Protégez la clef privée : <code>chmod 640 smtpd.key</code><br />
J&#8217;ai mis 10 ans, on aurait pu mettre plus ou moins, c&#8217;est le paramètre 3650 dans la ligne de commande.</p>
<p>On ajoute pour finir la conf suivante pour activer le TLS et indiquer le certificat à  utiliser. Dans <code>/etc/postfix/main.cf</code> toujours :</p>
<pre>smtpd_tls_cert_file=/etc/postfix/smtpd.cert
smtpd_tls_key_file=/etc/postfix/smtpd.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes # à  voir, ça peut interdire certains outlook buggés, je crois, de tête.
smtpd_sasl_authenticated_header = yes
</pre>
<h2>C&#8217;est fini, on relance tout ça</h2>
<p>Redémarrez postfix et saslauthd via les <code>/etc/init.d/saslauthd restart</code> et <code>/etc/init.d/postfix restart</code> qui vont bien.</p>
<h2>Tests pour l&#8217;envoi, quelques erreurs analysées</h2>
<p>Après un rapide telnet sur le port 25 (quand même), testez avec un &laquo;&nbsp;ehlo mailhost&nbsp;&raquo; puor voir si le TLS est activé :</p>
<pre>250-STARTTLS</pre>
<p>Ensuite, comme pour la réception des mails, testez avec un client mail correct, en mode SMTP normal et avec TLS.</p>
<h2>Erreurs rencontrées</h2>
<h3>Fausse manip dans /etc/pam.d/smtp</h3>
<p>Tous les tests SMTP, avec et sans TLS étaient KO. Dans les logs, simplement ça :</p>
<pre>Oct 14 13:52:39 ns305192 postfix/smtpd[6759]: connect from bla.fr[81.Y.67.X]
Oct 14 13:52:41 ns305192 postfix/smtpd[6759]: warning: SASL authentication failure: Password verification failed
Oct 14 13:52:41 ns305192 postfix/smtpd[6759]: warning: bla.fr[81.Y.67.X]: SASL PLAIN authentication failed: authentication failure
Oct 14 13:52:41 ns305192 postfix/smtpd[6759]: warning: bla.fr[81.Y.67.X]: SASL LOGIN authentication failed: authentication failure
Oct 14 13:52:43 ns305192 postfix/smtpd[6759]: disconnect from bla.fr[81.Y.67.X]</pre>
<p>Je me souviens avoir utilisé <code>saslfinger</code> pour tester et debugger. Essayez-le.<br />
Au final, je m&#8217;étais simplement trompé dans le mot de passe MySQL du fichier <code>/etc/pam.d/smtp</code></p>
<h1>Quotas</h1>
<p>Sujet totalement optionnel. J&#8217;ai besoin dans mon cas de pouvoir affecter des quotas par utilisateur.<br />
Postfix ne gère pas les quotas nativement, il faut appliquer un patch. Donc recompiler. Ou trouver une source, mais au niveau mise à jour de sécurité, vous dépendez alors du type qui maintient le dépôt.<br />
J&#8217;ai préféré appliquer moi-même le patch.<br />
Le patch est donné par ce projet : <a href="http://vda.sourceforge.net">http://vda.sourceforge.net</a>. Il est disponible pour toutes les versions postfix, notamment la 2.5.5, actuellement celle de Debian/Lenny. 32 ou 64 bits.</p>
<h2>Ajout du dépôt de sources</h2>
<p>D&#8217;abord, dans mon cas, j&#8217;ajoute un dépôt de sources, via la ligne suivante dans <code>/etc/apt/sources.list</code> :</p>
<pre>deb-src ftp://ftp2.fr.debian.org/debian/ lenny main</pre>
<p>Après un <code>aptitude update</code>, on va télécharger les sources et tout le bazar pour compiler.</p>
<h2>Récupération des sources</h2>
<pre>serv:/etc/postfix# apt-get build-dep postfix
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
Les NOUVEAUX paquets suivants seront installés :
  build-essential comerr-dev debhelper dpkg-dev g++ g++-4.3 gettext hardening-wrapper html2text intltool-debian libcdb-dev libcdb1 libdb-dev libdb4.6-dev libfile-remove-perl
  libkadm55 libkrb5-dev libldap2-dev libmail-box-perl libmail-sendmail-perl libmime-types-perl libmysqlclient15-dev libobject-realize-later-perl libpcre3-dev libpcrecpp0
  libpq-dev libsasl2-dev libssl-dev libstdc++6-4.3-dev libuser-identity-perl lsb-release po-debconf tinycdb zlib1g-dev
0 mis à jour, 34 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de prendre 22,7Mo dans les archives.
Après cette opération, 69,1Mo d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer [O/n] ?</pre>
<p>Ensuite, on récupère les sources de postfix :</p>
<pre>serv:/etc/postfix# cd /usr/src
serv:/usr/src# apt-get source postfix</pre>
<p>Ca download et décompresse (et gueule car je n&#8217;ai pas mis la clef GPG blablabla pour vérifier la signature du paquet, tout ça).</p>
<h2>Récupération du patch, compilation</h2>
<p>On récupère le patch qui va bien pour notre version postfix et on génère les .deb</p>
<pre>cd /usr/src
wget http://vda.sourceforge.net/VDA/postfix-2.5.5-vda-ng.patch.gz
gunzip postfix-2.5.5-vda-ng.patch.gz
cd postfix-2.5.5
patch -p1 < ../postfix-2.5.5-vda-ng.patch
dpkg-buildpackage</pre>
<h2>Remplacement du postfix officiel</h2>
<p>Une fois placé dans /usr/src, un simple <code>dpkg -i postfix_2.5.5-1.1_i386.deb postfix-mysql_2.5.5-1.1_i386.deb</code> suffit à remplacer postfix et son extension mysql. Ca ne flingue même pas la conf actuelle. Bref, nickel.</p>
<h2>On ajoute le champ quota, on indique à postfix et courierauth</h2>
<p>Dans la base de données, on ajoute la colonne. J'ai choisi 20 Mo par défaut.</p>
<pre>mysql> alter table users add quota bigint (20) default '20971520' after password;
Query OK, 1 row affected (0.10 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> desc users;
+----------+-------------+------+-----+----------+-------+
| Field    | Type        | Null | Key | Default  | Extra |
+----------+-------------+------+-----+----------+-------+
| email    | varchar(80) | NO   | PRI | NULL     |       |
| password | varchar(20) | NO   |     | NULL     |       |
| quota    | bigint(20)  | YES  |     | 20971520 |       |
+----------+-------------+------+-----+----------+-------+
3 rows in set (0.00 sec)</pre>
<p>Le alter s'est occupé de mettre la valeur par défaut sur les comptes existants</p>
<p>On crée alors la requête qui vérifie les quotas :</p>
<pre>mxtest:~# cat /etc/postfix/mysql-virtual_mailbox_limit_maps.cf
user = mail_adm
password = monpassadmin
dbname = postfix
query = SELECT quota FROM users WHERE email=&apos;%s&apos;
hosts = 127.0.0.1</pre>
<p>Pensez à priver l'accès à ce fichier.</p>
<p>Et on ajoute cette notion de limite dans notre postfix-qui-sait-gérer-les-quotas, dans <code>/etc/postfix/main.fr</code> :</p>
<pre>virtual_mailbox_limit_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = "The user you are trying to reach is over quota - L'utilisateur que vous cherchez a contacter a depasse son quota de mails"
virtual_overquota_bounce = yes</pre>
<p>Sans oublier d'ajouter "<code>$virtual_mailbox_limit_maps</code>" dans la variable "<code>proxy_read_maps</code>".</p>
<h2>Indication des quotas à "courier"</h2>
<p>On précise à courier qu'il y a des quotas en créant ou décommentant la variable suivante :</p>
<pre>mxtest:~# grep quota /etc/courier/authmysqlrc
MYSQL_QUOTA_FIELD       quota</pre>
<p>On recharge le tout, on teste, on se congratule. Youpi, c'est fini.</p>
<h1>Ce que je n'ai pas traité</h1>
<h2>j'ai pas joué avec les transports</h2>
<p>Pas besoin dans mon cas.</p>
<h2>Avoir un procmailrc par utilisateur ?</h2>
<p>Aucune idée, je verrai plus tard.<br />
En effet, où doit-on stocker le .procmailrc ??? ou alors faire un /etc/procmailrc général qui éventuellement trie par destinataire... lourd.</p>
<h2>Désactivation de protocole par utilisateur</h2>
<p>Exemple, besoin de désactiver le webmail ou le POP pour un utilisateur ? A priori, avec les "critères supplémentaires" que l'on peut passer dans les fichiers .cf de description de requêtes, ça doit être jouable. Je n'ai pas cherché car pas encore eu besoin.<br />
Evidemment, il faudra ajouter une/des colonne dans la table, sûrement un booléen indiquant si le protocole est accepté pour l'utilisateur X.</p>
<h2>Alerte sur les dépassements de quota</h2>
<p>Pas eu encore le temps, mais il faudra y penser pour détecter les boulets qui ont des boîtes pleines et ne comprennent pas pourquoi ils ne reçoivent rien.<br />
Je n'ai pas encore regardé : chapitre 11 <a href="http://www.howtoforge.com/virtual-users-domains-postfix-courier-mysql-squirrelmail-debian-lenny-p3" target="_blank">dans cette page</a>.<br />
Voilà, j'espère que ça roulera pour votre installation et que vous aurez ainsi une belle plateforme de mails.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2009/10/20/postfix-utilisateurs-virtuels-mysql-acces-pop3s-imaps-sasl-et-tls-quota-bingo-jai-tout-mis-dans-le-titre/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
	</channel>
</rss>

