「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番ポートでの受信が行えるようにする
手元の PC で、telnet で110番ポート経由で Dovecot にアクセスできることを確認します。
なお、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.
うまくいきました。