Smtp

Postfix 隊列後內容過濾器,高級過濾器不起作用

  • September 20, 2018

我按照 postfix 網站上關於如何設置內容過濾器的說明進行操作,我得到了簡單的範例並很快執行,但經過長時間的努力,我無法讓高級過濾器工作。

我設置了範例中的所有內容,smtp 在埠 25 上偵聽未過濾的消息,它有一個過濾器設置將消息傳遞到呼叫過濾器腳本的埠 10025,另一個 smtp 偵聽器在埠 10026 上過濾消息。

在這個簡單的例子中,腳本是消息流的最後一站,它通過標準輸入獲取消息並完成它的工作並使用 sendmail 重新註入它。

在高級範例中,我似乎沒有收到消息並且似乎無法傳遞它。我確實成功地返回了一個:‘550 content denied’ 響應。

我想我的問題是腳本如何接收郵件正文以及如何將其返回到郵件隊列?以及如何讓這一切正常工作?

主配置:

content_filter = scan:localhost:10025

master.conf:

scan      unix  -       -       n       -       10      smtp
       -o smtp_send_xforward_command=yes
       -o disable_mime_output_conversion=yes
       -o smtp_generic_maps=

localhost:10025 inet  n       n       n       -       10      spawn
       user=filter argv=/home/omri/filter.sh localhost 10026

localhost:10026 inet  n       -       n       -       10      smtpd
       -o content_filter= 
       -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks,no_milters
       -o smtpd_helo_restrictions=
       -o smtpd_client_restrictions=
       -o smtpd_sender_restrictions=
       # Postfix 2.10 and later: specify empty smtpd_relay_restrictions.
       -o smtpd_relay_restrictions=
       -o smtpd_recipient_restrictions=permit_mynetworks,reject
       -o mynetworks=127.0.0.0/8
       -o smtpd_authorized_xforward_hosts=127.0.0.0/8

在**Simple content filter example部分中,您可以使用管道(例如 stdin)來接收郵件正文。在高級**腳本中,您的腳本必須能夠同時充當 SMTP 伺服器和 SMTP 客戶端。

  • 作為 SMTP 伺服器,postfix 將使用 SMTP 將電子郵件發送給腳本。所以你的腳本必須自己處理 SMTP 事務。Spawn 程序不會對您執行此操作,而是將其作為 inetd 處理。
  • 作為 SMTP 客戶端,您的腳本也會通過 SMTP 事務將電子郵件返回給後綴 localhost:10026。

該頁面的片段。

第二個例子更複雜,但可以提供更好的性能,並且在機器遇到資源問題時不太可能退回郵件。此內容過濾器在 localhost 埠 10025 上接收帶有 SMTP 的未過濾郵件並將過濾後的郵件發送回帶有 SMTP 在 localhost 埠 10026 上的 Postfix

對於不支持 SMTP 的內容過濾軟體,Bennett Todd 的 SMTP 代理實現了一個不錯的 PERL/SMTP 內容過濾框架。請參閱:http ://bent.latency.net/smtpprox/ 。

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