初めてメールサーバの構築した話

今回は初めてメールサーバの構築を行ったので、構築方法を紹介します。
記事にするつもりはなかったので、terratermのログとか取ってなかったので、
主に構築に使用した外部のサイトを紹介しながら説明しますが、可能な限りITの基礎的な知識がある人がこの記事をみれば構築できるよう書いていこうと思います。

### 注意事項
- ドメインを使用するので、事前にドメインは取得しておいてください。
私はお名前ドットコムでドメインを取得して今回の構築で使用しました。
- この構築では、EC2 2台分、Route53、ドメイン料金がかかるのでその点はご了承ください。本記事の構築だけならEC2のスペックはt2.microで問題ありません。

### この記事で学習できる内容
- postfixの設定方法
- dovecotの設定方法
- SMTP-AUTHの設定方法
- 自分のPCからメールソフトクライアントで動作確認
- Route53の設定方法（DNSレコード設定）
- SPFの設定方法（DNSレコード設定）
- DMARCの設定方法（DNSレコード設定）

### 目次

1. 送信用メールサーバ(EC2)の構築
2. 送信用メールサーバのRoute53のDNSレコードの作成
3. 受信用メールサーバ(EC2)の構築、受信テスト
4. SPF, DMARCが正しく設定されているか確認

構築内容としてはこんな感じです。


![スクリーンショット 2024-12-30 132117.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1260979/3adc95af-c68b-650a-c301-b3f012fd7ae3.png)


ポート番号の説明はこんな感じです。
- 22番ポート：メールサーバの設定やメールサーバ内部からメールの内容を確認します。
- 25番ポート：インターネット上で電子メールを送信・転送するために使用される通信プロトコルです。
- 587番ポート：サブミッションポート。メールソフトからメールサーバに指示してメールを送信します。サブミッションポートはSMTP認証（SMTP AUTH）で使用します。SMTP認証はメール送信時に送信者の認証を行います。SMTP認証ができる前は認証する仕組みがなかったため、第三者が簡単にメールサーバからメールを送信する事態が発生していました。
- 143番ポート：メールソフトからメールサーバが受信しているメールを見に行くために使用します。

上記に合わせてセキュリティグループを作成してください。
また、メール送信がうまくいかないときに、お互いにサーバのホスト名で通信ができるか確認するため、Pingを送って確かめることもあると思いますので、1台目と2台目セキュリティグループにお互いICMPを許可しておくとよいと思います。

ちなみに、今回「なぜ同じVPCのEC2に送っているのか」「2台目を立てなくてもgmailやyahooメールにおくればいいじゃないか」と思う人もいるかもしれませんが、EC2は外部へメールを送りたい場合はAWSに申請が必要になります。1,2日で構築から削除まで行う予定だったため申請待ちをしたくなかったので、外部ではなく同じVPC上のサーバにメールを送るようにしました。

https://dev.classmethod.jp/articles/ec2-port-25-throttle/

## 1. 送信用メールサーバ(EC2)の構築

1台目の送信用メールサーバは以下を参考に構築します。

・DENET 技術ブログ

https://blog.denet.co.jp/ec2-postfix-dovecot-mail-server-setup/

上記のサイトで、Postfix、Dovecot、SMTP認証、Route53の設定ができます。
Route53の設定の設定は次の章で説明するので、「SUBMISSION動作確認」まで進めてください。

上記のサイトではメールソフトクライアントを使用しておりません。私はより実務的な用途を意識して、自分のPCからメールソフトクライアントを使用してメールサーバからメールを送信できるか動作確認まで行いました。
メールソフトから送るところまで試したい人はメールソフトをインストールして実際にメールを送ってみてください。私はthunderbirdでテストしました。
まずはセットアップでユーザ名とメールアドレスと入力。ユーザ名はメールサーバ上で作成したユーザの名前になります。

![スクリーンショット 2024-12-30 195514.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1260979/678552e5-a29b-4299-0d35-8157b9f19dcd.png)

一度認証に失敗するかもしれませんが、次の画面で以下のように入力してください。
メールを送る際にSMTP認証をするので送信サーバを587と設定します。

![スクリーンショット 2024-12-30 195425.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1260979/7ddb358f-dfbe-f780-d0dc-109b1bc36aff.png)

すると以下のような画面が表示され、「+メッセージの作成」ボタンを押すと以下のようにメール送信できる画面になります。実際に送ってみて、メールサーバのユーザのホームディレクトリにある「Maildir/new」のフォルダにメールがあれば無事に送れています。
メールの送信相手は事前にメールサーバ上で送信相手のユーザを作成しておいてください。ユーザを作成するだけで十分です。

![スクリーンショット 2024-12-30 195837.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1260979/349afe1e-08ab-cc59-053a-5c3af1cc2079.png)


## 2. 送信用メールサーバのRoute53のDNSレコードの作成

先ほど紹介した以下のサイトの「ホストゾーン作成、レコード登録」をしていただければDMARC以外は完了です。
・DENET 技術ブログ

https://blog.denet.co.jp/ec2-postfix-dovecot-mail-server-setup/

※Route53を初めて使う人向けの説明ですが、ゾーンを作成した時点で、NSレコードに4つほど値があると思いますが、これをお名前ドットコムなどの取得したドメインのネームサーバ情報に登録する必要があります。お名前ドットコムでいうと「利用ドメイン一覧 > 今回使用するドメイン名をクリック」、そうするとドメイン詳細の画面が表示され、「ネームサーバの変更」というところをクリックして、Route53のNSレコードを登録します。
![スクリーンショット 2024-12-30 201344.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1260979/410d17ea-6d36-e2e7-acbb-39aaea9c36f3.png)

続いてDMARCの設定ですがDMARCのレコードについてはレコードの意味なども含め学習して自力でレコードを作成することをお勧めします。私は以下のサイトを参考にしました。
・DMARCレコードの書き方は？ 設定・確認方法や設定例も解説

https://baremail.jp/blog/2024/01/23/3671/?utm_source=google&utm_medium=cpc&utm_campaign=dsa&gad_source=1&gclid=CjwKCAiApsm7BhBZEiwAvIu2X9SwIN9AU9gIMkNdI3NQEamb0OyswjEM8j1SoyVFvFbm2lBnliDKJxoC6LcQAvD_BwE

## 3. 受信用メールサーバ(EC2)の構築、受信テスト

2号機は、ホスト名やドメイン名はまた別のものにして作成しました。
今回は1号機から同じVPC内のメールサーバ2号機に送るだけで、SMTP-AUTHやRoute53のレコード作成はやっていません。そのため以下のyoutube動画を参考に構築しました。

https://www.youtube.com/watch?v=6us7_zWad58

2号機にはドメイン取得やRoute53の設定をしていないので、1号機の「/etc/hosts」ファイルに2号機のホスト名とIPアドレスを記述してあげます。

https://linuc.org/study/knowledge/506/

完了したら、thunderbirdを使って、2号機にメール送信をしてみてください。無事遅れたら完了です。

## 4. SPF, DMARCが正しく設定されているか確認

正しく設定されているかどうかはgoogleでチェッカーを検索すると出てきます。
私は以下からpassしていることを確認しました。

・SPF Record Check - Lookup SPF Records

https://mxtoolbox.com/spf.aspx

・無料DMARCチェッカーツール

https://powerdmarc.com/ja/dmarc-record-checker/

本記事は以上となります。リソースの削除を忘れないように注意してください。