[Admin-ml] Spam
Proniewski Patrick
patrick.proniewski at univ-lyon2.fr
Mer 5 Mar 15:04:30 CET 2008
On 5 mars 08, at 14:29, Jean-Luc Bailloeul wrote:
>> Il n'y a pas grand chose à en dire. Que cherches tu comme info ?
> Un bon How to, éventuellement. J'ai celui là :
> http://www.afp548.com/article.php?story=20051127235810230.
> Mais qui me semble un peu fouillé.
ha ok, un guide d'installation alors. Bon, celui là il dit d'utiliser
launchd juste pour lancer le process au boot. Pourquoi pas. Il faut
juste savoir que launchd est incapable de bien suivre postgrey, c'est
un véritable carnage. Il ne faut surtout pas utiliser launchd pour
autre chose que le simple lancement type startup script, ça pose plein
de problèmes. À tel point que j'ai préféré faire carrément un vrai
startup script à l'ancienne.
Voilà un copier-collé de mes notes de travail prises pendant l'install
de postgrey chez nous :
--------------------------------------------------------------------------------
** GREYLIST **
* INSTALL *
mkdir /usr/local/src/
cd /usr/local/src/
curl -O http://postgrey.schweikert.ch/pub/postgrey-1.30.tar.gz
tar -xzvf postgrey-1.30.tar.gz
cp postgrey-1.30/postgrey /usr/bin (si on cp dans /usr/local/bin PERL
râle à
propos du PATH qui n'est pas sûr)
ajout du user:group qui va bien :
dscl localhost -create /NetInfo/users/postgrey
dscl localhost -create /NetInfo/users/postgrey uid 100
dscl localhost -create /NetInfo/users/postgrey gid 100
dscl localhost -create /NetInfo/users/postgrey home /var/db/postgrey
dscl localhost -create /NetInfo/users/postgrey passwd '*'
dscl localhost -create /NetInfo/groups/postgrey
dscl localhost -create /NetInfo/groups/postgrey gid 100
dscl localhost -create /NetInfo/groups/postgrey passwd '*'
mkdir /var/db/postgrey
chown postgrey:postgrey /var/db/postgrey
perl -MCPAN -e shell
> test IO::Multiplex
> install IO::Multiplex
> test Parse::Syslog
> install Parse::Syslog
* LANCEMENT GREYLIST *
commande de lancement de l'Usine :
Si on a copié postgrey dans /usr/bin plutôt que dans /usr/local/bin,
PERL
ne râle pas, et on peut se passer de "PATH=/usr/loc..." devant la
commande.
/usr/bin/postgrey \
--pidfile=/var/run/postgrey.pid \
--unix=/var/run/postgrey.sock \
-d --user=postgrey --group=postgrey \
--dbdir=/var/db/postgrey \
--auto-whitelist-clients=10 \
--delay=600 \
--max-age=20
L'utilisation de launchd n'est pas souhaitable pour plusieurs raisons :
- cela n'autorise pas l'option -d de passage en mode démon
- sans le mode -d, postgrey ne sait pas loguer, on n'a donc pas de
trace des
transactions
- comme il ne peut pas loguer, c'est visiblement launchd qui prend
tout dans la
figure, et il perd la trace du process au bout de quelques secondes
d'usage.
- de plus, sans le mode -d, les performances de postgrey chute à moins
de 200
requêtes par secondes, dans des conditions de test où nous obtenons
près de
900 requêtes par seconde en mode "démon".
* TEST GREYLIST *
test, bench, et feed de la DB. Prendre un ou des log du serveur
archivé, et le donner
à manger à l'utilitaire policy-test fourni avec postgrey. On indique
le socket
de postgrey.
$ gzcat mail.log.*.gz | /usr/local/src/postgrey-1.30/policy-test unix:/
var/run/postgrey.sock
123111 requests in 139s (885.69 r/s)
--------------------------------------------------------------------------------
Au final mon startup script enregistré dans le fichier /Library/
StartupItems/Postgrey/Postgrey ressemble à ça :
--------------------------------------------------------------------------------
#!/bin/sh
#
# $Id: Postgrey 861 2007-08-17 09:03:08Z patpro $
#
# 1.0 - 20070817 - Patrick Proniewski
# First version.
. /etc/rc.common
StartService ()
{
if [ "${POSTGREY:=-NO-}" = "-YES-" ]; then
ConsoleMessage "Starting Postgrey daemon"
rm -f /var/run/postgrey.pid
/usr/bin/postgrey \
--pidfile=/var/run/postgrey.pid \
--unix=/var/run/postgrey.sock \
-d --user=postgrey --group=postgrey \
--dbdir=/var/db/postgrey \
--auto-whitelist-clients=10 \
--delay=600 \
--max-age=20
fi
}
StopService ()
{
ConsoleMessage "Stopping Postgrey daemon"
kill $(cat /var/run/postgrey.pid) 2> /dev/null
rm /var/run/postgrey.pid
}
RestartService ()
{
if [ "${POSTGREY:=-NO-}" = "-YES-" ]; then
ConsoleMessage "Restarting Postgrey daemon"
StopService
sleep 1
StartService
else
StopService
fi
}
RunService "$1"
--------------------------------------------------------------------------------
Il faut bien sûr ajouter POSTGREY:=-YES- dans /etc/hostconfig
A noter aussi : avant d'activer postgrey, j'ai filtré plusieurs Go de
log de mail pour repérer les plus gros expéditeurs légitimes externes
(scores de spam bien négatifs). Une fois cette collecte effectuée,
j'ai rapidement regardé les domaines de messagerie associés. Après ce
dernier tri "à la tête du client", j'ai établi un fichier de 1000
netblocs (A.B.C.D/24) que j'ai mis en whitelist *devant* ma greylist.
De sorte que ces expéditeurs ne sont jamais greylistés, ils passent
directement.
Cela me donne un client_access de 1000 lignes ressemblant à ça :
...
12.130.136 permit
17.72.133 permit
24.201.245 permit
...
Après 15 jours de fonctionnement, j'ai fait des stats sur les 10
derniers jours. J'ai trouvé que :
88,6 % des emails arrivent sans aucun délai
92.2 % des emails arrivent avant 15 minutes d'attente
96.5 % des emails arrivent avant 30 minutes d'attente
98 % des emails arrivent avant 60 minutes d'attente
Le délai le plus long enregistré à cette époque (septembre 2007) était
de presque 48h, mais pour une poignée de cas vraiment marginaux.
Patrick PRONIEWSKI
--
Administrateur Système - SENTIER - Université Lumière Lyon 2
Plus d'informations sur la liste de diffusion Admin-ml