Postfixで、25番ポートで受け取り、サブミッションポート(587)を使用してリレーさせるためのサーバを構築した際の手順をまとめたものです。セキュリティはIP制限で実施する想定であるため、度外視してます。
環境
- AMI: Amazon Linux 2 (arm版)
- インスタンス:t4g.micro
EC2のt4g.microインスタンスが、トライアルで無料で利用できたため、こちらを利用しています。Amazon Linux 2では、postfixがデフォルトでインストールされているため、インストール処理は省略します。
追加した設定
SMTPリレーを有効にするため、/etc/postfixにある、main.cfを書き換えます。
myhostname = xxx.yyyyy.jp
mydomain = yyyyy.jp #送信で利用するドメイン
#postfixで待ち受けるインターフェース
inet_interfaces = all
#inet_interfaces = localhost
#以下の設定を入れないとうまく動作しない環境あり、詳しくは次項で紹介します
local_recipient_maps =
#どの領域からアクセスを受け付けるか
mynetworks_style = subnet
mynetworks = 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16
# transport にあるメールリレー設定を参照するよう transport_maps を追加する
transport_maps = hash:/etc/postfix/transport
# SMTP認証有効
smtp_sasl_auth_enable = yes
# relay_password にある認証情報を参照するよう設定
smtp_sasl_password_maps = hash:/etc/postfix/relay_password
smtp_sasl_security_options = noanonymous
# STARTTLS 有効
smtp_tls_security_level = may
# /var/log/maillog に TLS 関連のログを出力
smtp_tls_loglevel = 1
# TLSで使用するサーバ証明書ファイル
smtp_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt
次に、同じ階層のtransportファイルを書き換えます。(デフォルトで入力されているものはすべてコメントになっているため、消してしまっても問題ありません。)
localhost :
localhost.localdomain :
<hostname> :
* smtp:<SMTPサーバ名>:<ポート番号>
<hostname>
の部分には、hostnameコマンドで出てきた表記を入力します。以下の例の場合は、ip-172-31-39-242.ap-northeast-1.compute.internal
と記載します。
[root@ip-172-31-39-242 postfix]# hostname
ip-172-31-39-242.ap-northeast-1.compute.internal
ファイルを保存したら、ハッシュ化が必要であるため、以下のコマンドを打ち込んでください。
[root@ip-172-31-39-242 postfix]# postmap /etc/postfix/transport
次に、メール送信用の認証情報を設定するため、relay_passwordファイルを作成します。
<SMTPサーバ名>:<ポート番号> <アカウント名>:<パスワード>
こちらもハッシュ化が必要です。ハッシュ化した後は、元のファイルは削除したほうがセキュリティ的に良いかと思います。
[root@ip-172-31-39-242 postfix]# postmap /etc/postfix/relay_password
すべて終わったら、postfixを再起動します。対象のSMTPサーバーに対して、メールが送れているのを確認できればOKです。
注意点
メールを送信する際のFromの情報を、SMTP認証で使用するアカウントと一致させておかないと、リレー後のサーバで拒否される可能性があるので注意してください。
local_recipient_mapsについて
local_recipient_mapsの設定を入れずにpostfixを動かしていたところ、一部の環境で以下のエラーが発生しました。
Recipient address rejected: User unknown in local recipient table
調べたらこちらの記事が出てきたため、local_recipient_mapsの設定を実施したところうまくいきました。ただ、送信先のドメインが外部ドメインを指定していたため、なぜ現象が発生したのかが不明です。