Techfirm Cloud Architect Blog

テックファーム株式会社クラウドインフラグループのブログ

EC2サーバのPostfixから外部の宛先にメール送信するまで ①

はじめに

本記事ではPostfixでメール配信できる環境をAWSに構築し、任意のアドレス宛にメール送信できることを確認します。

目標

記事が長くなるため、2回に分けて説明を行います。

事前準備

  • ドメインを取得する
    • 今回は「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)の紐づけを行います。

逆引きDNSレコードの更新画像

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対応を行い、なりすまし・迷惑メールを防止する環境を作成します。

EC2サーバのPostfixからgmail宛にメール送信するまで ②