J'ai découvert récemment la solution anti-spam AgentJ.
Techniquement c'est principalement du standard : Postfix/Amavisd-new/Spamassassin. Par contre ils ont ajouté un contrôle supplémentaire : l'expéditeur d'un courriel doit prouver son « humanité » (Captcha). Ce n'est pas la première fois que je vois un logiciel du genre sous licence libre, mais celui-là semble plutôt bien abouti et maintenu. Le tout installable via docker-compose.
L'installation est donc simplifié il faut juste Docker (enfin Podman dans mon cas) et docker-compose.
Par contre Postfix ne démarrait pas chez moi (bizarre) j'ai dû créer deux répertoires à la main :
mkdir /var/lib/containers/storage/volumes/agentj_postqueue/_data/hold mkdir /var/lib/containers/storage/volumes/agentj_postqueue/_data/trace
Rapidement me vient deux questions :
- peut-on installer avec autre chose que Docker ?
 - puis-je installer cela dans mon infrastructure existante (sans avoir plusieurs relay SMTP bien entendu) ?
 
Je n'ai pas de réponse définitive à ces deux questions parce que je n'ai pas fait une étude de la solution assez poussé pour le moment mais voici mes remarques :
- l'application est en PHP symfony, rien de particulier dedans
 - l'application se configure via des variables d'environnement
 - il y a deux conteneurs pour les logs : agentj-syslogng-1 et agentj-logspout-1, j'ai pas bien compris l'utilité/la différence entre ces deux conteneurs mais cela ne semble pas nécessaire pour l'application
 - il y a une base de donnée partagée entre amavisd-new et l'application
 - le moteur de base de donnée est du MariaDB, à priori on peut le remplacer sans soucis par Postgresql (Amavisd-new le gère et c'est Doctrine qui est utilisé par l'application)
 - l'interaction entre amavid-new et l'application semble se faire uniquement par trois moyens :
 
- la configuration d'amavisd-new se fait via la base de données partagée entre les deux services
 - amavisd-new ajoute les mails des expéditeurs inconnus dans la base de données, puis l'application envoi le Captcha via un script lancé par un cron qui lit la base de données
 - l'application lance directement "amavisd-release" dans son conteneur (sans passer par le conteneur d'amavisd-new)
 
- il me semble pas y avoir de lien direct avec spamassassin
 - il y a deux serveurs postfix : 1 comme serveur SMTP accessible depuis l'extérieur, 1 comme relai, je n'ai pas bien compris exactement le but du second pour le moment (de ce que j'ai compris c'est pour éviter des boucles)
 - on peut visiblement importer des comptes LDAP (pas testé)
 
Donc pour répondre à ma question, il semble possible de :
- déployer sans Docker
 - déployer dans mon infrastructure mais il faut :
 
- que je remette amavisd-new (ca va me rappeler ma jeunesse)
 - gérer les changements de configuration des différents services
 - gérer moi même les cron (enfin ... systemd-timer) et la mise à jour de ces timers
 - packager l'application proprement
 
Par contre je vois quelques points génant :
- il y a partage d'un volume entre amavisd-new et l'application et ceux pour trois raisons :
 
- la libération du mail mis en quarantaine se faire dans le conteneur de l'application (comme vu plus haut)
 - la suppression, via cron, des répertoires "tmp/amavis-*" pas modifié depuis plus de 30 jours => ce cron peut être déplacé dans le conteneur d'amavisd-new sans soucis non ?
 - la suppression, via cron + l'application, des fichiers "quarantine/*" pas modifié depuis plus de jours que définit dans la variable d'envionnement "AMAVIS_QUARANTINE_NBDAYS_BEFORE_DELETE" (avec une condition un peut bizarre ... si le nombre de jours est inférieur ou égale à 10, c'est finalement 30 jours qui est pris) => je n'ai pas compris pourquoi c'est pas fait directement via la commande find comme le cron précédent ... ca me semble bien plus simple à faire comme cela
 
- il n'est pas possible de créer les domaines, utilisateurs, ... via la console, c'est vraiment dommage
 - il y bien une intégration LDAP mais pas de SSO pour la page d'authentification
 
Maintenant la question est ... vais-je installer AgentJ dans mon infrastructure ? Je n'ai pas encore la réponse à cette question !