CentOS8でメールサーバ構築 – Dovecotのインストール

今回はメールボックスにアクセス出来るようにDovecotのインストールと設定を行いたいと思います。

この記事で行うこと

  1. Dovecotのインストール
  2. Dovecotの設定
    1. プロトコルの設定
    2. TLS証明書・キーの設定
    3. メールボックスの場所の設定
    4. メールボックスの設定
    5. ユーザ名の設定
    6. 認証メカニズムの設定(Outlook対応用)
    7. Dovecotの起動
    8. ファイアウォールのポート開放
  3. アクセス確認

1. Dovecotのインストール

メールはもう日進月歩というような新しい技術ではないので、Dovecotの公式リポジトリを持ってくるなど、無理してまで最新を追う必要はありません。

大人しく、CentOSで提供しているリポジトリでインストールします。

[root@localhost ~]# dnf install dovecot

2. Dovecotの設定

Dovecotの設定ファイルはCentOS8だと /etc/dovecot/dovecot.conf/etc/dovecot/conf.d に配置されているファイルとなります。

設定ファイルの編集について基本的な事は以下記事を参照してください。

2-1. プロトコルの設定

メールサーバからクライアントにメールを配信するためのプロトコルにはPOP3というプロトコルとIMAPというプロトコルがあります。

POP3はサーバ上にあるそのユーザのメールをコピーしてくるもので、サーバ上にあるメールに触れることは出来ません。

IMAPはサーバ上にあるメールを見に行くもので、フォルダの移動などを行うとサーバ上のメールにも反映されます。

GmailのようなWebメールのような仕組みは基本的にIMAPでないと実現できません。

昨今ではPCで見たり、スマホで見たりとあちこちのデバイスからメールを見られますのでIMAPを使った方が良いかと思います。

なので、今回はIMAPをTLSで暗号化して通信するIMAPSのみを有効にしたいと思います。(ちなみにPOP3をTLSで暗号化するとPOP3Sですし、ご存じの通りHTTPをTLSで暗号化するとHTTPSです。そのまんまですね)

まず、Dovecotの大元の設定でIMAPを有効化します。(ここではTLSの有無は問わず、IMAPを有効にするかの設定です)

/etc/dovecot/dovecot.conf を編集します。

編集する箇所は以下です。「-」は削除する行(変更前)、「+」は追加する行(変更後)となります。

- #protocols = imap pop3 lmtp submission
+ protocols = imap

次に、IMAPで使うポート番号と暗号化(TLS)の有無を設定します。

/etc/dovecot/conf.d/10-master.conf を編集します。

編集する箇所は以下です。「-」は削除する行(変更前)、「+」は追加する行(変更後)となります。記号の記載が無い行は参考までに前後の行を記載しているものです。

  inet_listener imaps {
-    #port = 993
-    #ssl = yes
+    port = 993
+    ssl = yes
  }

ちなみに、このポートは不特定多数がアクセスするようなポートではないので他のポート番号に変更することも可能です。

ただし、その場合は2-7のファイアウォールの設定の代わりとなる設定を各自で行う必要があります。

以下URLを参考にしてください。

2-2. TLS証明書・キーの設定

TLS証明書とキーの場所を設定します。

/etc/dovecot/conf.d/10-ssl.conf を編集します。

編集する箇所は以下です。「-」は削除する行(変更前)、「+」は追加する行(変更後)となります。[]内は自分の環境に合わせて入れてください。

- ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
- ssl_key = </etc/pki/dovecot/private/dovecot.pem
+ ssl_cert = <[証明書のパス]
+ ssl_key = <[証明書の秘密鍵のパス]

なお、Let’s Encryptを初期設定で使っている場合は

証明書のパスは /etc/letsencrypt/live/[証明書の名前]/fullchain.pem

秘密鍵のパスは /etc/letsencrypt/live/[証明書の名前]/privkey.pem

となるはずです。

2-3. メールボックスの場所の設定

ここでメールボックスの形式とメールボックスの場所を設定します。

メールボックスの形式には以下の2種類が存在します。

  • mbox : そのユーザのメールを全てまとめて1つのファイルとして扱う古い形式です。同時に複数のメールを操作できなかったりと今となっては良いところはないですね。
  • Maildir : メール1通ごとに1つのファイルとして扱う形式です。同時に複数のメールを操作できますし、Linux上で見えるフォルダとメールクライアントで見えるフォルダが一致しています。

特段理由が無ければMailDir形式を使いましょう。

メールボックスの場所は良くある設定では ~/Maildir となっています。

~/ はユーザのホームディレクトリを表すので、この設定だと各ユーザのホームディレクトリ直下にMaildirというディレクトリを作成しその下にメールを保管することになります。

他にも例えば /mail/ ディレクトリにMaildir形式でユーザ別のフォルダを作成してまとめて管理したいという場合は maildir:/mail/%u/ と設定することで実現できます。

編集するファイルは /etc/dovecot/conf.d/10-mail.conf です。

編集する箇所は以下となります。「-」は削除する行(変更前)、「+」は追加する行(変更後)となります。[]内は自分の環境に合わせて入れてください。

- #mail_location =
+ mail_location = [メールボックスの場所]

なお、もし ~/Maildir 以外に設定する場合は、SELinuxのコンテキスト設定を変えておきましょう。

メール用のSELinuxコンテキストは mail_spool_t です。

[root@localhost ~]# semanage fcontext -a -t mail_spool_t '/[メールボックスの場所](/.*)?'
[root@localhost ~]# restorecon -R [メールボックスの場所]

