Amavisd-new a des avantages et des inconveniants, tout est une question de points de vue (Bref, c’est comme dans la vrai vie). La structure interne est un peu complex, et je pense pas tout a fait adapte au niveau des perfs. Il y a dans le code un systeme de chargement dynamique de code, pour soit disant prendre moins de memoire. Amavisd-new est un bon programme plein de bidouilles de geek et surtout teste sur des gros systemes en production.
amavisd.conf
Fichier de configuration d’amavisd-new modifie pour le projet. patch
diff /usr/sbin/amavisd-new /usr/sbin/amavisd-new-dist
7297,7298d7296
< $res = $self->lookup_ldap_exact ($domain); # example.com
< if (defined $res) { return $res }
Pour la version 2.4.1 d’amavis :
*** /usr/sbin/amavisd-new Sun Jun 11 21:23:08 2006
--- /tmp/amavisd-new Thu Jul 27 09:55:42 2006
***************
*** 2557,2562 ****
--- 2557,2563 ----
push(@keys, $localpart.$append_to_user); # user(@)
}
push(@keys, $prepend_to_domain.$domain); # (@)sub.example.com
+ push(@keys, $domain); # (@)sub.example.com
if ($domain =~ /\[/) { # don't split address literals
push(@keys, $prepend_to_domain.'.'); # (@).
} else {
J’ai legerement patche amavis. Lorsque amavis recherche si une boite est local par default il recherche @example.com et non example.com. Ceci posait probleme. SpamAssassin?
Amavis utilise spamassassin pour scanner les mails, il n’y a pas besoin de configurer quoique ce soit pour le bon fonctionnement de celui-ci. Les options par defaut sont nettement suffisantes. Neanmoins, il faut configurer :
La lutte contre le spam c’est pas a 100 % efficace. On peut considerer qui il y a un a deux pourcents de mail qui passeront les differents filltres, positivement ou negativement. Il donc pourvoir permettre aux utilisateurs de controller une partie de ce processus lorsque la detection de spam c’est planter.
Voici une solution simple pour resoudre ce probleme qui permet de controler ce processus depuis la majoriter des clients mails (tout client IMAP ou tout client Webmail s’appuyant sur du IMAP). On peut aussi utiliser ce systeme par forward de mail.
Il faut creer un Maildir dans le compte system amamvis (/var/lib/amavis ⇒ Debian) :
cd /var/lib/amavis maildirmake.courier -S System maildirmake.courier -S -f Spam System maildirmake.courier -S -f Not-spam System
Ceci va nous donner une sorte de public folder dans lesquel les utlisateurs pourront deposer les mail qui auront ete illegitiments tage ou non=tage comme spam.
Voici un petit script pour rendre le tout interactif :
#!/usr/bin/perl -w my $h = { spamdir => '/var/lib/amavis/System/.Spam', hamdir => '/var/lib/amavis/System/.Not-spam', }; sub do_salearn { opendir SPAM, "$h->{spamdir}/cur" or die "$!"; opendir HAM, "$h->{hamdir}/cur" or die "$!"; my @spam = grep {!/^\./} readdir SPAM; my @ham = grep {!/^\./} readdir HAM; if (@spam) { print `su - amavis -c "sa-learn --no-rebuild --dir --spam $h->{spamdir}/cur"`; foreach my $file (@spam) { unlink "$h->{spamdir}/cur/$file" or die "unlink:$!"; } } if (@ham) { print `su - amavis -c "sa-learn --no-rebuild --dir --ham $h->{hamdir}/cur"`; foreach my $file (@ham) { unlink "$h->{hamdir}/cur/$file" or die "unlink:$!"; } } if (@spam || @ham) { print `su - amavis -c "sa-learn --rebuild"` } closedir SPAM; closedir HAM; } use SGI::FAM; my $fam=new SGI::FAM; $fam->monitor($h->{spamdir}); $fam->monitor($h->{hamdir}); while (1) { my $event=$fam->next_event; # Blocks print "Pathname: ", $event->filename, " Event: ", $event->type, "\n"; do_salearn if $event->filename eq "cur"; }
Il est a noter que rapport de spam dans ce cas precis n’est effectue que pour le moteur Bayian interne. Il serait bon de rajouter un jour la notification vers Razor ou pyzor...