メールサーバーの構築
SMTPサーバー、POPサーバーの役割についてはこちらの記事がわかりやすかった。
ここらへんの事前理解を端折(はしょ)って、とりあえず手を動かしていたので、 SMTPサーバーからメールが送れてて、送信先のユーザー側からもメールの到着がキューから確認できているのに、これ以上何をするんや、これで完璧やんけと最後までPOPサーバーについて理解が私には全然できなかったという苦い経験があるので、必ず最初にここらへんの理解を深めることを強くおすすめする。
簡単に言うと、 SMTPとははつまり、メールを相手のメールサーバーまで送るためのプロトコルであり、POPとはメールサーバーにアクセスして自動でメールをダウンロードしてくるためのプロトコルである。
メール設定で最初につまずく「SMTP」「POP」「IMAP」。その意味&設定方法は?より画像引用
SMTPサーバーの構築(送信する用)
mxのバーチャルサーバーを立てる
とりあえず、今回メールサーバーを構築するためのバーチャルサーバーをvagrantでたてる。
vagrantとは
VirtualBoxなどの仮想化ソフトのフロントエンドとして機能し、仮想マシンの簡単な構築や、どこでも同じ環境を再現できるように仮想マシンを管理するためのコマンドラインツール。
vagrant init
これで、Vagrantfileを作成する
Vagrantfileの編集
仮想マシンの構成を記述するファイル。 主に以下の項目を指定する。
- 起動する仮想マシン指定
- ネットワーク設定
- 共有フォルダ設定
- マシンスペック設定(CPUやメモリの割り当てなど)
- プロビジョニング(シェルスクリプトや構成管理ツールの実行指定)
今回は、以下のように起動する仮想マシンとネットワークと設定をする
config.vm.box = "ubuntu/bionic64"
config.vm.network = "public_network", bridge: "en0: Ethernet
仮想マシンの起動
$ vagrant up
ログイン
$ vagrant ssh
ipアドレスの変更
仮想マシンにログインができたら、DNSで指定したMXレコードのIPアドレスに合わせる。 /etc/netplan/50-vagrant.ymlをこれを参考にしながら編集をする。
network:
version: 2
renderer: networkd
ethernets:
enp0s8:
dhcp4: false
addresses: [172.16.10.110/24]
gateway4: 172.16.10.99
nameservers:
addresses: [172.16.10.113]
Postfixのインストール&設定ファイルの編集
ここを見ながらインストールと設定ファイルの編集をすべし。
(インストールが上手く行かない場合は、sudoで実行したり、apt-get updateとかやると良いかも).
ただし、インストール後の構成設定の選択は[No Configuration]ではなく、[Internet Site]にしないと、設定ファイルが上手く作成されないことがあるので、そこは注意。
それぞれの設定項目についてはここをみるとわかる。 (まあ、設定したいドメインを設定しているだけ)
DNSサーバーの編集
そうしたら、mxレコードが呼び出されたとき、mxのIPアドレスに行くようにする。
使用するDNSサーバーに移動して、Zoneファイルの中身を以下のように編集する。(メールサーバーのある位置に合わせてIPアドレスは変更する)
$TTL 86400
@ IN SOA seven.asia root.seven.asia (
2018050611
3600
900
604800
86400
)
@ IN NS ns.seven.asia.
@ IN MX 0 mx.seven.asia.
ns IN A 172.16.10.113
gitlab IN A 172.16.10.111
mx IN A 172.16.10.110
nas IN A 172.16.10.112
メールが送信できるか確かめる
メールクライアントの準備
ここまで実装が完了すれば、実際にSMTPサーバーからメールが送信できるか確かめる。 まずは、メールを扱うためのメールクライアントのインストールとその設定をする SMTPサーバーに移動して、以下のようにする。
#メールクライアントインストール
$ sudo apt -y install mailutils
#メールボックスは Maildir を参照するよう設定
$ sudo echo echo 'export MAIL=$HOME/Maildir/' >> /etc/profile.d/mail.sh
ユーザーの追加
メールを使うユーザーを追加していく。
OSユーザーの追加
まず、rootにユーザーを変更
$ sudo -s
新しい、OSユーザーの追加
$ adduser testuser #passワードの設定とか順次設定
aliaseの編集
追加したOSユーザーをpostfixに登録する。 ユーザーを登録するファイルは、/etc/aliases
# See man 5 aliases for format
postmaster: root
testuser: testuser
aliaseの設定を更新し、postfixをリスタートする。
$ sudo newaliases
$ sudo systemctl restart postfix
これで、testuserというユーザーに対して、testuser@seven.asiaというメールアドレスが登録される。
メールの送信
先程追加したユーザーにrootアカウントからメールを送信してみる。
#rootアカウントに変更
$ exit
#testuserにメールを送信(ここのドメインに対応したメールサーバーが呼び出される)
mail ubuntu@seven.asia
# Cc の宛先
Cc:
# 件名
Subject: Test mail
# 本文
This is test mail hoping be observed by you.
# 本文を終了する場合は Ctrl + D キー
testuserのメールサーバー(キュー)に届いているか確かめる。
# testuserにアカウントを変更
$ su - testuser
#メールサーバー(キュー)に届いているか確かめる。
$ mail
# 表示したいメールの番号を入力
? 1
ここで、きちんとrootアカウントから自分で送ったメールが届いていることが確認できていれば、SMTPの実装は完了!!!
POPサーバーの構築(受信する用)
dovecotのインストール
以下の手順で、DovecotをインストールしてPOP/IMAPサーバーを構築します。
$ sudo apt -y install dovecot-core dovecot-pop3d dovecot-imapd
dovecotの設定変更
それぞれの設定項目についてはここをみるとわかる。
設定が一通り終わったら、dovecotをリスタートする。
$ sudo systemctl restart dovecot
メールサーバーから受信できるか確かめる
いよいよtestuser用のメールサーバーからメールが受信できるか確かめる(既にメールサーバーにメールが届いているのは確認済み)。
メールサーバー内から出て、外部から今回作成したメールサーバーにアクセスし、受信できるか確認する。
# メールサーバーから退出
$ exit
# telnetを使って、POP3プロトコルでmxレコードに接続
$ telnet mx.seven.asia 110 #自分の登録したmxレコードのドメインを選択
# ユーザーの選択
$ USER testuser
# パスワードの入力
$ PASS xxxxxxxx
# 受信しているメールの件数とバイト数を通知
$ STAT
# メールの一覧を受取り
$ LIST
# 指定したメッセージ番号のデータを受信
$ RETR 1
これで受信ができていればメールサーバーの構築は完璧です!!
終わりに
普段自分のなんとなく使っているメールのが裏側でこんな風に動いているとは知らなかった。
DNSサーバーにどんどんレコードを追加していき、それに対応したサーバーを構築して、どんどんネットワークに新しい機能を加えていく感じがよくわかり面白かった。