さらに、メールボックスの場所に各ユーザ毎にフォルダを作成してユーザに所有権を設定しましょう。

[root@localhost ~]# mkdir /[ユーザ毎のメールボックスの場所]/
[root@localhost ~]# chown [ユーザ名]:mail /[ユーザ毎のメールボックスの場所]

2-4. メールボックスの設定

メールのフォルダが作成されるのは、初めてクライアントでアクセスしたときとなります。

このとき、「送信メール」や「ゴミ箱」といったシステムで使われるフォルダも作成されます。

この時メールサーバ側から指定をしておかないと初めてサーバにアクセスしたメールクライアントによって作成されるシステムフォルダの名称が変わってしまいます。

このため、よく使われるメールフォルダのフォルダ名を指定します。

編集するファイルは /etc/dovecot/conf.d/15-mailboxes.conf です。

編集する箇所は以下となります。「-」は削除する行(変更前)、「+」は追加する行(変更後)となります。

  # These mailboxes are widely used and could perhaps be created automatically:
  mailbox Drafts {
+   auto = subscribe
    special_use = \Drafts
  }
  mailbox Junk {
+   auto = subscribe
    special_use = \Junk
  }
  mailbox Trash {
+   auto = subscribe
    special_use = \Trash
  }

  # For \Sent mailboxes there are two widely used names. We'll mark both of
  # them as \Sent. User typically deletes one of them if duplicates are created.
  mailbox Sent {
+   auto = subscribe
    special_use = \Sent
  }

+ mailbox Archive {
+   auto = subscribe
+   special_use = \Archive
+ }

- mailbox "Sent Messages" {
-   special_use = \Sent
- }

設定ファイル内にも説明が書かれていますが、 auto = subscribe は自動的にフォルダを作成し購読させる(自動的にメールクライアントの同期対象とさせる)という設定です。

他にも create という作成はさせるがメールクライアントの指定が無ければ購読しない設定や、 no という自動的にフォルダを作成しない設定があります。

special_use は特別なフォルダ(ゴミ箱や送信済みメールなど)として指定するものです。

仮に mailbox hogespecial_use \Trash の設定をすると、大抵のメールクライアント上ではhogeというフォルダがゴミ箱として表示されます。(メールクライアントからはゴミ箱がhogeというフォルダ名であることは気づき辛いはずです)

2-5. 認証時のユーザ名の設定

メールサーバに接続するときに、ドメインを付けたままでもログインできるようにドメイン以下を無視するように設定します。

これによって [ユーザ名] でも [ユーザ名]@[ドメイン] でもログインできるようになります。

また、この設定はメール配送(MDA)でも使うのでログインするときにわざわざドメインまで入力しないという人も設定してください。

編集するファイルは /etc/dovecot/conf.d/10-auth.conf です。

編集する箇所は以下となります。「-」は削除する行(変更前)、「+」は追加する行(変更後)となります。

#auth_username_format = %Lu
auth_username_format = %Ln

2-6. 認証メカニズムとユーザ名の設定(Outlook対応用)

※Outlookを使わない場合は設定不要です。

Outlookはユーザ認証に login という認証方式しか使えませんが、Dovecotの初期設定では plain という認証方式しか使えません。(ちなみにどちらも平文でパスワードをやりとりする認証方式ですが、TLS接続で暗号化されているので問題ありません)

このため、 login も使えるように設定を書き足します。

/etc/dovecot/conf.d/10-auth.conf を編集します。

編集する箇所は以下となります。「-」は削除する行(変更前)、「+」は追加する行(変更後)となります。

- auth_mechanisms = plain
+ auth_mechanisms = plain login

なお、他のサイトの中には設定ファイル冒頭の #disable_plaintext_auth = yes# も外すべきだとするサイトもありますが、この設定は plainlogin 認証を【SSL/TLS接続を使っていない場合にも】有効化する設定です。

今回はTLS接続が常に有効なはずなのでこの設定は不要です。

2-7. Dovecotの起動

起動はいつも通り systemctl を使って行います。

「1. SSHの起動・停止」でsystemctlについて触れています。
[root@localhost ~]# systemctl enable dovecot --now

2-8. ファイアウォールのポート開放

最後にファイアウォールでポートを開放します。

ファイアウォールについてはこの記事を参照してください。
[root@localhost ~]# firewall-cmd --add-service=imaps --permanent

[root@localhost ~]# firewall-cmd --reload

3. アクセス確認

受信サーバにアクセス出来るようになっているかを確認します。

今回はWindows10標準のメールアプリを使って試します。

※同じネットワークにあるクライアントPCから接続を行う場合は別途クライアントPCにhostsなどの設定が必要です。

左下の歯車⇒右サイドバーの「アカウントの管理」の順でクリック
「アカウントの追加」をクリック
開いたダイアログの「詳細設定」をクリック
「インターネットメール」をクリック
必要事項を記入。記入が終わったら「サインイン」をクリック
上部にある更新ボタン(ぐるぐるの矢印)をクリックして、
下に「最新の状態です」という表示が出たら接続成功
設定に問題があるとアカウント名の隣に「!」マークがついたり警告が出る

まとめ

今回はメールボックスにアクセス出来るように設定を行いました。

とはいえ、まだメールの送信も受信も出来ない状態です。

次回はひとまずメールの受信が行えるように設定をしたいと思います。

2021/01/07 追記:メールボックスの設定を2-4に挿入しました。それに伴い一部の項番が変更されています。

コメントを残す

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