.png)
Я пытаюсь настроить почтовый сервер Postfix с очень низким трафиком, используя:
- Простой фильтр контента (http://www.postfix.org/FILTER_README.html#simple_filter). Он намного проще расширенного и требует меньше трафика.
- dovecot как агент доставки. (Из-за квот maildir и фильтров sieve)
always_bcc
сохранять копии всех отправленных писем. (Бизнес-правила)
Мои соответствующие конфигурации:
мастер.cf
smtp inet n - y - - smtpd
-o content_filter=filter:dummy
pickup unix n - y 60 1 pickup
cleanup unix n - y - 0 cleanup
qmgr unix n - n 300 1 qmgr
tlsmgr unix - - y 1000? 1 tlsmgr
rewrite unix - - y - - trivial-rewrite
bounce unix - - y - 0 bounce
defer unix - - y - 0 bounce
trace unix - - y - 0 bounce
verify unix - - y - 1 verify
flush unix n - y 1000? 0 flush
proxymap unix - - n - - proxymap
proxywrite unix - - n - 1 proxymap
smtp unix - - y - - smtp
relay unix - - y - - smtp
-o syslog_name=postfix/$service_name
showq unix n - y - - showq
error unix - - y - - error
retry unix - - y - - error
discard unix - - y - - discard
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - y - - lmtp
anvil unix - - y - 1 anvil
scache unix - - y - 1 scache
postlog unix-dgram n - n - 1 postlogd
uucp unix - n n - - pipe
flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
filter unix - n n - 10 pipe
flags=Rq user=filter null_sender=
argv=/var/spool/filter/scripts/filter.sh -f ${sender} -- ${recipient}
dovecot unix - n n - - pipe
flags=DRhu user=vmail:mail argv=/usr/lib/dovecot/dovecot-lda -f ${sender} -d ${recipient}
main.cf (только соответствующие части)
always_bcc = [email protected]
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1
/var/spool/filter/scripts/filter.sh
#!/bin/sh
/usr/bin/cat | /var/spool/filter/scripts/mailfilter | /usr/sbin/sendmail -G -i "$@"
exit $?
- У всех моих пользователей адреса электронной почты в формате "(Initial)[email protected]" формат
- Существуют группы безопасности, которые действуют как роли, и у каждой из них есть адреса электронной почты в "[email protected]"формат.
- По сути, ролевой адрес электронной почты выполняет функцию псевдонима для нескольких пользователей.
Таким образом, я могу повторно использовать те же роли/группы, которые я использую для настройки разрешений, а не использовать пользователей напрямую.
Например
- мой адрес электронной почты пользователя[email protected]
- Я являюсь членом роли ITDepartment ([email protected])
- Я занимаю несколько других должностей, но моя основная должность — «ИТ-отдел».
- Поскольку я являюсь членом этой группы/роли, у меня есть определенные привилегии, как и у других участников, и каждое отправленное мне письмо[email protected]дойдет до меня и других участников.
Пока все хорошо... Но мой босс хочет, чтобы каждое отправленное мной письмо использовало[email protected](роль) адрес вместо[email protected](пользователь). т. е. каждое отправленное письмо использует адрес электронной почты основного получателя, а не пользователя.
/var/spool/filter/scripts/mailfilter
— это фильтр собственной разработки, который делает именно это (меняет адреса «from» с «(Initial).surname@» на «role@», проверяя сервер LDAP).
Он никогда не дает сбоев (в случае возникновения какой-либо ошибки он просто копирует стандартный ввод в стандартный вывод, и никакие изменения не вносятся, поэтому адрес не меняется, но и почта не теряется).
Проблема в том, что когда я отправляю электронное письмо, оно доставляет две копии[email protected]как видно из журналов, не одна копия, как ожидалось.
Dec 16 16:23:08 correo2 postfix/smtpd[32453]: connect from informatica1.mydomain.example[10.128.159.15]
Dec 16 16:23:08 correo2 postfix/smtpd[32453]: DD925380C87: client=informatica1.mydomain.example[10.128.159.15], sasl_method=LOGIN, [email protected]
Dec 16 16:23:08 correo2 postfix/cleanup[32456]: DD925380C87: message-id=<[email protected]>
Dec 16 16:23:09 correo2 postfix/qmgr[32275]: DD925380C87: from=<[email protected]>, size=2749, nrcpt=2 (queue active)
Dec 16 16:23:09 correo2 postfix/pickup[32274]: AAFEF380C8D: uid=110 from=<[email protected]>
Dec 16 16:23:09 correo2 postfix/pipe[32457]: DD925380C87: to=<[email protected]>, relay=filter, delay=0.81, delays=0.11/0/0/0.7, dsn=2.0.0, status=sent (delivered via filter service)
Dec 16 16:23:09 correo2 postfix/pipe[32457]: DD925380C87: to=<[email protected]>, orig_to=<[email protected]>, relay=filter, delay=0.81, delays=0.11/0/0/0.7, dsn=2.0.0, status=sent (delivered via filter service)
Dec 16 16:23:09 correo2 postfix/qmgr[32275]: DD925380C87: removed
Dec 16 16:23:09 correo2 postfix/cleanup[32456]: AAFEF380C8D: message-id=<[email protected]>
Dec 16 16:23:09 correo2 postfix/qmgr[32275]: AAFEF380C8D: from=<[email protected]>, size=2927, nrcpt=3 (queue active)
Dec 16 16:23:10 correo2 dovecot: lda([email protected])<32488><2DSfML3hnGPofgAA0V72BQ>: msgid=<[email protected]>: saved mail to INBOX
Dec 16 16:23:10 correo2 postfix/pipe[32473]: AAFEF380C8D: to=<[email protected]>, relay=dovecot, delay=1.1, delays=0.79/0/0/0.28, dsn=2.0.0, status=sent (delivered via dovecot service)
Dec 16 16:23:10 correo2 dovecot: lda([email protected])<32490><Au2fML3hnGPqfgAA0V72BQ>: msgid=<[email protected]>: saved mail to INBOX
Dec 16 16:23:10 correo2 postfix/pipe[32471]: AAFEF380C8D: to=<[email protected]>, relay=dovecot, delay=1.1, delays=0.79/0/0/0.34, dsn=2.0.0, status=sent (delivered via dovecot service)
Dec 16 16:23:10 correo2 dovecot: lda([email protected])<32489><BE2gML3hnGPpfgAA0V72BQ>: msgid=<[email protected]>: saved mail to INBOX
Dec 16 16:23:10 correo2 postfix/pipe[32470]: AAFEF380C8D: to=<[email protected]>, relay=dovecot, delay=1.1, delays=0.79/0/0/0.35, dsn=2.0.0, status=sent (delivered via dovecot service)
Dec 16 16:23:10 correo2 postfix/qmgr[32275]: AAFEF380C8D: removed
Dec 16 16:23:11 correo2 postfix/smtpd[32453]: disconnect from informatica1.mydomain.example[10.128.159.15] ehlo=1 auth=1 mail=1 rcpt=1 data=1 quit=1 commands=6
uid=110 — это uid пользователя «filter». «From» изменяется только в заголовках внутри письма, поэтому не отображается в журналах.
Все работает как надо, за исключением этой двойной детали доставки. Я не пробовал, но уверен, что если убрать dovecot из уравнения, все заработает. Но я теряю правила sieve и квоты maildir. Так что...
Есть идеи, как это исправить?
решение1
Tl;dr: Исходное письмо приходит в Postfix, который добавляет always_bcc и отправляет копию, отбрасывает письмо согласно фильтру. Ваш фильтр отправляет новое сообщение в Postfix, который добавляет always_bcc и отправляет копию, затем доставляет письмо.
Прочитайте последние три абзаца.
Первое письмо, которое попадет в Postfix, будет оригинальным.DD925380C87, поэтому он отправляет копию прямо в seccopies
соответствии свсегда_скрытая_копияПравило второе.AAFEF380C8D— это тот, который был переведен фильтром (изменив заголовок From на вашу группу) и seccopies
также отправлен, но дважды, потому что первое письмо уже имело BCC seccopies
, и теперь Postfix думает, что ему нужно отправить его в BCC, и seccopies
поэтому он получает его снова.
Итак, вы должны получить три копии seccopies
, но2и [3] идентифицируются как один и тот же адрес электронной почты (AAFEF380C8D):
- первый от
y.hernandez
доy.hernandez
>> always_bccseccopies
- второй от
informatics
до доy.hernandez
>> always_bccseccopies
- третий от
informatics
доseccopies
>> always_bccseccopies
(как BCC2)
Единственный экземпляр оригинала доставляется по адресу seccopies
:
**DD925380C87**: to=<[email protected]>, relay=filter, delay=0.81, delays=0.11/0/0/0.7, dsn=2.0.0, status=sent (delivered via filter service)
Линия с uid=110
находится там, где2создается, и две доставки, одна, потому что это TO, y.hernandez
и одна, потому что это BCCd to, seccopies
находятся на следующих строках:
AAFEF380C8D: to=<[email protected]>, relay=dovecot, delay=1.1, delays=0.79/0/0/0.34, dsn=2.0.0, status=sent (delivered via dovecot service)
AAFEF380C8D: to=<[email protected]>, relay=dovecot, delay=1.1, delays=0.79/0/0/0.28, dsn=2.0.0, status=sent (delivered via dovecot service)
И наконец, измененное электронное письмо доставляется предполагаемому получателю:
AAFEF380C8D: to=<[email protected]>, relay=dovecot, delay=1.1, delays=0.79/0/0/0.35, dsn=2.0.0, status=sent (delivered via dovecot service)
Дедупликация предотвратит дваAAFEF380C8Dэлектронные письма не будут доставлены на адрес seccopies
, но я не думаю, что это остановитDD925380C87электронная почта, потому что это отдельный адрес электронной почты.
Я думаю, вам нужно следоватьэтотинструкция, так чтоФильтр контента видит исходные почтовые адреса вместо результата ... автоматической скрытой копии, затем он повторно вставит электронное письмо в Postfix, который затем применит always_bcc:
/etc/postfix/main.cf:
content_filter = scan:localhost:10025
receive_override_options = no_address_mappings
Изreceive_override_options: если в файле main.cf указана настройка receive_override_options «ПЕРЕД фильтром содержимого», укажите настройку receive_override_options «ПОСЛЕ фильтра содержимого» в файле master.cf (и наоборот).