rspamd 在過濾之前將每個網域列入白名單/黑名單

rspamd 在過濾之前將每個網域列入白名單/黑名單

由於我很遺憾在 rspamd 的 GitHub 討論區中沒有收到任何回复,也許這裡有人有 rspamd 預過濾模式的經驗。

我試圖讓 rspamd 接受來自給定網域清單的任何郵件,無論它認為它有多少是垃圾郵件。可悲的是,這是必要的,因為太多人認為操縱發件人或做其他陰暗的事情是個好主意,這些事情通常被有隱藏訊息的人所利用。這應該是最容易透過預過濾模式完成的,因為這些模式應該在評估郵件是否為垃圾郵件之前運行。作為一個額外的好處,如果某些臭名昭著的垃圾郵件根本無法被識別,這也可以用於阻止清單。當然,rspamd 可以被告知什麼應該是垃圾郵件,什麼不是垃圾郵件,但這似乎不夠有效。另外,在日誌中,我無法弄清楚為什麼它拒絕對大多數網域應用預過濾器,所以也許你們中的一個人有一個建議。

現在,我正在使用多重映射配置來設定接受和阻止清單的預過濾器。所以在 local.d/multimap.conf 中我有:

ACCEPTLIST_SENDER_DOMAIN {
      #type = "header";
      #header = "from";
      type = "from";
      prefilter = "true";
      filter = "email:domain";
      map = "file:///etc/rspamd/local.d/acceptlist.sender.domain.map";
      description = "Sender domain is on allowed";
      action = "accept"; # Prefilter mode
  }

BLOCKLIST_SENDER_DOMAIN {
      #type = "header";
      #header = "from";
      type = "from";
      prefilter = "true";
      filter = "email:domain";
      map = "file:///etc/rspamd/local.d/blocklist.sender.domain.map";
      symbol = "BLOCKLIST_SENDER_DOMAIN";
      description = "Sender domain is on blocked";
      score = 10.0;
      action = "add_header"; # Prefilter mode
  }

每個區塊頂部的兩個註釋來自我嘗試過濾 header 和 from header 時的註釋,但由於您可以直接過濾我嘗試過的這一註釋,因此它沒有幫助。另外,我嘗試僅使用路徑和 file:///path/to/file 在地圖中新增文件,但無論如何都沒有成功。 rspamd.log 也沒有顯示任何有用的內容(唯一不斷出現的錯誤是關於無法載入 dkim 金鑰,因為我無法停用該模組)。將此配置複製到 overwrite.d 也沒有幫助。有任何想法嗎?

我在 Debian 11 上直接從 rspamd 儲存庫運行 rspamd 3.4-1~bullseye。

答案1

我的最後一個答案確實有很大幫助,但總的來說我發現一些問題仍未解決:

由於某種原因,它仍然添加了ACCEPTLIST_SENDER_DOMAIN我不久前從地圖檔案中刪除的網域。我什至多次重新啟動 rspamd,但它拒絕忘記該網域。我找不到任何可以刪除的緩存,這會有所幫助。

除此之外,無論如何,多重對應都應該接受來自指定網域的郵件。但只有當域位於From:標頭中時,其他情況下才如此。我之前錯誤添加到白名單的網域是我們的郵件列表的網域。因此,根據多重映射,rspamd 一開始就不應該接受這些郵件,因為我們的郵件清單不會From:用自己的地址取代標頭。但是,許多垃圾郵件仍然被標記為垃圾郵件,即使理論上它們應該被錯誤排除ACCEPTLIST_SENDER_DOMAIN。現在,我重新添加了prefilter=true;到多重映射配置,也許這會有所幫助。但總而言之,rspamd 的表現仍然不符合預期。

編輯:為了解決第一個問題,我已經切換回顯式檢查From:標頭,因為 type:from 將在檢查此之前檢查信封,因此這應該更可靠(當然,修改 From 標頭非常簡單,但是我一方面可以數出過去幾年發生的沒有被我們的主要垃圾郵件過濾器捕獲的事件):

