Назад | Перейти на главную страницу

Промежуточные очереди в постфиксе

Я пытаюсь реализовать почтовый сервер с поиском 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, который прослушивает другой порт для промежуточной очереди.

Обработка должна быть такой:

  1. smtp на порт 25 получает входящую почту.
  2. электронное сообщение, отправленное на amavisd, выбранное директивой content_filter в вашем main.cf
  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:
    
  4. Должен быть конвейерный процесс, получение писем делает dspam.
  5. dspam отправляет электронную почту на последний smtp на порт 10025 с уже имеющейся конфигурацией.