Amavis - Amavis

Amavis
Développeur (s) Patrick Ben Koetter
Première version 1997  ( 1997 )
Version stable 2.11.1 (9 octobre 2018 ; il y a 2 ans ) [±]  ( 09/10/2018 )
Dépôt Modifiez ceci sur Wikidata
Écrit en Perl
Système opérateur Unix-like
Taper Filtrage des e-mails
Licence GPLv2 , licence BSD simplifiée
Site Internet www .amavis .org Modifiez ceci sur Wikidata

Amavis est un filtre de contenu open source pour le courrier électronique , mettant en œuvre le transfert de messages électroniques, le décodage, certains traitements et vérifications, et s'interfaçant avec des filtres de contenu externes pour fournir une protection contre le spam , les virus et autres logiciels malveillants . Il peut être considéré comme une interface entre un mailer ( MTA , Mail Transfer Agent) et un ou plusieurs filtres de contenu .

Amavis peut être utilisé pour:

  • détecter les virus, le spam, les types de contenu interdits ou les erreurs de syntaxe dans les messages électroniques
  • bloquer, étiqueter, rediriger (en utilisant le sous-adressage ) ou transférer le courrier en fonction de son contenu, de son origine ou de sa taille
  • mettre en quarantaine (et libérer) ou archiver les messages électroniques dans des fichiers, des boîtes aux lettres ou une base de données relationnelle
  • désinfecter les messages transmis à l'aide d'un désinfectant externe
  • générer des signatures DKIM
  • vérifier les signatures DKIM et fournir une liste blanche basée sur DKIM

Caractéristiques notables:

Une installation courante de filtrage de courrier avec Amavis consiste en un Postfix en tant que MTA, SpamAssassin en tant que classificateur de spam et ClamAV en tant que protection antivirus, le tout fonctionnant sous un système d' exploitation de type Unix . De nombreux autres scanners de virus (environ 30) et quelques autres scanners de spam ( CRM114 , DSPAM , Bogofilter ) sont également pris en charge, ainsi que certains autres MTA.

Topologie d'interfaçage

Trois topologies d'interfaçage avec un MTA sont prises en charge. Le processus amavisd peut être pris en sandwich entre deux instances d'un MTA, ce qui donne une configuration classique de filtrage des messages après la file d'attente, ou amavisd peut être utilisé comme filtre proxy SMTP dans une configuration de filtrage avant file d'attente, ou le processus amavisd peut être consulté pour fournir le classement des courriers mais pas de réexpédier un message par lui-même, auquel cas le client consultant reste en charge de la réexpédition du courrier. Cette dernière approche est utilisée dans une configuration Milter (avec certaines limitations), ou avec un programme client historique amavisd-submit .

Depuis la version 2.7.0, une configuration avant la file d'attente est préférable, car elle permet de rejeter un transfert de message électronique pendant une session SMTP avec un client expéditeur. Dans une configuration après la file d'attente, le filtrage a lieu après qu'un message électronique a déjà été reçu et mis en file d'attente par un MTA, auquel cas un filtre de messagerie ne peut plus rejeter un message, mais ne peut que le remettre (éventuellement étiqueté), ou le supprimer, ou générer une notification de non-remise, ce qui peut provoquer une rétrodiffusion indésirable en cas de renvoi d' un message avec une fausse adresse d'expéditeur.

Un inconvénient d'une configuration avant la file d'attente est qu'elle nécessite des ressources (CPU, mémoire) proportionnelles à un taux de transfert de courrier actuel (pic), contrairement à une configuration après la file d'attente, où un certain délai est acceptable et l'utilisation des ressources correspond au taux de transfert de courrier moyen. . Avec l'introduction d'une option smtpd_proxy_options = speed_adjust dans Postfix 2.7.0, les besoins en ressources pour un filtre de contenu avant file d'attente ont été considérablement réduits.

Dans certains pays, la législation n'autorise pas le filtrage du courrier à rejeter un message électronique une fois qu'il a été accepté par un MTA, ce qui exclut une configuration de filtrage après la file d'attente avec suppression ou mise en quarantaine des messages, mais laisse une possibilité de remise (éventuellement étiquetée ) ou les rejeter dans une configuration avant la file d'attente (proxy SMTP ou milter).

