Postfix

postfix 中的中間隊列

  • May 21, 2012

我正在嘗試使用 postfix + policyd/amavis + mysql white/blacklist 查找來實現郵件伺服器。

問題是我希望它們之間有“中間”隊列,以防其中一個失敗,電子郵件不會被拒絕並保持在隊列中,直到故障點恢復。

我的想法如下:

postfix(25) -> queue -> mysql 白/黑名單查找 (RBL) -> queue -> policyd(10031)/amavis(10014) -> queue -> dspam(sock) -> postfix(10025)/relay

有了這個想法,如果其中一個“中間”點失敗,我不會失去任何電子郵件,並且所有電子郵件都將保留在隊列中。

我的配置是:main.cf

...
transport_maps = ldap:/etc/postfix/perditionMailhost_ldap
content_filter = amavisd-new:[127.0.0.1]:10024
...
smtpd_recipient_restrictions =
reject_invalid_hostname,
check_client_access mysql:/etc/postfix/client_whitelist
check_sender_access mysql:/etc/postfix/sender_whitelist
check_recipient_access mysql:/etc/postfix/recipient_whitelist
reject_rbl_client multi.uribl.com,
reject_rbl_client dsn.rfc-ignorant.org,
reject_rbl_client dul.dnsbl.sorbs.net,
reject_rbl_client list.dsbl.org,
reject_rbl_client sbl-xbl.spamhaus.org,
reject_rbl_client bl.spamcop.net,
reject_rbl_client dnsbl.sorbs.net,
reject_rbl_client cbl.abuseat.org,
reject_rbl_client ix.dnsbl.manitu.net,
reject_rbl_client combined.rbl.msrbl.net,
reject_rbl_client rabl.nuclearelephant.com,
check_policy_service inet:127.0.0.1:10031,
permit_mynetworks,
reject
smtpd_end_of_data_restrictions =
check_policy_service inet:127.0.0.1:10031
smtpd_helo_required = yes
disable_vrfy_command = yes
invalid_hostname_reject_code = 554
non_fqdn_reject_code = 554
...

master.cf

smtp      inet  n       -       n       -       200       smtpd -v
pickup    fifo  n       -       n       60      1       pickup
cleanup   unix  n       -       n       -       0       cleanup
qmgr      fifo  n       -       n       300     1       qmgr
tlsmgr    unix  -       -       n       1000?   1       tlsmgr
rewrite   unix  -       -       n       -       -       trivial-rewrite
bounce    unix  -       -       n       -       0       bounce
defer     unix  -       -       n       -       0       bounce
trace     unix  -       -       n       -       0       bounce
verify    unix  -       -       n       -       1       verify
flush     unix  n       -       n       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap
proxywrite unix -       -       n       -       1       proxymap
smtp      unix  -       -       n       -       -       smtp
amavisd-new unix      -      -             n      -    2       smtp
       -o smtp_data_done_timeout=1200s
       -o disable_dns_lookups=yes
relay     unix  -       -       n       -       -       smtp
       -o smtp_fallback_relay=
       -o disable_dns_lookups=yes
showq     unix  n       -       n       -       -       showq
error     unix  -       -       n       -       -       error
retry     unix  -       -       n       -       -       error
discard   unix  -       -       n       -       -       discard
local     unix  -       n       n       -       -       local
virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       n       -       -       lmtp
anvil     unix  -       -       n       -       1       anvil
scache    unix  -       -       n       -       1       scache
127.0.0.1:10025 inet     n       -       n       -       -       smtpd
       -o content_filter=
       -o local_recipient_maps=
       -o relay_recipient_maps=
       -o smtpd_restriction_classes=
       -o smtpd_client_restrictions=
       -o smtpd_helo_restrictions=
       -o smtpd_sender_restrictions=
       -o smtpd_recipient_restrictions=permit_mynetworks,reject
       -o mynetworks=127.0.0.0/8
       -o strict_rfc821_envelopes=yes

任何幫助如何做到這一點?甚至,我不確定這是否可能。

感謝和問候。

您需要一個額外的後綴 smtp 實例,監聽中間隊列的不同埠。

處理應該是這樣的:

  1. 埠 25 上的 smtp 接收傳入的電子郵件。
  2. 轉發到 amavisd 的電子郵件,由 main.cf 中的 content_filter 指令選擇
  3. amavisd 將電子郵件注入到中間新的 smtp 程序,監聽某個埠,例如 11025。您需要在 amavisd 配置中進行設置:$forward_method = 'smtp:[127.0.0.1]:1025'; 中間 smtp 應該有 content_filer 指令,指向 dspam,
127.0.0.1:11025      inet  n       -       n       -       -       smtpd
     -o content_filter=dspam:
  1. 應該有管道過程,讓電子郵件做 dspam。
  2. dspam 將電子郵件發送到埠 10025 上的最後一個 smtp,並且您已經擁有配置。

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