3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

VirtualBox内でメールサーバを2つ立ててメールを送受信する

Last updated at Posted at 2022-12-12

仮想マシンでセキュリティもなんも考慮していないメールサーバを立てて、申し訳程度のメールサーバ気分に浸ろうという記事です。Linuxド初心者向け。

環境について

macOS Big Sur 11.6.2
VirtualBox 6.1.32
Alma Linux 8.6

0. 準備

VirtualBoxをインストールし、何かしらのLinuxディストリビューションのISOを用意します。ディストリビューションは何を選んでも大体何とかなるとは思いますが、RedHat系のディストリビューションがおすすめです。ちょっと前までは初心者はCentOS一択みたいな風潮があったんですが、今はそうでもなくなりました。

おすすめなのは、Fedora, Alma Linux, Rocky Linuxあたりでしょうか。今回はAlma Linuxでやろうと思います。名前がかっこいいから……

以下のリンクからAlmaLinux-8.6-x86_64-minimal.isoをダウンロードします。
https://almalinux.org/ja/

1. 仮想マシンを立てる

VirtualBoxで仮想マシンを、とりあえず1個だけ立てます。

VirtualBoxでマシンを立てたことがない人は、以下の記事を読んでおけばなんとかなるんじゃないでしょうか。
https://note.com/kokoronokori/n/n6bd3c44b8706  

重要な点として、ネットワークの設定からホストオンリーアダプターを追加しなければなりません。 ホストオンリーアダプターっちゅうのは、仮想マシン同士の通信だの、ホストOSと仮想マシンとの通信だのを可能にするやつと思っておけば大体間違いはないでしょう。今回はメールサーバを2つ立てて、そいつらで通信を行うので、ホストオンリーアダプターが必要になる訳です。

追加の仕方がわからなければ、以下の記事が参考になるでしょう。記事内に出てくるnmtuiは、なければdnfなどでインストールすることができます。
https://blog.proglus.jp/3315/#i-5

dnfは以下のように利用できます。一応。

dnf update // dnfを使えるようにする前準備
dnf install nmtui // nmtuiをインストール

2. SMTPサーバとIMAPサーバを立てる

おさらいですが、SMTPサーバがメールの送信に使うサーバで、IMAPサーバがメールの受信, 保持, クライアントへの送信を担うサーバです。1つの仮想マシンの中にSMTPサーバもIMAPサーバも立てます。

立てた仮想マシンの中に、メールサーバに必要なソフトウェアを入れていきます。SMTPサーバを立てるにはpostfixが、IMAPサーバを立てるにはdovecotが必要です。

それぞれを導入する方法が書かれた良い記事がここにあるので、これを読んで導入してください。(03)の「メールアカウント登録(OSユーザ)」までやればOKです。
https://www.server-world.info/query?os=CentOS_Stream_8&p=mail&f=1

いや〜 偉大な先人がいると記事を書くのが実に楽だな(笑)

上記の記事の設定に加えて、/etc/postfix/main.cfに以下を追記しておいてください。(後ほど説明するのですが、/etc/hostsを参照する際にこの設定が絡んできます。)

/etc/postfix/main.cf
smtp_host_lookup = native

送信テストが上手くいかない場合

原因を調査するために、メールを送信した際にログを出力するようにします。まずはsyslogをインストールします。

dnf install -y rsyslog
systemctl start rsyslog

これで、メールを送信した際にログが出力されるようになります。ログを確認するためにはtail /var/log/maillogコマンドを入力します。

すると、Maildirへの書き込み権限が無いだとか、ドメインが見つからないだとか、時と場合によって色々なエラーが出てきます。

全てのエラーを把握しているわけでは無いので、具体的に「〇〇が起きた時は〇〇しろ!」という指示は上手くできません。(すみません)
私が経験したものだと、Fedoraで同じサーバを構築した際に、SELinuxが原因でMaildirへの書き込みが上手くできなかったり、Alma Linuxでpostfixの設定が原因でドメインの名前解決が上手くいかなかったりしました。(前者はsetenforce 0で雑に対処して、後者はsmtp_host_lookupの設定で対処しました。)

3. 立てた仮想マシンをクローンする

もう1つ同じものを用意してそいつらで通信させたいわけですが、まあ面倒なので、もう1つはコピペで済ませてしまおうと思います。

3.1 とりあえずクローン

VirtualBoxから仮想マシンを右クリックして、クローンを選択します。
image.png
まあこんな感じでクローンします
image.png
image.png

3.2 IPアドレスの設定を変更

クローンしたマシンを起動して、IPアドレスの設定を変更します。1つ目の仮想マシンとダブってると困るので。
ホストオンリーアダプター(enp0s8)のアドレスを、nmtuiなどから、1つ目の仮想マシンとは異なるもの(192.168.xxx.3など)に変更してださい。

3.3 ドメインの設定を変更

先ほど設定したpostfixの設定のドメインの部分を書き換えます。ドメインも1つ目の仮想マシンとダブっていると困るので。
こんな感じで、/etc/postfix/main.cfを編集します。

/etc/postfix/main.cf
myhostname = mail.srv2.world
mydomain = srv2.world

編集が終わったらpostfixを再起動します。

systemctl restart --now postfix

4. 通信先サーバのドメインの設定

おさらいですが、そもそもドメインというのはIPアドレスと結びついているものです。なので、上記の設定の例で言えば、cent@srv2.worldにメールを送ったならば、192.168.xxx.3にメールが届くべきなのです。

ドメインとIPアドレスを結びつけるのはDNSというサーバの仕事なのですが、わざわざ申し訳程度のメールサーバ気分に浸るためだけにDNSまで立てるというのはあまりにダルすぎます。なので、もうちょっと簡易的な方法でこれに対処します。

/etc/hostsファイルというものがあるので、これを利用します。/etc/hostsファイルとは、IPアドレスとドメインの対応を書いておけば、DNSを使わなくともその通りに名前解決をしてくれるという優れものです。

それぞれの仮想マシンで以下のように設定します。

192.168.xxx.2 srv.world
192.168.xxx.3 srv2.world

これで、お互いのサーバをドメインで認識できるようになりました。

/etc/hostsファイルについてもっと知りたければ、以下の記事が参考になるでしょう。
https://linuc.org/study/knowledge/506/

5. 送信テスト

やっとこさ2つのメールサーバが揃ったので、送信テストをしてみます。「2. SMTPサーバとIMAPサーバを立てる」で紹介したサイトを参考にテストをしてみます。
1つ目の仮想マシンで以下のように送信テストを行います。

# srv2.worldにテストメール送信 [mail (ユーザー名)@(ホスト名)]
[cent@mail ~]$ mail cent@srv2.world
# 件名
Subject: Test Mail#1
# 本文
This is the first mail.

# 本文を終了する場合はピリオド (.) を入力して Enter
.
EOT

上手くいっていれば、2つ目の仮想マシンでmailコマンドを実行すると、メールが受信できているはずです。お疲れ様でした。

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?