Я настраиваю почтовый сервер на своем VPS и, чтобы предотвратить спам и пометить его как спам, я включил SPF, DKIM и DMARC. Однако я не хочу размещать свой собственный почтовый ящик, поэтому я пересылаю входящую почту на внешние почтовые учетные записи, например Gmail. Проблема с пересылкой в том, что она нарушает проверку SPF. Это можно исправить с помощью SRS, которая перезаписывает адрес отправителя в соответствии с адресом почтового сервера.
При отправке почты я настроил Gmail для отправки почты через мой почтовый сервер. В этом случае SPF, DKIM и DMARC пройдут, но только если SRS отключен, в противном случае SRS приведет к тому, что домен адреса отправителя больше не будет соответствовать домену заголовка FROM, что является требованием для прохождения DMARC.
Итак, мой вопрос: как я могу включить SRS при пересылке, но запретить его включение при отправке?
Вот еще один контекст. Почтовый сервер работает под управлением Ubuntu 12.04 LTS и использует следующее программное обеспечение:
Насколько я понял, существуют почтовые клиенты, требующие PTR, MX, EHLO и почтовый баннер. ссылаться на тот же домен. И поскольку я использую свой VPS не только для почтового сервера, я выбрал для них имя хоста моего VPS, скажем, vps.tld.
Чтобы включить PostSRSD, вам нужно добавить следующие строки в /etc/postfix/main.cf
:
sender_canonical_maps = tcp:127.0.0.1:10001
sender_canonical_classes = envelope_sender
recipient_canonical_maps = tcp:127.0.0.1:10002
recipient_canonical_classes = envelope_recipient, header_recipient
Но это включило бы SRS в общем случае, а не только при пересылке. Похоже, что это обычный вариант использования почтового сервера, поэтому я надеюсь, что для этого есть решение.
РЕДАКТИРОВАТЬ:
Вот результат postconf -n
как просили:
alias_maps = hash:/etc/postfix/aliases
append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
milter_default_action = accept
mydestination = vps.tld, localhost
mydomain = vps.tld
myhostname = vps.tld
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
non_smtpd_milters = $smtpd_milters
recipient_canonical_classes = envelope_recipient, header_recipient
recipient_canonical_maps = tcp:127.0.0.1:10002
recipient_delimiter = +
sender_canonical_classes = envelope_sender
sender_canonical_maps = tcp:127.0.0.1:10001
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
smtp_tls_loglevel = 1
smtp_tls_security_level = may
smtpd_milters = inet:127.0.0.1:8891, inet:127.0.0.1:8893
virtual_alias_domains = domain1.tld domain2.tld domain3.tld
virtual_alias_maps = hash:/etc/postfix/virtual
Решение моей проблемы - иметь SRS_EXCLUDE_DOMAINS
Настройки PostSRSD содержат все домены, с которых я отправляю почту. Я уже пробовал это раньше, даже до публикации этого вопроса, но после определения этого параметра PostSRSD больше не запускался, поэтому я надеялся, что есть другое решение. По-видимому, в PostSRSD есть ошибка относительно этого параметра, потому что в комментарии выше четко указано, что домены можно разделить с помощью пробелов: разделяйте несколько доменов пробелом или запятой. Но при этом он не запустится. Это исправляет замена пробелов запятыми.
Я оставляю этот вопрос нерешенным, потому что меня очень интересуют другие решения.
Вместо (или в дополнение к) SRS_EXCLUDE_DOMAINS
вы можете динамически исключать домены, если сделаете следующее:
sender_canonical_maps = mysql:/etc/postfix/no-srs.cf,tcp:127.0.0.1:10001
recipient_canonical_maps = mysql:/etc/postfix/no-srs.cf, tcp:127.0.0.1:10002
Я нашел эту очень полезную информацию с более подробной информацией и примерами здесь: https://github.com/roehling/postsrsd/issues/42#issuecomment-149690471