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を設定。
SESのユーザ作成
このあたりは
Amazon SES SMTP 認証情報を取得 - Amazon Simple Email Service
ここの情報を参照。
SESコンソールからAccount dashboardを選択(デフォルトでそこだけど)。中段のSimple Mail Transfer Protocols(SMTP) settingsのところ、Create SMTP credentialsをクリック。
IAMのなんか縮小版みたいな画面がでるので、適当なユーザ名をいれて「作成」をクリック。
作成できたら認証情報がダウンロードできるので、適当なところへダウンロード。
内容はこんな感じの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"
CAファイルの置き場所を設定
AmazonLinuxやRedhatなら以下。
$ sudo postconf -e 'smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt'
Postfixに設定を読み込ませる
$ sudo postfix reload