Azure で Dovecot をインストール、telnet  でメールを読む

「Azure で postfix のインストールを試す」
https://qiita.com/nanbuwks/items/38b54aaf8c3ecfdbb3cc

では postfix をインストールしましたが、あくまでローカルサーバ内でのメール操作を行っていました。

次に、MRA として Dovecot をインストールし、手元の PC でメールを読めるようにします。
Ubuntu の Dovecot パッケージは基本パッケージに加え、 POP3  設定や IMAP 設定などには専用の追加パッケージをインストールする仕組みになっています。

PCでメールサーバに溜まっているメールを読むには、メールクライアントソフトを使います。それは MUA という分類のソフトウェアとなります。

今回は MUA としてよく使われる Outlook や Thunderbird などではなく、 telnet を MUA場合 として使いプレーンテキストでメールを読んでみます。

# 環境

- クラウドサーバ Ubuntu 22.04 LTS
「Azure で最初のクラウドサーバを無料枠で作成する」
https://qiita.com/nanbuwks/items/120858191caf3b0a3f1c
で作成したものです
- MTA として Postfix 
- クライアントPC Ubuntu 22.04 LTS
telnet さえ使えれば良いので、WindowsやMacでも同様に操作できます。


# Dovecot インストール

```
$ sudo apt install dovecot-core dovecot-pop3d
```

# ACL を操作して TCP 110番ポートでの受信が行えるようにする

Azure 画面より、受信ポートに110を加えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/08ab93c2-db9a-df7c-8d35-5695ecb88a03.png)


手元の PC で、telnet で110番ポート経由で Dovecot にアクセスできることを確認します。

:::note info
なお、example.com でアクセスするために、
「Azure/Ubuntu/Apache2 で PHP と VirtulaHost を設定する」
https://qiita.com/nanbuwks/items/d3a1a148e597f5c5df1c
で行った、 /etc/hosts に example.com を追加した設定をそのまま活かしています。
:::
```
$ telnet example.com 110
Trying 123.456.789.123...
Connected to example.com.
Escape character is '^]'.
+OK Dovecot (Ubuntu) ready.
USER example
-ERR [AUTH] Plaintext authentication disallowed on non-secure (SSL/TLS) connections.
QUIT
+OK Logging out
Connection closed by foreign host.
```

まだ認証ができないので、そのまま QUIT します。


# プレーンテキストでの認証を許可する

 telnet アクセスだと通信内容が傍受可能です。パスワードのやりとりも丸見えになります。それだとセキュリティ的に問題があるので、現在の状態では Dovecot でそれが行えないようになっています。
パスワードをプレーンテキストでやり取りする設定に変更してしまうと、 telnet でそのままパスワードを打ち込んで認証ができるようになります。

`/etc/dovecot/conf.d/10-auth.conf` を書き換えます。

冒頭
```
##
## Authentication processes
##

# Disable LOGIN command and all other plaintext authentications unless
# SSL/TLS is used (LOGINDISABLED capability). Note that if the remote IP
# matches the local IP (ie. you're connecting from the same computer), the
# connection is considered secure and plaintext authentication is allowed.
# See also ssl=required setting.
#disable_plaintext_auth = yes
```
↓
```
##
## Authentication processes
##

# Disable LOGIN command and all other plaintext authentications unless
# SSL/TLS is used (LOGINDISABLED capability). Note that if the remote IP
# matches the local IP (ie. you're connecting from the same computer), the
# connection is considered secure and plaintext authentication is allowed.
# See also ssl=required setting.
disable_plaintext_auth = no
```

として、以下のようにして反映します。

```
$ sudo systemctl restart dovecot
```

# telnet によるメール取得

手元の PC で、
```
$ telnet example.com 110
Trying 123.456.789.123 ...
Connected to example.com.
Escape character is '^]'.
+OK Dovecot (Ubuntu) ready.
USER example
+OK
PASS hogehogefugafuga
+OK Logged in.
LIST
+OK 0 messages:
.
QUIT
+OK Logging out.
Connection closed by foreign host.
```

hogehogefugafuga は example に設定しているパスワードです。
LIST しても メッセージが無かったので、Azureサーバ上で以下のようにして example にメールを送ります。

```
azureuser@test-azure-gen:~$ echo "Hello Dovecot" | sendmail example
```

再度手元のPCから読んでみます。
```
$ telnet example.com 110
Trying 20.125.147.200...
Connected to example.com.
Escape character is '^]'.
+OK Dovecot (Ubuntu) ready.
USER example
+OK
PASS Cab6402!
+OK Logged in.
LIST
+OK 1 messages:
1 644
.
RETR 1
+OK 644 octets
Return-Path: <azureuser@test-azure-gen.d5vkxbztwwse1dua0e2ybepgyg.phxx.internal.cloudapp.net>
X-Original-To: example
Delivered-To: example@test-azure-gen.d5vkxbztwwse1dua0e2ybepgyg.phxx.internal.cloudapp.net
Received: by test-azure-gen.d5vkxbztwwse1dua0e2ybepgyg.phxx.internal.cloudapp.net (Postfix, from userid 1000)
	id 646BD3F9B3; Sun,  9 Apr 2023 05:36:36 +0000 (UTC)
Message-Id: <20230409053636.646BD3F9B3@test-azure-gen.d5vkxbztwwse1dua0e2ybepgyg.phxx.internal.cloudapp.net>
Date: Sun,  9 Apr 2023 05:36:36 +0000 (UTC)
From: Ubuntu <azureuser@test-azure-gen.d5vkxbztwwse1dua0e2ybepgyg.phxx.internal.cloudapp.net>

Hello Dovecot
.
QUIT
+OK Logging out.
Connection closed by foreign host.
```
うまくいきました。