hero_picture
Cover Image for 特定のドメインだけをSESにリレーする(qmail、postfix)

特定のドメインだけをSESにリレーする(qmail、postfix)

2023/02/13

こんにちは。

クラウドソリューション事業部の和田です。

今回は特定のドメインだけをSESに経由し送信する方法をまとめていきます。

AWS SESについて

AWSのメール送信サービスであるSESは弊社でもよく利用されているサービスの一つです。

基本的にSESを利用する時は全ての送信をSES経由で行っていますが、すでに別経路で送信を行なっている既存環境で特定のドメインだけをSES経由としたい、というケースもあったりします。

そこで、特定のドメインだけをSES経由、その他のドメインは現状のルートで送信する方法をqmail、postfixそれぞれまとめたいと思います。

リレー設定方法

qmaiの場合

SESを利用する場合はpostfixを使うことが多いかと思いますが、中には既存環境でqmailを利用しており、できる限りそのままでSESを使いたい!というケースもあるかとおもいます。

公式ドキュメントにはqmailでのリレー方法は記載がありませんが、弊社CTOによるqmailでのリレー手順が下記のブログにわかりやすくまとめられておりますので、こちらを参考に設定を進めていただければと思います!

Amazon SESへqmailからSMTPリレーする

こちらの手順では全てのメールをSESにリレーしていますが、特定のドメインのみリレーさせる場合は以下のようにsmtproutesの記述を変更するだけでOKです。

SESに送りたいドメインが複数あれば一行ずつ記載しqmail-sendのプロセスを再起動すれば完了です。

1/var/qmail/control/smtproutes
2
3--------
4xxxxxxx.com:127.0.0.1:10465 アクセスキー シークレットキー
5xxxxxxx.jp:127.0.0.1:10465 アクセスキー シークレットキー
6xxxxxxx.com:127.0.0.1:10465 アクセスキー シークレットキー
7--------
8
9ps aux | grep qmail-send
10kill -HUP プロセスID

postfixの場合

postfixではtransport_mapsでドメインごとの配送経路を設定します。

ここで設定を行えば特定ドメインのみをSESにリレーすることができますが、すでに公式の手順でリレー設定を行っている場合は、"relayhost = [email-smtp.ap-northeast-1.amazonaws.com]:587" の設定を削除するのを忘れないようにしましょう!

Amazon SES と Postfix の統合

1postconf -e "smtp_sasl_auth_enable = yes" \
2"smtp_sasl_security_options = noanonymous" \
3"smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd" \
4"smtp_use_tls = yes" \
5"smtp_tls_security_level = encrypt" \
6"smtp_tls_note_starttls_offer = yes"
7
8cat /etc/postfix/master.cf | grep smtp_fallback_relay
9
10vi /etc/postfix/sasl_passwd
11----
12#ここのみ環境ごとの認証情報を設定する
13[email-smtp.ap-northeast-1.amazonaws.com]:587 SMTPUSERNAME:SMTPPASSWORD
14----
15
16postmap hash:/etc/postfix/sasl_passwd
17chmod 600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
18ls -al /etc/postfix/sasl_passwd*
19
20ls /etc/ssl/certs/ca-bundle.crt
21postconf -e 'smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt'

ここからがドメインごとのリレー設定になります。

transportにSESにリレーしたいドメインを記載し、その後ファイルを変換。

postfixをリロードすれば完了です。

1vi /etc/postfix/transport
2--------
3xxxxxxx.com smtp:[email-smtp.ap-northeast-1.amazonaws.com]:587
4--------
5postmap /etc/postfix/transport
6
7postfix reload

最後に

あまり多くはありませんが、いきなり全てのメールをSES経由させるのは難しい…などの理由で特定アドレスのみを経由させたいというケースはあるかと思います。

その時この記事がお役に立てばと思います!