Вимушування з адреси, коли постфікс ретранслюється на smtp


28

Я намагаюся отримати звіти про електронну пошту від наших екземплярів AWS EC2. Ми використовуємо Exchange Online (частина онлайн-сервісів Microsoft). Я налаштував обліковий запис користувача спеціально для ретрансляції SMTP , і я встановив Postfix, щоб відповідати всім вимогам щодо ретрансляції повідомлень через цей сервер. Однак SMTP-сервер Exchange Online буде відхиляти повідомлення, якщо адреса From не точно відповідає адресу автентифікації (повідомлення про помилку 550 5.7.1 Client does not have permissions to send as this sender).

При ретельному налаштуванні я можу налаштувати свої служби для надсилання цього користувача. Але я не є великим прихильником обережності - я вважаю за краще постфікс. Чи є спосіб це зробити?

Відповіді:


38

Ось як це реально зробити в postfix.

Цей конфігурація змінює адреси відправника як з локального, так і ретрансляційного SMTP-трафіку:

/etc/postfix/main.cf:

sender_canonical_classes = envelope_sender, header_sender
sender_canonical_maps =  regexp:/etc/postfix/sender_canonical_maps
smtp_header_checks = regexp:/etc/postfix/header_check

Перезапишіть адресу конверта з електронної пошти, що надходить із самого сервера

/ etc / postfix / sender_canonical_maps:

/.+/    newsender@address.com

Перепишіть адресу з SMTP-ретрансляції електронної пошти

/ etc / postfix / header_check:

/From:.*/ REPLACE From: newsender@address.com

Це дуже корисно, якщо ви, наприклад, використовуєте локальний ретрансляційний smtp-сервер, який використовується всіма вашими багатофункціональними функціями та кількома програмами.

Якщо ви використовуєте SMTP-сервер Office 365, будь-яка пошта з іншою адресою відправника, ніж електронна пошта від самого автентифікованого користувача, буде просто відхилена. Наведений вище конфігурація запобігає цьому.


Спасибі! Це схоже на те, що я шукав. На жаль, мій доступ до Office 365 був двома робочими місцями тому. Чи може хтось підтвердити, чи працює це для них?
Джон Вітлок

1
Я можу. Я використовую це в офісі 365.
Джаспер

1
Під час використання sender_canonical_mapsPostfix не можна зберегти відхилену пошту на локальній котушці, а замість цього намагається нескінченно надсилати її через ретрансляцію
basin

2
@Jasper FYI Мені було легше змінити вищезазначені конфігурації postconf -e sender_canonical_classes=envelope_sender,header_sender postconf -e sender_canonical_maps=regexp:/etc/postfix/sender_canonical_maps postconf -e smtp_header_checks=regexp:/etc/postfix/header_check
Jacob Evans

була подібна проблема, sender_canonical_classes = envelope_sender врятував мені день!
Стефан Ріхтер

13

Необов'язкова загальна таблиця визначає відображення адреси, яке застосовується, коли пошта доставляється (надсилається) з сервера.

Це протилежне канонічному відображенню, яке застосовується, коли пошта надходить на сервер.

(Примітка: І ВІД, і ДО адреси підходять для заміни будь-яких загальних та канонічних таблиць.)

Використання канонічної таблиці при отриманні пошти сервером уже пояснено - це інші відповіді.

Ви можете переписати адреси FROM, коли пошта надсилається з сервера за допомогою smtp_generic_maps.

Відповідно до документації Postfix :

/etc/postfix/main.cf:
    smtp_generic_maps = hash:/etc/postfix/generic

/etc/postfix/generic:
    user@localdomain.local      account@isp.example.com
    @localdomain.local          wholedomain@isp.example.com

Потім зробіть:

sudo postmap /etc/postfix/generic
sudo /etc/init.d/postfix reload

Список літератури:


1
Це працює, але як я можу також змінити назву FROM?
Джоанна Миколай

Мій досвід із загальними картами полягає в тому, що він буде ідентифікувати і ВІД, і ДО адреси, використовуючи канонічні карти, щоб примусити лише адресу ВІД, як просив ОП
doz87

Чи можна змінити пошту відправника та співставити адреси відправників за допомогою регулярного вираження?
WM

@ doz87 і ВІД, і ДО будуть відповідати як канонічним, так і загальним картам. Я оновив свою відповідь, щоб пояснити різницю між двома картами.
Джоселін

@WM так, ви можете використовувати regexp. Я ніколи не пробував , але ви, ймовірно , доведеться змінити , hash:щоб regexp:в main.cf і використання ліній , як /foo.*@localdomain.local/ account@example.comв загальній карті. Це пояснено на сторінці чоловіка: postfix.org/generic.5.html
Джоселін

7

Оновлення: За порадою ІТ-друга, я розміщую постфікс на всіх своїх серверах, а не роблю один хмарний поштовий сервер. Ось моє рішення поки що:

/etc/postfix/main.cf

# output of hostname -f - mail from local users appears to come from here
myhostname = domU-01-02-03-04-05-06.compute-1.internal
# Local delivery - include all 127.0.0.1 aliases from /etc/hosts
mydestination = $myhostname, $mydomain, rest_of_entries_from_hosts
# Needed for address translation to work
myorigin = $mydomain

