LoginSignup
1
0

More than 1 year has passed since last update.

Amazon WorkMail に SMTP リレーをする Postfix サーバーを構築してみた

Posted at

はじめに

一般的にメールサーバーを運用するのは重労働です。メールはビジネスコミュニケーションの大事な方法なので、可用性を高く、なおかつセキュリティの担保も必要になります。そういった重労働を軽減するために、Amazon WorkMail を活用できます。

前回は、WorkMail の構築をおこなってみました。

今回は、Amazon EC2 インスタンスでPostfix サーバーを新たに構築して、SMTP リレーとして WorkMail を経由しながらメールを送付する方法をご紹介します。

WorkMail 上で既にユーザー user001@workmail.sugiaws.tokyo を登録されている環境を利用します。

環境情報

  • EC2 Instance
  • Amazon Linux
  • Postfix 2.10.1

Postfix Install

Amazon Linux 2 の環境では、既に Postfix がインストールされています。

$ yum list installed | grep postfix
postfix.x86_64                        2:2.10.1-6.amzn2.0.3             installed

Postfix のバージョンを確認

$ postconf | grep mail_version
mail_version = 2.10.1

Postfix の基本的な設定

Postfix の設定ファイルを、念のためバックアップします。

sudo cp -p /etc/postfix/main.cf /etc/postfix/main.cf.old

postconf コマンドで編集をします。WorkMail で利用しているドメインを指定します。

sudo postconf -e "myhostname = workmail.sugiaws.tokyo"
sudo postconf -e "mydomain = workmail.sugiaws.tokyo"

Postfix の再起動実施と、自動起動を有効化します。

sudo systemctl restart postfix
sudo systemctl enable postfix

Postfix のステータス確認

sudo systemctl status postfix

Postfix そのものの動作確認をします。メール送付は出来ませんが、ログを確認して動作確認とします。

sendmail -f sender@example.com recipient@example.com
From: Sender Name <sender@example.com>
Subject: Amazon SES Test                
This message was sent using Amazon SES.                
.

想定通りエラーログが出ています。Postfix 自体が動作していることがわかります。

$ sudo tail -n 4 /var/log/maillog
Jan 22 14:56:09 ip-10-0-1-116 postfix/smtp[3989]: warning: valid_hostname: empty hostname
Jan 22 14:56:09 ip-10-0-1-116 postfix/smtp[3989]: warning: malformed domain name in resource data of MX record for example.com:
Jan 22 14:56:09 ip-10-0-1-116 postfix/smtp[3989]: 69F036E944: to=<sender@example.com>, relay=none, delay=0, delays=0/0/0/0, dsn=5.4.4, status=bounced (Name service error for name=example.com type=MX: Malformed or unexpected name server reply)
Jan 22 14:56:09 ip-10-0-1-116 postfix/qmgr[3872]: 69F036E944: removed

WorkMail の SMTP クレデンシャルの取得

WorkMail 上で既に user001 として登録されている状態です。User を作成するときに、パスワードを指定しており、メールアドレスとパスワードをメモっておきます。 後の手順で Postfix 側に入力します。

image-20220123143109976.png

stunnel の設定

Postfix を起動する Amazon Linux 2 から、WorkMail にメールを送る際に、TLS(ポート 465)を使って通信を行います。STARTTLS(ポート 587) は WorkMail だと利用できません。

今回の記事では、Linux マシンと、WorkMail 間で TSL/SSL トンネリングを行うために、stunnel を利用します。stunnel を install します。

sudo yum install stunnel -y

一度、Postfix を停止します。

sudo systemctl stop postfix

stunnel の設定情報を編集します。

sudo vim /etc/stunnel/stunnel.conf

次の値を指定します

  • WorkMail の SMTP エンドポイントを指定
[smtp-tls-wrapper]
accept = 2525
client = yes
connect = smtp.mail.us-east-1.awsapps.com:465

stunnel を起動します。

sudo stunnel /etc/stunnel/stunnel.conf

telnet で localhost の 2525 ポートに接続します。これが stunnel で作成されている WorkMail へのトンネルです。

telnet localhost 2525

実行例です。smtp.us-east-1.mail.awsapps.com ESMTP Amazon WorkMail SMTP Service と表示されているため、正しく疎通できていることがわかります。

$ telnet localhost 2525
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 smtp.us-east-1.mail.awsapps.com ESMTP Amazon WorkMail SMTP Service

WorkMail に転送するための Postfix 設定

設定変更をします。Postfix として SMTP リレー先に、stunnel で出来たトンネルを指定します。

