Rspamd - Custom LUA-Filter aktivieren



  • Hi, ich suche schon den halben Tag und habe auch die Dokumentation gelesen, leider bislang erfolglos.

    Vielleicht habe ich ja hier Glück und jemand hatte schon mal ein ähnliches Problem.

    Ich möchte einen LUA-Filter aktivieren/einschalten, der E-Mails mit einem spezifischen Betreff ("Spamtest") um 6 hochstuft:

    rspamd.local.lua:

    rspamd_config:register_symbol{
      type = 'normal', -- or virtual, callback, prefilter or postfilter
      name = 'BAD_SUBJECT',
      callback = function(task)
        local util = require "rspamd_util"
        local sbj = task:get_header('Subject')
    
        if sbj then
              local my_sbj = sbj:lower()
          if my_sbj and my_sbj:find('spamtest') then
            return true
          end
        end
    
        return false
      end,
      score = 6.0, -- Metric score
      group = 'headers', -- Metric group
      description = 'Subject contains spamtest',
      flags = 'fine', -- fine: symbol is always checked, skip: symbol is always skipped, empty: symbol allows to be executed with no message
      -- priority = 2, -- useful for postfilters and prefilters to define order of execution
    }
    

    Die Datei liegt zurzeit in /etc/rspamd/rspamd.local.lua.

    rspamadm configtest sagt, es ist alles ok ... vermutlich, weil dieser Filter nicht aufgegriffen wird.

    Auch rspamadm configgraph | grep lua sagt nix.

    Nach der offiziellen Dokumentation https://rspamd.com/doc/developers/examples.html sollte diese Datei auch genau dort liegen.

    Auf der Web-Oberfläche sehe ich dieses Symbol aber nicht und E-Mails mit diesem Betreff werden auch nicht gefiltert.



  • Es hat geklappt 🤲🏼 😅

    cat /etc/rspamd/override.d/multimap.conf:

    bad_subject {
      type = "header";
      header = "subject";
      filter = "full";
      map = ["/.*spamtest.*/i"];
      regexp = true;
      description = "Checks the subject against Spamtest ...";
      symbol = "BAD_SUBJECT";
      action = "rewrite subject";
      score = 9.9;
    }
    

    Diese Regel wird nun in /etc/rspamd/modules.d/multimap.conf inkludiert (das geschieht automatisch ...) und der Filter/das Symbol greift auch bei entsprechendem Betreff. 🙏

    Schönen Abend noch



  • Hab noch einmal bissel was geändert:

    bad_subject {
      type = "header";
      header = "subject";
      filter = "headers";
      map = ["/.*spamtest.*/iu"];
      regexp = true;
      description = "Checks the subject against Spamtest ...";
      symbol = "BAD_SUBJECT";
      action = "add header";
      score = 10.0;
    }
    

    a) filter = "headers";, da "full" nach "Subject:" unnötigerweise auch im Body suchen würde
    b) "/.*spamtest.*/iu", +"u", damit auch in non-ascii Betreffen (UTF8 und so) nach "spamtest" gesucht wird
    c) "add header", damit (nur) ein Header hinzugefügt wird und die betreffende E-Mail in den Junk-Ordner gesteckt werden kann
    d) score = 10.0;, damit zusätzlich eine von mir eingestellte Spam-Schwelle erreicht wird (zwischen greylist+add header und rewrite subject+reject)

    Das passt alles und ist vielleicht für den ein oder anderen von euch auch von Interesse. 🙂 (Falls nicht: lesen und vergessen.)



  • 😱 Der Filter "headers" ist für type = "header" ungültig, es muss doch "full" sein ... ansonsten funktioniert es zwar, 's gibt aber Fehlermeldungen im Log. 😒 Mea culpa ist hier aber die Doku. 😅


Log in to reply