DovecotのIMAP/POPテスト環境構築メモ

## DovecotのIMAP/POPテスト環境構築メモ

CentOS6上にDovecotのIMAP/POPのテスト環境を構築した際のメモを残します。

### Dovecotのメールテスト環境目的

本テスト環境の目的は、環境内部からのIMAP/POPコマンドの動作確認、およびdovecotの動作確認です。実用的なIMAP/POPサーバの構築は目的としていません。
以下の動作が確認可能な環境の構築および動作確認を行います。

* IMAPコマンドによるメールボックスへのアクセス。メッセージの取得。
* POPコマンドによるメールボックスへのアクセス。メッセージの取得。

本エントリでは、以下で構築したOSX上のCentOS6に構築します。
https://qiita.com/keikmobile/items/2c1cec8b875387a83a71
SElinuxは無効とすることを前提としています。

また、以下エントリで構築したpostfixで受信したメールをIMAP/POPで取得します。
https://qiita.com/keikmobile/items/2440ecebdd02adccc6a1

### DovecotのIMAP/POPテスト環境構築・動作確認方針

上記目的を実現するためのIMAP/POPテスト環境・動作確認の方針を記述します。

#### プロセス構成方針

本IMAP/POPテスト環境は以下のプロセス構成をとる方針とします。

