Envisager l'AgentJ ?

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 :
  1. la configuration d'amavisd-new se fait via la base de données partagée entre les deux services
  2. 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
  3. 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 :
  1. que je remette amavisd-new (ca va me rappeler ma jeunesse)
  2. gérer les changements de configuration des différents services
  3. gérer moi même les cron (enfin ... systemd-timer) et la mise à jour de ces timers
  4. 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 :
  1. la libération du mail mis en quarantaine se faire dans le conteneur de l'application (comme vu plus haut)
  2. 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 ?
  3. 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 !

Haut de page