# Talking to MS Online
# :submission = port 587
relayhost = [smtp.mail.microsoftonline.com]:submission
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options =   # Yes, leave empty
smtp_tls_security_level = encrypt
smtp_generic_maps = hash:/etc/postfix/generic

# Enable if you need debugging, but it does leak credentials to the log
#debug_peer_level = 2
#debug_peer_list = smtp.mail.microsoftonline.com

# Only listen on the local interfaces (not the public)
inet_interfaces = localhost

# I left out a bunch of CentOS defaults.  postconf -n is your friend.
# These are included
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

/etc/postfix/sasl_passwd

# Run postmap /etc/postfix/sasl_passwd after editing
# Also, chown root:root; chmod 600
smtp.mail.microsoftonline.com relayer@hosteddomain.com:YourP@ssw0rd

/etc/postfix/generic

# Run postmap /etc/postfix/generic
# I've seen local mail come from either source
# output of dnsdomainname
@compute-1.internal relayer@hosteddomain.com
# output of hostname -f
@domU-01-02-03-04-05-06.compute-1.internal relayer@hosteddomain.com

/etc/aliases

# Run newaliases after changing
# Lot of stuff here. Mostly, just make sure the graph points to root, such as
mailer-daemon:  postmaster
postmaster:     root

# And the important part - your email or distribution group
root:           awsadmins@hosteddomain.com

/etc/passwd

# Sometimes it helps to expand the name, so email comes from 'root at aws host 5'
#  rather than just 'root'
# Was
#root:x:0:0:root:/root:/bin/bash
# Is
root:x:0:0:root on aws host 5:/root:/bin/bash

Те, чому я радий:

  • Багато кореспонденції надсилається до root, і один рядок aliasвказує, хто її отримує.
  • Вся електронна пошта від місцевих користувачів перекладається з походження relayer@hosteddomain.com, тому вона надходить через сервер MS Online SMTP.
  • postfix має набагато кращу документацію, ніж sendmail.

Речі, від яких я не задоволений:

  • Користувацькі зміни потрібні для кожного хоста та декілька кроків. Я написав баш сценарій, щоб допомогти.
  • passwdІм'я трюк не завжди працює, і це може бути важко зрозуміти, який сервер поштовий звідки.
  • Кожен надісланий лист містить три попередження у журналі:
    1. warning: smtp.mail.microsoftonline.com[65.55.171.153] offered null AUTH mechanism list(SMTP-сервер надсилає нульовий AUTHсписок до STARTTLS, але AUTH LOGINпісля).
    2. certificate verification failed for smtp.mail.microsoftonline.com: num=20:unable to get local issuer certificate (Є кілька параметрів конфігурації навколо сертів, але я не впевнений, чи не порушується доставка пошти, коли оновлення буде оновлено)
    3. certificate verification failed for smtp.mail.microsoftonline.com: num=27:certificate not trusted (Те саме, що №2)

Дякуємо спільноті серверів за замовчуванням за те, що ділилися думками на поштових серверах.


4

За допомогою smtpd_sender_login_maps можна вказати список карт: адреса відправника - користувача.

Приклад:

smtpd_sender_login_maps = 
    hash:/etc/postfix/login-map 

/ etc / postfix / login-map:

mail1@domain    userlogin
mail2@domain    userlogin, otheruser@example.com

Це працює для надсилання, вона повинна працювати для ретрансляції так само.


Чи є метою переписати адресу з адреси в чергу черги? Моє враження, що smtpd_sender_login_maps використовується для відхилення відправників (у складі smtpd_sender_restrictions), а не для перекладу входів на електронні адреси. З цим на місці echo "This is a test" | /usr/sbin/sendmail test@example.comвсе ще стоять черги (і, зрештою, ретрансляція) пошти, що надходитьuser@domU-DE-AD-BE-EF-00-01.compute-1.internal
Джон Вітлок

Мій поганий, я якось зрозумів, що ти надаєш дозвіл на свій постфікс. У такому випадку smtpd_sender_login_maps обмежує, який користувач може використовувати, який адреса відправника.
шовк

Це може виявитися частиною мого кінцевого рішення. Я міг би відхилити всі, крім однієї адреси відправника на передньому кінці, і повідомити поштового майстра про будь-які відхилення на передньому кінці, щоб повідомити мені, коли служба ще не налаштована правильно. Я переглядаю smtp_generic_maps, щоб побачити, чи можу я використовувати їх для зміни всіх локальних облікових записів до Єдиного істинного з адреси. Але мені потрібно перечитати документи постфікса, щоб зрозуміти, як він визначає локальні акаунти - AWS DNS не відповідає моїй інтуїції.
Джон Вітлок

0

Я використовую канонічне відображення, щоб переписати адресу, наприклад перезапис кореня @ app01 на no-reply@example.com.


3
Ласкаво просимо до помилки сервера! Ми дійсно вважаємо за краще, щоб відповіді містили вміст, який не вказує на зміст. Хоча це теоретично може відповісти на питання, бажано було б сюди включити істотні частини відповіді та надати посилання для довідки.
user9517 підтримує GoFundMonica
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.