目次
はじめに
こんにちは、株式会社エーピーコミュニケーションズの松尾です。
やりたいことはこのような構成になります。
Postfixからメールクライアントに対してメールを送信する際に、直接送信するのではなく、SESを経由(リレー)させて、メールを送信することを検証していきます。
Route53はSESへ送信元ドメインを認証させるために設定しています。今回でいうと、メール送信元のドメイン(example.com)と宛先のドメイン(example.net)をあらかじめRoute53でドメイン登録、SESでの”ID”への”認証”を実施しておきます。
ゴール
次の点を目的としていきます。
- Amazon SESをメールリレーサーバとして使用するための手順を理解する
- 受信メールのヘッダーからリレーされたメールサーバを確認する
SESの構築
別の記事でSESへのID認証の手順を紹介しているのでそちらを参照ください。
Postfixの構築
EC2をLinuxで用意したあとからの設定です。
Postfixをインストール
yum -y install postfix cyrus-sasl cyrus-sasl-plain
Postfix設定ファイルへメールリレー先にSESのエンドポイントを設定
- vim /etc/postfix/main.cf
relayhost = [email-smtp.ap-northeast-1.amazonaws.com]:587 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 = encrypt smtp_tls_note_starttls_offer = yes myhostname = ec2.<SESのIDで登録したドメイン> mydomain = <SESのIDで登録したドメイン>
SESエンドポイントとの認証情報を設定
- vi /etc/postfix/sasl_passwd
[email-smtp.ap-northeast-1.amazonaws.com]:587 SMTPユーザー名:SMTPパスワード
パスワードファイルの権限修正とハッシュ化
chmod 600 /etc/postfix/sasl_passwd postmap hash:/etc/postfix/sasl_passwd systemctl restart postfix
587番ポートの有効化 3行のコメントアウトを外す
- vim /etc/postfix/master.cf
submission inet n - n - - smtpd -o smtpd_sasl_auth_enable=yes -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
再起動
systemctl restart postfix
587番ポートで待ち受けているか確認
ss -natup | grep master
メール送信テスト
sendmailコマンドでメールを送信。送信元をsendtest@example.com、宛先をuser1@example.netとした場合のコマンド例です。
sendmail -f sendtest@example.com user1@example.net Subject:test test1 .
届いたメールのソースを確認。
送信元として表示されているIPアドレスを逆引きしてみると、、
PS C:> nslookup 23.251.234.11 名前: e234-11.smtp-out.ap-northeast-1.amazonses.com Address: 23.251.234.11 PS C:>
AWSのドメインになっていることが確認できます。
参考
まとめ
Amazon SESを経由したメールが送信されていることを確認しました。検証で送信したのは1通だけだったのでメールリレーするメリットはほぼありませんが、大量にメールを送信したい場合や送信元IPアドレスの信頼性が低い場合には、Amazon SESを経由したメール配信構成をとるのが良いのではと思います。
おわりに
私達クラウド事業部はAWSなどのクラウド技術を活用したSI/SESのご支援をしております。
また、一緒に働いていただける仲間も募集中です! ご興味持っていただけましたらぜひお声がけください。