<?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; postgrey</title>
	<atom:link href="http://michauko.org/blog/tag/postgrey/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>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>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>
	</channel>
</rss>

