はじめに
本記事ではPostfixでメール配信できる環境をAWSに構築し、任意のアドレス宛にメール送信できることを確認します。
目標
記事が長くなるため、2回に分けて説明を行います。
- EC2サーバにPostfixをインストールし、gmail宛にメール配信を行う
- メールの受信は行いません
- SPF/DKIM/DMARCの設定と、SSL/TLS対応を行う
事前準備
- ドメインを取得する
- 今回は「example.com」を取得している前提
- メール配信を行うドメインも「example.com」の想定です
- 構築を行うAWSアカウントで E メール送信の制限の解除申請 を行う
- デフォルトだと25番のアウトバウンドが制限されているため、EC2サーバでメール送信をする際は解除申請を行う必要があります
- 一度で申請が通らない事があるので、事前に申請しておくのがおススメです
手順
サーバの構築
- EC2サーバの構築
OSは「Amazon Linux 2」で、パブリックサブネットに構築を行っています。
※ パブリックサブネットはIGWへの経路0.0.0.0/0がルートテーブルに設定されているサブネットです
- ElasticIPの割り当て、関連付け
ElasticIPの割り当てを行い、作成したEC2と関連付けを行います。
- ElasticIPの逆引きDNSレコードを更新
ElasticIPの画面から、IPとドメイン(example.com)の紐づけを行います。
Postfixの設定
EC2サーバにログインし、Postfixのインストールと設定を行います。
※ サーバ内の作業はrootユーザで実行しています
- Postfixのインストール確認
Amazon Linux 2はデフォルトでPostfixが導入されているため、インストールされている事を確認します。
# systemctl start postfix # systemctl enable postfix # systemctl status postfix
- Postfixの設定ファイル修正
# cp /etc/postfix/main.cf /etc/postfix/main.cf.org # vim /etc/postfix/main.cf myhostname = example.com(Aレコードに設定したドメイン。サブドメインを含んだ値) mydomain = example.com(ドメイン名) mynetworks = 127.0.0.0/8(他のサーバから送信する場合、そのネットワーク帯も記載する)
設定ファイルが問題ないかチェックし、プロセスを再起動します。
# postfix check # systemctl restart postfix
- A・MXレコードの設定
DNSにA・MXレコードを設定します。
example.com / A / <ElasticIP> example.com / MX / 10 example.com
- SPFレコードの設定
DNSにTXTレコードを追加し、SPFの設定を行います。
example.com / TXT / "v=spf1 Ip4:<ElasticIPの値> ~all"
SPFが正常に設定されているかは、以下で確認できます。
https://dmarcian.com/spf-survey/
以下が表示されたらOKです。
Warning! Your SPF record is valid, but... we noticed you don't have a DMARC record. Add DMARC to disallow unauthorized use of your email domain to protect people from spam, fraud and phishing.
- テストメールの送信
sendmailコマンドを使用し、任意の宛先にテストメールを送信します。
今回はrootユーザでメールを送信していますが、ユーザ名は適宜変更してください。
# sendmail 宛先@xxx.com From: root@example.com To: 宛先@xxx.com Subject: Test mail Test mail .
Telnetでも送信可能です。
# telnet localhost 25 Trying ::1... telnet: connect to address ::1: Connection refused Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 <ホスト名> ESMTP unknown ← 220が返ってくること helo localhost 250 <ホスト名> ← 250 が返ってくること mail from:root@example.com (送信元を指定) 250 2.1.0 Ok ← 250が返ってくること rcpt to:宛先@xxx.com (送信先を指定) 250 2.1.5 Ok ← 250が返ってくること data 354 End data with <CR><LF>.<CR><LF> testmail (メールの本文) . ← .を入力すると、送信される 250 2.0.0 Ok: quit (telnetを切断) 221 2.0.0 Bye Connection closed by foreign host.
メール送信できなかった場合、/var/log/maillog
にメール送受信のログが残っているため、エラーが出ていないか確認してください。
- SPFの動作確認
送信されたメールを確認し、SPFが設定されていることを確認します。
Gmailの場合、対象のメールを開き「その他 → メッセージのソースを表示」で確認が可能です。
SPFの欄が「PASS」になっていればOKです。
終わりに
今回はサーバの準備から始め、実際にメールを送信するところまで確認しました。
次回はDKIM/DMARC、SSL/TLS対応を行い、なりすまし・迷惑メールを防止する環境を作成します。