Protocoles d'interfaçage

Amavis peut recevoir des messages électroniques d'un MTA sur une ou plusieurs sockets des familles de protocoles PF_INET ( IPv4 ), PF_INET6 ( IPv6 ) ou PF_LOCAL ( socket de domaine Unix ), via les protocoles SMTP , LMTP , ou un simple protocole privé AM.PDP peut être utilisé avec un programme d'aide comme amavisd-milter pour s'interfacer avec les milters . Du côté de la sortie, les protocoles SMTP ou LMTP peuvent être utilisés pour transmettre un message à une instance MTA d'arrière-plan ou à un LDA , ou un message peut être passé à un processus engendré via un tube Unix . Lorsque SMTP ou LMTP sont utilisés, une session peut éventuellement être cryptée à l'aide d'une extension TLS STARTTLS ( RFC 3207 ) du protocole. Le pipeline de commande SMTP ( RFC 2920 ) est pris en charge dans le code client et serveur.

Interfaçage avec SpamAssassin

Lorsque l' analyse anti-spam est activée, un processus démon amavisd est conceptuellement très similaire à un processus spamd d'un projet SpamAssassin . Dans les deux cas, les processus enfants fourchus appellent directement les modules SpamAssassin Perl , d'où des performances similaires.

La principale différence réside dans les protocoles utilisés: Amavis parle généralement un protocole SMTP standard à un MTA, tandis que dans le cas spamc / spamd, un MTA génère généralement un programme spamc en lui passant un message via un tube Unix, puis le processus spamc transfère le message à un démon spamd utilisant un protocole privé, et spamd appelle ensuite les modules SpamAssassin Perl.

Priorités de conception

Les priorités de conception de l' amavisd-new ( désormais appelé Amavis ) sont: la fiabilité, la sécurité, le respect des normes, les performances et la fonctionnalité.

Fiabilité

Dans l'intention qu'aucun message électronique ne puisse être perdu en raison d'événements inattendus tels que des échecs d'E / S, l'épuisement des ressources et des terminaisons inattendues de programme, le programme amavisd vérifie méticuleusement l'état d'achèvement de chaque appel système et opération d'E / S. Les événements inattendus sont enregistrés dans la mesure du possible et traités avec plusieurs couches de gestion des événements. Amavis n'assume jamais la responsabilité d'une remise de message électronique à partir d'un MTA: l'état de réussite final est signalé à un MTA uniquement après que le message a été transmis à l'instance MTA principale et que la réception a été confirmée. En cas d'échec fatal lors du traitement ou du transfert d'un message, le message en cours de traitement reste simplement dans une file d'attente de l'instance MTA frontale, pour être réessayé ultérieurement. Cette approche couvre également les pannes d'hôte inattendues potentielles, les plantages du processus amavisd ou de l'un de ses composants.

L'utilisation des ressources du programme telles que la taille de la mémoire, les descripteurs de fichiers, l'utilisation du disque et la création de sous-processus est contrôlée. Les messages électroniques volumineux ne sont pas conservés en mémoire, de sorte que la taille de la mémoire disponible n'impose pas de limite à la taille des messages électroniques pouvant être traités et que les ressources mémoire ne sont pas gaspillées inutilement.

Sécurité

Une grande attention est accordée aux aspects de sécurité, requis par la gestion des données potentiellement malveillantes, non standard ou simplement déformées dans les messages électroniques provenant de sources non fiables.

Le processus qui gère les messages électroniques s'exécute avec des privilèges réduits sous un ID utilisateur dédié. En option, il peut fonctionner avec chroot -ed. Les risques de débordements de mémoire tampon et de bogues d'allocation de mémoire sont largement évités en implémentant la gestion de tous les protocoles et le traitement du courrier en Perl , qui gère la gestion dynamique de la mémoire de manière transparente. Il faut veiller à ce que le contenu des messages traités ne se propage pas par inadvertance dans le système. Perl fournit un filet de sécurité supplémentaire avec son marquage des données contaminées provenant de la nature, et Amavis prend soin de mettre cette fonctionnalité Perl à bon escient en évitant la désinfection automatique des données ( utilisez re "taint" ) et en ne les dénouant explicitement qu'à des fins stratégiques points, en retard dans un flux de données.

