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 !