Amazon SESとpostfixの連携
個別でメールサーバーを作るのは個人的に好ましくないと思っていたため、Amazon SESのようなサービスを利用したサーバーの依存がない構成を作りたいと思っていました。
個別のメールサーバーを作る場合のデメリットとして以下の内容があると思っています。
- IPの登録の問題
- サーバーの並列化の問題
メールを送信するサーバーを専用で建てることが多いイメージですが、構成を変更する際にネックになる場合があり、自由度がほしいと思っていました。
postfixとAmazonSESの連携ができることを最近知り、実践してみました。
SESでのドメイン登録
ドメインの登録とテストメールまでできることを確認できればこの作業は完了です。
postfixの設定
サーバーにpostfixをインストールし、SESへの設定を手順通りに実行していきます。
東京のリージョンを設定する場合の設定です。
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/postfix/master.cfに内容が追加されることを確認
awsのGUIより、SESのSMTP Credentialsを作成
作成より取得できたユーザー:パスワード情報を保存します。
touch /etc/postfix/sasl_passwd vi sasl_passwd
「SMTPUSERNAME:SMTPPASSWORD」の部分に先ほど取得したSMTP Credentialsを設定します。
[email-smtp.ap-northeast-1.amazonaws.com]:587 SMTPUSERNAME:SMTPPASSWORD
sudo postmap hash:/etc/postfix/sasl_passwd
CA証明書の設定
sudo postconf -e 'smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt'
sudo systemctl restart 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. .
メールが送信されていることを確認できれば完了です。
懸念点
SMTP Credentialsで作成したIAMユーザーがありますが、サーバーからの検証はできますが、ドメインごとにIAMの制限ができるのかどうか気になっています。
設定さえできてしまえば、VPNで分離しているはずのサーバーからでもSESからメールが送信できてしまうと思っています。
できれば制限を強くしてIAMとドメインを制限したいけど、どうなんだろう。
正直メール周りのサーバー知識や運用知識が乏しく、問題となる設定や良い設定があまりわかっていない状態です。
PHP等のコードから直接SESの実行も考えましたが、postfixとSESの組み合わせで機能として疎結合になったと思っています。
運用して経過をみたいと思います。