Amavis peut utiliser plusieurs programmes externes pour améliorer ses fonctionnalités. Ce sont des désarchiveurs , des décompresseurs , des antivirus et des antispam . Comme ces programmes sont souvent implémentés dans des langages comme C ou C ++ , il existe un risque potentiel qu'un message électronique transmis à l'un de ces programmes puisse provoquer son échec ou même ouvrir une faille de sécurité. Le risque est limité en exécutant ces programmes en tant qu'ID utilisateur non privilégié, et éventuellement chrooté. Néanmoins, les programmes externes tels que les désarchiveurs non maintenus doivent être évités. L'utilisation de ces programmes externes est configurable, et ils peuvent être désactivés de manière sélective ou en groupe (comme tous les décodeurs ou tous les antivirus).

Performance

Bien qu'implémenté dans un langage de programmation interprété Perl , Amavis lui-même n'est pas lent. La bonne performance de la fonctionnalité implémentée par Amavis lui-même (sans parler de composants externes) est obtenue en traitant les données en gros morceaux (par exemple pas ligne par ligne), en évitant la copie inutile des données, en optimisant les chemins de code fréquemment parcourus, en en utilisant des structures de données et des algorithmes appropriés, ainsi que par certaines optimisations de bas niveau. Les goulots d'étranglement sont détectés lors du développement par profilage du code et par benchmarking. Un rapport de minutage détaillé dans le journal peut aider à reconnaître les goulots d'étranglement dans une installation particulière.

Certains modules ou programmes externes comme SpamAssassin ou certains antivirus en ligne de commande peuvent être très lents, et leur utilisation constituerait une grande majorité du temps écoulé et des ressources de traitement, ce qui rendrait les ressources utilisées par Amavis lui-même proportionnellement assez petites.

Les composants tels que les décodeurs de courrier externes, les antivirus et les analyseurs de spam peuvent chacun être désactivés de manière sélective s'ils ne sont pas nécessaires. Ce qui reste, ce sont les fonctionnalités implémentées par Amavis lui-même, comme le transfert de messages électroniques depuis et vers un MTA à l'aide d'un protocole SMTP ou LMTP , la vérification de la validité de la section d'en-tête de courrier, la vérification des types de contenu de courrier interdits, la vérification et la génération de signatures DKIM .

