Bash
Exim 腳本輸出發送者和接收者
我們有一個反垃圾郵件系統,有時會產生誤報。報告時,我們會驗證錯誤觸發的域或 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" ####