sudo postconf -e "relayhost = 127.0.0.1:2525" \
"smtp_sasl_auth_enable = yes" \
"smtp_sasl_security_options = noanonymous" \
"smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd" \
"smtp_use_tls = yes" \
"smtp_tls_security_level = may" \
"smtp_tls_note_starttls_offer = yes"

SMTP クレデンシャルを書き込んでいきます。

sudo vim /etc/postfix/sasl_passwd

以下の値を入れます。user001@workmail.sugiaws.tokyo:yourpassword の部分は環境に合わせて変更してください。

127.0.0.1:2525 user001@workmail.sugiaws.tokyo:yourpassword

hashmap データべースファイルを作成します。

sudo postmap hash:/etc/postfix/sasl_passwd

所有権の変更をして、root ユーザーのみ触れるようにします。

sudo chown root:root /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
sudo chmod 0600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db

CA 証明書の位置を指定します。

sudo postconf -e 'smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt'

Postfix の再起動

sudo systemctl restart postfix

Postfix のステータス確認

sudo systemctl status postfix

動作確認

user001 として送付

sendmail コマンドで、メールを送付していきます。メールの送信元として、SMTP クレデンシャルで指定している user001@workmail.sugiaws.tokyo を使っています。

sendmail -f user001@workmail.sugiaws.tokyo xxxxxxxxxxx@xxxx.xxx
From: I AM POSTFIX <user001@workmail.sugiaws.tokyo>
Subject: Amazon WorkMail Test                
This message was sent using Amazon WorkMail.                
.

Postfix が出力したログを確認します。

sudo less /var/log/maillog

250 Ok という文字が確認でき、メールを正常に送付できていることがわかります。

Jan 23 05:42:57 ip-10-0-1-116 postfix/smtp[5487]: A3D566E954: to=<secret@gmail.com>, relay=127.0.0.1[127.0.0.1]:2525, delay=2.9, delays=0.25/0.01/1.3/1.3, dsn=2.0.0, status=sent (250 Ok)
Jan 23 05:42:57 ip-10-0-1-116 postfix/qmgr[5206]: A3D566E954: removed

メールの送付先を確認すると、正常にメールが到着しています!送信元は user001 となっています。

image-20220123144436471.png

メールのソースを確認します。From も正常に指定されてありますね。

image-20220123144648947.png

user002 として送付 : エラー

Postfix で指定している SMTP クレデンシャルが user001@workmail.sugiaws.tokyo を利用しているなかで、user002 を指定してメールを送付するとどうなるでしょうか試してみます。

sendmail -f user002@workmail.sugiaws.tokyo xxxxxxxxxxx@xxxx.xxx
From: I AM POSTFIX <user002@workmail.sugiaws.tokyo>
Subject: Amazon WorkMail Test                
This message was sent using Amazon WorkMail.                
.

エラーの旨のメールが、user001 のメールボックスに到着します。Postfix で指定している SMTP クレデンシャルは、user002 とは違うユーザーなのでエラーになりました。

image-20220123144935292.png

share001 として送付

以前の記事で user001 に対して、share001 に成り代わって送付する権限を付与しています。Postfix で share001 と指定して送付してみましょう。

sendmail -f share001@workmail.sugiaws.tokyo xxxxxxxxxxx@xxxx.xxx
From: I AM POSTFIX <share001@workmail.sugiaws.tokyo>
Subject: Amazon WorkMail Test                
This message was sent using Amazon WorkMail.                
.

Gmail にメールが届きました!share001 として正しくメールが到着しています。

image-20220123145914967.png

メールのソールも見ています。From ヘッダーが share001 となっています。

image-20220123145926281.png

検証を通じてわかったこと

  • WorkMail の SMTP エンドポイントは STARTTLS(587)を利用することができない。TLS(465) で送る必要がある。
  • Linux 上の Postfix で、WorkMail に SMTP リレーをする際には、TLS/SSL のトンネリング(stunnel)が利用可能。
  • Postfix から WorkMail を使って SMTP リレーをすると、Postfix 側で指定した SMTP クレデンシャルに紐づくユーザーが送信元になる
  • 違うユーザーを from で指定すると、エラーになる
  • 例外として、WorkMail 上で代わりに送付する権限を付与すると、そのユーザーを From に指定してメール送付が可能
  • メールを送る用途だと、WorkMail に限定せず、SES を利用してもいい。SES 側だとドメイン認証をすることができ、そのドメイン内だと任意のメールアドレスを From に指定できるので、プログラムから連携するときはやりやすい。

参考URL

Amazon SES とPostfixの統合
https://docs.aws.amazon.com/ja_jp/ses/latest/dg/postfix.html

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0