AmazonSESをPostfixのリレーサーバとして利用する

AmazonSESをPostfixのリレーサーバとして利用する

お題のまま。Amazon EC2インスタンスからのメール送信をAmazon SESへぶん投げる設定。

このあたりが実はややこしかったりするんだけど以下の設定がすんでいることが前提です。

  • 特定ドメインメールアドレス(例えば @example.com)からの送信認証がSES上ですんでいること。
  • Postfixがインストール済であり、稼働していること。
  • sendmailなど他のMTAが稼働していないこと。
  • sasl認証パッケージ(cyrus-sasl-plainなど)がインストールされていること。

SESのVPCエンドポイントを作成する

VPCからインタネットGWやNATを経由してSESを利用する方法もあるのですが、使えるのならVPCエンドポイントを利用するのがいいでしょう。
VPCコンソールからエンドポイント。「エンドポイントを作成」をクリック。
名前やSubnetは適当に選んで、セキュリティのインバウンドには送信するEC2にマッチするCIDRアドレス、TCPの25,465,578,2465を設定。

f:id:rougeref:20220222135935p:plain

SESのユーザ作成

このあたりは
Amazon SES SMTP 認証情報を取得 - Amazon Simple Email Service
ここの情報を参照。

SESコンソールからAccount dashboardを選択(デフォルトでそこだけど)。中段のSimple Mail Transfer Protocols(SMTP) settingsのところ、Create SMTP credentialsをクリック。
f:id:rougeref:20220222140524p:plain

IAMのなんか縮小版みたいな画面がでるので、適当なユーザ名をいれて「作成」をクリック。
f:id:rougeref:20220222141000p:plain

作成できたら認証情報がダウンロードできるので、適当なところへダウンロード。
内容はこんな感じのCSVファイル。
>||
IAM User Name,Smtp Username,Smtp Password^
"username",XXXXXXXXXXXXXXX,ZXZFZXCSDFSFGFETrdsgfSDFsda
|

1カラム目がIAMユーザ名でこれは要らない情報。2カラム目がユーザ名、3カラム目がパスワード。

さっき入手したユーザ名とパスワードを設定

まず /etc/postfix/sasl_passwdに上のユーザ名とパスワードを設定する。ファイルがない場合は作成する。

[email-smtp.ap-northeast-1.amazonaws.com]:587 SMTPUSERNAME:SMTPPASSWORD 

IAMのユーザ名を書いちゃったりする(書いちゃいました)ので注意。FQDNは利用しているリージョンで違うので適宜書き換えてください。

postmapコマンドでdbファイルを作成する

実際にはpostfixはhashした値を読むので以下コマンドでDBファイルを作成する。

$ sudo postmap hash:/etc/postfix/sasl_passwd

上記で出来た /etc/posfix/sasl_passwd.dbファイルのパーミションを変更する。/etc/postfix/sasl_passwdファイルも同時に変更したほうがいいのはあたりまえ。

$ sudo chown root:root /etc/postfix_sasl*
$ sudo chmod 0600 /etc/postfix_sasl*

/etc/postfix/main.cfを編集

最近はテキストエディタじゃなくて、postconf -eってコマンドで編集するのね。

$ sudo postconf -e "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"

/etc/posftix/master.cfをチェック

以下のエントリがないことを確認。

-o smtp_fallback_relay=

あったらコメントアウトする。

CAファイルの置き場所を設定

AmazonLinuxやRedhatなら以下。

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

ubuntuMacOSだとファイル名が違うみたいです。

Postfixに設定を読み込ませる

$ sudo postfix reload