En conséquence, les tâches de traitement du courrier telles que la signature et la vérification DKIM (avec d'autres vérifications de courrier désactivées) peuvent être exceptionnellement rapides et peuvent rivaliser avec les implémentations dans les langages compilés. Même les vérifications complètes à l'aide d'un antivirus rapide, mais avec le scan anti-spam désactivé peuvent être étonnamment rapides.

Respect des normes

La mise en œuvre des protocoles et des structures de message suit de près un ensemble de normes applicables telles que RFC 5322 , RFC 5321 , RFC 2033 , RFC 3207 , RFC 2045 , RFC 2046 , RFC 2047 , RFC 3461 , RFC 3462 , RFC 3463 , RFC 3464 , RFC 4155 , RFC 5965 , RFC 6376 , RFC 5451 , RFC 6008 et RFC 4291 . Dans plusieurs cas, certaines fonctionnalités ont été réimplémentées dans le code Amavis même si un module Perl public ( CPAN ) existe, mais manque d'attention aux détails pour suivre une norme ou manque de vérification et de traitement suffisants des erreurs.

Licence

Amavis est licencié sous une licence GPLv2 . Cela s'applique au code actuel, ainsi qu'aux branches historiques. Une exception à cela sont certains des programmes de support (comme le suivi et les rapports statistiques), qui sont couverts par une nouvelle licence BSD .

Le projet

Le projet a démarré en 1997 sous la forme d'un script shell Unix pour détecter et bloquer les messages électroniques contenant un virus . Il était destiné à bloquer les virus au stade MTA (agent de transfert de courrier) ou LDA (distribution locale), fonctionnant sur une plate - forme de type Unix , en complément d'autres mécanismes de protection antivirus exécutés sur les ordinateurs personnels des utilisateurs finaux.

Ensuite, l'outil a été réimplémenté en tant que programme Perl , qui a ensuite évolué en un processus démonisé . Une dizaine de développeurs se sont relayés au cours des cinq premières années du projet, développant plusieurs variantes tout en gardant un objectif commun, le nom du projet et une partie de l'infrastructure de développement.

Depuis décembre 2008 (jusqu'au 2018-10-09), la seule branche active était officiellement amavisd-new , qui était développée et maintenue par Mark Martinec depuis mars 2002. Cela a été convenu entre les développeurs de l'époque dans une correspondance privée: Christian Bricart , Lars Hecking, Hilko Bengen, Rainer Link et Mark Martinec. Le nom du projet Amavis est largement interchangeable avec le nom de la branche amavisd-new .

De nombreuses fonctionnalités ont été ajoutées au fil des ans, comme l'ajout d'une protection contre le spam et d'autres contenus indésirables, en plus de la protection antivirus d'origine. L'accent est mis sur la fiabilité, la sécurité, le respect des normes et les performances.

Un domaine amavis.org utilisé par le projet a été enregistré en 1998 par Christian Bricart, l'un des premiers développeurs, qui maintient toujours l'enregistrement du nom de domaine. Le domaine est désormais entièrement dédié à la seule branche active. La liste de diffusion du projet a été déplacée de SourceForge vers amavis.org en mars 2011 et est hébergée par Ralf Hildebrandt et Patrick Ben Koetter. La page Web du projet et le site de distribution principal se trouvaient à l' Institut Jožef Stefan , Ljubljana, Slovénie (jusqu'à la remise en 2018), où la majeure partie du développement a eu lieu entre les années 2002 et 2018.

Annonce de changement de chefs de projet

Le 9 octobre 2018, Mark Martinec a annoncé sur la liste de diffusion générale de soutien et de discussion sa retraite du projet et également que Patrick Ben Koetter continuera en tant que nouveau chef de projet.

Je connais Ben personnellement, il est l'un des deux auteurs du Livre de Postfix, et utilise Amavis dans sa vie professionnelle aussi, donc je pense que le projet sera entre de bonnes mains.

-  Mark Martinec

Après cela, Patrick a notifié la migration du code source vers un référentiel GitLab public et son plan pour les prochaines étapes concernant le développement du projet.

Branches et nom du projet

À travers l'histoire du projet, le nom du projet ou de ses branches variait quelque peu. Initialement, l'orthographe du nom du projet était AMaViS (A Mail Virus Scanner), introduit par Christian Bricart. Avec une réécriture en Perl, le nom du programme était Amavis-perl . Les versions démonisées ont été initialement distribuées sous un nom amavisd-snapshot , puis sous le nom amavisd . Une réécriture modulaire de Hilko Bengen s'appelait Amavis-ng .

En mars 2002, la branche amavisd-new a été introduite par Mark Martinec, initialement en tant que patch contre amavisd-snapshot-20020300 . Cela a évolué plus tard en un projet autonome, qui est maintenant la seule branche survivante et activement maintenue. De nos jours, un nom de projet est de préférence orthographié Amavis (alors que le nom du programme lui-même est amavisd ). Le nom Amavis est désormais principalement interchangeable avec amavisd-new .

Histoire du projet

programme shell

  • 1997 (code original par Mogens Kjær - Laboratoire Carlsberg, modifié par Jürgen Quade) initial, non publié officiellement
  • 1998-01-17 AMaViS 0.1 (Christian Bricart) AMaViS, première sortie officielle
  • 1998-01-28 AMaViS 0.1.1
  • 1998-12-08 AMaViS 0.2.0-pre1
  • 1999-02-25 AMaViS 0.2.0-pre2
  • 1999-03-29 AMaViS 0.2.0-pre3
  • 1999-03-31 AMaViS 0.2.0-pre4
  • 1999-07-19 AMaViS 0.2.0-pre5
  • 1999-07-20 AMaViS 0.2.0-pre6
  • 2000-10-31 AMaViS 0.2.1 (Christian Bricart, Rainer Link, Chris Mason)

Programme Perl

  • 2000-01 Amavis-perl (Chris Mason)
  • 2000-08 Amavis-perl-8
  • 2000-12 Amavis-perl-10
  • 2001-04 Amavis-perl-11 (scindé en amavisd)
  • 2003-03-07 Amavis-0.3.12 (Lars Hecking)

Démon Perl: amavisd

  • Démonisation 2001-01 (Geoff Winkless)
  • 2001-04 amavisd-instantané-20010407 (Lars Hecking)
  • 2001-07 amavisd-instantané-20010714
  • 2002-03 amavisd-snapshot-20020300 (scindé en amavisd-new)
  • 2003-03-03 amavisd-0.1

Perl, re-conception modulaire

(Hilko Bengen)

  • 2002-03 amavis-ng-0.1
  • 2003-03 amavis-ng-0.1.6.2

amavisd-nouveau

(Mark Martinec)

  • 2002-03-30 amavisd-new, pré-forké, Net :: Server
  • 17/05/2002
  • 2002-06-30 packages, recherches SQL
  • 2002-11-16 intégré - un fichier
  • 2002-12-27
  • 2003-03-14 Recherches LDAP
  • 16/06/2003
  • 2003-08-25 p5
  • 2003-11-10 p6 @ * _ cartes
  • 2004-01-05 p7
  • 2004-03-09 p8
  • 2004-04-02 p9
  • 2004-06-29 p10
  • 2004-07-01 2.0 banques de politiques, formats d' adresses IPv6
  • 2004-08-15 2.1.0 Utilitaire de surveillance amavisd-nanny
  • 06/09/2004 2.1.2
  • 2004-11-02 2.2.0
  • 2004-12-22 2.2.1
  • 2005-04-24 2.3.0 @decoders, règles de bannissement par destinataire
  • 09/05/2005 2.3.1
  • 29/06/2005 2.3.2
  • 2005-08-22 2.3.3
  • 2006-04-02 2.4.0 DSN dans SMTP,% * _ by_ccat
  • 08/05/2006 2.4.1
  • 2006-06-27 2.4.2 correspondants, journalisation SQL et quarantaine
  • 30/09/2006 2.4.3
  • 20/11/2006 2.4.4
  • 30/01/2007 2.4.5
  • 2007-04-23 2.5.0 catégories de contenu de blocage, client SMTP réécrit
  • 2007-05-31 2.5.1 amavisd-requeue
  • 2007-06-27 2.5.2
  • 12/12/2007 2.5.3
  • 12/03/2008 2.5.4
  • 2008-04-23 2.6.0 DKIM , tueur de rebond , TLS
  • 29/06/2008 2.6.1
  • 2008-12-12 Amavis est amavisd-nouveau
  • 15/12/2008 2.6.2
  • 2009-04-22 2.6.3 prise en charge de CRM114 et DSPAM , troncature
  • 2009-06-25 2.6.4 surveillance via SNMP
  • 2010-04-25 2.7.0-pre4
  • 2011-02-03 2.7.0-pre14
  • La liste de diffusion du 07/03/2011 a été déplacée de SourceForge vers amavis.org
  • 07/04/2011 2.6.5
  • 19/05/2011 2.6.6
  • 2011-06-01 2.7.0 améliorations de la pré-file d'attente, accélération
  • 29/04/2012 2.7.1
  • 30/06/2012 2.7.2
  • 2012-06-30 2.8.0 utiliser ØMQ au lieu de BDB , optimisations des performances
  • 27/04/2013 2.8.1-rc1
  • 2013-06-28 2.8.1 peut utiliser Redis pour le stockage des correspondants
  • 2013-09-04 2.8.2-rc1 (2.8.2 non publié)
  • 2014-05-09 2.9.0 log structuré au format JSON , auto-réputation d' adresse IP
  • 27/06/2014 2.9.1
  • 2014-10-22 2.10.0 Courriel internationalisé ( RFC 6530 , SMTPUTF8 , EAI , IDN )
  • 22/10/2014 2.10.1
  • 26/04/2016 2.11.0
  • 2018-10-09 2.11.1 mises à jour mineures, juste avant la migration vers un référentiel GitLab

Voir également

Les références

Liens externes