はじめに
現場でDNSにSPFレコードの設定を頼まれたところから、そもそもメールサーバってどんなふうに作るのかと思い構築をしてみました。
独自ドメインは今回取得せず、1台のEC2のなかで完結するような構築をしました。
メールサーバにおける用語
メールを利用するにあたっての、主要な用語を簡単に説明する。
文字だけでは分かりにくいため、下記本構築アーキテクト図に「どこ」が「どこ」にあたるのかを記載する。
コンポーネント
省略語 | 正式名称 | 内容 | プログラムの一例 |
---|---|---|---|
MUA | Mail User Agent | エンドユーザがメールを読んだり作成したりするプログラム。 | 「Thunderbird」、「Outlook」 |
MTA | Mail Transfer Agent | 「メールサーバ」や「SMTPサーバ」と呼ばれ、ドメインからDNS検索して配送先のMTAを見つけ転送や、ローカルの場合であればMDAに転送。 | 「postfix」 |
MDA | Mail Delivery Agent | メール配送を担当するエージェントプログラム。受信者のメールボックスに配送する役割を持つ。 | 「Dovecot」 |
MRA | Mail Retrieval Agent | メール受信を担当するエージェントプログラム。ユーザーがメールサーバーからメールを取得する際に使用される。 | MDAと同様に「Dovecot」 |
プロトコル
プロトコル名 | 正式名称 | ポート番号 | 内容 |
---|---|---|---|
SMTP | Simple Mail Transfer Protocol | Port: 25 | メール送信するために使用するプロトコル。 |
IMAP | Internet Message Access Protocol | Port: 143 | メールサーバ上のメールにアクセスし、管理するためのプロトコル。 |
POP3 | Post Office Protocol | Port: 110 | メールクライアントがメールサーバーからメールをダウンロードするために使われるプロトコル。 |
システム ※本構築スコープ外
システム名 | 正式名称 | 内容 |
---|---|---|
DNS | Domain Name System | ドメイン名をIPアドレスに変換するシステム。メールサーバーにおいては、メールを正しい宛先にルーティングするために、ドメイン名を関連付けたIPアドレスに解決する役割を持つ。 |
構成図
構築
前提条件
・EC2(Linux系)が構築されていること。
・EC2のSGで下記ポートが開放されていること。
No | タイプ | プロトコル | ポート範囲 |
---|---|---|---|
1 | POP3 | TCP | 110 |
2 | SSH | TCP | 22 |
3 | SMTP | TCP | 25 |
5 | IMAP | TCP | 143 |
1.SMTPサーバ構築
SMTPサーバを構築するための手順について説明する。
SMTPサーバは、メールの送信とルーティングを管理するサーバ。
利用MWとしてPostfixを利用する。
1.1.Postfixのインストール
SMTPサーバを構築するため、Postfixのインストール。
プログラムを起動と、自動的に起動する設定を行う。
sudo yum update -y
sudo yum install -y postfix
sudo systemctl start postfix
sudo systemctl enable postfix
1.2.Postfixの設定
Postfixを設定する。
sudo vim /etc/postfix/main.cf
各項目の設定内容
項目名 | 内容 |
---|---|
myhostname | メールサーバのホスト名 |
mydomain | メールを送受信するドメイン |
myorigin | 送信メールのデフォルトドメイン |
inet_interfaces | Postfixがリッスンするネットワークインターフェース |
mydestination | ローカルで配送されるメールのリスト |
mynetworks | 信頼されたネットワークのリスト |
home_mailbox | ユーザーのメールボックスのパス |
設定例
myhostname = ip-192-168-10-234.ap-northeast-1.compute.internal
mydomain = tetutetu.com
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 127.0.0.0/8 [::1]/128
home_mailbox = Maildir/
2. Dovecotのインストールと設定
IMAP/POP サーバを構築するための手順について説明する。
IMAP/POP サーバは、メールの受信とメールボックスの操作を管理するサーバ。
利用MWとしてDovecotを利用する。
2.1.Dovecotのインストール
IMAP/POP サーバを構築するため、Dovecotのインストール。
プログラムを起動と、自動的に起動する設定を行う。
sudo yum install -y dovecot
sudo systemctl start dovecot
sudo systemctl enable dovecot
2.2.Dovecotの設定
2.2.1.メイン設定ファイル設定
IMAPとPOP3を通信プロトコルとして利用するための設定。
sudo vim /etc/dovecot/dovecot.conf
protocols = imap pop3
2.2.2.メールボックス形式設定
メールボックスがMaildir形式であることをDovecotに指示。
sudo vim /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:~/Maildir
2.2.3.セキュリティ設定
IMAPとPOP3はSSL暗号化されていないため通信が拒否されてしまうため、下記の設定を実施。
※ただしセキュリティレベルを落とすため本番環境などでは非推奨の設定。
- プレーンテキスト(暗号化されていない)でも認証を許可する。
sudo vim /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = no
- Dovecotに対してSSL/TLSを無効にする。
sudo vim /etc/dovecot/conf.d/10-ssl.conf
ssl = no
3.テストのための下準備作成
今回のテストではec2-user
というユーザから、tetutetu
ユーザに対してメールを送付するシナリオのため、ユーザの作成及びメール受信ディレクトリを作成する。
3.1.ユーザの追加
メールを送る対象のユーザを作成する。
sudo useradd tetutetu
sudo passwd tetutetu
3.2.メール受信用ディレクトリ作成
ユーザ作成時、ホームディレクトリにメール受信用ディレクトリが自動的に作成されるよう設定する。
mkdir -p /etc/skel/Maildir/{new,cur,tmp}
chmod -R 700 /etc/skel/Maildir/
挙動の確認
メール送信テスト
メール内容、タイトル、送り先をコマンド実施。
echo "Test email body" | mail -s "Test Email Subject" tetutetu@tetutetu.com
メールログの確認
メールが送られているログを確認することができる。
sudo cat /var/log/maillog
postfix/postfix-script[2953]: starting the Postfix mail system
(中略)
from=<ec2-user@tetutetu.com>, size=536, nrcpt=1 (queue active)
to=<tetutetu@tetutetu.com>, relay=local, delay=0.03, delays=0.02/0.01/0/0, dsn=2.0.0, status=sent (delivered to maildir)
メール受信確認
※ユーザを送信したユーザに切り替えることに注意する。
sudo su tetutetu
cd /home/tetutetu/Maildir/
ls new/
1705800314.Vca01Ic5d404M486290.ip-192-168-10-234.ap-northeast-1.compute.internal
cat new/1705800314.Vca01Ic5d404M486290.ip-192-168-10-234.ap-northeast-1.compute.internal
メール内容確認
ec2-user
で送信したメール内容が、tetutetu
ユーザに送信されていることが確認できる。
<中略>
To: tetutetu@tetutetu.com
Subject: Test Email Subject
<中略>
From: ec2-user@tetutetu.com (EC2 Default User)
Test email body
さいごに
メールサーバについて全くわからなかったところからスタートしたので、かなり自分的に大収穫となった検証となりました。
ドメイン取得してからの動きも気になりますし、そもそものSPFレコードってどこでどうなってるのかなども今回の検証ではスコープではなかったので、次回のブログでは是非ともその部分まで踏み込んでいきたいなと思います。