Я пытаюсь реализовать почтовый сервер с поиском postfix + policyd / amavis + mysql white / blacklist.
Проблема в том, что я хотел бы иметь «промежуточную» очередь между ними на случай, если один из них выйдет из строя, электронное письмо не будет отклонено и останется в очереди до восстановления точки отказа.
Моя идея такая:
postfix (25) -> очередь -> поиск в белом / черном списке mysql (RBL) -> очередь -> 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 postfix, который прослушивает другой порт для промежуточной очереди.
Обработка должна быть такой:
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: