Amavis

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.

Avantages

  • Il fait du lmtp, ce qui fait de lui un bon compagnon pour postfix,
  • Il est ecrit en perl. Comme sa fonction principale et de faire de l’anti-spam ca tombe bien Spamassassin c’est aussi du perl,
  • On peut le configurer pour lire la conf utilisateurs dans une BD MySQL? ou LDAP,
  • On peut configurer plusieurs anti-virus,
  • Il peut verifier les magics des fichiers attaches (avec la cmd file. Rien qu’avec ca pas besoin d’anti-virus),
  • Il s’autoconfigure (Au demarrage il va cherche si tous les utilitaires dont il a besoin sont sur le system AV compris).

Desavantages

  • C’est ecrit en perl (Les auteurs on un peu abuse dans l’ecriture du code, c’est un gros fichier soit disant pour que ca charge plus vite),
  • Il s’autoconfigure (Du coup le demarrage et ultra-lent),
  • C’est un peu complique a configurer la premiere fois (Quand on voit le fichier de conf il fait peur... mais il suffit de savoir lire).

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 :

  • Les reseaux de cooperation anti-spam tels que dcc, razor et/ou pyzor,
  • Donner au moteur Bayesian (autolearn) une base de mail de ham et de spam d’au moins 200 mails.

Lutter contre le spam

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...

 
tech/amavisd-new.txt · Dernière modification: 2006/07/27 09:57 par danjer
 
Recent changes RSS feed Valid XHTML 1.0 Valid CSS Driven by DokuWiki Powered by Lescampeurs