Bash

Exim 腳本輸出發送者和接收者

  • August 1, 2016

我們有一個反垃圾郵件系統,有時會產生誤報。報告時,我們會驗證錯誤觸發的域或 IP 並將其列入白名單。但是,我想通過製作一個腳本來自動執行此操作,當我們伺服器的某人發送消息時執行以下操作:

-> 如果發件人託管在我們的伺服器上 -> 獲取發件人和收件人 -> 鍵入命令 ‘spfbl superwhite add “recipient@domain.tld>sender@domain.tld” ‘。

系統僅過濾託管在我們的 cPanel 伺服器上的發件人非常重要(因此我們可以使用 /etc/localdomains 文件).. 但我不知道如何啟動它。

有人有想法麼?

非常感激。

更新

我已經設法使用 kondybas 提供的腳本進行了一些更改:

Section: PREROUTERS
whitelister:
 driver    = accept
 domains    = !+local_domains
 condition = ${if match_domain{$sender_address_domain}{+local_domains}}
 transport = whlist
no_more
Section: TRANSPORTSTART
whlist:
 driver  = pipe
 command = /var/spool/exim/autoWH $local_part@$domain 

和 /var/spool/exim/autoWH 文件:

#!/bin/sh

# Debug:
echo "Args recebidos: \$1 = $1" >> /var/spool/exim/log-transport.log

# Magica:
/var/spool/exim/spfbl.sh white sender $1
####

exim 擁有的文件夾中的所有內容,所以我沒有權限問題。

哎呀.. 問題:使用這些參數,exim 沒有投遞郵件,因為它試圖進行本地投遞:本地投遞失敗

只需像這樣添加路由器和傳輸:

begin routers
whitelister:
 driver    = accept
 domain    = !+local_domains
 condition = ${if inlist{$sender_address_domain}{+local_domains}}
 transport = whlist
 unseen

和運輸:

begin transports
whlist:
 driver  = pipe
 command = spfbl superwhite add "$address_data > $sender_address_data"

更新

更好的方法是呼叫一些 shell 腳本而不是直接呼叫實用程序。至少exim每次修改腳本時都沒有重新啟動:

begin transports
whlist:
 driver  = pipe
 command = /path/to/script $address_data $sender_address_data

那麼腳本應該是這樣的:

#!/bin/sh

# Debugging info:
echo "Received args are: \$1 = $1 and \$2 = $2" >> /path/to/transport.log

# The magic:
/path/to/spfbl superwhite add "$1 > $2"
####

引用自:https://serverfault.com/questions/791184