Vagrant + VirtualBox + CentOS 7 + Postfix + Dovecotでメールサーバを構築してメール送信のテストを行う

## 概要

VagrantとVirtual Boxを用いて，CentOS7上にメールサーバを構築する

この手順では以下の3つのことを目的とする

- 仮想マシン(CentOS 7)上でメールの送受信，閲覧ができるメールサーバを構築する
- バーチャルドメインを使用したメールの送受信，閲覧
- メーリングリストを用いたメールの送受信，閲覧

**注意：メールサーバ構築の手順を一通りさらうことを目的にしており，セキュリティについては一切考慮していないため，公開しないでください．**

### 環境

仮想化ツール：Vagrant，Virtual Box
仮想OS：CentOS7

### 使用ソフトウェア

- Postfix (SMTP)
- Dovecot (IMAP)

### 使用するユーザー，ドメイン

テスト用ユーザー

- user1
- user2

テスト用サーバドメイン(mydomain)

- `originaldomain.mail.test`

テスト用バーチャルドメイン

- `virtualdomain.test`

テスト用メーリングリスト

- `listtest`
  - user1@originaldomain.mail.test
  - user2@virtualdomain.test

### 使用コマンド

- vim
- su
- useradd
- passed
- telnet
- chkconfig
- servise
- chmod

------

## 作成手順

### box作成

CentOS7のboxを作成

```
vagrant init centos/7
vagrant up
vagrant ssh
```

------

### 仮想マシン環境設定

vimの導入(必要な場合のみ)

```
su root
yum -y install vim-enhanced
exit
```

------

### SMTP (postfix) の初期設定

起動して，バージョンの確認

```
service postfix start
postconf | grep mail_version
```

自動起動の設定
cf.  [chkconfigまとめ - Qiita](https://qiita.com/shell/items/30031862d91cedf9ceef)

```
chkconfig postfix on
```

バックアップを取る

```
sudo cp /etc/postfix/main.cf /etc/postfix/main.cf.org
```

設定ファイルを編集する

```
sudo vim /etc/postfix/main.cf
```



------

### postfixの設定変更(localテスト用)

設定ファイルを編集する

```
sudo vim /etc/postfix/main.cf
```

各項目を設定変更する
cf. [Postfixの使い方について調べたよ - 新人Webエンジニアの記録。](http://blog.fagai.net/2015/04/09/postfix%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E8%AA%BF%E3%81%B9%E3%81%9F%E3%82%88/)

```shell
#自身のドメイン設定
mydomain = originaldomain.mail.test
myorigin = $mydomain

#ローカルホスト以外からも受け付ける
inet_interfaces = all

#ipv4しか使用しないため
inet_protocols = ipv4

#宛先ドメインに自身のドメインを追加
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

#信頼するネットワークの指定
mynetworks = localhost

#メールボックスの形式設定
home_mailbox = Maildir/
```

postfixの再起動

```
service postfix restart
```

------

### アカウント作成(テスト用)

user1というアカウントを作成する

```bash
sudo useradd user1
sudo useradd user2
```

`/var/spool/mail`の権限編集
(user1，user2が書き込みできるようにする)

```
sudo chmod 777 /var/spool/mail
```

パスワードの設定

```
su root
passwd user1
passwd user2
exit
```

------

## localテストの実施

Telenetを使用してlocalでメールのやり取りができるか確認する．

### telnetのインストール

```
su root
yum -y install telnet
exit
```

ここまで終了 2019/05/13

### テスト

ローカルホストの25番ポートに接続

```
telnet localhost 25
```

`220 localhost.localdomain ESMTP Postfix`を表示されてコマンドに入る
入力

```
helo localhost 
```

正常な出力 `250 localhost.localdomain`

入力:送信元アドレス

```
mail from: user1@originaldomain.mail.test
```

正常な出力 `250 2.1.0 Ok`



入力:宛先アドレス

```
rcpt to: user1@originaldomain.mail.test
```

正常な出力 `250 2.1.5 Ok`

本文入力の開始

```
data
```

メール本文を入力

```
Hello, mail!
this is mail test.
text message
text message
text message
text message
good bye!
```

本文の終了コマンド

```
<改行>.<改行>
```

正常な出力：`250 2.0.0 Ok: queued as ・・・`

入力:telnet終了

```
quit
```

正常な出力：　`221 2.0.0 Bye`

テスト実行後，`/home/user1/new/Maildir`ディレクトリが存在することを確認する．

```
su root
cd /home/user1/new/
ls
```


## IMAPサーバ

POP3, IMAPサーバであるDovecotを導入する
今回はIMAPサーバとして利用する

### IMAPサーバ(Dovecot)のインストール

インストール

```
su root
yum -y install dovecot
exit
```

起動

```
service dovecot start
```

自動起動

```
chkconfig dovecot on
```

### Dovecotの設定変更(仮想マシン内のテスト用)

 `sudo`で`/etc/dovecot/dovecot.conf`を編集

```bash
#使用するプロトコル列挙
protocols = imap pop3 lmtp
```

設定反映のため再起動する

```bash
service dovecot restart
```

### talnetを使ったIMAPサーバのテスト

SMTPのテストで送信したメールをIMAPをしようして閲覧する

```
telnet localhost 143
```

ログイン

```
1 login user1 [password]
```

ホームディレクトリの一覧取得

```
2 list "" *
```

INBOXの中を確認する

```
3 select INBOX
```

メッセージ一覧が表示される

メールを読む

```
4 fetch 1 body[]
```

メッセージ1番の本文が表示される

終了

```
5 logout
```

------

### バーチャルドメイン作成

`mydestination`に新しいドメインを追加する．

(ただし，方法では，`user1@virtualdoamin.test`に送信しても，`user1@originaldomain.mail.test`と同様の場所にポストされる)

`/etc/postfix/main.cf`を編集

```
mydestination = $myhostname, localhost.$mydomain, localhost, originaldomain.mail.test, virtualdomain.test
```

------

### エイリアスの作成

Listtestアカウントに送ると，user1，user2に送るような設定

`/etc/ailiases`を編集

```aliases
# mailing list
listtest: user1@originaldomain.mail.test, user2@virtualdomain.test
```

DBを更新
`sudo newaliases`

------

## 参考サイト

- [閉じられたネットワーク向けのテスト用メールサーバーを構築する - YoshinoriN’s Memento](https://yoshinorin.net/2016/08/07/local-mailserver/#postfix)

- [test.comやaaa.comをテストデータに使うのはやめましょうという話 – 打つか投げるか](https://blog.ko31.com/201304/sample-domain-example/)