<?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; mails</title>
	<atom:link href="http://michauko.org/blog/category/mails/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>Mon, 16 Apr 2012 10:10:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Ralentir le débit de postfix pour wanadoo/orange</title>
		<link>http://michauko.org/blog/2011/11/29/ralentir-le-debit-de-postfix-pour-wanadooorange/</link>
		<comments>http://michauko.org/blog/2011/11/29/ralentir-le-debit-de-postfix-pour-wanadooorange/#comments</comments>
		<pubDate>Tue, 29 Nov 2011 11:45:03 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[mails]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[check_postqueue.sh]]></category>
		<category><![CDATA[master.cf]]></category>
		<category><![CDATA[nagios]]></category>
		<category><![CDATA[orange]]></category>
		<category><![CDATA[postfix]]></category>
		<category><![CDATA[transport]]></category>
		<category><![CDATA[wanadoo]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=1302</guid>
		<description><![CDATA[Si vous avez un serveur d&#8217;envoi de mails (je ne parle pas d&#8217;être un spammeur) et beaucoup d&#8217;abonnés chez Wanadoo et Orange, vous risquez fort le rejet temporaire de votre serveur si le débit d&#8217;envoi est trop fort. C&#8217;est ce qui m&#8217;est arrivé et hop, 5000 mails entassés dans la file de postfix. On peut [...]]]></description>
			<content:encoded><![CDATA[<p>Si vous avez un serveur d&#8217;envoi de mails (je ne parle pas d&#8217;être un spammeur) et beaucoup d&#8217;abonnés chez Wanadoo et Orange, vous risquez fort le rejet temporaire de votre serveur si le débit d&#8217;envoi est trop fort.<br />
C&#8217;est ce qui m&#8217;est arrivé et hop, 5000 mails entassés dans la file de postfix.</p>
<p>On peut donc créer une file spéciale dans le master.cf de postfix et une règle de transport pour ces domaines, avec un débit réduit. Du moment où j&#8217;ai rechargé la configuration postfix et relancer le traitement de la file, magie, en 1 heure, les 5000 mails étaient distribués.</p>
<p>Pour ce faire, j&#8217;ai utilisé les documentations suivantes et adapté au contexte &laquo;&nbsp;configuration postfix définie dans MySQL&nbsp;&raquo;, comme expliqué dans <a href="http://michauko.org/blog/?s=postfix+mysql" title="mes articles précédents" target="_blank">mes articles précédents</a>, toujours d&#8217;actualité.<span id="more-1302"></span></p>
<ul>
<li><a href="http://linuxnet.ca/postfix/dedicated_transport.html" target="_blank">http://linuxnet.ca/postfix/dedicated_transport.html</a></li>
<li><a href="http://www.zapoyok.info/2011/01/01/orangewanadoo-et-%C2%AB-too-many-connections-slow-down-ofr004_104-104-%C2%BB/" target="_blank">http://www.zapoyok.info/2011/01/01/orangewanadoo-et-%C2%AB-too-many-connections-slow-down-ofr004_104-104-%C2%BB/</a></li>
</ul>
<h2>Dans master.cf</h2>
<blockquote><p>slow    unix    &#8211;       &#8211;       n       &#8211;       5       smtp<br />
  -o syslog_name=postfix-slow<br />
  -o smtp_destination_concurrency_limit=3<br />
  -o slow_destination_rate_delay=1
</p></blockquote>
<h2>Dans main.cf</h2>
<blockquote><p>slow_destination_recipient_limit = 20<br />
slow_destination_concurrency_limit = 2
</p></blockquote>
<h2>Dans la table &laquo;&nbsp;transport&nbsp;&raquo; niveau MySQL</h2>
<p>Sur une conf &laquo;&nbsp;non SQL&nbsp;&raquo;, il suffirait de jouer avec le fichier de transport, sans oublier le &laquo;&nbsp;postmap&nbsp;&raquo; qui va bien.<br />
Dans mon cas, le fichier de transport est défini comme ceci : <code>transport_maps = proxy:mysql:/etc/postfix/mysql-virtual_transports.cf</code>.<br />
Donc, pour ajouter une route particulière pour ces 4 domaines, on ajoute en base :</p>
<blockquote><p>INSERT INTO `transport` (domain, transport)<br />
VALUES (&#8216;wanadoo.fr&#8217;,'slow&#8217;),<br />
VALUES (&#8216;wanadoo.com&#8217;,'slow&#8217;),<br />
VALUES (&#8216;orange.fr&#8217;,'slow&#8217;),<br />
VALUES (&#8216;orange.com&#8217;,'slow&#8217;)<br />
;</p></blockquote>
<p>Enfin, on relance postfix et la file d&#8217;attente avec ses X messages bloqués avec un <code>postqueue -f</code>.</p>
<h2>Monitoring de la file d&#8217;attente sous Nagios</h2>
<p>Du coup, j&#8217;ai trouvé qu&#8217;il me manquait une surveillance de la file d&#8217;attente &laquo;&nbsp;postqueue&nbsp;&raquo; d&#8217;un serveur via Nagios. Je signale simplement ce script (<a href="http://exchange.nagios.org/directory/Plugins/Email-and-Groupware/Postfix/check_postqueue-2Esh/details" title="http://exchange.nagios.org/directory/Plugins/Email-and-Groupware/Postfix/check_postqueue-2Esh/details" target="_blank">http://exchange.nagios.org/directory/Plugins/Email-and-Groupware/Postfix/check_postqueue-2Esh/details</a>)<br />
Il semble faire le boulot simplement.<br />
A rapprocher de <a href="http://michauko.org/blog/2010/01/06/nrpe-monitorer-des-linux-avec-nagios/" target="_blank">ce document</a> si l&#8217;ajout d&#8217;un contrôle via NRPE ne vous est pas familier.</p>
<p>Et voilà.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2011/11/29/ralentir-le-debit-de-postfix-pour-wanadooorange/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>mailing-lists multi-domaine avec mailman sur un postfix &#171;&#160;virtuel&#160;&#187; (mysql)</title>
		<link>http://michauko.org/blog/2011/06/10/mailing-lists-multi-domaine-avec-mailman-sur-un-postfix-virtuel-mysql/</link>
		<comments>http://michauko.org/blog/2011/06/10/mailing-lists-multi-domaine-avec-mailman-sur-un-postfix-virtuel-mysql/#comments</comments>
		<pubDate>Fri, 10 Jun 2011 13:43:54 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[mails]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[add_members]]></category>
		<category><![CDATA[list_lists]]></category>
		<category><![CDATA[mailman]]></category>
		<category><![CDATA[newlist]]></category>
		<category><![CDATA[postfix]]></category>
		<category><![CDATA[postfix-mysql]]></category>
		<category><![CDATA[rmlist]]></category>
		<category><![CDATA[sympa]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=1210</guid>
		<description><![CDATA[Nouvel article pour compléter tous ceux sur l&#8217;installation d&#8217;un serveur de mails bien complet (voir ces tags). Cette fois il s&#8217;agit d&#8217;ajouter un outil de gestion de mailing-lists avec inscription, désinscription, modération etc. Bref, au choix, je pensais à &#171;&#160;sympa&#160;&#187; (dont j&#8217;ai déjà un peu parlé) ou mailman, que je ne connaissais pas. &#171;&#160;sympa&#160;&#187; en [...]]]></description>
			<content:encoded><![CDATA[<p>Nouvel article pour compléter tous ceux sur l&#8217;installation d&#8217;un serveur de mails bien complet (voir <a href="http://michauko.org/blog/?s=virtuel+postfix" target="_blank">ces tags</a>).<br />
Cette fois il s&#8217;agit d&#8217;ajouter un outil de gestion de mailing-lists avec inscription, désinscription, modération etc.<br />
Bref, au choix, je pensais à &laquo;&nbsp;sympa&nbsp;&raquo; (<a href="http://michauko.org/blog/tag/sympa/" target="_blank">dont j&#8217;ai déjà un peu parlé</a>) ou mailman, que je ne connaissais pas.</p>
<ul>
<li>
&laquo;&nbsp;sympa&nbsp;&raquo; en mode multi-domaine, arrêtez-moi si je me trompe, sur une installation postfix &laquo;&nbsp;virtuelle&nbsp;&raquo; (utilisateurs en base MySQL), c&#8217;était loin d&#8217;être gagné. Mal documenté à mon goût sur la partie multi-domaine.
</li>
<li>
&laquo;&nbsp;mailman&nbsp;&raquo; semblait pouvoir faire tout ça, avec une interface web (et ligne de commande) assez ancestrale, mais suffisante, efficace et qui marche <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
</li>
</ul>
<p>Deux points de détails à bien regarder, qui m&#8217;ont fait faire cet article afin de ne pas oublier tout ça et que ça puisse resservir :</p>
<ul>
<li>
l&#8217;interconnexion de mailman avec la partie Mysql de postfix
</li>
<li>
le multi-domaine, afin de pouvoir gérer des listes genre liste1@domaine1.fr et liste2@domaine2.com, ces 2 domaines étant hébergés sur la même machine, la même installation postfix
</li>
</ul>
<p>Allez hop, c&#8217;est parti pour l&#8217;installation et les détails de configuration.<br />
Voyez d&#8217;abord mes articles sur l&#8217;installation complète <a href="http://michauko.org/blog/?s=postfix" target="_blank">postfix/mysql/amavis/spamassassin</a>/etc histoire de situer de quoi je parle.<span id="more-1210"></span></p>
<h1>Contexte</h1>
<p>On installe ça sur une Debian Squeeze, appelée &laquo;&nbsp;monserveur.fr&nbsp;&raquo; ayant plusieurs noms de domaine : &laquo;&nbsp;serveur.fr&nbsp;&raquo; et aussi &laquo;&nbsp;autredomaine.fr&nbsp;&raquo;<br />
On voudra créer des mailing-lists sur l&#8217;un ou l&#8217;autre des domaines.</p>
<h1>Installation</h1>
<h2>aptitude</h2>
<p>J&#8217;ai préféré opter pour la version packagée plutôt que la dernière version officielle en .tar.gz, histoire de simplifier les migrations de Debian. Ca commence comme bien souvent :</p>
<pre>monserveur:~# aptitude install mailman
Les NOUVEAUX paquets suivants vont être installés :
  mailman
0 paquets mis e jour, 1 nouvellement installés, 0 e enlever et 0 non mis e jour.
Il est nécessaire de télécharger 9 642 ko d'archives. Après dépaquetage, 44,3 Mo seront utilisés.
Prendre : 1 ftp://ftp.fr.debian.org/debian/ squeeze/main mailman amd64 1:2.1.13-5 [9 642 kB]
 9 642 ko téléchargés en 1s (8 576 ko/s)
Lecture des champs des paquets... Fait
Lecture de l'état des paquets... Fait
Récupération des rapports de bogue... Fait
Analyse des informations Trouvé/Corrigé... Fait
Bogues de gravité serious sur mailman (-> 1:2.1.13-5) <non corrigé>
 #611804 - Astonishing header mangling
Résumé :
 mailman(1 bogue)
Êtes-vous certain de vouloir installer/mettre e jour les paquets ci-dessus ? [Y/n/?/...]
Préconfiguration des paquets...
Sélection du paquet mailman précédemment désélectionné.
(Lecture de la base de données... 57308 fichiers et répertoires déje installés.)
Dépaquetage de mailman (e partir de .../mailman_1%3a2.1.13-5_amd64.deb) ...
Traitement des actions différées (« triggers ») pour « man-db »...
Paramétrage de mailman (1:2.1.13-5) ...
Looking for enabled languages (this may take some time) ... done.
Installing site language en ............................................ done.
Configuring mailman for domain monserveur.fr ...
Mise e jour de la version 0x0 vers 0x2010df0
suppression des anciens fichiers sources
Mise e jour de la liste de diffusion mailman
Mise e jour de la base de donnees des requetes en attente.
- mise e jour de l'ancien fichier mbox prive
Rien e faire.
- Mise e jour de l'ancien fichier mbox public
Rien e faire.
Reparation des modeles de langue : mailman

Mise e jour des filigranes Usenet
- rien e mettre e jour ici
Rien e faire.
mise e jour des anciens fichiers qfiles
Starting Mailman master qrunner: mailmanctl.</pre>
<p>Un seul écran à noter :</p>
<pre>
Pas de liste du site                                                                                                                                                      ¦
  ¦                                                                                                                                                                           ¦
  ¦ Mailman a besoin d'une liste du site (« site list »). Elle permet d'envoyer les rappels pour les mots de passe, etc. Elle doit être créée avant le lancement de Mailman.  ¦
  ¦                                                                                                                                                                           ¦
  ¦ Pour créer cette liste, exécuter « newlist mailman » et suivez les instructions qui apparaissent e l'écran. Il est ensuite nécessaire de redémarrer mailman avec la       ¦
  ¦ commande « /etc/init.d/mailman start ».</pre>
<p>L&#8217;installation créera cette liste de diffusion appelée &laquo;&nbsp;mailman&nbsp;&raquo; (et j&#8217;avoue que je ne comprends pas son utilité&#8230;)</p>
<h2>permissions</h2>
<p>Il faut vérifier/adapter les permissions qui ne semblent pas bonnes après installation :</p>
<pre>monserveur:~# check_perms
Les repertoires doivent etre au moins en 02775 : /var/lib/mailman/logs
Mauvais gid pour /var/lib/mailman/cgi-bin (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/locks (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/scripts (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/mail (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/Mailman (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/cron (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/templates (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/logs (Obtenu: root, Attendu list)
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages
Mauvais gid pour /var/lib/mailman/icons (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/bin (Obtenu: root, Attendu list)
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/gl
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/pt
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ko
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ro
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/it
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ca
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/cs
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/vi
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/he
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ia
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/eu
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/de
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ar
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/zh_TW
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ru
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/zh_CN
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/uk
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/pt_BR
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/sv
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/fi
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/da
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/sr
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/tr
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/et
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ja
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/fr
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/lt
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/hr
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ast
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/nl
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/sl
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/hu
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/sk
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/es
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/no
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/pl
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/gl/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/pt/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ko/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ro/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/it/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ca/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/cs/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/vi/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/he/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ia/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/eu/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/de/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ar/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/zh_TW/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ru/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/zh_CN/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/uk/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/pt_BR/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/sv/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/fi/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/da/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/sr/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/tr/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/et/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ja/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/fr/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/lt/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/hr/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/ast/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/nl/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/sl/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/hu/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/sk/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/es/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/no/LC_MESSAGES
Les permissions sur les repertoires doivent etre de 02775 : /var/lib/mailman/messages/pl/LC_MESSAGES
Problemes trouves : 84
Re-executer en tant que list (ou root) avec l'option -f pour reparer</pre>
<p>On execute la même commande avec le paramètre <code>-f</code> et on recontrôle :</p>
<pre>Mauvais gid pour /var/lib/mailman/cgi-bin (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/locks (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/scripts (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/mail (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/Mailman (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/cron (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/templates (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/logs (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/icons (Obtenu: root, Attendu list)
Mauvais gid pour /var/lib/mailman/bin (Obtenu: root, Attendu list)
Problemes trouves : 10</pre>
<p>MAIS : il s&#8217;agit de liens symboliques et l&#8217;outil contrôle les permissions des liens, pas des fichiers visés. Bref, c&#8217;est bon.</p>
<h2>Conf mailman</h2>
<p><em>Une partie de la doc d&#8217;installaiton est dans <code>/usr/lib/mailman/bin/postfix-to-mailman.py</code> qui est un lien vers <code>/etc/mailman/postfix-to-mailman.py</code>. Attention, cette doc doit être transposée au contexte &laquo;&nbsp;serveur virtuel avec conf en MySQL&nbsp;&raquo; &#8211; ce que je fais dans cet article.<br />
</em><br />
Dans <code>/etc/mailman/mm_cfg.py</code>, j&#8217;adapte ces paramètres là :<br />
DEFAULT_SERVER_LANGUAGE = &#8216;fr&#8217;<br />
MTA=&#8217;Postfix&#8217;</p>
<h2>Codes d&#8217;accès à mailman</h2>
<p>Remarque :<br />
<em>&laquo;&nbsp;mailman&nbsp;&raquo; peut s&#8217;utiliser en ligne de commande, voir la liste des commandes possibles (éventuellement pratique pour scripter) : <code>dpkg -L mailman | grep bin</code>. Ca permet de découvrir la liste des outils : rmlist, list_lists, add_members, newlist etc&#8230;<br />
</em><br />
L&#8217;accès à l&#8217;interface mailman ne se fait pas avec un identifiant et un mot de passe, mais juste avec un mot de passe.<br />
Pour créer des &laquo;&nbsp;comptes&nbsp;&raquo; de la sorte, c&#8217;est l&#8217;outil <code>mmsitepass</code>.</p>
<h2>Conf apache</h2>
<p>Par défaut, le script mailman d&#8217;interface web est accessible sur <code>http://votre.serveur/cgi-bin/mailman/admin/</code>. Si vous n&#8217;aimez pas les répertoires standards, vous pouvez adapter le fichier <code>/etc/mailman/apache.conf</code> en adaptant <code>/cgi-bin/mailman/</code> et <code>/pipermail/</code> et en conséquence le fichier <code>/etc/mailman/postfix-to-mailman.py</code>, paramètres <code>DEFAULT_URL_PATTERN</code> et <code>PRIVATE_ARCHIVE_URL</code>.</p>
<h1>Configuration postfix</h1>
<h2>&laquo;&nbsp;pipe&nbsp;&raquo; postfix : interface postfix <-> binaires mailman</h2>
<p>En fait, tout est déjà OK à la base &#8211; avant même l&#8217;installation de mailman !. C&#8217;est marrant ça, l&#8217;outil doit être bien ancré dans le monde UNIX&#8230;</p>
<pre>monserveur:~# grep mailman /etc/postfix/*
/etc/postfix/master.cf:mailman   unix  -       n       n       -       -       pipe
/etc/postfix/master.cf:  flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py</pre>
<p>On voir qu&#8217;on a un canal de communication &laquo;&nbsp;mailman&nbsp;&raquo; qui renvoie vers un script python qui fera le boulot</p>
<h2>transport : interface postfix <-> &laquo;&nbsp;pipe&nbsp;&raquo;</h2>
<p>Dans ma table &laquo;&nbsp;transport&nbsp;&raquo; (voir <a href="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/" target="_blank">cet article</a>), j&#8217;ajoute :</p>
<pre>insert into transport values ('list.serveur.fr','mailman'),('list.autredomaine.fr','mailman');</pre>
<p>Ceci prépare le terrain : si on écrit à une adresse @list.serveur.fr ou @list.autredomaine.fr (comme je disais au début de la doc), alors postfix passera le relai au &laquo;&nbsp;pipe&nbsp;&raquo; nommé &laquo;&nbsp;mailman&nbsp;&raquo; (issu du <code>master.cf</code> de <code>postfix</code>), donc aux scripts mailman.<br />
Rien de nécessaire dans la table &laquo;&nbsp;domains&nbsp;&raquo; ; comme pour le répondeur vacation (<a href="http://michauko.org/blog/2010/06/16/utilisateurs-postfix-virtuels-ajouter-un-repondeur-vacation/" target="_blank">voir précédent article</a>).</p>
<h2>Multi-domaine</h2>
<p>J&#8217;ai déclaré ceci dans le fichier <code>/etc/mailman/mm_cfg.py</code> :</p>
<pre>add_virtualhost(DEFAULT_URL_HOST, DEFAULT_EMAIL_HOST)
add_virtualhost('list.serveur.fr','monserveur.fr')
add_virtualhost('list.autredomaine.fr','monserveur.fr')</pre>
<p>Pour gérer le multi-domaine, c&#8217;est aussi simple que ça (et les bons transports SQL). J&#8217;y reviendrai un peu plus tard tout de même.</p>
<h2>main.cf</h2>
<p>La doc dit d&#8217;ajouter <code>mailman_destination_recipient_limit=1</code> dans <code>/etc/postfix/main.cf</code> ; soit.</p>
<h1>Relance de tout ça</h1>
<pre>reload apache
restart mailman
reload postfix</pre>
<p>Rien dans amavis, comme pour les répondeurs vacation</p>
<h1>Créer une liste</h1>
<p>On veut créer une liste &laquo;&nbsp;mesabonnes@serveur.fr&nbsp;&raquo;.</p>
<h2>Au niveau SQL</h2>
<p>On déclare tout ça :</p>
<pre>insert into forwardings values ('mesabonnes-admin@serveur.fr','mesabonnes-admin@list.serveur.fr');
insert into forwardings values ('mesabonnes-bounces@serveur.fr','mesabonnes-bounces@list.serveur.fr');
insert into forwardings values ('mesabonnes-confirm@serveur.fr','mesabonnes-confirm@list.serveur.fr');
insert into forwardings values ('mesabonnes-join@serveur.fr','mesabonnes-join@list.serveur.fr');
insert into forwardings values ('mesabonnes-leave@serveur.fr','mesabonnes-leave@list.serveur.fr');
insert into forwardings values ('mesabonnes-owner@serveur.fr','mesabonnes-owner@list.serveur.fr');
insert into forwardings values ('mesabonnes-request@serveur.fr','mesabonnes-request@list.serveur.fr');
insert into forwardings values ('mesabonnes-subscribe@serveur.fr','mesabonnes-subscribe@list.serveur.fr');
insert into forwardings values ('mesabonnes-unsubscribe@serveur.fr','mesabonnes-unsubscribe@list.serveur.fr');</pre>
<p>Et bien sûr :</p>
<pre>insert into forwardings values ('mesabonnes@serveur.fr','mesabonnes@list.serveur.fr');</pre>
<p>C&#8217;est bien ici qu&#8217;on voit comment le lien entre la liste et mailman est fait : les adresses sont renvoyées vers un domaine bidon (pas nécessaire de le déclarer dans un DNS, c&#8217;est interne à postfix), domaine pour lequel un &laquo;&nbsp;transport&nbsp;&raquo; particulier est créé afin d&#8217;envoyer le courrier vers le pipe unix => script mailman.</p>
<h2>Enfin, au niveau de mailman</h2>
<p>En tant que root, <code>newlist mesabonnes</code>. On met un responsable de la liste et un code d&#8217;accès.</p>
<h2>Administration de la liste par le web (hors ligne de commande, donc)</h2>
<p>L&#8217;outil principal listant toutes les listes est là : <code>http://serveur.fr/cgi-bin/mailman/admin/</code> si vous n&#8217;avez pas changé les adresses. Une fois une liste sélectionnée, on obtient l&#8217;interface suivante :<br />
<a href="http://michauko.org/blog/wp-content/uploads/2011/06/mailman.png"><img src="http://michauko.org/blog/wp-content/uploads/2011/06/mailman-300x98.png" alt="interface mailman" title="interface mailman" width="300" height="98" class="aligncenter size-medium wp-image-1226" /></a><br />
Ensuite, c&#8217;est le festival des options.<br />
Il faut bien les lire une fois et noter celles qui vous intéressent : masquer l&#8217;expéditeur, limiter la taille des messages, fixer les règles de modération, éviter les doublons (lorsqu&#8217;une personne de la liste répond à la liste, doit-elle recevoir le mail, simplement un accusé ?), Il y a des outils pour abonner des gens en masse (sans les prévenir ou en les prévenant) etc etc.<br />
La seule chose que je vais mentionner, par rapport au multi-domaine, c&#8217;est l&#8217;option &laquo;&nbsp;Le nom d&#8217;hôte préféré par cette liste de diffusion pour le courriel.&nbsp;&raquo; du menu &laquo;&nbsp;[Options Générales]&nbsp;&raquo; afin d&#8217;indiquer le vrai serveur sous lequel est utilisé la liste : serveur.fr et pas autredomaine.fr dans l&#8217;exemple.</p>
<p>Voilà, normalement ça marche <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h1>Remarques</h1>
<h2>multi-domaine</h2>
<p>On a vu rapidement que le multi-domaine marchait facilement : les transports dans la table SQL + quelques lignes dans mm_cfg.py et les alias qui vont bien.<br />
MAIS : l&#8217;identifiant de la liste ne tient pas compte du nom de serveur. Donc les noms devront être différents d&#8217;un domaine à l&#8217;autre (je suppose), impossible donc d&#8217;avoir liste1@serveur.fr et liste1@autredomaine.fr pointant vers la même installation mailman.<br />
On peut imaginer plein d&#8217;autres méthodes pour contourner ça. J&#8217;en mentionne une car je l&#8217;ai testée et la contrainte d&#8217;avoir des noms différents ne me gêne pas.<br />
Je peux passer par des noms de listes intermédiaires pour éviter les problèmes, exemple :<br />
- liste1@serveur.fr ==forward==> interne_liste1@list.monserveur.fr<br />
- liste1@autredomaine.fr == forward ==> interne_liste2@list.monserveur.fr<br />
Et donc avoir déclaré avec &laquo;&nbsp;newlist&nbsp;&raquo; les listes interne_liste1/2<br />
Ca marche. Sauf que mailman considère qu&#8217;il y a une forme de redirection et tous les messages sont soumis à modération (même pour une liste non modérée) pour signaler à l&#8217;administrateur que quelqu&#8217;un a fait un alias de cette liste.<br />
Ici on s&#8217;en fout, mais imaginons que quelqu&#8217;un crée un simple alias &laquo;&nbsp;labandedabrutis@cabalance.fr&nbsp;&raquo; pointant vers votre liste, la bande d&#8217;abrutis en question sera ravie de ne pas être connue sous ce nom là&#8230;</p>
<h2>lien avec spamassassin</h2>
<p>Je n&#8217;ai pas cherché longtemps, c&#8217;est bien fait de base (sûrement un paramétrage &#8211; ou l&#8217;ordre ? &#8211; qui va bien dans <code>/etc/postfix/master.cf</code>) qui fait que le mail passe par toute la chaîne amavis/spamassassin/clamav. Ca se voit nettement dans les logs.</p>
<h2>générer les alias facilement</h2>
<p>Utilisez ce script :</p>
<pre>#!/bin/bash
if test -z $1
then
        echo Usage: $0 liste serveur
        exit -1
fi
if test -z $2
then
        echo Usage: $0 liste serveur
        exit -1
fi

for i in admin bounces confirm join leave owner request subscribe unsubscribe
do
        echo insert into forwardings values \(\'$1-$i@$2\',\'$1-$i@list.$2\'\)\;
done
echo insert into forwardings values \(\'$1@$2\',\'$1@list.$2\'\)\;</pre>
<p>Voilà, c&#8217;est complet je pense. Amusez-vous bien.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2011/06/10/mailing-lists-multi-domaine-avec-mailman-sur-un-postfix-virtuel-mysql/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>spamassassin : rulesemporium est mort</title>
		<link>http://michauko.org/blog/2011/01/25/spamassassin-rulesemporium-est-mort/</link>
		<comments>http://michauko.org/blog/2011/01/25/spamassassin-rulesemporium-est-mort/#comments</comments>
		<pubDate>Tue, 25 Jan 2011 11:05:42 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[mails]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[anti-spam]]></category>
		<category><![CDATA[rulesemporium]]></category>
		<category><![CDATA[spam]]></category>
		<category><![CDATA[spamassassin]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=1194</guid>
		<description><![CDATA[Hop, Je n&#8217;avais pas vu le truc avant qu&#8217;une mise à jour spamassassin me remonte une alerte, mais le site RulesEmporium a fermé. Plus d&#8217;activité, soit. Mais d&#8217;avoir supprimé le contenu, c&#8217;est dommage je trouve. Bon bref, toujours est-il que j&#8217;ai de nouveau un petit bout de l&#8217;outil de détection des textes &#171;&#160;cachés&#160;&#187; dans les [...]]]></description>
			<content:encoded><![CDATA[<p>Hop,<br />
Je n&#8217;avais pas vu le truc avant qu&#8217;une mise à jour spamassassin me remonte une alerte, mais le site RulesEmporium a fermé. Plus d&#8217;activité, soit. Mais d&#8217;avoir supprimé le contenu, c&#8217;est dommage je trouve.<br />
Bon bref, toujours est-il que j&#8217;ai de nouveau un petit bout de l&#8217;outil de détection des textes &laquo;&nbsp;cachés&nbsp;&raquo; dans les images (spam viagra &#038; co) qui ne fonctionne plus.<br />
D&#8217;ici à trouver quelque chose d&#8217;autre, je laisse en plan et je supprime simplement les quelques règles de détection impactées.<span id="more-1194"></span><br />
Le symptôme est le suivant, issu d&#8217;un <code>spamassassin --lint -D</code>, on obtient :</p>
<blockquote><p>
[30926] warn: rules: failed to run CG_FUJI_JPG test, skipping:<br />
[30926] warn:  (Can&#8217;t locate object method &laquo;&nbsp;image_name_regex&nbsp;&raquo; via package &laquo;&nbsp;Mail::SpamAssassin::PerMsgStatus&nbsp;&raquo; at (eval 1466) line 856.<br />
[30926] warn: )<br />
[30926] warn: rules: failed to run CG_DOUBLEDOT_GIF test, skipping:<br />
[30926] warn:  (Can&#8217;t locate object method &laquo;&nbsp;image_name_regex&nbsp;&raquo; via package &laquo;&nbsp;Mail::SpamAssassin::PerMsgStatus&nbsp;&raquo; at (eval 1466) line 986.<br />
[30926] warn: )<br />
[30926] warn: rules: failed to run CG_SONY_JPG test, skipping:<br />
[30926] warn:  (Can&#8217;t locate object method &laquo;&nbsp;image_name_regex&nbsp;&raquo; via package &laquo;&nbsp;Mail::SpamAssassin::PerMsgStatus&nbsp;&raquo; at (eval 1466) line 1602.<br />
[30926] warn: )<br />
[30926] warn: rules: failed to run CG_CANON_JPG test, skipping:<br />
[30926] warn:  (Can&#8217;t locate object method &laquo;&nbsp;image_name_regex&nbsp;&raquo; via package &laquo;&nbsp;Mail::SpamAssassin::PerMsgStatus&nbsp;&raquo; at (eval 1466) line 2704.<br />
[30926] warn: )
</p></blockquote>
<p>Je commente l&#8217;appel à ces règles dans <code>/etc/spamassassin/imageinfo.cf</code>.<br />
Et enfin je désactive la mise à jour via <code>sa-update</code>, en commentant mes lignes <code>/etc/spamassassin/channels.txt</code>.</p>
<p>A suivre.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2011/01/25/spamassassin-rulesemporium-est-mort/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>postfix, utilisateurs virtuels et appels à procmail</title>
		<link>http://michauko.org/blog/2010/10/25/postfix-utilisateurs-virtuels-et-appels-a-procmail/</link>
		<comments>http://michauko.org/blog/2010/10/25/postfix-utilisateurs-virtuels-et-appels-a-procmail/#comments</comments>
		<pubDate>Mon, 25 Oct 2010 09:30:33 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[mails]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[master.cf]]></category>
		<category><![CDATA[NEXTHOP]]></category>
		<category><![CDATA[pipe]]></category>
		<category><![CDATA[postfix]]></category>
		<category><![CDATA[procmail]]></category>
		<category><![CDATA[procmailrc]]></category>
		<category><![CDATA[vacation]]></category>
		<category><![CDATA[virtuel]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=1139</guid>
		<description><![CDATA[Hello, Dans un précédent article, j&#8217;avais expliqué comment faire en sorte qu&#8217;une installation postfix/amavis/&#8230;/mysql &#8211; avec donc des domaines et des utilisateurs virtuels &#8211; puisse faire appeler &#171;&#160;procmail&#160;&#187; afin de passer le relai à &#171;&#160;vacation&#160;&#187;, l&#8217;outil de répondeur automatique d&#8217;absence. Depuis, j&#8217;ai trouvé plus élégant pour passer des règles plus complètes à procmail (quitte à [...]]]></description>
			<content:encoded><![CDATA[<p>Hello,<br />
Dans un précédent article, j&#8217;avais expliqué comment faire en sorte qu&#8217;une installation postfix/amavis/&#8230;/mysql &#8211; avec donc des domaines et des utilisateurs virtuels &#8211; puisse faire appeler &laquo;&nbsp;procmail&nbsp;&raquo; afin de passer le relai à &laquo;&nbsp;vacation&nbsp;&raquo;, l&#8217;outil de répondeur automatique d&#8217;absence.<br />
Depuis, j&#8217;ai trouvé plus élégant pour passer des règles plus complètes à procmail (quitte à envoyer à vacation ensuite). C&#8217;est juste beaucoup plus joli et mieux construit. J&#8217;explique &#8211; toujours en partant d&#8217;une conf postfix/amavis/mysql comme celle que je décris dans <a href="http://michauko.org/blog/?s=postfix">des précédents articles</a>.<span id="more-1139"></span></p>
<h1>Principe</h1>
<p>On va créer une voie de transport dans postfix afin de &laquo;&nbsp;router&nbsp;&raquo; les messages de certains utilisateurs vers un pipe particulier appelant procmail dans sa forme à peu près basique.<br />
&laquo;&nbsp;procmail&nbsp;&raquo; tournera au nom de l&#8217;utilisateur gérant les &laquo;&nbsp;Maildir&nbsp;&raquo; virtuels, utilisateur &laquo;&nbsp;vmail&nbsp;&raquo; (dans mes docs précédentes) et lira un procmail général avant de passer le relai à un procmail par utilisateur (si besoin), pour trier. En décrivant proprement l&#8217;environnement pour procmail, on livrera où il faut dans un Maildir sous &laquo;&nbsp;vmail&nbsp;&raquo;, donc dans un Maildir d&#8217;un domain virtuel pour un utilisateur virtuel dans un sous-répertoire de sa boîte Maildir.<br />
Mouais, bon, c&#8217;est pas hyper clair, mais ça va le devenir <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h1>pipe postfix</h1>
<p>Dans <code>/etc/postfix/master.cf</code>, on déclare le &laquo;&nbsp;pipe suivant&nbsp;&raquo; :</p>
<pre>procmailpipe    unix    -       n       n       -       10      pipe
  flags=ROq user=vmail argv=/usr/bin/procmail --m USER=${user} EXTENSION=${extension} NEXTHOP=${nexthop} /etc/postfix/procmail.global.rc</pre>
<p>Bien noter le &laquo;&nbsp;NEXTHOP&nbsp;&raquo; qui nous indiquera le domaine (pratique lorsqu&#8217;on en gère plusieurs en virtuel.<br />
Je rappelle que dans ma conf, l&#8217;utilisateur hébergeant les boites mails est &laquo;&nbsp;vmail&nbsp;&raquo;, dont le home est <code>/vmailboxes/</code>. On trouve donc là-dedans des répertoires comme <code>/vmailboxes/mon_domaine.com/mon_user/cur|tmp|new</code> et autres sous répertoires commençant par <code>.sous-rep/[cur|new|tmp]/</code>.<br />
Pour accompagner le flag &laquo;&nbsp;O&nbsp;&raquo; dans ce pipe, la doc postfix indique de bien positionner dans le <code>/etc/postfix/main.cf</code> :</p>
<pre>procmail_destination_recipient_limit = 1</pre>
<h1>Alias d&#8217;un utilisateur vers son procmail</h1>
<p>Dans mes tables SQL (à priori &laquo;&nbsp;transport&nbsp;&raquo; et &laquo;&nbsp;forwardings&nbsp;&raquo;), j&#8217;indique ceci :</p>
<pre>transport : procmail.mon_domaine.com => procmailpipe
forwardings : mon_user@mon_domaine.com => mon_user@procmail.mon_domaine.com</pre>
<p>Ainsi, un mail arrive à mon_user@mon_domaine.com suivra vers mon_user@procmail.mon_domaine.com (qui n&#8217;existe pas au sens DNS) et sera donc routé vers le &laquo;&nbsp;pipe&nbsp;&raquo; postfix nommé &laquo;&nbsp;procmailpipe&nbsp;&raquo; décrit dans <code>master.cf</code>.</p>
<h1>procmailrc global</h1>
<p>Le &laquo;&nbsp;pipe&nbsp;&raquo; postfix ira lire <code>/etc/postfix/procmail.global.rc</code> en passant quelques variables comme on l&#8217;a vu.<br />
Dans ce fichier, on trouve exactement ça :</p>
<pre>serveur:~# cat /etc/postfix/procmail.global.rc
SHELL=/bin/sh
MAILDIR="$HOME/$NEXTHOP/$USER"
DEFAULT="$MAILDIR/"
#VERBOSE=ON
#LOGFILE="$HOME/procmail/$NEXTHOP.$USER.log"
NL="
"
WS=" "
SWITCHRC="$HOME/procmail/$NEXTHOP.$USER.rc"
</pre>
<p>Pour NL et WS, c&#8217;est une question de séparateur de mot, de ligne etc. (je crois <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> )<br />
Pour VERBOSE et LOGFILE, vous activerez au début quand ça ne fonctionnera pas, afin de pouvoir déverminer.<br />
<strong>Toute la beauté du bazar réside en fait dans le &laquo;&nbsp;MAILDIR&nbsp;&raquo; et &laquo;&nbsp;SWITCHRC&nbsp;&raquo;.</strong><br />
Dans mon exemple, MAILDIR vaudra :</p>
<pre>$HOME = home de vmail = <code>/vmailboxes</code>
$NEXTHOP = procmail.mon_domaine.com
$USER = mon_user
</pre>
<p>Enfin, on ira lire un fichier procmailrc par utilisateur. Si on ne trouve pas de fichier &laquo;&nbsp;<code>/vmailboxes/procmail/procmail.mon_domaine.com.mon_user.rc</code>&laquo;&nbsp;, on finira donc directement dans une MAILDIR nommée &laquo;&nbsp;<code>/vmailboxes/procmail.mon_domaine.com/mon_user/</code>&nbsp;&raquo; (attention au &laquo;&nbsp;/&nbsp;&raquo; de fin dans DEFAULT pour indiquer un format Maildir et pas mailbox). Presque parfait me direz-vous car dans mes domaines virtuels hébergés, j&#8217;avais prévu &laquo;&nbsp;<code>/vmailboxes/mon_domaine.com</code>&nbsp;&raquo; et pas &laquo;&nbsp;<code>procmail.mon_domaine</code>&laquo;&nbsp;.<br />
Je n&#8217;ai pas trouvé de variable type NEXTHOP rappelent le domaine d&#8217;origine. Par contre un lien symbolique de &laquo;&nbsp;<code>/vmailboxes/procmail.mon_domaine.com/</code>&nbsp;&raquo; vers &laquo;&nbsp;<code>/vmailboxes/mon_domaine.com/</code>&nbsp;&raquo; règle joliment le problème.</p>
<h1>Enfin, procmailrc par utilisateur</h1>
<p>J&#8217;ai donc regroupé mes différents procmailrc dans <code>/vmailboxes/procmail/</code><br />
Ces fichiers contiendront donc des règles procmail habituelles, en considérant pour &laquo;&nbsp;MAILDIR/DEFAULT&nbsp;&raquo; de travail, qu&#8217;on est bien placé dans &laquo;&nbsp;<code>/vmailboxes/[procmail.]mon_domaine.com/mon_user/</code>&laquo;&nbsp;. Ainsi :</p>
<pre>:0
* Subject:.*testprocmail
.test/</pre>
<p>&#8230;ira bien placer votre mail dans le sous-répertoire &laquo;&nbsp;test&nbsp;&raquo; de l&#8217;utilisateur. Donc dans &laquo;&nbsp;<code>/vmailboxes/mon_domaine.com/mon_user/.test/new/</code>&nbsp;&raquo;</p>
<h1>Débuggage</h1>
<p>Pendant la phase de tests, notez que les mails allant dans des Maildir n&#8217;existant pas finiront dans le home de l&#8217;utilisateur &laquo;&nbsp;vmail&nbsp;&raquo;. Donc, vous verrez peut-être apparaître <code>/vmailboxes/[cur|new|tmp]</code> et pourrez aller à la pêche.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2010/10/25/postfix-utilisateurs-virtuels-et-appels-a-procmail/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>utilisateurs postfix virtuels : ajouter un répondeur &#171;&#160;vacation&#160;&#187;</title>
		<link>http://michauko.org/blog/2010/06/16/utilisateurs-postfix-virtuels-ajouter-un-repondeur-vacation/</link>
		<comments>http://michauko.org/blog/2010/06/16/utilisateurs-postfix-virtuels-ajouter-un-repondeur-vacation/#comments</comments>
		<pubDate>Wed, 16 Jun 2010 08:30:27 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[mails]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[master.cf]]></category>
		<category><![CDATA[pipe]]></category>
		<category><![CDATA[postfix]]></category>
		<category><![CDATA[procmail]]></category>
		<category><![CDATA[vacation]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=1047</guid>
		<description><![CDATA[Avec mes précédents articles ci-dessous, vous avez de quoi monter une architecture complète de mails avec utilisateurs virtuels. Pour faire simple. configurer postfix pour gérer des utilisateurs virtuels monter une architecture complète &#171;&#160;postfix / postgrey / amavisd-new / clamav / spamassassin&#160;&#187; Il manque cependant un morceau : la possibilité de faire appel à des &#171;&#160;procmail&#160;&#187; [...]]]></description>
			<content:encoded><![CDATA[<p>Avec mes précédents articles ci-dessous, vous avez de quoi monter une architecture complète de mails avec utilisateurs virtuels. Pour faire simple.</p>
<ul>
<li>
<a href="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/">configurer postfix pour gérer des utilisateurs virtuels</a>
</li>
<li>
<a href="http://michauko.org/blog/2009/09/21/montage-dun-serveur-de-mail-complet-postfix-postgrey-amavisd-new-clamav-spamassassin-etc/">monter une architecture complète &laquo;&nbsp;postfix / postgrey / amavisd-new / clamav / spamassassin&nbsp;&raquo;</a>
</li>
</ul>
<p></p>
<p><strong>Il manque cependant un morceau : la possibilité de faire appel à des &laquo;&nbsp;procmail&nbsp;&raquo; personnalisés pour ces utilisateurs virtuels.</strong></p>
<p>Lorsqu&#8217;on n&#8217;est pas avec des utilisateurs virtuels, chaque utilisateur réel (ayant un compte utilisateur, donc) utilise généralement son <code>~/.procmailrc</code> pour trier un peu ou <strong>- cas qui m&#8217;intéresse particulièrement &#8211; activer son répondeur d&#8217;absence, &laquo;&nbsp;<code>vacation</code>&laquo;&nbsp;</strong> pour ne pas le nommer.<br />
Dans le cas d&#8217;utilisateurs virtuels, c&#8217;est sensiblement différent. C&#8217;est ce que je décrirai dans cet article. Ce n&#8217;est au final pas compliqué, mais il faut comprendre le rôle de chaque composant et les limites de fonctionnement de chaque outil.<br />
En effet, je n&#8217;ai pas trouvé de doc ultra-claire sur le sujet sur le web, surtout les bricoles de chacun. Avec un peu de recul, et, voyant ma propre solution, j&#8217;ai l&#8217;impression qu&#8217;il y a tellement de configurations possibles (maildrop et pas procmail, mes utilisateurs virtuels comme ci, pas comme ça, il utilise postfixadmin et pas moi etc) qu&#8217;il est impossible d&#8217;écrire un truc qui n&#8217;est pas spécifique.<br />
Le plus dur est donc de comprendre ce qu&#8217;on fait pour transposer à sa conf. Je tâcherai donc, comme d&#8217;hab, d&#8217;expliquer ce que je fais plutôt que de copier-coller les fichiers de conf.</p>
<p>Allez, let&#8217;s go pour la mise en place sur la base d&#8217;une archi postfix &#038; co comme décrite dans les docs mentionnées en début de cet article.</p>
<p><em>Ah, dernier point : à la base, et tel que je le décris, l&#8217;utilisateur ne pourra pas mettre lui même son répondeur en place. Dans mon cas, ce n&#8217;est pas important. En effet, j&#8217;utilise des utilisateurs virtuels car il s&#8217;agit d&#8217;un serveur frontal de mails (qui trie le spam, en gros), livre les messages dans des arborescences virtuelles en attendant d&#8217;être POPées depuis un backend de mails quelconque (un vilain Exchange <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ). Donc, le répondeur d&#8217;absence des utilisateurs &laquo;&nbsp;physiques&nbsp;&raquo; est géré par eux-mêmes dans Outlook &laquo;&nbsp;normalement&nbsp;&raquo;, et je n&#8217;applique ce principe de répondeur qu&#8217;exceptionnellement, à quelques boîtes mails IMAP génériques, qui n&#8217;ont pas vraiment de notion de &laquo;&nbsp;vacances&nbsp;&raquo;. Des boîtes partagées entre plusieurs personnes, si vous voulez, mais stockées sur le frontal et pas dans le backend, pour diverses raisons dont on se moque ici. Après vous pourrez toujours bricoler un truc pour que tout un chacun accède à son procmail ou son message d&#8217;asbence pour le mettre, l&#8217;enlever etc.</em><span id="more-1047"></span></p>
<h1>Le principe</h1>
<p>On veut activer le répondeur de toto@domaine.fr en utilisant l&#8217;outil &laquo;&nbsp;<code>vacation</code>&nbsp;&raquo; qui gère très bien les réponses. &laquo;&nbsp;<code>vacation</code>&nbsp;&raquo; ne joue qu&#8217;avec des comptes utilisateurs existants. Premier problème.</p>
<p>Pour y arriver, on va créer des alias pour ce compte virtuel &laquo;&nbsp;toto@domaine.fr&nbsp;&raquo; afin que postfix &laquo;&nbsp;forward&nbsp;&raquo; (du nom de la table &laquo;&nbsp;forwardings&nbsp;&raquo; gérant les alias des utilisateurs virtuels) tout mail à destination de toto@domaine.fr vers 2 endroits :</p>
<ul>
<li>
le réel toto@domaine.fr, histoire de délivrer le mail quand même, au final
</li>
<li>
et en plus vers un certain toto@vacation.domaine.fr qui n&#8217;existe pas
</li>
</ul>
<p><bR>Ce dernier nom &laquo;&nbsp;vacation.domaine.fr&nbsp;&raquo; n&#8217;a pas besoin d&#8217;exister au sens DNS et ne correspond pas non plus à un MX réel. On va juste créer un &laquo;&nbsp;transport&nbsp;&raquo; (du nom de la table MySQL qu&#8217;on a créée avec les docs précédentes) particulier afin de router les messages à destination du domaine &laquo;&nbsp;vacation.domaine.fr&nbsp;&raquo; vers un &laquo;&nbsp;<code>pipe</code>&nbsp;&raquo; particulier de postfix qu&#8217;on va créer pour l&#8217;occasion.<br />
Ce &laquo;&nbsp;<code>pipe</code>&nbsp;&raquo; UNIX, composant qu&#8217;on ajoute à la chaîne postfix, gèrera en fait l&#8217;appel à <code>procmail </code>configuré d&#8217;une manière globale (un gros <code>procmailrc </code>générique, si vous voulez).<br />
Ce <code>procmail </code>fera ensuite un tri sur le nom du destinaire et appellera &laquo;&nbsp;<code>vacation</code>&nbsp;&raquo; lorsqu&#8217;on le veut avec un message personnalisé.</p>
<p><i>C&#8217;est ce procmail global qu&#8217;il conviendrait de découper (avec des INCLUDE), ainsi que les fichiers de messages d&#8217;absence qui vont avec, si on voulait donner la main d&#8217;une manière pas super pratique (FTP ? samba ?) à des utilisateurs réels sur leur répondeur de compte virtuel&#8230;</i></p>
<p>Je me suis basé sur pas mal de docs bizarroïdes, et surtout sur les quelques explications <a href="http://lists.mailscanner.info/pipermail/mailscanner/2005-January/044873.html">trouvées ici</a>. Le cheminement y est, mais c&#8217;est pas détaillé sur le principe et le type propose son propre script de répondeur ; script qui peut générer une belle boucle infinie entre répondeurs, à mon humble avis. Ce risque n&#8217;existe pas avec &laquo;&nbsp;<code>vacation</code>&laquo;&nbsp;, car il garde une liste des gens &laquo;&nbsp;déjà répondus&nbsp;&raquo;, sauf si vous forcez à répondre à chaque fois.</p>
<h1>Mise en place</h1>
<h2>Paquets, utilisateur etc</h2>
<p>Au besoin, suivant l&#8217;état de votre installation :</p>
<pre>aptitude install procmail vacation</pre>
<p>Ensuite, j&#8217;ai expliqué que &laquo;&nbsp;<code>vacation</code>&nbsp;&raquo; ne travaillait que sur un compte réel. Je lui dédie donc un compte :</p>
<pre>useradd -m vacation -s /bin/nologin -c "Utilisateur vacation"</pre>
<h2>Création du pipe UNIX</h2>
<p>On crée le processus qui sera en charge de router (de manière interne à postfix) les messages arrivant dans un <code>pipe </code>qu&#8217;on nomme &laquo;&nbsp;repondeur&nbsp;&raquo; vers <code>procmail</code> (lui même appelant le cas échéant le programme de répondeur &laquo;&nbsp;<code>vacation</code>&laquo;&nbsp;).<br />
Dans <code>/etc/postfix/master.cf</code>, à la fin (peu importe), on définit ce pipe comme suit :</p>
<pre>#ajout d'un appel à procmail pour gérer certains 'vacation' sur les boites IMAP
#attention, l'appel à ce pipe est géré dans la table des transports virtuels + des forwardings qui vont bien
repondeur   unix    -       n       n       -       10      pipe
  flags=Rq user=vacation argv=/usr/bin/procmail -Y -m /etc/postfix/procmail-global-repondeur.rc ${sender} ${recipient}
</pre>
<p>Les espaces avant &laquo;&nbsp;flags&nbsp;&raquo; sont importants, c&#8217;est ce qui explique à postfix qu&#8217;il s&#8217;agit d&#8217;option du <code>pipe </code> nommé &laquo;&nbsp;repondeur&nbsp;&raquo;.<br />
Je décrirai le fichier <code>/etc/postfix/procmail-global-repondeur.rc</code> plus tard. C&#8217;est lui qui contiendra les appels aux &laquo;&nbsp;<code>vacation</code>&nbsp;&raquo; de tels et tels utilisateurs.<br />
J&#8217;avoue ne pas être super sûr des flags utilisés, voyez <code>man pipe</code> au besoin.</p>
<h2>transport virtuel</h2>
<p>Si votre base MySQL est exactement celle que je décris dans mes précédentes documentations, insérez une ligne dans la table &laquo;&nbsp;transport&nbsp;&raquo; afin d&#8217;avoir :</p>
<pre>mysql> select * from transport;
+---------------------+-----------+
| domain              | transport |
+---------------------+-----------+
| vacation.domaine.fr | repondeur |
+---------------------+-----------+
1 row in set (0.00 sec)</pre>
<p>Pour bien relier cette table à votre configuration &laquo;&nbsp;virtuelle&nbsp;&raquo;, la table &laquo;&nbsp;transport&nbsp;&raquo; dont je parle est celle décrite comme ça dans postfix :</p>
<pre>[extraits de fichiers]
main.cf:transport_maps = proxy:mysql:/etc/postfix/mysql-virtual_transports.cf
mysql-virtual_transports.cf:query = SELECT transport FROM transport WHERE domain='%s'</pre>
<h2>Création des alias pour router vers le &laquo;&nbsp;pipe&nbsp;&raquo; &laquo;&nbsp;repondeur&nbsp;&raquo;</h2>
<p>Pour chaque utilisateur virtuel qui devra avoir un répondeur actif (ou potentiellement actif), il faudra ajouter 2 alias le concernant dans la table des alias (&laquo;&nbsp;forwardings&nbsp;&raquo; dans mon cas, là encore, ça dépend de votre conf de &laquo;&nbsp;postfix virtuel&nbsp;&raquo;). Ajoutez donc les lignes pour avoir :</p>
<pre>mysql> select * from forwardings where source like 'j%doma%';
+--------------------+-----------------------------+
| source             | destination                 |
+--------------------+-----------------------------+
| jacques@domaine.fr | jacques@domaine.fr          |
| jacques@domaine.fr | jacques@vacation.domaine.fr |
+--------------------+-----------------------------+
2 rows in set (0.00 sec)</pre>
<p>J&#8217;ai eu un souci pour insérer ces 2 lignes, car il y a une contrainte de clef primaire sur &laquo;&nbsp;source&nbsp;&raquo;, ce qui semble logique, mais qui est en fait bloquant pour nous et inutile dans un cas normal d&#8217;alias d&#8217;utilisateurs virtuels (on pourrait faire une liste de diffusion en créant plusieurs lignes pour une même source car postfix gère très bien le fait d&#8217;avoir plusieurs destination pour une même source).<br />
Bref, j&#8217;ai fait sauté la contrainte PK que j&#8217;avais mise dans mes docs précédents :</p>
<pre>ALTER TABLE forwardings
DROP PRIMARY KEY;</pre>
<p>Rassurez-vous, ça ne fait pas sauter les entrées déjà stockées dans la table si vous en avez.</p>
<h2>procmailrc et vacation</h2>
<p>On y est presque.<br />
Reste à définir le <code>procmail </code>global appelant vacation :<br />
Dans mon &laquo;&nbsp;<code>pipe</code>&laquo;&nbsp;, j&#8217;appelle ce fichier :</p>
<pre>servr:/etc/postfix# cat /etc/postfix/procmail-global-repondeur.rc
SHELL=/bin/sh

:0c
* ^(To|Cc).*jacques@domaine.fr
| vacation -f /home/vacation/jacques@domaine.fr.db -m /home/vacation/jacques@domaine.fr.msg -a jacques@domaine.fr vacation

:0c
* ^(To|Cc).*autre_type@domaine.fr
| vacation -f /home/vacation/autre_type@domaine.fr.db -m /home/vacation/autre_type@domaine.fr.msg -a autre_type@domaine.fr vacation

:0
/dev/null</pre>
<p><strong>Alors, c&#8217;est presque le plus compliqué car ce fichier est plein de petites ruses</strong>. Il vous montre comment procéder lorsque vous aurez plusieurs boîtes concernées par un vacation.<br />
<i>Je rappelle que de cette manière, c&#8217;est un peu pénible à maintenir car c&#8217;est l&#8217;admin qui gère. Là il s&#8217;agit de boîte IMAP partagées et peu nombreuses, donc c&#8217;est gérable.</i></p>
<p>Le détail est donc :</p>
<ul>
<li>
Je stocke tous mes messages de &laquo;&nbsp;vacances&nbsp;&raquo; dans ~vacation/
</li>
<li>
-f : pour indiquer dans quelle &laquo;&nbsp;base de données&nbsp;&raquo; on stocke les gens à qui on a déjà répondu</li>
<li>
</li>
<li>
-m : pour indiquer le mail de réponse d&#8217;un utilisateur donné, je le détaille plus bas
</li>
<li>
-a : <strong>hyper important </strong> : en effet, <code>vacation </code>ne travaille que sur un utilisateur réel. Donc obligé de spécifier un utilisateur réel en fin de commande <code>vacation</code>, c&#8217;est l&#8217;utilisateur &laquo;&nbsp;vacation&nbsp;&raquo; himself qui figure en dernier argument de la ligne de commande. Donc, pour que <code>vacation </code> travaille, j&#8217;explique aussi que cet utilisateur réel peut être connu sous l&#8217;alias (-a) jacques@domaine.fr (ou autre_type@domaine.fr dans la 2è règle). Sinon aucune règle ne s&#8217;appliquera jamais.
</li>
<li>
&laquo;&nbsp;:0c&nbsp;&raquo; : <strong>OUI : il faut activer le &laquo;&nbsp;carbon copy&nbsp;&raquo;</strong>. J&#8217;ai constaté ça à force de tests. En effet, un message arrivant dans postfix a un ID, il est dédoublé avec le même ID, l&#8217;un part vers l&#8217;utilisateur réel pour livraison, l&#8217;autre vers le &laquo;&nbsp;<code>pipe</code>&laquo;&nbsp;, puis <code>procmail</code>, puis <code>vacation</code>. &laquo;&nbsp;<code>vacation</code>&nbsp;&raquo; arrête les règles (si on ne met pas le &laquo;&nbsp;c&nbsp;&raquo; de carbon copy) dès que ça &laquo;&nbsp;match&nbsp;&raquo;. Si un expéditeur envoi un unique mail à en même temps jacques@domaine.fr et autre_type@domaine.fr, la première règle va marcher, donc procmail arrêtera de bosser. Résultat : pas de répondeur pour &laquo;&nbsp;autre_type&nbsp;&raquo;. On ne sait pas qu&#8217;il est en vacances.
</li>
<li>
Et enfin, le piège des &laquo;&nbsp;carbon copy&nbsp;&raquo; : si on ne fait pas une dernière règle virant vers /dev/null tout message au final, un message légitime auquel on aura répondu par &laquo;&nbsp;vacation&nbsp;&raquo; sortira de procmail et continuera sa route : il sera donc livré. Mais c&#8217;est un utilisateur complètement bidon, untel@vacation.domaine.fr, domaine inexistant => erreur de livraison => log dans <code>/var/log/mail.info</code> et <strong>surtout</strong>, mail d&#8217;erreur bien crade informant l&#8217;expéditeur&#8230;</li>
</ul>
<h2>fichier .msg de vacation</h2>
<p>Voici à quoi doit ressembler un fichier de réponse minimaliste :</p>
<pre>servr:/etc/postfix# cat ~vacation/jacques\@domaine.fr.msg
From: jacques@domaine.fr (Jacques)
Subject: Re: $SUBJECT
Precedence: Bulk

Votre mail a bien été reçu, blablablabla
-- Jacques
</pre>
<h2>reload postfix et tests</h2>
<p>A la fin, <code>/etc/init.d/postfix reload</code> et zou, testez des envois de mails, de réenvois de mails (pour n&#8217;avoir qu&#8217;une fois la réponse etc).<br />
Le plus risqué dans cette manip&#8217; sur un serveur en production, c&#8217;est que tout les adresses normales commencent à merdouiller. Le plus rapide pour annuler tout ça le temps de réfléchir, est de commenter les 2 lignes définissant le pipe et de rechargez postfix.</p>
<h1>Autres remarques</h1>
<h2>Réinit d&#8217;un répondeur</h2>
<p>A une époque, il me semblait qu&#8217;en modifiant le fichier .msg, <code>vacation </code>détectait le changement et donc ne tenait plus compte des expéditeurs &laquo;&nbsp;déjà répondus&nbsp;&raquo;. Après quelques tests, je n&#8217;en suis plus si sûr. Le plus simple pour relancer un répondeur &laquo;&nbsp;pour tous&nbsp;&raquo; : supprimez le fichier .db correspondant.</p>
<h2>Permissions</h2>
<p>Attention, j&#8217;ai interdit le login pour l&#8217;utilisateur vacation. Donc tout ce que vous créerez dans ~vacation/*msg sera sûrement au nom de &laquo;&nbsp;root&nbsp;&raquo;, par exemple. Pensez à changer les droits.<br />
Si vous avez raté un truc, les logs sont très explicites dans <code>/var/log/mail.info</code>.<br />
Je crois aussi me rappeler que si <code>vacation </code>ne voit pas le fichier .msg, il ne fera rien. A vérifier, mais c&#8217;est une méthode simple (et crade car ça va faire du log à coup sûr) pour activer/désactiver un répondeur <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>un log complet pour illustrer</h2>
<p>Si tout se passe bien, vous avez ça :<br />
Connexion du serveur expéditeur :</p>
<pre>Jun 14 17:10:21 servr postfix/smtpd[20107]: connect from expediteur.org[xx.yy.zz.tt]
Jun 14 17:10:21 servr postgrey[12166]: action=pass, reason=client AWL, client_name=expediteur.org, client_address=xx.yy.zz.tt, sender=exped@expediteur.org, recipient=jacques@domaine.fr
Jun 14 17:10:21 servr postfix/smtpd[20107]: C2B829C4081: client=expediteur.org[xx.yy.zz.tt]
Jun 14 17:10:21 servr postfix/cleanup[20065]: C2B829C4081: message-id=<20100614151021.AF0F0EEC57C@mail.expediteur.org>
Jun 14 17:10:21 servr postfix/qmgr[19547]: C2B829C4081: from=<exped@expediteur.org>, size=515, nrcpt=2 (queue active)
Jun 14 17:10:21 servr postfix/smtpd[20107]: disconnect from expediteur.org[xx.yy.zz.tt]
Jun 14 17:10:23 servr postfix/smtpd[20208]: connect from localhost.localdomain[127.0.0.1]
Jun 14 17:10:23 servr postfix/smtpd[20208]: 8A0E69C4085: client=localhost.localdomain[127.0.0.1]
Jun 14 17:10:23 servr postfix/cleanup[20065]: 8A0E69C4085: message-id=<20100614151021.AF0F0EEC57C@mail.expediteur.org>
Jun 14 17:10:23 servr postfix/smtpd[20208]: disconnect from localhost.localdomain[127.0.0.1]
Jun 14 17:10:23 servr postfix/qmgr[19547]: 8A0E69C4085: from=<exped@expediteur.org>, size=1045, nrcpt=3 (queue active)</pre>
<p>Pas de greylisting, car c&#8217;est un pote. Analyse par amavis OK, on dédouble le message vers jacques@domaine.fr et jacques@vacation.domaine.fr.<br />
Chaque file suivra alors sa route :</p>
<pre>Jun 14 17:10:23 servr amavis[18918]: (18918-18) Passed CLEAN, [xx.yy.zz.tt] [xx.yy.zz.tt] <exped@expediteur.org> -> <jacques@domaine.fr>,<jacques@vacation.domaine.fr>, Message-ID: <20100614151021.AF0F0EEC57C@mail.expediteur.org>, mail_id: uuW4XqNAoH7S, Hits: 1.714, size: 515, queued_as: 8A0E69C4085, 1902 ms
Jun 14 17:10:23 servr postfix/smtp[20190]: C2B829C4081: to=<jacques@domaine.fr>, relay=127.0.0.1[127.0.0.1]:10024, delay=1.9, delays=0.03/0/0/1.9, dsn=2.0.0, status=sent (250 2.0.0 Ok, id=18918-18, from MTA([127.0.0.1]:10025): 250 2.0.0 Ok: queued as 8A0E69C4085)
Jun 14 17:10:23 servr postfix/smtp[20190]: C2B829C4081: to=<jacques@vacation.domaine.fr>, orig_to=<jacques@domaine.fr>, relay=127.0.0.1[127.0.0.1]:10024, delay=1.9, delays=0.03/0/0/1.9, dsn=2.0.0, status=sent (250 2.0.0 Ok, id=18918-18, from MTA([127.0.0.1]:10025): 250 2.0.0 Ok: queued as 8A0E69C4085)
Jun 14 17:10:23 servr postfix/qmgr[19547]: C2B829C4081: removed</pre>
<p>La partie &laquo;&nbsp;utilisateur virtuel de postfix&nbsp;&raquo; traite le &laquo;&nbsp;mail normal&nbsp;&raquo; => &laquo;&nbsp;delivered to maildir&nbsp;&raquo;. Ca roule :</p>
<pre>Jun 14 17:10:23 servr postfix/virtual[20212]: 8A0E69C4085: to=<jacques@domaine.fr>, relay=virtual, delay=0.3, delays=0.15/0.01/0/0.14, dsn=2.0.0, status=sent (delivered to maildir)</pre>
<p>La partie &laquo;&nbsp;vacation&nbsp;&raquo; (pipe repondeur) route vers le &laquo;&nbsp;relay=repondeur&nbsp;&raquo;. Le job s&#8217;accomplit correctement &laquo;&nbsp;(delivered via repondeur service)&nbsp;&raquo;. Là on n&#8217;a pas d&#8217;autre erreur, sinon on pourrait voir vacation ou procmail pas content :</p>
<pre>Jun 14 17:10:23 servr postfix/pickup[19550]: ECF179C408A: uid=5001 from=<vacation>
Jun 14 17:10:23 servr postfix/pipe[20209]: 8A0E69C4085: to=<jacques@vacation.domaine.fr>, orig_to=<jacques@domaine.fr>, relay=repondeur, delay=0.41, delays=0.15/0/0/0.25, dsn=2.0.0, status=sent (delivered via repondeur service)
Jun 14 17:10:23 servr postfix/pipe[20209]: 8A0E69C4085: to=<jacques@vacation.domaine.fr>, relay=repondeur, delay=0.41, delays=0.15/0/0/0.25, dsn=2.0.0, status=sent (delivered via repondeur service)
Jun 14 17:10:23 servr postfix/cleanup[20065]: ECF179C408A: message-id=<20100614151023.ECF179C408A@domaine.fr>
Jun 14 17:10:23 servr postfix/qmgr[19547]: 8A0E69C4085: removed
Jun 14 17:10:24 servr postfix/qmgr[19547]: ECF179C408A: from=<vacation@domaine.fr>, size=343, nrcpt=1 (queue active)</pre>
<p>Deux secondes plus tard, &laquo;&nbsp;vacation&nbsp;&raquo; a détecté qu&#8217;il fallait répondre à &laquo;&nbsp;exped@expediteur.org&nbsp;&raquo;, donc on envoit un mail :<br />
(le champ From sera jacques@domaine.fr, seul Return-Path sera à vacation@domaine.fr)</p>
<pre>Jun 14 17:10:26 servr postfix/smtpd[20208]: connect from localhost.localdomain[127.0.0.1]
Jun 14 17:10:26 servr postfix/smtpd[20208]: 174A99C4081: client=localhost.localdomain[127.0.0.1]
Jun 14 17:10:26 servr postfix/cleanup[20065]: 174A99C4081: message-id=<20100614151023.ECF179C408A@domaine.fr>
Jun 14 17:10:26 servr postfix/qmgr[19547]: 174A99C4081: from=<vacation@domaine.fr>, size=770, nrcpt=1 (queue active)
Jun 14 17:10:26 servr amavis[20202]: (20202-01) Passed CLEAN, <vacation@domaine.fr> -> <exped@expediteur.org>, Message-ID: <20100614151023.ECF179C408A@domaine.fr>, mail_id: xw6dpgfdz+b5, Hits: -0.001, size: 343, queued_as: 174A99C4081, 2197 ms
Jun 14 17:10:26 servr postfix/smtp[20190]: ECF179C408A: to=<exped@expediteur.org>, relay=127.0.0.1[127.0.0.1]:10024, delay=2.3, delays=0.14/0/0/2.2, dsn=2.0.0, status=sent (250 2.0.0 Ok, id=20202-01, from MTA([127.0.0.1]:10025): 250 2.0.0 Ok: queued as 174A99C4081)
Jun 14 17:10:26 servr postfix/qmgr[19547]: ECF179C408A: removed
Jun 14 17:10:26 servr postfix/smtp[20219]: 174A99C4081: to=<exped@expediteur.org>, relay=mail.expediteur.org[xx.yy.zz.tt]:25, delay=0.21, delays=0.14/0/0.02/0.05, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 4337FEEC560)
Jun 14 17:10:26 servr postfix/qmgr[19547]: 174A99C4081: removed</pre>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2010/06/16/utilisateurs-postfix-virtuels-ajouter-un-repondeur-vacation/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Monitoring (vite fait&#777;) du volume de mails</title>
		<link>http://michauko.org/blog/2009/12/09/monitoring-vite-fait-du-volume-de-mails/</link>
		<comments>http://michauko.org/blog/2009/12/09/monitoring-vite-fait-du-volume-de-mails/#comments</comments>
		<pubDate>Wed, 09 Dec 2009 07:21:18 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[mails]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[isoqlog]]></category>
		<category><![CDATA[mailgraph]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=991</guid>
		<description><![CDATA[Hop, juste pour y penser. Sur votre beau serveur de mails, pensez à mettre ces 2 outils (surtout mailgraph en fait) : aptitude install isoqlog mailgraph Il n&#8217;y a rien à dire sur le paramétrage de mailgraph. Dans le cas d&#8217;une installation standard de Debian, vous trouverez le rapport temps réel sur http://le.serveur/cgi-bin/mailgraph.cgi. Si vous [...]]]></description>
			<content:encoded><![CDATA[<p>Hop, juste pour y penser. Sur votre beau serveur de mails, pensez à mettre ces 2 outils (surtout mailgraph en fait) :</p>
<pre>aptitude install isoqlog mailgraph</pre>
<p>Il n&#8217;y a rien à dire sur le paramétrage de mailgraph. Dans le cas d&#8217;une installation standard de Debian, vous trouverez le rapport temps réel sur http://le.serveur/cgi-bin/mailgraph.cgi.</p>
<p>Si vous avez désactivé l&#8217;alias <code>/cgi-bin/</code> de la conf standard Apache, débrouillez-vous pour accéder au script <code>/usr/lib/cgi-bin/mailgraph.cgi</code>.<br />
Voici le genre de rapport que l&#8217;on obtient : <a href="http://www.stat.ee.ethz.ch/mailgraph.cgi">http://www.stat.ee.ethz.ch/mailgraph.cgi</a>.</p>
<p>Pour isoqlog, il ne vous demande que des choses faciles pendant l&#8217;installation : nom du domaine, type de logs (postfix, exim etc). Les rapports tournent en crontab journalière, résultats dans <code>/var/www/isoqlog/</code>. Par défaut, c&#8217;est donc http://le.serveur/isoqlog/ pour accéder.</p>
<p>Voilà, statistiquez bien.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2009/12/09/monitoring-vite-fait-du-volume-de-mails/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<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>
		<item>
		<title>Montage d&#8217;un serveur de mail complet (postfix, postgrey, amavisd-new, clamav, spamassassin etc)</title>
		<link>http://michauko.org/blog/2009/09/21/montage-dun-serveur-de-mail-complet-postfix-postgrey-amavisd-new-clamav-spamassassin-etc/</link>
		<comments>http://michauko.org/blog/2009/09/21/montage-dun-serveur-de-mail-complet-postfix-postgrey-amavisd-new-clamav-spamassassin-etc/#comments</comments>
		<pubDate>Mon, 21 Sep 2009 14:40:35 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[mails]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[amavisd-new]]></category>
		<category><![CDATA[clamav]]></category>
		<category><![CDATA[greylisting]]></category>
		<category><![CDATA[postfix]]></category>
		<category><![CDATA[postgrey]]></category>
		<category><![CDATA[pyzor]]></category>
		<category><![CDATA[razor]]></category>
		<category><![CDATA[rulesemporium]]></category>
		<category><![CDATA[spamassassin]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=590</guid>
		<description><![CDATA[Cet article présente la mise en place complète d&#8217;un serveur de mails sous Debian mélangeant les composants suivants : postfix, postgrey, amavisd-new, clamav, spamassassin, razor, pyzor, les règles spamassassin de RulesEmporium et enfin procmail pour délivrer dans des boîtes (ou faire suivre sur un autre backend si c&#8217;est votre cas). Ce type d&#8217;installation peut tout [...]]]></description>
			<content:encoded><![CDATA[<p>Cet article présente la mise en place complète d&#8217;un serveur de mails sous Debian mélangeant les composants suivants : postfix, postgrey, amavisd-new, clamav, spamassassin, razor, pyzor, les règles spamassassin de RulesEmporium et enfin procmail pour délivrer dans des boîtes (ou faire suivre sur un autre backend si c&#8217;est votre cas).</p>
<p>Ce type d&#8217;installation peut tout à fait convenir pour des petites et moyennes entreprises (quelques centaines de personnes), sur un serveur moyennement puissant. Pour faire simple.<span id="more-590"></span></p>
<h1>Encore une doc sur ce sujet ?</h1>
<p>Oui on s&#8217;excuse, mais comme d&#8217;habitude avec Debian, tout est déjà prêt à fonctionner et pourtant, on trouve généralement des docs de personnes mettant en place l&#8217;outil en recompilant les sources, en prenant des fichiers de conf à droite à gauche, en démolissant le beau travail déjà accompli par les packageurs Debian.<br />
Mon approche reste la même : Debian a fait le boulot pour moi, j&#8217;en profite.<br />
Au final, cet article est simplement brodée autour du README.Debian de chaque paquet qu&#8217;on va installer (surtout amavisd-new) et de quelques autres docs glanées sur le web expliquant tel ou tel paramètre, un peu plus que la doc officielle.<br />
Mais comme rares sont les gens qui lisent les README, mon article devrait quand même intéresser quelques lecteurs, je l&#8217;espère.</p>
<h1>Ce dont je ne parle pas</h1>
<p>Je ne parle pas de l&#8217;aspect lecture des mails (en POP, en IMAP, renvoi vers un autre backend (Exchange ?)), mais juste au nettoyage et au blocage amont des spams et virus.<br />
Je pars d&#8217;ailleurs d&#8217;une machine avec un postfix minimaliste sachant envoyer et recevoir des mails.<br />
Vous pouvez vous reporter à <a href="http://michauko.org/docs/debian_testing/">ma doc Debian</a> pour ce cas là, elle décrit en plus de postfix :<br />
- la mise en place de postgrey (<a href="http://michauko.org/blog/?s=postgrey">voyez l&#8217;intérêt ici</a>)<br />
- la mise en place de quelques blocages par blacklists (RBL &#038; co)<br />
- procmail<br />
Je ne parle pas non plus du montage d&#8217;un backup MX. Probablement lors d&#8217;un prochain article.</p>
<p>Enfin, je colle tous les éléments de ce serveur sur une unique machine physique. Vous pourriez séparer les éléments. A ce moment-là, un peu de raisonnement et une lecture des documentations officielles que je cite me paraît judicieux. Cet article se limiterait alors,pour vous, à comprendre le rôle de chaque morceau, à appréhender la configuration de base et à partir du coup dans la bonne direction.</p>
<p>Comme à mon habitude, je décris aussi quelques bêtises et oublis que j&#8217;ai pû rencontrer, ça aidera à débugger et ça explique des choses.</p>
<h1>Pré-requis</h1>
<p>Etre sur une Debian stable (Lenny) avec le dépôt Debian &laquo;&nbsp;volatile&nbsp;&raquo; opérationnel (pour les mises à jour de clamav).<br />
Le dépôt &laquo;&nbsp;volatile&nbsp;&raquo;, c&#8217;est ça :</p>
<pre>moi@srv:~$ cat /etc/apt/sources.list | grep vola
deb http://volatile.debian.org/debian-volatile lenny/volatile main contrib non-free</pre>
<p>C&#8217;est un dépôt créé pour palier aux problèmes des applications mises à jour constamment (les bases anti-virus par exemple, tout autant que des outils de mssageries instantanées qui voient les protocoles sous-jascents évoluer régulièrement). Si on restait sur le rythme Debian (tous les 2 ans ; <a href="http://www.debian.org/News/2009/20090729">bientôt 6 mois</a>), on aurait des applications inutiles.</p>
<h1>Rôle de chaque élément</h1>
<p>D&#8217;abord le schéma qui va bien :<br />
<div id="attachment_598" class="wp-caption aligncenter" style="width: 462px"><img src="http://michauko.org/blog/wp-content/uploads/2009/09/amavisd-new.png" alt="Cheminement du mail" title="amavisd-new" width="452" height="444" class="size-full wp-image-598" /><p class="wp-caption-text">Cheminement du mail</p></div></p>
<p>1. Postfix reçoit donc la connexion d&#8217;un serveur voulant envoyer un mail.<br />
2. Grâce à postgrey, il va filtrer déjà un bon paquet de spams qui n&#8217;atteindra pas la suite des composants (et donc pas de charge réseau/cpu inutile).<br />
3. Donc au besoin, le mail revient plus tard, suite à greylisting.<br />
4. Postfix passe le relai à amavisd-new qui orchestre les appels à :<br />
5. ClamAV qui fait ce qu&#8217;il a à faire<br />
6. et à spamassassin, lui-même gérant pyzor/razor<br />
7. Retour du mail nettoyé (disons, avec les en-têtes qui vont bien) vesr postfix<br />
8. Postfix livre le mail (dans la boîte de l&#8217;utilisateur, au backend, à je ne sais quel autre élément en aval.</p>
<h1>Doc officielle, doc complémentaire</h1>
<p>Lire <code>/usr/share/doc/amavisd-new/README.postfix.gz</code> est un passage obligé, je trouve. Je me base dessus et je fais certains choix qui pourraient ne pas être les votres. Je n&#8217;invente pas grand chose, tout est quasiment dedans.<br />
Si vous êtes sur une installation déjà en production, vous pourriez être intéressés par le paramètre <code>soft_bounce</code>, voyez <a href="http://funt.wordpress.com/2007/03/19/postfix-soft_bounce/" target="_blank">ici</a> via un :<br />
<code>postfix -e "soft_bounce = yes"</code></p>
<p>Autre doc intéressante : <a href="http://www200.pair.com/mecham/spam/spamfilter20090215.html">http://www200.pair.com/mecham/spam/spamfilter20090215.html</a>. A noter : l&#8217;auteur n&#8217;utilise pas trop le boulot de Debian, donc beaucoup de choses à reparamétrer dans son cas, sans compter les manips à la main : récupérer le fichier de conf X, prendre tel binaire postfix plutôt que celui de la distrib. Bref, pas très Debian-style à mon goût.<br />
Mais au moins il donne une bonne explication de certains paramètres, à vous de voir.<br />
Enfin, cette doc décrit le montage complet d&#8217;une Debian, installation, serveur DNS etc. On s&#8217;en fout pas mal dans le cas présent. Commencez donc à lire cette doc à partir du mot &laquo;&nbsp;postfix anti-spam settings:&nbsp;&raquo;. A peu près au milieu.<br />
Vous verrez passer dans les chapitres qui suivent cet endroit quelques paramètres importants sur le comportement des différents outils, les destinataires des notifications de mails vérolés etc, quelques optimisations sur les niveaux de spam acceptables etc. Mon article reprend certaines de ces suggestions et de ma propre expérience.<br />
Cette doc va aussi plus loin : installation de DCC (Distributed Checksum Clearinghouses) et des outils de statistiques. Je n&#8217;en parle pas (pour l&#8217;instant), on verra avec des articles ultérieurs.</p>
<p>Bon, allez, on installe tout ça.</p>
<h1>Installation des logiciels</h1>
<pre>aptitude install clamav clamav-daemon clamav-freshclam
aptitude install amavisd-new
aptitude install lha arj rar unrar nomarch lzop cabextract razor pyzor p7zip-full pax zip unzip lha zoo</pre>
<p>Certains des paquets ici sont discutables, pour les pros du ça-pue-c-est-pas-libre-(tm). Moi je veux simplement analyser un maximum de contenu de mails, pièces jointes en format moins courants y compris.<br />
Les outils type &laquo;&nbsp;décompression&nbsp;&raquo; serviront à ClamAV pour analyser les contenus de pièces jointes.</p>
<p>Les parties postfix, postgrey, spamassassin et les Maildir sont déjà expliqués dans mes docs/blog à différents endroits.<br />
Deux nuances tout de même :<br />
Je suppose enfin que votre spamassassin est en mode daemon (donc &laquo;&nbsp;spamd&nbsp;&raquo; tourne) car vous avez mis à 1 le paramètre ENABLED dans <code>/etc/default/spamassassin</code>.<br />
Par rapport à ce que j&#8217;explique sur procmail, j&#8217;ai opté pour une conf standard pour tous dans <code>/etc/procmailrc</code> plutôt que dans chaque <code>~/.procmailrc</code>.</p>
<h1>Paramétrage de base</h1>
<h2>Configuration postfix <=> amavis</h2>
<p>D&#8217;abord, on configure un canal de communication postfix => amavis en mode SMTP et pas LMTP (voir le /usr/share/doc/amavisd-new/README.postfix.gz). J&#8217;ajoute à la fin de <code>/etc/postfix/master.cf</code> des lignes suivantes :</p>
<pre>amavisfeed unix    -       -       n       -       2     smtp
     -o smtp_data_done_timeout=1200
     -o smtp_send_xforward_command=yes
     -o smtp_tls_note_starttls_offer=no</pre>
<p>Le nom &laquo;&nbsp;amavisfeed&nbsp;&raquo; est libre. Mais c&#8217;est le nom du tuyau que vous venez de créer. Il faudra utiliser ce nom plus bas (dans <code>main.cf</code>)</p>
<p>Puis le canal retour (message reinjection), toujours à la fin de <code>/etc/postfix/master.cf</code> :</p>
<pre>127.0.0.1:10025 inet n    -       n       -       -     smtpd
     -o content_filter=
     -o smtpd_delay_reject=no
     -o smtpd_client_restrictions=permit_mynetworks,reject
     -o smtpd_helo_restrictions=
     -o smtpd_sender_restrictions=
     -o smtpd_recipient_restrictions=permit_mynetworks,reject
     -o smtpd_data_restrictions=reject_unauth_pipelining
     -o smtpd_end_of_data_restrictions=
     -o smtpd_restriction_classes=
     -o mynetworks=127.0.0.0/8
     -o smtpd_error_sleep_time=0
     -o smtpd_soft_error_limit=1001
     -o smtpd_hard_error_limit=1000
     -o smtpd_client_connection_count_limit=0
     -o smtpd_client_connection_rate_limit=0
     -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks,no_milters
     -o local_header_rewrite_clients=
     -o smtpd_milters=
     -o local_recipient_maps=
     -o relay_recipient_maps=</pre>
<p>Enfin, on active le tuyau postfix => amavisd-new pour permettre l&#8217;analyse : (pas de tri, on balance tout ; on pourrait restreindre par domaine, adresse émettrice etc). C&#8217;est dans <code>/etc/postfix/main.cf</code> :</p>
<pre>content_filter=amavisfeed:[127.0.0.1]:10024</pre>
<p><P><br />
Dans cette configuration par défaut, il faut que les ports 10024 et 10025 (localement) soient libres. Les paramètres sont décrits dans la doc en .gz mentionnée ci-dessus. L&#8217;idée, en gros, est de créer un autre serveur SMTP, local uniquement sur le port 10024, avec une conf postfix indépendante et vierge &#8211; en gros &#8211; car on sait que les messages arrivant là seront passés par amavis, donc ils seront propres/nettoyés. Cette seconde instance postfix sera la porte d&#8217;entrée pour les retours d&#8217;amavisd-new.</p>
<h2>Tests des briques de la communication postfix <=> amavisd-new</h2>
<p>Là, on peut tenter un <code>/etc/init.d/postfix reload</code>.</p>
<h3> Ecoute de amavis</h3>
<p>Le 10024 répondait déjà (car c&#8217;est le port d&#8217;écoute de amavis, lancé depuis qu&#8217;on l&#8217;a installé) :</p>
<pre># telnet localhost 10024
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
220 [127.0.0.1] ESMTP amavisd-new service ready</pre>
<h3> Ecoute du 2è postfix (la voie de retour d&#8217;amavis)</h3>
<p>Le port 10025 ne fonctionne qu&#8217;après la conf dans <code>master.cf</code> et un <code>postfix reload</code> :</p>
<pre># telnet localhost 10025
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
220 srv.net ESMTP Postfix (Debian/GNU)</pre>
<h3>Tests des décodeurs de pièces jointes</h3>
<p>On peut voir les &laquo;&nbsp;décodeurs&nbsp;&raquo; qu&#8217;il manque dans <code>/var/log/mail.log</code>.</p>
<pre>/var/log/mail.log:Aug 25 17:18:21 srv amavis[28164]: No decoder for       .lha</pre>
<p>Dans le cas ci-dessus, on peut conclure que le paquet lha n&#8217;est pas installé.<br />
Attention, la doc dit quelque part de se méfier des décodeurs pour analyse des <a href="http://michauko.org/blog/2007/12/05/winmaildat-kek-jen-fais-je-le-decode-bien-sur/">TNEF</a>. Vous risquez de perdre les mails écrits en RTF par Outlook-le-casse-<del datetime="2009-09-10T11:50:45+00:00">coui</del>pied.</p>
<h3>Test du retour de mails</h3>
<p>On teste un envoi de mail à amavis, et donc le retour :</p>
<pre># telnet localhost 10024
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
220 [127.0.0.1] ESMTP amavisd-new service ready
helo localhost
250 [127.0.0.1]
mail from: <>
250 2.1.0 Sender <> OK
rcpt to:
<postmaster>
250 2.1.5 Recipient
<postmaster> OK
data
354 End data with <CR><LF>.<CR><LF>
From: virus-tester
To: undisclosed-recipients:;
Subject: amavisd test - simple - no spam test pattern

 This is a simple test message from the amavisd-new test-messages.
.
250 2.0.0 Ok, id=28165-03, from MTA([127.0.0.1]:10025): 250 2.0.0 Ok: queued as 5FD7D9C4057
quit
221 2.0.0 [127.0.0.1] amavisd-new closing transmission channel
Connection closed by foreign host.</pre>
<p>Résultats dans <code>/var/log/mail.log</code> (le retour à postfix prend quelques secondes) :</p>
<pre># tail /var/log/mail.log
Aug 27 11:37:43 srv postfix/smtpd[681]: connect from localhost.localdomain[127.0.0.1]
Aug 27 11:37:43 srv postfix/smtpd[681]: 5FD7D9C4057: client=localhost.localdomain[127.0.0.1]
Aug 27 11:37:43 srv postfix/cleanup[683]: 5FD7D9C4057: message-id=<20090827093743.5FD7D9C4057@srv.net>
Aug 27 11:37:43 srv postfix/qmgr[30259]: 5FD7D9C4057: from=<>, size=724, nrcpt=1 (queue active)
Aug 27 11:37:43 srv amavis[28165]: (28165-03) Passed BAD-HEADER, <> ->
<postmaster>, quarantine: 5/badh-5kHJ7I-xUr2T, mail_id: 5kHJ7I-xUr2T, Hits: -, size: 175, queued_as: 5FD7D9C4057, 81992 ms
Aug 27 11:38:39 srv postfix/local[684]: 5FD7D9C4057: to=<root@srv.net>, orig_to=
<postmaster>, relay=local, delay=56, delays=0.14/0/0/56, dsn=2.0.0, status=sent (delivered to command: /usr/bin/procmail -a "$EXTENSION")
Aug 27 11:38:39 srv postfix/qmgr[30259]: 5FD7D9C4057: removed</pre>
<h2>Activation de l&#8217;appel amavisd-new <=> ClamAV+Spamassassin</h2>
<h3>Enlevez les commentaires, c&#8217;est tout</h3>
<p>C&#8217;est expliqué ici : <code>/usr/share/doc/amavisd-new/README.Debian</code>.<br />
Comme d&#8217;hab, les fichiers de conf pré-machés par Debian sont très bien et attention à ne pas tenir trop compte de documentation de bidouilleurs qui paramètrent tout ça à la sauce pas-très-Debian.<br />
D&#8217;après le README cité ci-dessus, la conf s&#8217;active dans <code>/etc/amavis/conf.d/15-content_filter_mode</code>. Il suffit de décommenter les 4 lignes suivantes dans <code>/etc/amavis/conf.d/15-content_filter_mode</code> : (2 pour ClamAV, 2 pour spamassassin)</p>
<pre>@bypass_virus_checks_maps = (
   \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);
@bypass_spam_checks_maps = (
   \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);</pre>
<p>En faisant celà, on active la conf définie dans les autres fichiers de <code>/etc/amavis/conf.d/</code>, exemple <code>15-av_scanners</code> pour les anti-virus. Il s&#8217;agit là aussi de modèle de configuration standard de tout un tas d&#8217;outils connus (une bonne 15aine d&#8217;anti-virus dont NOD32, F-Prot, Grisoft, KAV, du symantec etc). Amavisd-new va donc charger les AV qu&#8217;il trouve. De même pour spamassassin.</p>
<h3>Petit oubli pour ClamAV</h3>
<p>On se paye une erreur :</p>
<pre>Aug 27 16:03:09 mon_srv amavis[17143]: (17143-01) (!!)run_av (ClamAV-clamd) FAILED - unexpected , output="/var/lib/amavis/tmp/amavis-20090827T160309-17143/parts: lstat() failed: Permission denied. ERROR\n"
Aug 27 16:03:09 mon_srv amavis[17143]: (17143-01) (!!)ClamAV-clamd av-scanner FAILED: CODE(0x90a9148) unexpected , output="/var/lib/amavis/tmp/amavis-20090827T160309-17143/parts: lstat() failed: Permission denied. ERROR\n" at (eval 86) line 527.
Aug 27 16:03:09 mon_srv amavis[17143]: (17143-01) (!!)WARN: all primary virus scanners failed, considering backups</pre>
<p>L&#8217;utilisateur clamav doit être dans le groupe amavis, on fait ce qui est dit dans le README.Debian de amavisd-new :</p>
<pre># adduser clamav amavis
Ajout de l'utilisateur « clamav » au groupe « amavis »...
Ajout de l'utilisateur clamav au groupe amavis
Terminé.</pre>
<p>Et on contrôle le paramètre suivant dans la conf ClamAV : <code>AllowSupplementaryGroups true</code>. C&#8217;est déjà positionné dans le <code>/etc/clamav/clamd.conf</code> fraîchement dépaqueté. Vérifiez tout de même.<br />
Et on redémarre ClamAV évidemment.</p>
<h1>On peaufine certains paramètres</h1>
<h2>Destinataires des alertes</h2>
<p>Pensez à bien ajuster les destinataires de &laquo;&nbsp;abuse&nbsp;&raquo;, &laquo;&nbsp;postmaster&nbsp;&raquo; et &laquo;&nbsp;root&nbsp;&raquo; de votre serveur. Soit en modifiant les variables comme :</p>
<pre>$virus_admin
$banned_admin
$mailfrom_notify_admin OU recip OU spamadmin
$hdrfrom_notify_sender</pre>
<p>Soit en étant sûr que ces comptes par défaut (et obligatoires, surtout postmaster) font bien suivre les mails vers une adresse que vous lisez/survolez.</p>
<p>Voyez la doc mentionnée plus haut pour des suggestions à propos des variables <code>$virus_admin</code> &#038; co.</p>
<h2>Resctrictions de base de postfix</h2>
<p>Je n&#8217;en parle pas trop, mais pensez à la conf de base de postfix, notamment votre paramètre <code>smtpd_sender_restrictions</code> dans <code>/etc/postfix/main.cf</code>.<br />
Utilisez un service web quelconque sur Google pour valider que votre serveur n&#8217;est pas un open-relay.</p>
<h2>Pièces jointes</h2>
<p>Dans <code>/etc/amavis/conf.d/20-debian_defaults</code>, je suggère d&#8217;élargir la liste des pièces jointes interdites (par extension). <em>Plus besoin de sanitizer, c&#8217;est intégré dans amavisd-new</em>. Exemple :</p>
<pre>### JACQUES
#  qr'.\.(exe|vbs|pif|scr|bat|cmd|com|cpl)$'i, # banned extension - basic
 qr'.\.(ade|adp|app|bas|bat|chm|cmd|com|cpl|crt|emf|exe|fxp|grp|hlp|hta|
        inf|ins|isp|js|jse|lnk|mda|mdb|mde|mdw|mdt|mdz|msc|msi|msp|mst|
        ops|pcd|pif|prg|reg|scr|sct|shb|shs|vb|vbe|vbs|
        wmf|wsc|wsf|wsh)$'ix,  # banned ext - long
###

# qr'.\.(mim|b64|bhx|hqx|xxe|uu|uue)$'i,  # banned extension - WinZip vulnerab.

  qr'^\.(exe-ms)$',                       # banned file(1) types
# qr'^\.(exe|lha|tnef|cab|dll)$',         # banned file(1) types
### JACQUES
  qr'^\.(exe|lha|cab|dll)$', # OK pour TNEF, merci outlook
###</pre>
<h2>Comportement lors de détection de spam</h2>
<p>EDIT 08/10/2009. Quelques variables importantes à positionner (écraser par rapport à la conf par défaut) :</p>
<pre>[...]
serveur:/etc/amavis/conf.d# cat 50-user
$final_spam_destiny = D_DISCARD; # pour eviter de renvoyer des notifications inutiles a des zombies
$sa_tag_level_deflt  = undef; # pour toujours avoir le tag dans les headers, même si c'est pas du spam
$sa_tag2_level_deflt = 5.0; # d'habitude je mets 5, na !
$sa_kill_level_deflt = 12.0; # d'experience, a 10 on est deja bien bien sur que c'est du spam
[...]</pre>
<p><strong>Enfin, j&#8217;avais oublié un point important, la variable &laquo;&nbsp;@local_domains_acl&nbsp;&raquo;.</strong> Elle défini la liste des domaines sur lesquels spamassassin va intervenir. Les domaines non listés ici ne sont tout simplement pas pris en compte, donc pas analysés, donc pas &laquo;&nbsp;flaggés&nbsp;&raquo;&#8230;<br />
Je ne l&#8217;avais pas vu au début car avec un seul domaine qui est le nom de la machine etc, tout va bien avec le choix par défaut de Debian dans <code>05-domain_id:@local_domains_acl = ( ".$mydomain" );</code>.<br />
Là où ça se complique, c&#8217;est quand vous gérez plusieurs domaines, suivant comment votre bousin est défini. Par exemple avec des domaines virtuels, gérés en base de données, c&#8217;est mort (<em>prochain article à venir sur la gestion de domaines et d&#8217;utilisateurs virtuels</em>).<br />
J&#8217;ai donc forcé cette variable dans le fichier <code>/etc/amavis/conf.d/50-user</code> :</p>
<pre>@local_domains_acl = ( ".maboite.fr", "un.autre.alias.net" );</pre>
<p>A noter que là, je prends en charge les éventuels sous-domaines &laquo;&nbsp;toto.maboite.fr&nbsp;&raquo; (c&#8217;est voulu, grâce au point devant &laquo;&nbsp;maboite&nbsp;&raquo;) et uniquement &laquo;&nbsp;un.autre.alias.net&nbsp;&raquo;, mais pas un domaine de mails qui s&#8217;appellerait &laquo;&nbsp;encore.un.autre.alias.net&nbsp;&raquo;. Pigé ?</p>
<h2>Quarantaine</h2>
<p>Où doivent aller les mails vérolés ? Par défaut, je suggère de ne rien toucher au paramètre <code>$virus_quarantine_to</code>, ainsi les mails vérolés vont dans une arborescence de <code>/var/lib/amavis/virusmails</code>. Jetez-y un oeil une fois des tests de détection effectués (voir ci-dessous, dernier chapitre).<br />
Et documentez vous sur <code>amavisd-release</code>.</p>
<h2>Décodeurs, suite et fin</h2>
<p>Dans <code>/etc/amavis/conf.d/01-debian</code>, jouez avec les variables <code>$unrar</code> et autres qui vous intéressent (oui oui, unrar c&#8217;est pas libre, tout ça, installez le paquet vrms). Il vous faut les applications correspondantes. Voyez le log <code>/var/log/mail.log</code> pour savoir ce qu&#8217;il manque par rapport à votre conf.</p>
<h2>spamassassin</h2>
<blockquote><p>If you use spamassassin with the Bayes database system, you should make sure<br />
that the spamassassin configuration option &laquo;&nbsp;bayes_auto_expire 0&#8243; is set in<br />
spamassassin configure files.  This disables the automatic expiration of tokens<br />
which causes problems for amavisd-new when activated.  The amavisd-new package<br />
includes cron jobs that take care of syncing and expiring the token database<br />
frequently.</p></blockquote>
<p>Je ne mesure pas trop l&#8217;impact, à vrai dire, mais je suppose qu&#8217;il vaut mieux le faire, donc ajoutez <code>bayes_auto_expire 0</code> dans la conf <code>/etc/spamassassin/local.cf</code>.</p>
<h2>Mise à jour de l&#8217;anti-virus</h2>
<p>Le programme freshclam est planifié automatiquement lors de l&#8217;installation de ClamAV. Vous pouvez contrôler sa bonne exécution (il tourne une fois par heure) dans :</p>
<pre>srv:/etc# tail /var/log/clamav/freshclam.log
Received signal: wake up
ClamAV update process started at Thu Sep 10 15:25:18 2009
main.cvd is up to date (version: 51, sigs: 545035, f-level: 42, builder: sven)
daily.cld is up to date (version: 9791, sigs: 77548, f-level: 43, builder: guitar)
--------------------------------------
Received signal: wake up
ClamAV update process started at Thu Sep 10 16:25:18 2009
main.cvd is up to date (version: 51, sigs: 545035, f-level: 42, builder: sven)
daily.cld is up to date (version: 9791, sigs: 77548, f-level: 43, builder: guitar)
--------------------------------------</pre>
<h1>Testez avec EICAR</h1>
<p>EICAR est un virus inoffensif. Essayez de vous envoyer des mails avec différentes pièces jointes fournies ici : <a href="http://securite-informatique.info/virus/eicar/">http://securite-informatique.info/virus/eicar/</a>. Vous validerez ainsi la réaction de votre serveur.<br />
J&#8217;ai eu une erreur dans le <code>mail.info</code> lors de la détection du virus. Le serveur tente d&#8217;informer l&#8217;admin des virus, mais avec une légère erreur de syntaxe sur l&#8217;expéditeur :</p>
<pre>Sep 21 15:33:37 ns305192 postfix/smtpd[20381]: warning: Illegal address syntax from localhost.localdomain[127.0.0.1] in MAIL command:
<postmaster@${myhostname}></pre>
<p>J&#8217;ai alors modifié la liste des expéditeurs de mails d&#8217;alertes. Dans le fichier <code>/etc/amavis/conf.d/50-user</code> :</p>
<pre>$mailfrom_notify_admin='postmaster@chezmoi.fr';
$mailfrom_notify_recip='postmaster@chezmoi.fr';
$mailfrom_notify_spamadmin='postmaster@chezmoi.fr';
$mailfrom_to_quarantine='postmaster@chezmoi.fr';</pre>
<p>J&#8217;ai trouvé la liste de toutes les adresses émettrices d&#8217;alertes sur ce site : <a href="http://www.radical-spam.org/documentations/amavisd-new.html" target="_blank" >http://www.radical-spam.org/documentations/amavisd-new.html</a>. Il y a de belles explications sur les modèles de mails et d&#8217;autres trucs. Bref, à survoler.<br />
Je n&#8217;ai pas trouvé comme pour postfix une commande permettant de voir les variables en mémoire d&#8217;amavisd-new. Si ça existe, je suis preneur.</p>
<p><hR><br />
Voilà. Je crois qu&#8217;une fois tout ceci fait, votre serveur est paré à en prendre plein la tête.<br />
Pensez à des outils genre mailgraph, surveillez vos logs, surtout au début.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2009/09/21/montage-dun-serveur-de-mail-complet-postfix-postgrey-amavisd-new-clamav-spamassassin-etc/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Séquence de greylisting</title>
		<link>http://michauko.org/blog/2009/08/27/sequence-de-greylisting/</link>
		<comments>http://michauko.org/blog/2009/08/27/sequence-de-greylisting/#comments</comments>
		<pubDate>Thu, 27 Aug 2009 14:35:09 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[mails]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[amavis]]></category>
		<category><![CDATA[clamav]]></category>
		<category><![CDATA[greylisting]]></category>
		<category><![CDATA[mail.info]]></category>
		<category><![CDATA[mail.log]]></category>
		<category><![CDATA[postfix]]></category>
		<category><![CDATA[postgrey]]></category>
		<category><![CDATA[rulesemporium]]></category>
		<category><![CDATA[spam]]></category>
		<category><![CDATA[spamassassin]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=581</guid>
		<description><![CDATA[Je suis en train de préparer une doc de mise en place sauce Debian de la fameuse chaîne complète de traitement de mails : postfix + postgrey + amavisd-new + spamassassin + RulesEmporium + clamav. (j&#8217;en oublie ? ) D&#8217;ici que la doc soit prête dans sa globalité, j&#8217;en profite pour zoomer sur le greylisting [...]]]></description>
			<content:encoded><![CDATA[<p>Je suis en train de préparer une doc de mise en place sauce Debian de la fameuse chaîne complète de traitement de mails : postfix + postgrey + amavisd-new + spamassassin + RulesEmporium + clamav. (j&#8217;en oublie ? <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> )<br />
D&#8217;ici que la doc soit prête dans sa globalité, j&#8217;en profite pour zoomer sur le greylisting (qui en gros, me divise en général par 10 les spams entrants sur un serveur donnée qui ne faisait pas de greylisting).<span id="more-581"></span></p>
<p>Pour ceux qui n&#8217;utiliseraient pas encore de greylisting pour limiter le nombre de spams en entrée de ses serveurs de mails, j&#8217;explique comment mettre en place <a href="http://michauko.org/docs/debian_testing/">dans ma doc Debian</a> et dans <a href="http://michauko.org/blog/tag/spam/">plusieurs articles sur ce blog</a>.</p>
<p>Voici donc une capture d&#8217;un échange dans <code>/var/log/mail.[info|log]</code> d&#8217;un serveur envoyant un mail à cette architecture postfix/postgrey. Vous pouvez l&#8217;imprimer et l&#8217;afficher au-dessus de votre lit, c&#8217;est joli.</p>
<h1>Rappel de la théorie</h1>
<p>Le greylisting demande à l&#8217;émetteur de renvoyer le mail plus tard, disons 5 minutes. C&#8217;est un comportement normal et possible d&#8217;un serveur SMTP. Si l&#8217;expéditeur est complètement bidon (un zombie par exemple), cette réponse n&#8217;arrive jamais. Le mail &#8211; qui est un spam ou venant d&#8217;un serveur configuré avec les pieds &#8211; ne reviendra jamais et n&#8217;ira donc pas plus loin que la porte d&#8217;entrée du serveur. Pas de traitement anti-spam, rien. Economie de charge CPU etc.<br />
Au bout de quelques mails effectivement reçus de la part de tel serveur, alors on le whiteliste car il semble au moins digne de confiance (je n&#8217;ai pas dit qu&#8217;il n&#8217;envoyait pas du spam). Attention au délai de réception pendant une journée ou 2.</p>
<h1>Let&#8217;s go</h1>
<h2>Prise de contact</h2>
<pre>Aug 27 15:51:05 mon_srv postfix/smtpd[17150]: connect from le.nouvel.expediteur.fr[10.20.30.40]
Aug 27 15:51:06 mon_srv postgrey[12790]: action=greylist, reason=new, client_name=le.nouvel.expediteur.fr, client_address=10.20.30.40, sender=exped@iteur.fr, recipient=destin@mon_srv.fr
Aug 27 15:51:06 mon_srv postgrey[12790]: cleaning up old logs...
Aug 27 15:51:06 mon_srv postfix/smtpd[17150]: NOQUEUE: reject: RCPT from le.nouvel.expediteur.fr[10.20.30.40]: 450 4.2.0 <exped@iteur.fr>: Sender address rejected: Greylisted, see http://postgrey.schweikert.ch/help/mon_srv.ovh.net.html; from=<exped@iteur.fr> to=<destin@mon_srv.fr> proto=ESMTP helo=<intern.srv.fr>
Aug 27 15:51:06 mon_srv postfix/smtpd[17150]: disconnect from le.nouvel.expediteur.fr[10.20.30.40]
</pre>
<p>On voit l&#8217;action de postgrey (<code>action=greylist</code>) au motif que ce serveur n&#8217;a pas encore été whitelisté (<code>reason=new</code>)<br />
Avant dernière ligne : on informe le serveur expéditeur qu&#8217;il est greylisté, on en profite pour expliquer à l&#8217;admin d&#8217;en face qui (peut-être) lit les logs ce qu&#8217;est le greylisting.<br />
Sous-entendu, on lui dit via le code retour 450 que la boite a un problème temporaire, sous-entendu, retente plus tard. Attention, on ne dit pas code 550 qui signifierait &laquo;&nbsp;la boite est morte définitivement&nbsp;&raquo;.</p>
<p>Maintenant on attend de voir s&#8217;il nous recontacte</p>
<h2>Il revient, mais trop tôt </h2>
<p>Une minute plus tard, on a :</p>
<pre>Aug 27 15:52:06 mon_srv postfix/smtpd[17150]: connect from le.nouvel.expediteur.fr[10.20.30.40]
Aug 27 15:52:06 mon_srv postgrey[12790]: action=greylist, reason=early-retry (239s missing), client_name=le.nouvel.expediteur.fr, client_address=10.20.30.40, sender=exped@iteur.fr, recipient=destin@mon_srv.fr
Aug 27 15:52:06 mon_srv postfix/smtpd[17150]: NOQUEUE: reject: RCPT from le.nouvel.expediteur.fr[10.20.30.40]: 450 4.2.0 <exped@iteur.fr>: Sender address rejected: Greylisted, see http://postgrey.schweikert.ch/help/mon_srv.ovh.net.html; from=<exped@iteur.fr> to=<destin@mon_srv.fr> proto=ESMTP helo=<intern.srv.fr>
Aug 27 15:52:06 mon_srv postfix/smtpd[17150]: disconnect from le.nouvel.expediteur.fr[10.20.30.40]
</pre>
<p>L&#8217;action est de le greylister à nouveau au motif qu&#8217;il est trop tôt (<code>reason=early-retry (239s missing)</code>). Le temps doit être donné dans la réponse d&#8217;indisponibilité temporaire mais ça ne se voit pas au niveau des logs).<br />
Et on le renvoit dans ses pénates.<br />
Le revoilà, mais encore trop tôt.< méchanceté gratuite>C&#8217;est un serveur Exchange, il ne doit rien comprendre à ce qu&#8217;on dit< /méchanceté gratuite>.</p>
<pre>Aug 27 15:53:06 mon_srv postfix/smtpd[17150]: connect from le.nouvel.expediteur.fr[10.20.30.40]
Aug 27 15:53:08 mon_srv postgrey[12790]: action=greylist, reason=early-retry (177s missing), client_name=le.nouvel.expediteur.fr, client_address=10.20.30.40, sender=exped@iteur.fr, recipient=destin@mon_srv.fr
Aug 27 15:53:08 mon_srv postfix/smtpd[17150]: NOQUEUE: reject: RCPT from le.nouvel.expediteur.fr[10.20.30.40]: 450 4.2.0 <exped@iteur.fr>: Sender address rejected: Greylisted, see http://postgrey.schweikert.ch/help/mon_srv.ovh.net.html; from=<exped@iteur.fr> to=<destin@mon_srv.fr> proto=ESMTP helo=<intern.srv.fr>
Aug 27 15:53:08 mon_srv postfix/smtpd[17150]: disconnect from le.nouvel.expediteur.fr[10.20.30.40]
</pre>
<h2>&#777;Trop c&#8217;est trop : anvil</h2>
<p>Maintenant, c&#8217;est simplement le processus &laquo;&nbsp;anvil&nbsp;&raquo; de postfix, le &laquo;&nbsp;contrôleur de nombre de sessions et taux de bourrinage&nbsp;&raquo; qui détecte que le serveur en face est un peu trop insistant (il vient trop souvent) :</p>
<pre>
Aug 27 15:56:28 mon_srv postfix/anvil[17153]: statistics: max connection rate 1/60s for (smtp:10.20.30.40) at Aug 27 15:51:05
Aug 27 15:56:28 mon_srv postfix/anvil[17153]: statistics: max connection count 1 for (smtp:10.20.30.40) at Aug 27 15:51:05
Aug 27 15:56:28 mon_srv postfix/anvil[17153]: statistics: max cache size 1 at Aug 27 15:51:05
</pre>
<p>On ferme carrément la connexion. Reviens plus tard on te dit.</p>
<h2>Là il est calmé</h2>
<pre>Aug 27 16:03:09 mon_srv postfix/smtpd[17159]: connect from le.nouvel.expediteur.fr[10.20.30.40]
Aug 27 16:03:09 mon_srv postgrey[12790]: action=pass, reason=triplet found, delay=724, client_name=le.nouvel.expediteur.fr, client_address=10.20.30.40, sender=exped@iteur.fr, recipient=destin@mon_srv.fr
</pre>
<p>J&#8217;accepte son mail comme on voit ci-dessous (<code>action=pass</code>) au motif qu&#8217;on l&#8217;a déjà bien embêté (<code>reason=triplet found</code>). Au final, il y a aura eu pour ce mail 724 secondes de délai. Rappelez-vous que ça peut être gênant lors d&#8217;une mise en place sur un serveur déjà en prod.</p>
<p>La suite est l&#8217;enchaînement logique postfix :</p>
<pre>Aug 27 16:03:09 mon_srv postfix/smtpd[17159]: 1E6B29C4057: client=le.nouvel.expediteur.fr[10.20.30.40]
Aug 27 16:03:09 mon_srv postfix/cleanup[17164]: 1E6B29C4057: message-id=<8DDA8A0D37FFCE449E93D51188CDBE5BEDA572@intern.srv.fr>
Aug 27 16:03:09 mon_srv postfix/qmgr[15006]: 1E6B29C4057: from=<exped@iteur.fr>, size=6905, nrcpt=1 (queue active)
Aug 27 16:03:09 mon_srv postfix/smtpd[17159]: disconnect from le.nouvel.expediteur.fr[10.20.30.40]
</pre>
<p>On arrive dans amavisd-new :</p>
<pre>Aug 27 16:03:09 mon_srv amavis[17143]: (17143-01) (!!)run_av (ClamAV-clamd) FAILED - unexpected , output="/var/lib/amavis/tmp/amavis-20090827T160309-17143/parts: lstat() failed: Permission denied. ERROR\n"
Aug 27 16:03:09 mon_srv amavis[17143]: (17143-01) (!!)ClamAV-clamd av-scanner FAILED: CODE(0x90a9148) unexpected , output="/var/lib/amavis/tmp/amavis-20090827T160309-17143/parts: lstat() failed: Permission denied. ERROR\n" at (eval 86) line 527.
Aug 27 16:03:09 mon_srv amavis[17143]: (17143-01) (!!)WARN: all primary virus scanners failed, considering backups
</pre>
<p>Aaaaah, ça foire (normal j&#8217;ai juste installé clamav, il est détecté par amavis, mais je n&#8217;ai rien configuré. Je dois avoir un problème de droits/groupes, ce genre-là. On verra dans mon prochain article qui décrira toute la mise en place.</p>
<pre>
Aug 27 16:03:10 mon_srv postfix/smtpd[17169]: connect from localhost.localdomain[127.0.0.1]
Aug 27 16:03:10 mon_srv postfix/smtpd[17169]: C2A8D9C405B: client=localhost.localdomain[127.0.0.1]
Aug 27 16:03:10 mon_srv postfix/cleanup[17164]: C2A8D9C405B: message-id=<8DDA8A0D37FFCE449E93D51188CDBE5BEDA572@intern.srv.fr>
Aug 27 16:03:10 mon_srv postfix/qmgr[15006]: C2A8D9C405B: from=<exped@iteur.fr>, size=7349, nrcpt=1 (queue active)
Aug 27 16:03:10 mon_srv amavis[17143]: (17143-01) Passed CLEAN, [10.20.30.40] [10.20.30.40] <exped@iteur.fr> -> <exped@iteur.fr>, Message-ID: <8DDA8A0D37FFCE449E93D51188CDBE5BEDA572@intern.srv.fr>, mail_id: xmX0C24kDlYt, Hits: -, size: 6905, queued_as: C2A8D9C405B, 1764 ms
Aug 27 16:03:10 mon_srv postfix/smtp[17165]: 1E6B29C4057: to=<exped@iteur.fr>, orig_to=<destin@mon_srv.fr>, relay=127.0.0.1[127.0.0.1]:10024, delay=1.9, delays=0.11/0/0/1.8, dsn=2.0.0, status=sent (250 2.0.0 Ok, id=17143-01, from MTA([127.0.0.1]:10025): 250 2.0.0 Ok: queued as C2A8D9C405B)
Aug 27 16:03:10 mon_srv postfix/qmgr[15006]: 1E6B29C4057: removed
</pre>
<p>Ci-dessus on a le baratin standard d&#8217;un amavis sans clamav (avec son anti-virus interne) qui finit par accepter le mail et le délivrer.</p>
<p>Voilà, c&#8217;est beau, on dirait du Rimbaud.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2009/08/27/sequence-de-greylisting/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>@tele2.fr : erreur ? migration en cours&#8230;</title>
		<link>http://michauko.org/blog/2009/08/27/tele2-fr-erreur-migration-en-cours/</link>
		<comments>http://michauko.org/blog/2009/08/27/tele2-fr-erreur-migration-en-cours/#comments</comments>
		<pubDate>Thu, 27 Aug 2009 10:02:20 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[bugs]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[mails]]></category>
		<category><![CDATA[mail]]></category>
		<category><![CDATA[sfr]]></category>
		<category><![CDATA[swip.net]]></category>
		<category><![CDATA[tele2.fr]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=578</guid>
		<description><![CDATA[Depuis quelques temps, j&#8217;ai un serveur de mails communiquant avec des clients ayant une adresse &#171;&#160;@tele2.fr&#160;&#187; qui se fait jeter systématiquement lors de l&#8217;envoi de mails. Il n&#8217;y a pas de code de retour : quel.qu.un@tele2.fr le 26/08/2009 16:06 Le système de messagerie n'a pas pu remettre ce message mais n'a pas signalé de raison [...]]]></description>
			<content:encoded><![CDATA[<p>Depuis quelques temps, j&#8217;ai un serveur de mails communiquant avec des clients ayant une adresse &laquo;&nbsp;@tele2.fr&nbsp;&raquo; qui se fait jeter systématiquement lors de l&#8217;envoi de mails.<br />
Il n&#8217;y a pas de code de retour :<span id="more-578"></span></p>
<pre>quel.qu.un@tele2.fr le 26/08/2009 16:06
            Le système de messagerie n'a pas pu remettre ce message mais n'a pas signalé de raison particulière. Vérifiez l'adresse du destinataire et réessayez d'envoyer le message. Dans le cas d'un nouvel échec, contactez votre administrateur système.
            < mailfe09.swip.net #4.0.0>
</pre>
<p>J&#8217;ai d&#8217;abord pensé à un problème passager lié sûrement au rachat par SFR/NEUF/CEGETEL. Mais le problème dure dans le temps&#8230;<br />
Puis j&#8217;ai pensé à une sorte de blacklist où le serveur en face ne se donnerait même pas la peine de m&#8217;expliquer pourquoi il me jette.<br />
Donc j&#8217;ai contacté postmaster@tele2.fr pour demander ; en anglais, car il y a un renvoi vers des bal @swip.net qui ne sont pas des français.</p>
<p>Réponse claire : suite au rachat, migration en cours, les clients sont informés, les boîtes n&#8217;existent plus.</p>
<blockquote><p>Hello Jacques,<br />
Tele2 Europe has divested its french operations.<br />
We are in the middle of a migrationprocess with the buyer(www.sfr.se) of our french operations right now.</p>
<p>This involves that the customers chooses a new emailadress in SFR mailsystem.<br />
The mailadress you are trying to reach has been moved to their system.</p>
<p>Best Regards<br />
Jonas Johnsson<br />
Postmaster<br />
Tele2 Europe
</p></blockquote>
<p>(Et démerdez-vous pour contacter les gens qui se cachaient derrière cette adresse ; et si ce sont des clients tant pis)</p>
<p>Je ne connais personne &laquo;&nbsp;chez&nbsp;&raquo; tele2.fr, donc je n&#8217;ai pas d&#8217;information du client lambda.<br />
Si vous en avez, n&#8217;hésitez pas à faire un commentaire.</p>
<p>Je doute qu&#8217;il suffise de remplacer tele2 par SFR dans l&#8217;adresse. Les clients vont sûrement en choisir une nouvelle. Risque de téléscopage trop gros avec les abonnés déjà existants chez SFR.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2009/08/27/tele2-fr-erreur-migration-en-cours/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Se faire déblacklister de chez AOL&#8230;</title>
		<link>http://michauko.org/blog/2009/07/23/se-faire-deblacklister-de-chez-aol/</link>
		<comments>http://michauko.org/blog/2009/07/23/se-faire-deblacklister-de-chez-aol/#comments</comments>
		<pubDate>Thu, 23 Jul 2009 15:03:41 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[coup de gueule]]></category>
		<category><![CDATA[mails]]></category>
		<category><![CDATA[AOL]]></category>
		<category><![CDATA[blacklist]]></category>
		<category><![CDATA[MX]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=403</guid>
		<description><![CDATA[Bon, c&#8217;est pas que j&#8217;aime AOL ni particulièrement ses abonnés, mais bon, on ne choisit pas ses clients ni leurs adresses&#8230; V&#8217;là &#8216;tit pas que pour raison un peu douteuse, un serveur de mails à moi s&#8217;est fait blacklisté par AOL. Je me prends quelques erreurs dans ce genre : This message was created automatically [...]]]></description>
			<content:encoded><![CDATA[<p>Bon, c&#8217;est pas que j&#8217;aime AOL ni particulièrement ses abonnés, mais bon, on ne choisit pas ses clients ni leurs adresses&#8230;<br />
V&#8217;là &#8216;tit pas que pour raison un peu douteuse, un serveur de mails à moi s&#8217;est fait blacklisté par AOL.<br />
Je me prends quelques erreurs dans ce genre :<span id="more-403"></span></p>
<pre>This message was created automatically by mail delivery software.

A message that you sent could not be delivered to one or more of its
recipients. This is a permanent error. The following address(es) failed:

  ducon.lajoie@aol.com
    SMTP error from remote mailer after initial connection:
    host mailin-04.mx.aol.com [64.12.138.57]: 554- (RTR:CH)  http://postmaster.info.aol.com/errors/554rtrch.html
    554  Connecting IP: xx.yy.zz.tt

------ This is a copy of the message, including all the headers. ------

Return-path: <bla@chezmoi.fr>
</pre>
<p>En allant voir sur <a href="http://postmaster.info.aol.com/errors/554rtrch.html">http://postmaster.info.aol.com/errors/554rtrch.html</a>, vous allez vite atterrir sur un merveilleux formulaire de &laquo;&nbsp;déblacklistage&nbsp;&raquo;.<br />
<strong>ATTENTION : c&#8217;est de la merde en barre !!! (et je pèse mes mots)</strong><br />
Il y a notamment un fabuleux &laquo;&nbsp;test DNS&nbsp;&raquo; dont il faut copier le résultat.<br />
Voici ce qu&#8217;il va vous arriver ensuite :</p>
<ul>
<li>si vous comptiez faire un &laquo;&nbsp;host -t MX aol.com&nbsp;&raquo;, oubliez, le formulaire ne reconnait pas la réponse, il attend du nslookup à priori</li>
<li>vous vous résignez alors à faire un &laquo;&nbsp;nslookup -q=mx aol.com&nbsp;&raquo; depuis un PC dans le coin, le formulaire n&#8217;en veut toujours pas</li>
<li>OK, j&#8217;enlève mon C:\blabla\nslookup et je mets comme eux sur l&#8217;exemple &laquo;&nbsp;c:\nslookup&#8230;&nbsp;&raquo;, toujours pas bon</li>
<li>Google, peut-être qu&#8217;un autre mec a eu affaire à ce formulaire à chier, oui. <a href="http://www.streamsend.com/kb2/idx.php/13/104/Improving-Delivery/article/How-to-get-unblocked-by-AOL.html">Allez le voir, c&#8217;est la solution</a></li>
<li>Ah, il faut supprimer la ligne avec C:\, toujours pas bon</li>
<li>ahahah, je suis sur un XP français, je remplace &laquo;&nbsp;serveur&nbsp;&raquo; par &laquo;&nbsp;server&nbsp;&raquo;, toujours pas bon</li>
<li>Bon bordel, je vire tout, je copie le baratin exact de ce site (ci-dessus), je remplace l&#8217;IP XX.XX.XX.XX par l&#8217;IP de mon serveur blacklisté et comme ça, l&#8217;autre abruti de formulaire va lire ce qu&#8217;il attend. De toute manière, j&#8217;ai déjà vérifié que ma résolution MX était bonne, c&#8217;est juste ce formulaire pourri qui veut rien savoir.</li>
</ul>
<p><P><br />
<strong>Magie, ça passe !!! Maintenant, j&#8217;attends le retour&#8230;</strong></p>
<p>J&#8217;aimerais bien discuter avec le mec qui a pondu un tel mécanisme daubesque&#8230;</p>
<p>Je recopie la réponse attendue, elle vaut cher :</p>
<pre>Server:  ns3.o1.com
Address:  XX.XX.XX.XX <----- changez ça !!!!!!!!!!!!

Non-authoritative answer:
aol.com MX preference = 15, mail exchanger = mailin-02.mx.aol.com
aol.com MX preference = 15, mail exchanger = mailin-03.mx.aol.com
aol.com MX preference = 15, mail exchanger = mailin-04.mx.aol.com
aol.com MX preference = 15, mail exchanger = mailin-01.mx.aol.com
aol.com nameserver = dns-07.ns.aol.com
aol.com nameserver = dns-01.ns.aol.com
aol.com nameserver = dns-02.ns.aol.com
aol.com nameserver = dns-06.ns.aol.com
mailin-01.mx.aol.com    internet address = 205.188.156.248
mailin-01.mx.aol.com    internet address = 205.188.159.57
mailin-01.mx.aol.com    internet address = 64.12.139.249
mailin-02.mx.aol.com    internet address = 205.188.249.91
mailin-02.mx.aol.com    internet address = 64.12.137.89
mailin-02.mx.aol.com    internet address = 64.12.138.120
mailin-02.mx.aol.com    internet address = 205.188.155.72
mailin-03.mx.aol.com    internet address = 205.188.109.56
mailin-03.mx.aol.com    internet address = 205.188.252.17
mailin-03.mx.aol.com    internet address = 64.12.138.153
mailin-04.mx.aol.com    internet address = 64.12.138.57
mailin-04.mx.aol.com    internet address = 64.12.138.88
mailin-04.mx.aol.com    internet address = 205.188.159.216
dns-01.ns.aol.com       internet address = 64.12.51.132
dns-02.ns.aol.com       internet address = 205.188.157.232
dns-06.ns.aol.com       internet address = 149.174.54.153
dns-07.ns.aol.com       internet address = 64.236.1.107</pre>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2009/07/23/se-faire-deblacklister-de-chez-aol/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Privoxy sur Squid : virer les pubs pour tout le monde</title>
		<link>http://michauko.org/blog/2009/05/19/privoxy-sur-squid-virer-les-pubs-pour-tout-le-monde/</link>
		<comments>http://michauko.org/blog/2009/05/19/privoxy-sur-squid-virer-les-pubs-pour-tout-le-monde/#comments</comments>
		<pubDate>Tue, 19 May 2009 14:57:52 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[autres outils]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[mails]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[ie]]></category>
		<category><![CDATA[privoxy]]></category>
		<category><![CDATA[proxy]]></category>
		<category><![CDATA[squid]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=299</guid>
		<description><![CDATA[Sur mon firefox, j&#8217;utilise &#171;&#160;AdBlock Plus&#160;&#187; pour filtrer les pubs. Mais dans une société où IE est le maître (pour cause d&#8217;intranets pas compatibles, de pas de droit d&#8217;admins et d&#8217;utilisateurs contents avec IE (!)), amuse toi pour faire sauter les pubs pour tout le monde. J&#8217;ai entendu parler de IE7pro, une extension pour IE [...]]]></description>
			<content:encoded><![CDATA[<p>Sur mon firefox, j&#8217;utilise &laquo;&nbsp;<a href="https://addons.mozilla.org/fr/firefox/addon/1865">AdBlock Plus</a>&nbsp;&raquo; pour filtrer les pubs. Mais dans une société où IE est le maître (pour cause d&#8217;intranets pas compatibles, de pas de droit d&#8217;admins et d&#8217;utilisateurs contents avec IE (!)), amuse toi pour faire sauter les pubs pour tout le monde.<br />
J&#8217;ai entendu parler de IE7pro, une extension pour IE (je ne savais même pas que ça existait). Je l&#8217;ai donc installé et désinstallé dans la foulée. C&#8217;est naze.<br />
D&#8217;où l&#8217;idée de déterrer ce bon vieux <a href="http://www.privoxy.org/">privoxy</a> que j&#8217;utilisais localement sur mon PC avant que &laquo;&nbsp;Adblock Plus&nbsp;&raquo; n&#8217;existe. Il peut se chaîner avec un autre proxy, notamment Squid, afin de filtrer toutes les pubs. (toutes = le mieux possible)</p>
<p>Allez zou, mise en place de la chose sur un serveur avec Squid, pour en faire profiter tout le monde.<span id="more-299"></span></p>
<h1>Quelques remarques par rapport à Debian</h1>
<p>Je ne connais pas trop le rythme d&#8217;update des règles de privoxy. Ce que j&#8217;en ai compris, c&#8217;est qu&#8217;elles sont intégrées au package privoxy. A mon sens, ça devrait être dissocié, par exemple dans le dépôt &laquo;&nbsp;volatile&nbsp;&raquo;.<br />
Ca ne l&#8217;est pas. Et comme les pubs évoluent, j&#8217;ai un peu hésité.</p>
<blockquote><p>EDIT : j&#8217;ai changé d&#8217;avis sur ce qui suit : j&#8217;ai pris la version officielle Debian. Cf. les commentaires</p></blockquote>
<p><em>Finalement, j&#8217;ai opté pour la <a href="http://sourceforge.net/project/showfiles.php?group_id=11118">version packagée Debian sur le site de privoxy</a> plutôt que la version officielle dans la &laquo;&nbsp;stable&nbsp;&raquo;. Moins pratique pour mettre à jour, mais je n&#8217;aimerais pas qu&#8217;un nouveau genre de pubs ne soit pas filtré ou à l&#8217;inverse, trop de coups de haches sur certains sites.<br />
</em> En &laquo;&nbsp;stable&nbsp;&raquo;, on est en 3.0.9 si je ne dis pas de bêtise, contre 3.0.12 en .deb sur le site.</p>
<p>J&#8217;ai aussi essayé de trouver une méthode facile pour convertir les expressions régulières d&#8217;Adblock Plus pour privoxy. J&#8217;ai lâché l&#8217;affaire. Si quelqu&#8217;un sait faire, ça peut être intéressant.</p>
<h1>Quelques chiffres après 2 semaines d&#8217;utilisation</h1>
<p>Histoire de mettre l&#8217;eau à la bouche. 100 personnes surfant raisonnablement ont vus (façon de parler) 10% de leurs requêtes bloquées par privoxy. C&#8217;est toujours ça d&#8217;économisé, mais c&#8217;est surtout le gain sur la pollution visuelle qui vaut le coup.<br />
Je n&#8217;ai pas vu de différences sur quelques sites où j&#8217;avais l&#8217;habitude d&#8217;aller via &laquo;&nbsp;Firefox+AdBlockPlus&nbsp;&raquo; par rapport à &laquo;&nbsp;n&#8217;importe quel navigateur+privoxy sans adblock plus évidemment&nbsp;&raquo;.</p>
<h1>Mise en place sur Debian</h1>
<h2>Installation</h2>
<p>Installez donc le <a href="http://sourceforge.net/project/showfiles.php?group_id=11118">package Debian </a>, précédemment téléchargé, avec la commande suivante :</p>
<pre>dpkg -i privoxy_3.0.12-1_i386.deb</pre>
<h2>Paramétrage et tests de base</h2>
<p>Tout se passe dans <code>/etc/privoxy/config</code>. Vous n&#8217;avez qu&#8217;une chose à modifier pour tester votre privoxy en direct :</p>
<pre>listen-address  localhost:8118</pre>
<p>Si le service est sur un serveur (et pas votre PC), changez &laquo;&nbsp;localhost&nbsp;&raquo; en &laquo;&nbsp;*&nbsp;&raquo; ou l&#8217;IP de la machine sur le LAN et relancez via <code>/etc/init.d/privoxy restart</code><br />
Bien sûr, il faut indiquer à votre navigateur d&#8217;utiliser le proxy sur cette machine, port 8118.<br />
<strong>A la fin : faites bien attention à la valeur choisie (ou à vos règles de firewall si elles filtrent l&#8217;accès au serveur squid/privoxy), il ne faudrait pas qu&#8217;un utilisateur puisse adresser en direct privoxy en court-circuitant squid&#8230;</strong></p>
<h2>Interco avec Squid</h2>
<p>La doc officielle de privoxy dit de chaîner dans l&#8217;ordre : PC -> squid -> privoxy<br />
Il doit y avoir une raison, peut-être pour ne pas court-circuiter les éventuelles ACL de Squid, qui permettraient par exemple un certain traitement suivant l&#8217;IP source de la requête.<br />
Bon bref, c&#8217;est donc au niveau de Squid qu&#8217;il faut paramétrer. Cherchez le mot &laquo;&nbsp;squid&nbsp;&raquo; dans la doc <a href="http://www.privoxy.org/user-manual/config.html">http://www.privoxy.org/user-manual/config.html</a>. En résumé, ajoutez où il faut dans <code>/etc/squid/squid.conf</code> :</p>
<pre>cache_peer 127.0.0.1 parent 8118 7 no-query
acl ftp proto FTP
always_direct allow ftp
never_direct allow all</pre>
<p>Dans l&#8217;exemple, 127.0.0.1 indique que privoxy est sur la même machine que squid, sinon mettez l&#8217;IP de privoxy, et son port, par défaut 8118.<br />
A noter que squid fait proxy FTP dans mon exemple, sinon adaptez.<br />
Relancez squid, un <code>/etc/init.d/squid reload</code> doit suffire.</p>
<h1>Pour voir les stats vite fait</h1>
<p><a href="http://p.p/">http://p.p/</a><br />
Ca peut servir pour configurer l&#8217;outil aussi, si vous avez activé ce qu&#8217;il faut<br />
Evidemment, vous serez gentils de whitelister michauko.org. Je me suis pas tapé la mise en place de Google AdSense pour rien <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ouais bon, ça va&#8230; c&#8217;est pour financer un jour quelques mois de mon serveur&#8230;</p>
<h1>A suivre</h1>
<p>L&#8217;article SquidGuard, l&#8217;ami de Squid quand l&#8217;accès Internet est un peu trop surchargé par 99% d&#8217;inutile.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2009/05/19/privoxy-sur-squid-virer-les-pubs-pour-tout-le-monde/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Mon serveur indispo ? merci roundcube</title>
		<link>http://michauko.org/blog/2009/02/18/mon-serveur-indispo-merci-roundcube/</link>
		<comments>http://michauko.org/blog/2009/02/18/mon-serveur-indispo-merci-roundcube/#comments</comments>
		<pubDate>Wed, 18 Feb 2009 00:19:33 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[autres outils]]></category>
		<category><![CDATA[coup de gueule]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[mails]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[roundcube]]></category>
		<category><![CDATA[webmail]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=176</guid>
		<description><![CDATA[Salut, Du fait d&#8217;un résidu de conf de test de RoundCube, un soft de webmail joli mais pas très fonctionnel (de ce que j&#8217;en avais testé, tout l&#8217;IMAP n&#8217;était pas bien géré) ; en version 0.1 à l&#8217;époque, je me suis fait un peu hacké mon serveur récemment&#8230; récup de scripts pas joli-joli, en Russie [...]]]></description>
			<content:encoded><![CDATA[<p>Salut,<br />
Du fait d&#8217;un résidu de conf de test de <a href="http://roundcube.net/">RoundCube</a>, un soft de webmail joli mais pas très fonctionnel (de ce que j&#8217;en avais testé, tout l&#8217;IMAP n&#8217;était pas bien géré) ; en version 0.1 à l&#8217;époque, je me suis fait un peu hacké mon serveur récemment&#8230; récup de scripts pas joli-joli, en Russie tu penses bien. Et grosses attaques brute-force SSH depuis mon serveur. Youpi&#8230;</p>
<p>Je vois que le soft est en version 0.2&#8230; j&#8217;attendrai la 1.0 avant de jeter un oeil à ce truc à nouveau&#8230; ou un paquet Debian, ce qui sera une bonne preuve de fiabilité je pense&#8230;</p>
<p>Conclusion ? y&#8217;aurait beaucoup à dire, je retiendrai seulement : évitez roundcube, c&#8217;est &laquo;&nbsp;beau&nbsp;&raquo; mais c&#8217;est troué ; évitez les applis à la con ; évitez d&#8217;être trop ouvert dans vos règles réseaux firewall -> net etc etc&#8230; et vive une petite nuit pourrie pour en profiter pour remettre au carré certains détails qu&#8217;on remet toujours à demain&#8230;.</p>
<p>Merci à Toinator qui a noté mon activité réseau débordante tout à fait par hasard (j&#8217;avais rien vu &#8211; ouuups, je remets quelques sondes là&#8230;). Le plus fun, c&#8217;est qu&#8217;il lui était arrivé la même chose&#8230;. avec le même logiciel&#8230;.</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2009/02/18/mon-serveur-indispo-merci-roundcube/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Thunderbird : trier ses mails envoyés</title>
		<link>http://michauko.org/blog/2008/12/18/thunderbird-trier-ses-mails-envoyes/</link>
		<comments>http://michauko.org/blog/2008/12/18/thunderbird-trier-ses-mails-envoyes/#comments</comments>
		<pubDate>Wed, 17 Dec 2008 23:25:01 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[bureautique]]></category>
		<category><![CDATA[coup de coeur]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[mails]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[imap]]></category>
		<category><![CDATA[thunderbird]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=172</guid>
		<description><![CDATA[Si vous utilisez un compte en IMAP &#8211; donc messagerie synchrone entre vos PC clients et le serveur &#8211; vous êtes peut-être comme moi à tout garder. Notamment les mails envoyés. Avant, je les classais, quand j&#8217;avais le temps. Maintenant, j&#8217;ai découvert ce plug-in pour Thunderbird : &#171;&#160;Copy Sent to current&#171;&#160;. Ca permet de choisir [...]]]></description>
			<content:encoded><![CDATA[<p>Si vous utilisez un compte en IMAP &#8211; donc messagerie synchrone entre vos PC clients et le serveur &#8211; vous êtes peut-être comme moi à tout garder. Notamment les mails envoyés.<br />
Avant, je les classais, quand j&#8217;avais le temps.</p>
<p>Maintenant, j&#8217;ai découvert ce plug-in pour Thunderbird : &laquo;&nbsp;<a href="https://addons.mozilla.org/fr/thunderbird/addon/2561">Copy Sent to current</a>&laquo;&nbsp;.</p>
<p>Ca permet de choisir à l&#8217;envoi (ou pendant la rédaction) dans quel répertoire conserver le mail envoyé : le même que le répertoire courant ? la poubelle ? le &laquo;&nbsp;Sent&nbsp;&raquo; normal ? ou un répertoire utilisé fréquemment et accessible en une touche de raccourci ?<br />
Sympa, indispensable.</p>
<p>Pour le paramétrer, pensez à 2 choses :<br />
1. Dans les propriétés du compte IMAP, menu &laquo;&nbsp;copies et dossiers&nbsp;&raquo;, il y aura un nouveau menu assez explicite<br />
2. Dans les options du module pour les raccourcis et le nombre de répertoires récents à se &laquo;&nbsp;souvenir&nbsp;&raquo;</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2008/12/18/thunderbird-trier-ses-mails-envoyes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pense-bête pour migrer &#171;&#160;sympa&#160;&#187;, l&#8217;outil de mailing-lists</title>
		<link>http://michauko.org/blog/2008/10/03/pense-bete-pour-migrer-sympa-loutil-de-mailing-lists/</link>
		<comments>http://michauko.org/blog/2008/10/03/pense-bete-pour-migrer-sympa-loutil-de-mailing-lists/#comments</comments>
		<pubDate>Fri, 03 Oct 2008 14:45:45 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[autres outils]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[mails]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[LAMP]]></category>
		<category><![CDATA[migration]]></category>
		<category><![CDATA[sympa]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=156</guid>
		<description><![CDATA[Salut, J&#8217;ai eu à déplacer l&#8217;outil sympa &#8211; très bien pour gérer des mailings-lists avec modération &#8211; d&#8217;un serveur à un autre. L&#8217;outil était sur le backend de mail, avec la conf apache de sympa, la base de données de sympa et évidemment les binaires (le package sympa). Le but était de déplacer la partie [...]]]></description>
			<content:encoded><![CDATA[<p>Salut,</p>
<p>J&#8217;ai eu à déplacer l&#8217;outil <a href="http://www.sympa.org/">sympa</a> &#8211; très bien pour gérer des mailings-lists avec modération &#8211; d&#8217;un serveur à un autre.<br />
L&#8217;outil était sur le backend de mail, avec la conf apache de sympa, la base de données de sympa et évidemment les binaires (le package sympa).<br />
Le but était de déplacer la partie binaire, apache et base de données ; en conservant les boîtes mails et alias sur le backend de départ.</p>
<p>Je vous livre un petit retour d&#8217;expérience car c&#8217;est un poil plus compliqué que de déplacer une application LAMP classique.<br />
Je partais d&#8217;une version Debian/stable, donc package sympa 5.2.3-1.2+etch1 et la cible était la même.</p>
<p><em>Je considère que vous avez déjà un Apache2 et MySQL sur la machine cible &#8211; et une machine cible capable de relayer des mails (recevoir et envoyer) sur postfix</em></p>
<h1>La migration classique</h1>
<p>La base reste la même :<br />
1) Sur la machine cible, installez l&#8217;application &#8211; même version évidemment, packagée.<br />
2) Reprenez (à la main ou en écrasant) la conf /etc/apache2/conf.d/sympa d&#8217;un serveur à l&#8217;autre<br />
3) Reprenez ou adaptez /etc/sympa<br />
4) Exportez/importez la base de données &laquo;&nbsp;sympa&nbsp;&raquo;, comme une brute, par exemple :</p>
<pre>machine_depart:$> mysqldump -u votre_user_qui_va_bien -p -B sympa > migr_sympa.sql
puis
machine_cible:$> mysql -u user -p < migr_sympa.sql</pre>
<p>5) Assurez-vous d'avoir les bons identifiants de login de l'application sympa dans les tables "mysql" de Mysql (= les tables du schéma mysql. Pigé ? il doit y avoir notamment une ligne dans la table mysql.user concernant le User sympa) :</p>
<pre>use mysql ; SELECT * from user where User = 'sympa';</pre>
<h1>La partie spécifique "sympa"</h1>
<p>Ce qui est ci-dessus est ce que vous auriez à faire avec une appli LAMP typique qui stocke tout en base.<br />
Manque de chance, sympa - au moins dans la version 5.2 (actuellement 5.4 dispo, pas essayé) - stocke tout un tas d'informations dans <code>/var/lib/sympa</code>, <code>/usr/lib/sympa</code> etc. Sans compter les alias mails qui permettent de transmettre les mails aux processus de gestion de sympa.<br />
Donc il vous reste à faire :</p>
<h2>La redirection des alias mail</h2>
<p>Normalement, sur votre serveur de départ, vous devriez avoir tout un tas d'alias de mail dans <code>/etc/aliases</code>, genre :</p>
<pre>sympa:             "| /usr/lib/sympa/bin/queue sympa"
listmaster:        "| /usr/lib/sympa/bin/queue listmaster"
sympa-request:     postmaster
sympa-owner:       postmaster
maliste1:          "| /usr/lib/sympa/bin/queue maliste1"
maliste1-request:  "| /usr/lib/sympa/bin/queue maliste1-request"
maliste1-owner:    "| /usr/lib/sympa/bin/bouncequeue maliste1"
maliste2.....
</pre>
<p>Il faut reprendre cette configuration telle quelle sur la machine cible et s'assurer sur la première - qui reste la machine de backend de mail (mon MX en gros), donc celle qui reçoit le mail - qu'elle sache faire suivre tout ça à la machine cible qui est devenue celle qui gère sympa.<br />
Donc dans la machine de départ, vous trafiquerez tout de la sorte :</p>
<pre>sympa:             "sympa@machinecible.com"
listmaster:        "listmaster@machinecible.com"
sympa-request:     postmaster (j'ai laissé tel quel, c'est un choix)
sympa-owner:       postmaster (j'ai laissé tel quel, c'est un choix)
maliste1:  "maliste1@machinecible.com"
maliste1-request:  "maliste1-request@machinecible.com"
maliste1-owner:  "maliste1-owner@machinecible.com"
maliste2.....
</pre>
<h2>A la recherche du bordel éparpillé partout</h2>
<p>Ensuite, je m'étais arrêté là - ahahah, erreur.<br />
Sur l'interface web (la nouvelle), je ne voyais plus mes listes. La raison est que "sympa" stocke les listes, les archives etc hors de la base, dans des répertoires comme <code>/usr/lib/sympa</code> et <code>/var/lib/sympa</code>.<br />
Donc, il faut reprendre tout ça sur la machine cible (des bêtes "tar" avec conservation des permissions suffisent).<br />
Finalement, j'ai opté pour un joli :</p>
<pre>dpkg -L sympa | less</pre>
<p>De là, je suis passé dans tous les répertoires nommés (sauf les doc, le "man" etc - faut pas pousser) et je me suis assuré qu'il n'y ait pas de différence - attention à certains droits en setuid/setgid au nom de "sympa:sympa".</p>
<p>Ensuite, vous envoyez la purée auprès de vos utilisateurs pour leur indiquer que le système est à nouveau dispo, sur une liste modérée tant qu'à faire, afin de bien faire tous les tests.<br />
Si rien n'arrive, c'est pas grave, vous avez raté un truc.<br />
Si vous recevez la demande de modération, c'est que ça semble bien parti <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h1>Le nettoyage</h1>
<p>Lorsque vous ferez le <code>DROP DATABASE sympa </code>sur l'ancienne machine et le <code>aptitude purge sympa</code>, ça vous confirmera ce que je vous racontais sur le stockage des archives, des listes etc :</p>
<p><a href='http://michauko.org/blog/wp-content/uploads/2008/10/purge_sympa.png'><img src="http://michauko.org/blog/wp-content/uploads/2008/10/purge_sympa-150x150.png" alt="" title="purge_sympa" width="150" height="150" class="alignnone size-thumbnail wp-image-155" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2008/10/03/pense-bete-pour-migrer-sympa-loutil-de-mailing-lists/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>squirrelmail, beurk =&gt; IlohaMail, mieux</title>
		<link>http://michauko.org/blog/2008/07/18/squirrelmail-beurk-ilohamail-mieux/</link>
		<comments>http://michauko.org/blog/2008/07/18/squirrelmail-beurk-ilohamail-mieux/#comments</comments>
		<pubDate>Fri, 18 Jul 2008 14:51:09 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[autres outils]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[mails]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[IlohaMail]]></category>
		<category><![CDATA[imap]]></category>
		<category><![CDATA[squirrelmail]]></category>
		<category><![CDATA[webmail]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/?p=138</guid>
		<description><![CDATA[P&#8217;tite intro J&#8217;utilise Squirrelmail comme client webmail pour les comptes en IMAP. C&#8217;est parfaitement fonctionnel, mais aussi très moche. On peut certes changer le look si on adore le CSS, ou en trouver d&#8217;autres sur le web (mais ça se cantonne à changer la palette de couleur), ou enfin, pour 100/150 € on peut en [...]]]></description>
			<content:encoded><![CDATA[<h1>P&#8217;tite intro</h1>
<p>J&#8217;utilise <a href="http://www.squirrelmail.org/">Squirrelmail</a> comme client webmail pour les comptes en IMAP. C&#8217;est parfaitement fonctionnel, mais aussi très moche.<br />
On peut certes changer le look si on adore le CSS, ou en trouver d&#8217;autres sur le web (mais ça se cantonne à changer la palette de couleur), ou enfin, pour 100/150 € on peut en payer un super-jouli avec des fleurs bleues dans les coins, au look de MS-LookOut.</p>
<p>Il y aussi <a href="http://www.horde.org/imp/">Horde/IMP</a>, très utilisé et complet. Et <a href="http://www.roundcube.net/">Roundcube</a>, qui monte : très très joli (en AJAX-qui-tâche) mais pas encore 100% fonctionnel (bal IMAP partagées KO par exemple).</p>
<p>Sinon il y a aussi <a href="http://blog.ilohamail.org/">IlohaMail</a>. C&#8217;est moins moche (sans être beau) et aussi simple à installer.<br />
Par contre, le développement semble bien arrêté (depuis 2006). Sur une debian testing, on est en 0.8.6-rc3sid là où la .0.8.6 est officiellement sortie et la 0.9 en beta depuis 2 ans. Pas un message depuis 2 ans sur le blog.<br />
Si vous êtes toujours en train de lire, c&#8217;est que cette vieillerie ne vous fait pas peur ; ça tombe bien vu que l&#8217;IMAP a pas du évoluer des masses depuis longtemps.<br />
Comme Squirrelmail, les &laquo;&nbsp;thèmes&nbsp;&raquo; sont en options, voire rares, voire moches, voire payants&#8230;.<br />
Bon je critique, mais pour le prix, j&#8217;en suis content.</p>
<p>Allez, mise en place de la chose (au besoin, la mise en place de squirrelmail est décrite dans ma doc <a href="http://michauko.org/docs/debian_testing/">Debian qu&#8217;il-faut-que-je-mette-à-jour-un-de-ces-quatre</a>).</p>
<h1>Pré-requis</h1>
<p>Idéalement, un serveur IMAP pour accéder à vos boîtes aux lettres, le PHP, un Apache2 et optionnellement une base de données (ex: MySQL). Regardez <a href="http://michauko.org/docs/debian_testing/">ma doc</a> si vous n&#8217;avez rien de tout ça, sauf une grosse envie de monter une Debian.</p>
<h1>Installation</h1>
<p>Ca commence sur un air connu :</p>
<pre>root@linux:~# sudo aptitude install ilohamail
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
Lecture de l'information d'état étendu
Initialisation de l'état des paquets... Fait
Lecture des descriptions de tâches... Fait
Les NOUVEAUX paquets suivants vont être installés :
  aspell{a} aspell-en{a} dictionaries-common{a} ilohamail libaspell15{a}
0 paquets mis à jour, 5 nouvellement installés, 0 à enlever et 4 non mis à jour.
Il est nécessaire de télécharger 1550ko/1799ko d'archives. Après dépaquetage, 8889ko seront utilisés.
Voulez-vous continuer ? [Y/n/?]</pre>
<p>Ensuite, vous aurez 2 questions :<br />
<a href='http://michauko.org/blog/wp-content/uploads/2008/07/20080718_112136.png'><img src="http://michauko.org/blog/wp-content/uploads/2008/07/20080718_112136.png" alt="Choix du serveur web pour l\&#039;autoconf" title="Choix du serveur web pour l\&#039;autoconf" width="499" height="309" class="alignnone size-full wp-image-139" /></a><br />
Si votre installation Apache2 n&#8217;est pas trop en ruine, alors ça fera ce qu&#8217;il faut tout seul.</p>
<p>La deuxième question &#8211; je n&#8217;ai pas gardé la photo &#8211; vous demande quel alias utiliser pour accéder à l&#8217;application, par défaut &laquo;&nbsp;/IlohaMail&nbsp;&raquo;. Ca se change plus tard.</p>
<h1>Utilisation</h1>
<p>Normalement, moyennant un rechargement Apache, vous devriez avoir l&#8217;application qui fonctionne en allant sur votre <code>http://votre.serveur/IlohaMail/</code> :<br />
<a href='http://michauko.org/blog/wp-content/uploads/2008/07/20080718_112850.png'><img src="http://michauko.org/blog/wp-content/uploads/2008/07/20080718_112850.png" alt="login ilohamail" title="login ilohamail" width="302" height="334" class="alignnone size-full wp-image-140" /></a><br />
A la première connexion, il y a un paramétrage des préférences. On peut choisir quel est le répertoire d&#8217;envoi et de poubelle, ça peut être bien :<br />
<a href='http://michauko.org/blog/wp-content/uploads/2008/07/20080718_113045.png'><img src="http://michauko.org/blog/wp-content/uploads/2008/07/20080718_113045.png" alt="Préférences" title="Préférences" width="500" height="133" class="alignnone size-full wp-image-141" /></a></p>
<h1>Paramétrage un peu plus avancé</h1>
<p>Dans <code>/etc/apache2/conf.d/ilohamail</code>, vous pourrez corriger l&#8217;alias si mal choisi, exemple :</p>
<pre>Alias /mail /usr/share/IlohaMail/source

< DirectoryMatch /usr/share/IlohaMail/source/>#sans espace avant DirectoryMatch
Options +FollowSymLinks
DirectoryIndex index.php
AllowOverride None
order allow,deny
allow from all
< /DirectoryMatch> # sans espace non plus</pre>
<p>Dans  <code>/etc/IlohaMail</code>, il y a plusieurs fichiers sympa. Tous les fichiers sont commentés, pratique pour comprendre les paramètres.</p>
<h2>/etc/IlohaMail/conf.php</h2>
<p><code>$backend="DB"</code> au lieu de &laquo;&nbsp;FS&nbsp;&raquo; si vous voulez stocker les données en base de données plutôt qu&#8217;en fichiers. Dans ce cas, il faudra aller dans le fichier db_conf.php pour finir la conf base de données (je ne l&#8217;ai pas fait).<br />
Notez ceux là :<br />
<code>$AUTH_MODE["imap"]</code> pour les méthodes d&#8217;authentification<br />
<code>$SMTP_SERVER défaut à localhost<br />
<code>$MAX_SESSION_TIME</code><br />
<code>$DISABLE_CALENDAR</code><br />
<code>$DISABLE_BOOKMARKS</code></p>
<h2>/etc/IlohaMail/login.php</h2>
<p><code>$default_host = "localhost"</code> par exemple, ça évitera de demander à l'utilisateur un nom de machine<br />
Comprenez aussi par là que IlohaMail, comme beaucoup de "webmail" configurables, peut aller lire vos messages IMAP d'un autre serveur. Si votre webmail IMAP au boulot ne vous plaît pas, par exemple.<br />
Vous pouvez aussi masquer la zone de saisie du serveur et ainsi éviter qu'on puisse utiliser ce webmail pour lire les messages d'un autre serveur.<br />
<code>$hide_host = 1;</code><br />
<code>$hide_protocol = 1;</code><br />
<code>$hide_rootdir = 1;</code><br />
<code>$hide_lang = 0;</code><br />
<code>$default_lang = "fr/" au lieu de "eng/"</code><br />
<code>$SSL_ENABLED = true</code>; si vous en avez besoin</p>
<h2>/etc/IlohaMail/login_title.inc</h2>
<p>Là, vous pourrez changer le message d'accueil du webmail en bidouillant un code HTML ultra-basique.</p>
<h1>The End</h1>
<p>Et voilà, c'est bon.<br />
Notez que les modifs des fichiers PHP ne nécessitent pas de rechargement d'Apache puisque ces fichiers sont lus à chaque utilisation.</p>
<p>Bon mail</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2008/07/18/squirrelmail-beurk-ilohamail-mieux/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>spamassassin : RulesDuJour vs sa-update</title>
		<link>http://michauko.org/blog/2008/03/20/rulesdujour-vs-spamassassin/</link>
		<comments>http://michauko.org/blog/2008/03/20/rulesdujour-vs-spamassassin/#comments</comments>
		<pubDate>Thu, 20 Mar 2008 14:07:03 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[mails]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[dostech]]></category>
		<category><![CDATA[rulesdujour]]></category>
		<category><![CDATA[sa-update]]></category>
		<category><![CDATA[spam]]></category>
		<category><![CDATA[spamassassin]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/2008/03/20/rulesdujour-vs-spamassassin/</guid>
		<description><![CDATA[Si vous utilis[i]ez &#171;&#160;RulesDuJour&#160;&#187; pour mettre à jour les règles spamassassin de &#171;&#160;Rules Emporium&#171;&#160;&#8230;. quoi ? comment ça qu&#8217;est-ce que je raconte ? Lisez le chapitre qui va bien dans ma doc !! Vous n&#8217;utilisez pas les règles SARE ? mais vous le triez comment votre spam ?! Bon, je reprends. Depuis quelques semaines (mois [...]]]></description>
			<content:encoded><![CDATA[<p>Si vous utilis[i]ez &laquo;&nbsp;RulesDuJour&nbsp;&raquo; pour mettre à jour les règles spamassassin de &laquo;&nbsp;<a href="http://www.rulesemporium.com/">Rules Emporium</a>&laquo;&nbsp;&#8230;. quoi ? comment ça qu&#8217;est-ce que je raconte ? Lisez le <a href="http://michauko.org/docs/debian_testing/">chapitre qui va bien dans ma doc</a> !! Vous n&#8217;utilisez pas les règles SARE ? mais vous le triez comment votre spam ?! <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
Bon, je reprends.</p>
<p>Depuis quelques semaines (mois ?), le programme RulesDuJour végétait. Il n&#8217;y a eu aucune communication sur le sujet à part 2/3 infos éparses dans des mailing-lists. J&#8217;ai pris le temps de chercher et poser les questions.<br />
Maintenant, je peux affirmer que RulesDuJour n&#8217;est plus supporté (mais fonctionne encore à peu près) et un type du projet spamassassin a monté un serveur permettant de mettre à jour les règles SARE depuis l&#8217;outil normal de mise à jour de spamassassin, à savoir <code>sa-update</code>.</p>
<p>Le principe pour configurer sa-update afin qu&#8217;il aille chercher vos règles SARE est le suivant :<br />
1) Vous supprimez votre &laquo;&nbsp;RulesDuJour&nbsp;&raquo; quotidien de votre crontab.<br />
2) Gardez quelque part la liste des règles que vous utilisez (noms des fichiers).<br />
3) Supprimez les règles type <code>/etc/spamassassin/7*cf</code> et le répertoire où vous stockiez RulesDuJour.<br />
4) Ensuite, créez un fichier /etc/spamassassin/channels.txt contenant :</p>
<pre>updates.spamassassin.org
70_sare_adult.cf.sare.sa-update.dostech.net
70_sare_bayes_poison_nxm.cf.sare.sa-update.dostech.net
70_sare_evilnum0.cf.sare.sa-update.dostech.net
70_sare_evilnum1.cf.sare.sa-update.dostech.net
autre.regle.de.SARE.cf.sare.sa-update.dostech.net
...</pre>
<p>et vos autres règles type blabla.cf en suffixant par <code>.sare.sa-update.dostech.net</code>. Vous comprenez le principe ? le serveur dostech s&#8217;attend à recevoir des demandes &laquo;&nbsp;au format sa-update&nbsp;&raquo; et grâce à des noms de machines bidons indiquant en fait le nom du fichier correspondant à la règle que vous cherchez, sa-update trouve son bonheur.<br />
Ne pas oublier la 1ère ligne des updates &laquo;&nbsp;normaux&nbsp;&raquo; de spamassassin.</p>
<p>Ensuite, vous planifiez une fois par jour le job suivant :</p>
<pre>sa-update --allowplugins --channelfile /etc/spamassassin/channels.txt --nogpg /usr/local/bin/sa-compile &#038;&#038; /etc/init.d/spamassassin reload</pre>
<p>Notez qu&#8217;il y a déjà dans votre <code>/etc/cron.daily</code> un update spamassassin. Faut-il le modifier ? bof, c&#8217;est de la conf standard, c&#8217;est un coup à ce que ça saute au prochain update/upgrade.<br />
La deuxième partie de la commande (<code>&#038;&#038; /etc/init.d/spamassassin reload</code>) n&#8217;est utile que si votre spamassassin tourne en tant que &laquo;&nbsp;daemon&nbsp;&raquo;.</p>
<p>Les nouvelles règles téléchargées iront s&#8217;installer dans <code>/var/lib/spamassassin/3.002003</code>.</p>
<p>Astuce of ze day pour générer sans peine (et sans faute de frappe) le fichier channels.txt. En considérant que vos règles SARE actuelles sont dans /etc/spamassassin et se nomment toutes <code>7*cf</code>, tapez donc ça :</p>
<pre>cat updates.spamassassin.org > /etc/spamassassin/channels.txt
for i in 7*cf
do
echo $i.sare.sa-update.dostech.net >> /etc/spamassassin/channels.txt
done</pre>
<p>Voilà. Forcez le premier lancement à la main et contrôlez le contenu du répertoire <code>/var/lib/spamassassin/3.002003</code> et la présence du daemon spamassassin (si vous l&#8217;utilisez en &laquo;&nbsp;daemon&nbsp;&raquo;).</p>
<p>La &laquo;&nbsp;doc&nbsp;&raquo; qui fait foi est ici : <a href="http://daryl.dostech.ca/sa-update/sare/sare-sa-update-howto.txt">http://daryl.dostech.ca/sa-update/sare/sare-sa-update-howto.txt</a></p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2008/03/20/rulesdujour-vs-spamassassin/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Exchange, outlook&#8230; dans un monde de serveurs Linux</title>
		<link>http://michauko.org/blog/2008/03/13/exchange-outlook-dans-un-monde-de-serveurs-linux/</link>
		<comments>http://michauko.org/blog/2008/03/13/exchange-outlook-dans-un-monde-de-serveurs-linux/#comments</comments>
		<pubDate>Thu, 13 Mar 2008 08:29:36 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[bureautique]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[mails]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[agenda]]></category>
		<category><![CDATA[autodiscover]]></category>
		<category><![CDATA[bind]]></category>
		<category><![CDATA[calendrier]]></category>
		<category><![CDATA[découverte automatique]]></category>
		<category><![CDATA[disponibilités]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[exchange]]></category>
		<category><![CDATA[free/busy]]></category>
		<category><![CDATA[outlook]]></category>
		<category><![CDATA[srv]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/2008/03/13/exchange-outlook-dans-un-monde-de-serveurs-linux/</guid>
		<description><![CDATA[Je passe sur les raisons longuement discutées (pendant environ un an) qui nous ont poussés à installer un Exchange pour son calendrier offline (pour les hommes pressés en déplacement), sur un smartphone/outlook (port de la cravate obligatoire), son outil de CRM (cravate et grosse bagnole sont de mises), etc etc. La partie e-mail reste en [...]]]></description>
			<content:encoded><![CDATA[<p>Je passe sur les raisons longuement discutées (pendant environ un an) qui nous ont poussés à installer un Exchange pour son calendrier offline (pour les hommes pressés en déplacement), sur un smartphone/outlook (port de la cravate obligatoire), son outil de CRM (cravate et grosse bagnole sont de mises), etc etc. La partie e-mail reste en Linux et la cohabitation des 2 mondes (exchange+imap linux) dans un Outlook se passera honorablement.<br />
Il y aurait tant à dire sur les solutions de contournement qu&#8217;on n&#8217;a qu&#8217;à troller dans les commentaires si vous le souhaitez.</p>
<p><strong>Avant de capituler, sachez juste que j&#8217;ai testé en long en large et en travers les solutions de synchro outlook<-> egroupware type <a href="http://www.funambol.com/">Funambol (ex Sync4j), Funambol server</a> et blablabli et je ne sais quoi d&#8217;autres généralement bien moisi. </strong>S&#8217;il fallait donner un bilan : Funambol, ça marche, mais ça se limite à remonter des créneaux horaires (pas des participants, pas de pièce jointe etc). Les autres solutions, ça vaut pas un cachou. Et du <a href="http://www.zimbra.com/">Zimbra</a> etc, c&#8217;est finalement à peine moins cher qu&#8217;un Exchange, chiffres à l&#8217;appui.</p>
<p>Voilà, maintenant qu&#8217;on ne peut plus m&#8217;accuser d&#8217;avoir déserté sans livrer bataille, je vous livre 2/3 remarques sur le fonctionnement d&#8217;Outlook 2003 et 2007, vis-à-vis d&#8217;Exchange et d&#8217;une intégration d&#8217;un Exchange dans un environnement Linux, notamment un DNS Linux (BIND9 en l&#8217;occurrence).</p>
<h3>Petite intro</h3>
<p>Ces cons de clients mail fonctionnent différemment et Exchange 2007 conserve les deux modes d&#8217;accès (pour compatibilité) à certains types de données, notamment aux données disponibilités de chacun pour planifier des réunions facilement. On trouve de la doc sur le sujet, mais c&#8217;est pas simple. Et fidèle à lui-même, Microsoft n&#8217;a pas cru bon de rendre ses applications bavardes (ie, générer des logs) et à trop vouloir simplifier l&#8217;interface utilisateur (même dans un mode de configuration manuelle), certains mécanismes sont complètement occultés et quand ça merde, l&#8217;appli ne dit rien !<br />
(Tiens j&#8217;oubliais une note positive : en Outlook 2007, l&#8217;IMAP est un peu mieux géré : on peut désigner un répertoire d&#8217;envoi sans bidouiller comme un malade&#8230;)</p>
<h3>Imaginons donc le scénario suivant</h3>
<p>- un serveur Exchange 2007 dans un domaine (forêt) autonome qui n&#8217;est pas le domaine SAMBA &laquo;&nbsp;principal&nbsp;&raquo; de notre réseau<br />
<em>(- une double maintenance d&#8217;utilisateurs dans l&#8217;Active Directory et dans l&#8217;OpenLDAP (Linux), moyennement quelques scripts, c&#8217;est tout à fait vivable.)</em><br />
- des clients Outlook 2003 et 2007 avec un compte Exchange pour le calendrier et un compte IMAP pour le mail (IMAP hébergé sur Linux)</p>
<h3>Imaginons que ça bug après une installation toute fraîche (facile hein ?)</h3>
<p>- lorsque je planifie une réunion, je ne vois pas les infos de dispo des gens alors que je peux consulter l&#8217;agenda d&#8217;un collègue s&#8217;il m&#8217;autorise (partage)</p>
<h3>La solution, après 12000 recherches et forums</h3>
<p>- Pour outlook 2003 :<br />
Disons que le serveur ait un FQDN &laquo;&nbsp;test.exchg.societe.com&nbsp;&raquo;. Le petit &laquo;&nbsp;exchq&nbsp;&raquo; dans le nom vient du nom du domaine sur lequel est installé Exchange. Donc tous les applicatifs connaissent cette machine sous ce nom complet, et pas &laquo;&nbsp;test.societe.com&nbsp;&raquo;, encore moins &laquo;&nbsp;test&nbsp;&raquo;.<br />
Manque de bol, lorsque vous déclarez votre compte Exchange dans Outlook, vous spécifiez le serveur &laquo;&nbsp;test&nbsp;&raquo; et ce tocard vous dit qu&#8217;il a trouvé et remplace votre saisie par &laquo;&nbsp;test.exchg.societe.com&nbsp;&raquo;, alors même que votre PC (faisant tourner Outlook) ne sait pas résoudre ce nom complet.<br />
De là, tout marche à peu près *sauf* l&#8217;accès aux &laquo;&nbsp;public folders&nbsp;&raquo; du serveur, donc aux infos de dispo des gens&#8230;<br />
Il suffit donc de déclarer ce nom test.exchg dans la zone &laquo;&nbsp;societe.com&nbsp;&raquo; de votre DNS bind.<br />
Et hop, tout se met à marcher.<br />
Bien sûr, si outlook avait dit dès le départ &laquo;&nbsp;cannot find test.exchg.societe.com&nbsp;&raquo;, j&#8217;aurais gagné 2 semaines&#8230;</p>
<p>- Pour Outlook 2007 :<br />
Même genre de bordel, sauf que lui, avec un nouveau procédé &laquo;&nbsp;autodiscover&nbsp;&raquo;, veut tout faire tout seul. Même souci : quand il ne trouve pas le serveur comme il le souhaite, il ne dit rien, mais ça marche mal.<br />
Avec une trace tcpdump sur le DNS (genre : <code>tcpdump -i ethxxx port 53 src host mon-ip-PC-client-outlook</code>), et avec l&#8217;aide de quelques personnes <a href="http://forums.msexchange.org/m_1800468049/mpage_1/key_/tm.htm">sur un forum bien sympa</a>, j&#8217;ai vu que ce bouffon de client cherchait deux enregistrements DNS :<br />
- l&#8217;un de type A pour chercher autodiscover.masociete.com<br />
- l&#8217;autre de type SRV, nommé _autodiscover._tcp.masociete.com<br />
Une remarque, pour être sûr de voir la requête lors du tcpdump, videz votre cache DNS du poste client Windows avant :</p>
<pre>C:\Documents and Settings\toto>ipconfig /flushdns

Configuration IP de Windows

Cache de résolution DNS vidé.</pre>
<p>Enfin, pour régler le problème, vous créerez donc 2 entrées dans votre DNS, zone masociete.com :</p>
<pre>autodiscover    A       10.x.y.z ;serveur exchange
_autodiscover._tcp      1D IN SRV 0 1 443       test.exchg ;serveur exchange</pre>
<p>Et là, &laquo;&nbsp;par magie&nbsp;&raquo;, vous voyez les infos de dispo des gens lors d&#8217;une réservation de réunion.<br />
C&#8217;est pas bioutifoule ça ?</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2008/03/13/exchange-outlook-dans-un-monde-de-serveurs-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Statistiques de greylisting</title>
		<link>http://michauko.org/blog/2008/03/05/statistiques-de-greylisting/</link>
		<comments>http://michauko.org/blog/2008/03/05/statistiques-de-greylisting/#comments</comments>
		<pubDate>Wed, 05 Mar 2008 15:42:54 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[mails]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[backup MX]]></category>
		<category><![CDATA[blacklist]]></category>
		<category><![CDATA[greylist]]></category>
		<category><![CDATA[greylisting]]></category>
		<category><![CDATA[postfix]]></category>
		<category><![CDATA[postgrey]]></category>
		<category><![CDATA[spam]]></category>
		<category><![CDATA[statistiques]]></category>
		<category><![CDATA[stats]]></category>
		<category><![CDATA[whitelist]]></category>
		<category><![CDATA[zombie]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/2008/03/05/statistiques-de-greylisting/</guid>
		<description><![CDATA[Pour ceux qui ne connaissent pas, le &#171;&#160;Greylisting&#160;&#187; est un mécanisme utile et extrêmement simple à mettre en oeuvre pour réduire significativement le nombre de spams en entrée des serveurs de mails, sans même avoir besoin de les analyser. En gros, vous pouvez diviser par 10 vos mails entrants et le boulot de votre spamassassin, [...]]]></description>
			<content:encoded><![CDATA[<p>Pour ceux qui ne connaissent pas, le &laquo;&nbsp;Greylisting&nbsp;&raquo; est un mécanisme utile et extrêmement simple à mettre en oeuvre pour réduire significativement le nombre de spams en entrée des serveurs de mails, sans même avoir besoin de les analyser. En gros, vous pouvez diviser par 10 vos mails entrants et le boulot de votre spamassassin, du coup.<br />
Magique ? non, logique.<br />
Je vous propose dans cet article un résultat chiffré sur une installation comptant un backup MX, un frontal (qui encaisse les tentatives d&#8217;abus etc + analyse virus) relayant enfin à un serveur final (backend) faisant tourner un bon gros spamassassin/SARE des familles avant la distribution du courrier. Le tout pour desservir 150 utilisateurs et/ou boîtes mails environ (sans compter des vieux comptent qui n&#8217;existent plus et que les spammeurs doivent avoir encore &laquo;&nbsp;en tête&nbsp;&raquo;).<br />
La mise en place du greylisting pour postfix est détaillée dans <a href="http://michauko.org/docs/debian_testing/">ma doc</a>, il ne manque qu&#8217;une indication : démarrer le service postgrey après installation <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> <span id="more-107"></span></p>
<h3>Informations en préambule</h3>
<p>Les impacts pour l&#8217;utilisateur sont minimes : délai d&#8217;environ 30 minutes (en théorie 5 minutes) lors des x (x = 5 par défaut) premiers échanges entrants avec un serveur donné. L&#8217;article <a href="http://en.wikipedia.org/wiki/Greylisting">anglais sur wikipedia</a> se veut un peu plus méfiant que sa <a href="http://fr.wikipedia.org/wiki/Greylisting">traduction minimaliste en français</a>. A vous de voir. L&#8217;autre risque serait de se retrouver face à un vieux serveur de mails tout pourri qui implémente mal le protocole&#8230; boarf, je doute que ça arrive dans la pratique. Au pire l&#8217;utilisateur verra le problème et il sera temps de whitelister ledit serveur.</p>
<h3>Principe</h3>
<p>Le principe  &#8211; je vous renvois à l&#8217;article wikipedia pour plus de détails &#8211; est d&#8217;utiliser <strong>une fonction standard du procotole SMTP</strong> pour redemander l&#8217;envoi d&#8217;un mail lorsqu&#8217;on le reçoit. On indique au serveur de renvoyer le message dans 5 minutes. Deux options : le serveur en face le fait, ou non. Au bout de x fois &#8211; si le serveur s&#8217;est bien comporté &#8211; on le &laquo;&nbsp;whiteliste&nbsp;&raquo; pour de bon et il n&#8217;y aura plus de délai pour celui-ci.</p>
<h3>Quel lien avec les spammeurs ?</h3>
<p>Imaginez une armée de PC <s>(windows)</s> zombies envoyant des mails à tout va (à l&#8217;insu de l&#8217;utilisateur, forcément). Le zombie utilise un programme le plus simple possible qui se contente d&#8217;envoyer la purée. De toute manière, un PC zombie comme de ce type n&#8217;a en général pas de lien retour possible vers lui même sur le port 25 (pensez à votre PC derrière un routeur genre freebox). Donc il ne recevra jamais votre demande standard de renvoi de mails. Et donc vous n&#8217;aurez jamais le mail, qui était un spam à coup sûr. CQFD.<br />
Lisez plus bas dans l&#8217;article quelques extraits d&#8217;adresses &laquo;&nbsp;greylistées&nbsp;&raquo;, vous comprendrez que des zombies, il y en a des millions sur la planète&#8230; que fait Buffy ???<br />
Reste ensuite les *vrais* spammeurs. Je ne sais pas dire si beaucoup d&#8217;entre eux utilisent des serveurs standard de mails. Ceux qui n&#8217;ont pas prévu le coup en tout cas, ils passent aussi à la benne. Les autres, je ne sais pas s&#8217;ils perdent du temps à renvoyer la purée alors que des gens mal protégés, il y en a tant d&#8217;autres&#8230;<br />
Alors, en attendant que les zombies prennent en charge correctement le protocole et fasse des contournements réseaux compliqués (impossible ?), le greylisting peut vous aider.</p>
<h3>Léger pré-requis sur les backups MX</h3>
<p>Dernière petite remarque en préambule : il faut que tous vos serveurs frontaux (donc les backups MX) implémentent le greylisting !!! Donc oubliez les backups gracieusement offerts par votre fournisseur/hébergeur etc. En général ils ne le font pas. Si vous avez un tel backup MX &#8211; par pseudo-sécurité &#8211; il est en général déclaré de faible priorité et c&#8217;est justement celui qui est d&#8217;abord visé par les envois de spammeurs car on n&#8217;a moins souvent la main dessus. S&#8217;il ne greyliste pas, alors il enverra tout à votre MX principal qui acceptera sans broncher. Le greylisting ne servira pas à grand chose dans ce cas.<br />
(Tiens, ça me fait penser à une technique qui consiste à utiliser un serveur inexistant comme MX de plus faible priorité. Faudra que je teste ça un jour. Si quelqu&#8217;un a un retour, je suis preneur)</p>
<h3>Graphiques après plusieurs semaines d&#8217;utilisation</h3>
<p>Plutôt qu&#8217;un long discours, quelques dessins. Je vous laisse deviner la date de mise en place&#8230;</p>
<p>Sur le frontal (MX primaire) :<br />
<a href='http://michauko.org/blog/wp-content/uploads/2008/03/grey1.png' title='Greylisting sur le frontal'><img src='http://michauko.org/blog/wp-content/uploads/2008/03/grey1.png' alt='Greylisting sur le frontal' /></a></p>
<p>Et sur le backend (qui identifie les spams une fois le mail accepté) :<br />
<a href='http://michauko.org/blog/wp-content/uploads/2008/03/grey2.png' title='Greylisting sur le backend'><img src='http://michauko.org/blog/wp-content/uploads/2008/03/grey2.png' alt='Greylisting sur le backend' /></a></p>
<h3>En chiffres</h3>
<p>Avec quelques chiffres moyens pris avant et après le greylisting (ceux sur le graphe sont pris &laquo;&nbsp;pendant&nbsp;&raquo; la mise en place, donc une moyenne d&#8217;avant/après, pas terrible), ça donne ça :<br />
- Sur le frontal, avant, on recevait environ 9,5 msg/min et on rejetait 1/3 (tentatives d&#8217;openrelay, destinataires bidon etc). Maintenant, on en reçoit 3,2 par minute, toujours 1/3 de rejet pour les mêmes motifs.<br />
- Sur le backend du coup, il y a une sacrée chute d&#8217;occupation CPU par &laquo;&nbsp;spamd&nbsp;&raquo; et on identifie 0,6 msg/min contre 6 par minute avant (même taux de faux-positifs ou d&#8217;oubli, à savoir presque nul).<br />
- En une semaine, ce ne sont pas moins de 137000 &laquo;&nbsp;serveurs&nbsp;&raquo; (zombies) qui ont été greylistés, avec des charmants noms comme :</p>
<pre>         0x50a1511f.hknxx3.adsl-dhcp.tele.dk[80.161.81.31] 2 Time(s)
         0x50a403bf.abnxx10.adsl-dhcp.tele.dk[80.164.3.191] 2 Time(s)
         103.95.119-80.rev.gaoland.net[80.119.95.103] 4 Time(s)
         12-208-209-2.client.mchsi.com[12.208.209.2] 2 Time(s)
         12-219-39-94.client.mchsi.com[12.219.39.94] 2 Time(s)
         124-171-184-145.dyn.iinet.net.au[124.171.184.145] 2 Time(s)
         129-28-235-201.fibertel.com.ar[201.235.28.129] 2 Time(s)
         131.201.218.87.dynamic.jazztel.es[87.218.201.131] 2 Time(s)
         131.206.50.60.cbj04-home.tm.net.my[60.50.206.131] 2 Time(s)
         1434933186.ip2long.net[85.135.87.194] 2 Time(s)
         149.pool85-49-8.dynamic.orange.es[85.49.8.149] 2 Time(s)
         1503021874.dhcp.dbnet.dk[89.150.75.50] 4 Time(s)
         152-60.go.evo.bg[85.217.152.60] 2 Time(s)
         156-90-99-58-T-tdtv.tinp.net.tw[58.99.90.156] 2 Time(s)
         167-68-246-201.adsl.terra.cl[201.246.68.167] 2 Time(s)
         168-226-244-166.mrse.com.ar[168.226.244.166] 2 Time(s)
...
         adsl-67-114-84-118.dsl.lsan03.pacbell.net[67.114.84.118] 2 Time(s)
         adsl-68-23-4-190.dsl.ipltin.ameritech.net[68.23.4.190] 2 Time(s)
         adsl-69-209-147-42.dsl.sfldmi.ameritech.net[69.209.147.42] 2 Time(s)
         adsl-69-209-154-96.dsl.sfldmi.ameritech.net[69.209.154.96] 2 Time(s)
...
         host234-234-static.116-81-b.business.telecomitalia.it[81.116.234.234] 2 Time(s)
         host241-167-dynamic.19-79-r.retail.telecomitalia.it[79.19.167.241] 2 Time(s)
         host246-209-dynamic.15-87-r.retail.telecomitalia.it[87.15.209.246] 2 Time(s)
         host248-13-dynamic.1-87-r.retail.telecomitalia.it[87.1.13.248] 2 Time(s)
...
         pool-71-241-246-243.washdc.fios.verizon.net[71.241.246.243] 2 Time(s)
         pool-71-244-163-181.chi01.dsl-w.verizon.net[71.244.163.181] 2 Time(s)
         pool-71-246-128-243.aubnin.fios.verizon.net[71.246.128.243] 2 Time(s)
         pool-71-251-115-130.tampfl.fios.verizon.net[71.251.115.130] 2 Time(s)
         pool-71-251-140-235.cmdnnj.east.verizon.net[71.251.140.235] 2 Time(s)
         pool-71-252-137-81.dllstx.fios.verizon.net[71.252.137.81] 2 Time(s)
         pool-71-99-87-26.tampfl.dsl-w.verizon.net[71.99.87.26] 6 Time(s)
...
         ppp83-237-30-117.pppoe.mtu-net.ru[83.237.30.117] 2 Time(s)
         ppp85-140-146-212.pppoe.mtu-net.ru[85.140.146.212] 2 Time(s)
         ppp85-140-21-109.pppoe.mtu-net.ru[85.140.21.109] 2 Time(s)
         ppp85-140-43-193.pppoe.mtu-net.ru[85.140.43.193] 2 Time(s)
         ppp85-141-174-160.pppoe.mtu-net.ru[85.141.174.160] 4 Time(s)
...
         unknown[116.22.163.196] 6 Time(s)
         unknown[116.45.106.170] 2 Time(s)
         unknown[117.12.65.40] 4 Time(s)
...

- </pre>
<h3>Conclusion</h3>
<p>N&#8217;hésitez pas, apt-get install postgrey, modif du fichier main.cf et reload de postfix. Ca prend 3 minutes et ça envoi du gros !</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2008/03/05/statistiques-de-greylisting/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Spamassassin : se créer une règle de détection spécifique</title>
		<link>http://michauko.org/blog/2008/01/25/spamassassin-se-creer-une-regle-de-detection-specifique/</link>
		<comments>http://michauko.org/blog/2008/01/25/spamassassin-se-creer-une-regle-de-detection-specifique/#comments</comments>
		<pubDate>Fri, 25 Jan 2008 16:36:40 +0000</pubDate>
		<dc:creator>michauko</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[mails]]></category>
		<category><![CDATA[planet-libre.org]]></category>
		<category><![CDATA[anti-spam]]></category>
		<category><![CDATA[gaoland.net]]></category>
		<category><![CDATA[règle]]></category>
		<category><![CDATA[rule]]></category>
		<category><![CDATA[rulesemporium]]></category>
		<category><![CDATA[spam]]></category>
		<category><![CDATA[spamassassin]]></category>

		<guid isPermaLink="false">http://michauko.org/blog/2008/01/25/spamassassin-se-creer-une-regle-de-detection-specifique/</guid>
		<description><![CDATA[Malgré des règles assez sympathiques (voyez ma doc Debian (encore ? oui oui) pour les mettre en place), il arrive que certains spams ne soient pas reconnus. Si vous avez envie d&#8217;écrire une règle hyper compliquée ou simplement une petite règle car vous avez détecté qu&#8217;un serveur relai bien moisi était à l&#8217;origine de cela, [...]]]></description>
			<content:encoded><![CDATA[<p>Malgré des règles <a href="http://www.rulesemporium.com">assez sympathiques</a> (voyez <a href="http://michauko.org/docs/debian_testing/">ma doc Debian</a> (encore ? oui oui) pour les mettre en place), il arrive que certains spams ne soient pas reconnus. Si vous avez envie d&#8217;écrire une règle hyper compliquée ou simplement une petite règle car vous avez détecté qu&#8217;un serveur relai bien moisi était à l&#8217;origine de cela, voici une mini-introduction pour le faire.<span id="more-103"></span></p>
<p>Tout d&#8217;abord, lisez la doc officielle de <a href="http://wiki.apache.org/spamassassin/WritingRules">SpamAssassin sur le sujet</a>, c&#8217;est la bible. Ensuite, voici un cas simple, concret, basé sur un <em>header</em> particulier, le champ <code>"Received"</code>. Je cherche à voir si le mail spammeux non détecté est passé par le serveur &laquo;&nbsp;gaoland.net&nbsp;&raquo;, apparement un &laquo;&nbsp;problème connu&nbsp;&raquo; (voyez sur Google).</p>
<p>J&#8217;ai donc créé un fichier <code>/etc/spamassassin/mes_regles.cf</code> contenant :</p>
<pre>header   PERSO_GAOLAND Received =~ /gaoland\.net/i
describe PERSO_GAOLAND Relaye par gaoland.net, on soupçonne fortement
score    PERSO_GAOLAND 4.0</pre>
<p>J&#8217;ai simplement fait ajouter 4 points car ce spam non reconnu marquait déjà 4.5 ou 4.9 &#8211; je ne sais plus &#8211; pour motif &laquo;&nbsp;Bayesian spam probability is 99 to 100%&nbsp;&raquo;, mon seuil de détection étant à 5.</p>
<p>Pour faire un test de votre configuration, vous pouvez vous créer une règle de ce genre :</p>
<pre>body     MESREGLES_TEST   /je teste mon spam/
score    MESREGLES_TEST   5.1</pre>
<p>&#8230;et vous envoyer un e-mail depuis une adresse non <em>whitelistée</em> (oui oui j&#8217;ai fait cette erreur <img src='http://michauko.org/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  contenant dans le corps du message (BODY) la phrase &laquo;&nbsp;je teste mon spam&nbsp;&raquo;. Vous devriez alors voir un joli :</p>
<pre>Spam detection software, running on the system "monserveur.com", has
identified this incoming email as possible spam.  The original message
has been attached to this so you can view it (if it isn't spam) or label
similar future email.  If you have any questions, see
the administrator of that system for details.

Content preview:  bliblablo je teste mon spam blabslqj [...] 

Content analysis details:   (5.1 points, 5.0 required)

 pts rule name              description
---- ---------------------- --------------------------------------------------
 5.1 MESREGLES_TEST             BODY: MESREGLES_TEST
 0.0 BAYES_50               BODY: Bayesian spam probability is 40 to 60%
                            [score: 0.4978]
 0.0 AWL                    AWL: From: address is in the auto white-list</pre>
<p>Et voilou</p>
]]></content:encoded>
			<wfw:commentRss>http://michauko.org/blog/2008/01/25/spamassassin-se-creer-une-regle-de-detection-specifique/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