ACCEPTLIST_SENDER_DOMAIN {
      type = "header";
      header = "From:";
      prefilter = true;
      map = "/etc/rspamd/local.d/acceptlist.sender.domain.map";
      symbol ="ACCEPTLIST_SENDER_DOMAIN";
      description = "Sender domain is on allowed";
      action = "accept"; # Prefilter mode
  }

BLOCKLIST_SENDER_DOMAIN {
      type = "header";
      header = "From:";
      prefilter = true;
      map = "/etc/rspamd/local.d/blocklist.sender.domain.map";
      symbol = "BLOCKLIST_SENDER_DOMAIN";
      description = "Sender domain is on blocked";
      action = "add_header"; # Prefilter mode
  }

但由於某些原因,一旦這些符號被觸發,郵件的標題就會出現以下內容:

X-Rspamd-Pre-Result: action=no action;
    module=multimap;
    Matched map: ACCEPTLIST_SENDER_DOMAIN

這種情況下的操作顯然應該是“接受”,如配置中所述。這是配置轉儲中的樣子:

multimap {
    ACCEPTLIST_SENDER_DOMAIN {
        action = "accept";
        map = "/etc/rspamd/local.d/acceptlist.sender.domain.map";
        description = "Sender domain is on allowed";
        symbol = "ACCEPTLIST_SENDER_DOMAIN";
        prefilter = true;
        type = "header";
        header = "From";
}
    BLOCKLIST_SENDER_DOMAIN {
        action = "add_header";
        map = "/etc/rspamd/local.d/blocklist.sender.domain.map";
        description = "Sender domain is on blocked";
        symbol = "BLOCKLIST_SENDER_DOMAIN";
        prefilter = true;
        type = "header";
        header = "From";
}
    [...]
}

答案2

我認為預過濾器值不應該有任何引號:

prefilter = true;

此外,在預過濾器對應中配置分數可能毫無用處,因為該操作已被強制執行。

我希望它有幫助!

答案3

這應該有效。我成功地實現了你想要的。我的 local.d/multimap.conf 包含:

用於接受來自特定網域的郵件

WHITELIST_SENDER_DOMAIN {
      type = "from";
      filter = "email:domain";
      map = "/${LOCAL_CONFDIR}/local.d/whitelist.sender.domain.map";
      symbol ="WHITELIST_SENDER_DOMAIN";
      description = "WHITELIST map for SENDERS Domain - Action accept";
      action = "accept";
  }
# For rejecting domains
BLACKLIST_SENDER_DOMAIN {
      type = "from";
      filter = "email:domain";
      map = "/${LOCAL_CONFDIR}/local.d/blacklist.sender.domain.map";
      symbol ="BLACKLISTED_DOMAIN";
      description = "Blacklist map for Senders Domain - Action reject";
      action = "reject";
  } 

您需要在 local.d 中建立具有完全相同名稱的上述映射文件,並使用要過濾的網域填充它們。每行只有一個網域!文件應該具有讀取權限。

另請注意,如果對訊息設定了操作,則應跳過大多數進一步的檢查。

答案4

@cz.steve 我現在已經將所有內容重新建構為使用 rspamd,因為 SpamAssassin 也沒有按照我想要的方式發出警告。現在,這些變更確實啟用了白名單和黑名單,儘管並非完全按照我的預期工作方式。我想要的是它只將給定的網域與From:標頭中的內容相匹配,而不是與所有其他標頭中的內容相匹配。有可能實現嗎?

現在我的配置是這樣的:

ACCEPTLIST_SENDER_DOMAIN {
      type = "from";
      filter = "email:domain";
      map = "/etc/rspamd/local.d/acceptlist.sender.domain.map";
      symbol ="ACCEPTLIST_SENDER_DOMAIN";
      description = "Sender domain is on allowed";
      action = "accept"; # Prefilter mode
  }

BLOCKLIST_SENDER_DOMAIN {
      type = "from";
      filter = "email:domain";
      map = "/etc/rspamd/local.d/blocklist.sender.domain.map";
      symbol = "BLOCKLIST_SENDER_DOMAIN";
      description = "Sender domain is on blocked";
      action = "add_header"; # Prefilter mode
  }

相關內容