dovecotでPOP over SSL

サイオステクノロジー技術部 武井です。開発検証のためにメールを受信できる環境が必要になり、dovecotでPOP over SSLしてみました。ちょっとハマったので、ここにその記録を残しておきたいと思います。CentOS7.4を前提にしております。

Postfixのインストール

まず、Postfixのインストールです。(本記事の設定は、開発検証での利用を目的とするため、最低限動くための設定にしています。実運用する際は適宜セキュリティの設定をして下さい。)

まずPostfixをインストールします。

# yum install postfix

ここからは、設定ファイル/etc/postfix/main.cfを編集します。

下記の行をコメントアウトして有効にして下さい。MailDir形式を有効にします。

home_mailbox = Maildir/

受信できるメールドメインを設定します。以下の内容を追加して下さい。

mydomain = example.com

全ての送信元からのメールを許可します。

inet_interfaces = all

先に定義したドメインでのメールを受信可能にするため、以下の設定をコメントアウトして有効にします。

mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

Postfixを再起動して、設定を反映します。

# systemctl restart postfix

dovecotのインストール

dovecotをインストールします。

# yum install dovecot

/etc/dovecot/conf.d/10-auth.confを編集します。以下の設定をして、プレインテキスト認証を有効にします。

disable_plaintext_auth = no

/etc/dovecot/conf.d/10-mail.confを編集します。以下の設定をして、Maildir形式での受信を可能にします。

mail_location = maildir:~/Maildir

次にSSL証明書の用意です。

証明書(x.509形式のbase64エンコード)ファイルを以下の形式で作成します。サーバー証明書と、サーバー証明書の検証に使う中間証明書を必要な分だけ、以下の順序で連結して1つのファイルにします。

-----BEGIN CERTIFICATE-----
サーバー証明書の記述内容
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
中間証明書1の記述内容
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
中間証明書2の記述内容
-----END CERTIFICATE-----

次に秘密鍵を以下の形式で作成します。

-----BEGIN RSA PRIVATE KEY-----
秘密鍵の記述内容
-----END RSA PRIVATE KEY----- 

/etc/dovecot/conf.d/10-ssl.confを編集します。以下の設定をして、SSLを有効にします。/etc/pki/certs/dovecot.crtは先程作成した証明書ファイル、/etc/pki/private/dovecot.keyは先程作成した秘密鍵のファイルです。注意が必要なのは指定するパスの頭に「<」が必要なことです。これを忘れて、しばらくエラーで悩まされました(´・ω・`)

ssl = required
ssl_cert = </etc/pki/tls/certs/dovecot.crt
ssl_key = </etc/pki/private/dovecot.key

/etc/dovecot/conf.d/10-master.confを編集します。以下の設定をして、SSLを有効にします。以下の設定を行い、POP over SSLを有効にします。

service pop3-login {
  inet_listener pop3 {
    #port = 110
  }
  inet_listener pop3s {
    port = 995 # これをコメントアウト
    ssl = yes # これをコメントアウト
  }
}

これで設定は完了です。dovecotを再起動します。

# systemctl restart dovecot

動作確認

opensslコマンドを使って動作確認を行います。メールサーバーのホスト名は、mail.example.comとします。

# openssl s_client -connect mail.example.com:995
CONNECTED(00000003)
・・・
・・・
+OK Dovecot ready.
USER ntakei ← ユーザー名を入力します。
+OK
PASS password ← パスワードを入力します。
+OK Logged in.
LIST ← メールの一覧を取得します。
+OK 2 messages:
1 322
2 322
.
retr 1 ← 指定した番号のメールの内容を表示します。
+OK 322 octets
Return-Path: <user@foo.or.jp>
X-Original-To: ntakei@example.com
Delivered-To: ntakei@example.com
Received: from example.com (unknown [10.8.9.6])
    by smtp.example.com (Postfix) with SMTP id E2D6E2411
    for <ntakei@example.com>; Tue,  3 Apr 2018 04:20:45 +0000 (UTC)
From: user@example.com
Subjet: test

Hello world.
.

(`・ω・´)シャキーン

できました。

もう一つハマりどころなのですが、opensslコマンドで動作確認した場合、メールを取り出すコマンド「RETR」が最初うまく動作しませんでした。opensslコマンドの仕様で「R」から始めるコマンドは、SSLのネゴシエーションを行うと決まっているそうです。なので、小文字で「retr」とやると、うまくいきました。(+o+)

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です