* IMAP/POPサーバはDovecotを使用する。
* POP/IMAPクライアントはtelnetおよびコマンドを使用する。
* Postfix他は、以下のエントリで構築したプロセスを使用する。https://qiita.com/keikmobile/items/2440ecebdd02adccc6a1
* 上記のプロセスは全て同一のCent OS上に構成する。
以下は各コンポーネントのイメージ。(http://plantuml.com/) 

![dovecot_image.png](https://qiita-image-store.s3.amazonaws.com/0/22861/6eb9352f-2c27-a42c-3524-ba942fb08c6a.png)

```
@startuml
[smtp-source,telnet] -right-> [Postfix] : SMTP
[Postfix] -right-> [smtp-sink] : SMTP (Relay)
[Postfix] -down-> [Local user mailbox Maildir format] : (Deliver)
[Local user mailbox Maildir format] -down->[Dovecot]
[telnet] -right-> [Dovecot] :POP/IMAP
@enduml
```

#### Dovecot設定値構成方針

Dovecotの振る舞いを設定する設定値は以下の方針で決定します。

* メールボックスの形式は、Maildir(qmail)形式とする。
* ユーザデータベースはpasswd-file形式とする。

#### 動作確認方針

本テスト環境の動作確認は以下の方針で実施します。

* IMAPサーバの動作の確認を行う。以下の確認観点で行う。
 * IMAPクライアントはtelnetコマンドを利用する。
 * IMAPクライアントへの応答
 * Dovecotのログ(/var/log/maillog)
* POPサーバの動作の確認を行う。以下の確認観点で行う。
 * POPクライアントはtelnetコマンドを利用する。
 * POPクライアントへの応答
 * Dovecotのログ(/var/log/maillog)

### Dovecotのメールテスト環境構築手順

#### Dovecotのインストール

yumでdovecotをインストールし、rpmでインストールされたことを確認します。
chkconfigで起動設定を有効化します。
メールの送信確認で使用するtelnetコマンドもインストールします。

```
$ sudo yum -y dovecot　telnet
...
$ rpm -qa | egrep 'dovecot|telnet'
...
$ chkconfig dovecot on
...
```

#### Dovecotの設定

以下を参考ににdovecotの設定を行います。
https://wiki2.dovecot.org/BasicConfiguration

以下のコマンドを実行し、usersファイルを作成します。passwordの箇所は変更を推奨です。

```
$ echo "`whoami`:{PLAIN}password:`id -u`:`id -g`::$HOME"　> users
$ sudo mv users /etc/dovecot/
```

passwd-fileを使用するようにconf.d/10-auth.confを変更します。

```
$ sudo vi /etc/dovecot/conf.d/10-auth.conf 

    # 以下をコメントアウト。
    #!include auth-system.conf.ext

    # 以下のコメントアウトを削除。
    !include auth-passwdfile.conf.ext
```

conf.d/auth-passwdfile.conf.ext の記述を確認します。

```
$ cat /etc/dovecot/conf.d/auth-passwdfile.conf.ext 
...
passdb {
  driver = passwd-file
  args = scheme=CRYPT username_format=%u /etc/dovecot/users
}

userdb {
  driver = passwd-file
  args = username_format=%u /etc/dovecot/users
}
```

以下のコマンドでも同様の結果を得られる事を確認します。

```
$ doveconf -n passdb userdb 
passdb {
  args = scheme=CRYPT username_format=%u /etc/dovecot/users
  driver = passwd-file
}
userdb {
  args = username_format=%u /etc/dovecot/users
  driver = passwd-file
}
```

参考: http://wiki2.dovecot.org/BasicConfiguration

#### dovecotの起動

dovecotを起動します。

```
sudo service dovecot start
```

参考: https://wiki2.dovecot.org/RunningDovecot
参考: https://wiki2.dovecot.org/Logging

### Dovecotのテスト環境動作確認

#### IMAPの確認

telnetコマンドでdovecotのIMAP Portに接続しIMAPコマンドを発行してdovecotの動作確認を行います。

```
$ telnet 127.0.0.1 143
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE STARTTLS AUTH=PLAIN] Dovecot ready.
a login USER PASSWORD # 認証設定で作成したユーザでlogin
a OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS MULTIAPPEND UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS] Logged in
b select INBOX
* FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
* OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft \*)] Flags permitted.
* 0 EXISTS
* 0 RECENT
* OK [UIDVALIDITY 1399824069] UIDs valid
* OK [UIDNEXT 1] Predicted next UID
* OK [HIGHESTMODSEQ 1] Highest
b OK [READ-WRITE] Select completed.
c append INBOX {9}
+ OK
TEST MAIL
* 1 EXISTS
* 1 RECENT
c OK [APPENDUID 1399824069 1] Append completed.
d fetch 1 rfc822
* 1 FETCH (FLAGS (\Seen \Recent) RFC822 {9}
TEST MAIL)
d OK Fetch completed.
e close INBOX
e OK Close completed.
f logout
* BYE Logging out
f OK Logout completed.
Connection closed by foreign host.
$ 
```

"/var/log/maillog"以下に以下の出力が確認可能です。

```
Apr 14 15:57:31 centos601 dovecot: imap-login: Login: user=<vagrant>, method=PLAIN, rip=127.0.0.1, lip=127.0.0.1, mpid=3765, secured
Apr 14 15:58:24 centos601 dovecot: imap(vagrant): Disconnected: Logged out bytes=84/829
```

#### POPの確認

telnetコマンドでdovecotのPOP Portに接続しPOPコマンドを発行してdovecotの動作確認を行います。

```
$ telnet 127.0.0.1 110
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK Dovecot ready.
user USER # 認証設定で作成したユーザでlogin
+OK
pass PASSWORD # 認証設定で作成したユーザでlogin
+OK Logged in.
stat
+OK 1 9
list
+OK 1 messages:
1 9
.
retr 1
+OK 9 octets
TEST MAIL
.
quit
+OK Logging out.
Connection closed by foreign host.
$ 
```

"/var/log/maillog"以下に以下の出力が確認可能です。

```
Apr 14 16:01:05 centos601 dovecot: pop3-login: Login: user=<vagrant>, method=PLAIN, rip=127.0.0.1, lip=127.0.0.1, mpid=3790, secured
Apr 14 16:01:10 centos601 dovecot: pop3(vagrant): Disconnected: Logged out top=0/0, retr=0/0, del=0/1, size=10
```

参考: https://wiki2.dovecot.org/TestInstallation