AWS EC2インスタンスからメールレポートを取得しようとしています。Exchange Online(Microsoft Online Servicesの一部)を使用しています。専用のユーザーアカウントを設定しました。SMTPリレー、このサーバーを介してメッセージを中継するためのすべての要件を満たすように Postfix を設定しました。ただし、Exchange Online の SMTP サーバーは、送信元アドレスが認証アドレスと完全に一致しない限り、メッセージを拒否します (エラー メッセージは です550 5.7.1 Client does not have permissions to send as this sender
)。
注意深く設定すれば、このユーザーとして送信するようにサービスを設定できます。しかし、私は慎重になるのがあまり好きではありません。むしろ、postfix で強制的に処理させたいです。これを行う方法はありますか?
答え1
これは実際に postfix で行う方法です。
この設定は、ローカルで発信された SMTP メール トラフィックとリレーされた 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:
/.+/ [email protected]
SMTP 中継された電子メールの送信元アドレスを書き換える
/etc/postfix/header_check:
/From:.*/ REPLACE From: [email protected]
たとえば、すべての多機能および複数のアプリケーションで使用されるローカル リレー SMTP サーバーを使用している場合、これは非常に便利です。
Office 365 SMTP サーバーを使用する場合、認証されたユーザー自身からのメールとは異なる送信者アドレスを持つメールはすべて拒否されます。上記の構成により、これが防止されます。
答え2
オプションのジェネリックテーブルは、サーバーからメールが配信(送信)されるときに適用されるアドレス マッピングを指定します。
これは正統なサーバーがメールを受信するときに適用されるマッピング。
(注: 汎用テーブルと標準テーブルのいずれの場合も、FROM アドレスと TO アドレスの両方が置換対象として一致します。)
メール送信時に正規表を使用するサーバーが受信他の回答はすでに説明されています。
メールが送信されると、送信元アドレスを書き換えることができます。サーバーから送信を使用しますsmtp_generic_maps
。
によるとpostfix ドキュメント:
/etc/postfix/main.cf:
smtp_generic_maps = hash:/etc/postfix/generic
/etc/postfix/generic:
[email protected] [email protected]
@localdomain.local [email protected]
次に、次の操作を実行します。
sudo postmap /etc/postfix/generic
sudo /etc/init.d/postfix reload
参考文献:
答え3
更新: IT 関係の友人のアドバイスに従って、クラウド メール サーバーを 1 つ作成するのではなく、すべてのサーバーで postfix を実行することにしました。これまでの解決策は次のとおりです。
/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 [email protected]: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 [email protected]
# output of hostname -f
@domU-01-02-03-04-05-06.compute-1.internal [email protected]
/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: [email protected]
/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
を誰が受け取るかは 1 行で指定します。 - ローカル ユーザーからのすべてのメールは からの送信に変換され
[email protected]
、MS Online SMTP サーバーを通過します。 - postfix には sendmail よりもはるかに優れたドキュメントがあります。
満足していない点:
- ホストごとにカスタム変更が必要であり、いくつかの手順が必要です。そのための bash スクリプトを作成しました。
- 名前
passwd
トリックは常に機能するわけではなく、メールがどのサーバーから送信されているかを把握するのが難しい場合があります。 - 送信されるすべてのメールには、ログに 3 つの警告が記録されます。
warning: smtp.mail.microsoftonline.com[65.55.171.153] offered null AUTH mechanism list
AUTH
(SMTP サーバーはの前にnull リストを送信しますSTARTTLS
が、AUTH LOGIN
の後には null リストを送信します)。certificate verification failed for smtp.mail.microsoftonline.com: num=20:unable to get local issuer certificate
(証明書に関する設定オプションはいくつかありますが、証明書が更新されるとメールの配信が中断されるかどうかはわかりません)certificate verification failed for smtp.mail.microsoftonline.com: num=27:certificate not trusted
(2と同じ)
メール サーバーに関する力強い意見を共有してくれた serverfault コミュニティに感謝します。
答え4
正規表現よりもさらに簡単な答えは(@Jasper の回答によると)、静的ルックアップを使用することです。
sender_canonical_maps = static:[email protected]
static
常に同じ値を返します(https://www.postfix.org/DATABASE_README.html#types)