CentOS8で構築する自宅サーバ:mailサーバの構築 その3 dovecotのインストールと設定

dovecotのインストール

とりあえずdovecotをインストールして、ローカルのメールの送受信ができるか確認してみましょう。

[root@ace ~]# dnf install dovecot dovecot-pigeonhole
メタデータの期限切れの最終確認: 0:18:39 時間前の 2020年05月13日 21時08分28秒 に 実施しました。
依存関係が解決しました。
================================================================================
 パッケージ         Arch   バージョン                           Repo      サイズ
================================================================================
インストール:
 dovecot            x86_64 1:2.2.36-10.el8                      AppStream 4.6 M
 dovecot-pigeonhole x86_64 1:2.2.36-10.el8                      AppStream 435 k
依存関係のインストール:
 clucene-core       x86_64 2.3.3.4-31.20130812.e8e3d20git.el8   AppStream 596 k

トランザクションの概要
================================================================================
インストール  3 パッケージ
:
省略
:
インストール済み:
  dovecot-1:2.2.36-10.el8.x86_64
  dovecot-pigeonhole-1:2.2.36-10.el8.x86_64
  clucene-core-2.3.3.4-31.20130812.e8e3d20git.el8.x86_64

完了しました!
[root@ace ~]#

dovecotとdovecot-pigeonholeの2つのパッケージをインストールします。

dovecot-pigeonholeは、サーバ側でメールの振り分けを行うためのツールです。同じようなものに、procmailがありますが、ちょっと新し目のものを使ってみます。

設定ファイルの編集

[root@ace ~]# cp -p /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.orig
[root@ace ~]# vi /etc/dovecot/conf.d/10-mail.conf
[root@ace ~]#
[root@ace ~]# diff /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.orig
30c30
< mail_location = maildir:~/Maildir
---
> #mail_location =
49c49
<   separator = .
---
>   #separator =
53c53
<   prefix = INBOX.
---
>   #prefix =
[root@ace ~]#

メールの形式をMaildirにしておきます。

また、メールボックスのファイル名を変更していますが、これは、以前使っていたqmail+Courier-IMAPに合わせたためです。これを変更すると、移行が大変なのでそのままです。普通は初期値で問題ないのかな?

Maildir内のフォルダの名前はimapの中で一番頭を悩ませます。リンクを参考にしてください。

[root@ace ~]# cp -p /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.orig
[root@ace ~]# vi /etc/dovecot/conf.d/10-auth.conf
[root@ace ~]#
[root@ace ~]# diff /etc/dovecot/conf.d/10-auth.conf /etc/dovecot/conf.d/10-auth.conf.orig
100c100
< auth_mechanisms = plain login
---
> auth_mechanisms = plain
[root@ace ~]#

auth_mechanismsloginを追加しました。平文でも認証時はsslをかけているので、安全です。

[root@ace ~]# cp -p /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/10-ssl.c
onf.orig
[root@ace ~]# vi /etc/dovecot/conf.d/10-ssl.conf
[root@ace ~]#
[root@ace ~]# diff /etc/dovecot/conf.d/10-ssl.conf /etc/dovecot/conf.d/10-ssl.conf.orig
14,15c14,15
< ssl_cert = </etc/letsencrypt/live/zeke.ne.jp/fullchain.pem
< ssl_key = </etc/letsencrypt/live/zeke.ne.jp/privkey.pem
---
> ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
> ssl_key = </etc/pki/dovecot/private/dovecot.pem
[root@ace ~]#

Let’s Encryptから取ってきた証明書をしています。ワイルドカード証明書なので、どんな名前でも使いまわしが効きます。

[root@ace ~]# cp -p /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.orig
[root@ace ~]# vi /etc/dovecot/conf.d/10-master.conf
[root@ace ~]#
[root@ace ~]# diff /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.orig
96,100c96,98
<   unix_listener /var/spool/postfix/private/auth {
<     mode = 0666
<     user = postfix
<     group = postfix
<   }
---
>   #unix_listener /var/spool/postfix/private/auth {
>   #  mode = 0666
>   #}
[root@ace ~]#

postfixに認証情報を渡すためのリスナーを開いておきます。

[root@ace zeke]# cp -p /etc/dovecot/conf.d/20-imap.conf /etc/dovecot/conf.d/20-imap.conf.orig
[root@ace zeke]# vi /etc/dovecot/conf.d/20-imap.conf
[root@ace zeke]# diff /etc/dovecot/conf.d/20-imap.conf /etc/dovecot/conf.d/20-imap.conf.orig
92,97d91
<
<   namespace inbox {
<     mailbox Trash {
<       autoexpunge = 180d
<     }
<   }
[root@ace zeke]#

protocol imap内に、180日を過ぎたゴミ箱のメールを削除する定義を追記します。

[root@ace ~]# cp -p /etc/dovecot/conf.d/15-lda.conf /etc/dovecot/conf.d/15-lda.conf.orig
[root@ace ~]# vi /etc/dovecot/conf.d/15-lda.conf
[root@ace ~]#
[root@ace ~]# diff /etc/dovecot/conf.d/15-lda.conf /etc/dovecot/conf.d/15-lda.conf.orig
11c11
< hostname = mail
---
> #hostname =
47c47
<   mail_plugins = $mail_plugins sieve
---
>   #mail_plugins = $mail_plugins
[root@ace ~]#

メールのローカル配送の設定です。ローカル配送時に振り分けできるようにsieveプラグインを追加します。

[root@ace ~]# cp -p /etc/dovecot/conf.d/20-managesieve.conf /etc/dovecot/conf.d/20-managesieve.conf.orig
[root@ace ~]# vi /etc/dovecot/conf.d/20-managesieve.conf
[root@ace ~]#
[root@ace ~]# diff /etc/dovecot/conf.d/20-managesieve.conf /etc/dovecot/conf.d/20-managesieve.conf.orig
6c6
< protocols = $protocols sieve
---
> #protocols = $protocols sieve
[root@ace ~]#

managesieveを有効にするために、コメントを外します。

[root@ace ~]# cp -p /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.orig
[root@ace ~]# vi /etc/dovecot/dovecot.conf
[root@ace ~]#
[root@ace ~]# diff /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.orig
24c24
< protocols = imap pop3
---
> #protocols = imap pop3 lmtp
[root@ace ~]#

プロトコルはimapとpop3だけに変更します。

メールボックスの作成など

[root@ace ~]# ls -al /etc/skel/
合計 24
drwxr-xr-x  2 root root   62  2月 14 21:11 .
drwxr-xr-x 86 root root 8192  5月 13 21:27 ..
-rw-r--r--  1 root root   18 11月  9  2019 .bash_logout
-rw-r--r--  1 root root  141 11月  9  2019 .bash_profile
-rw-r--r--  1 root root  312 11月  9  2019 .bashrc
[root@ace ~]# mkdir -p /etc/skel/Maildir/{new,cur,tmp}
[root@ace ~]# chmod -R 700 /etc/skel/Maildir/
[root@ace ~]# ls -al /etc/skel/Maildir/
合計 0
drwx------ 5 root root 39  5月 13 22:38 .
drwxr-xr-x 3 root root 77  5月 13 22:38 ..
drwx------ 2 root root  6  5月 13 22:38 cur
drwx------ 2 root root  6  5月 13 22:38 new
drwx------ 2 root root  6  5月 13 22:38 tmp
[root@ace ~]#
[root@ace ~]# mkdir -p /home/zeke/Maildir/{new,cur,tmp}
[root@ace ~]# chown -R zeke:zeke /home/zeke/Maildir/
[root@ace ~]# chmod 700 -R /home/zeke/Maildir/
[root@ace ~]# ls -al /home/zeke/Maildir/
合計 0
drwx------  5 zeke zeke  39  5月 13 22:39 .
drwxrwxr-x 11 zeke zeke 228  5月 13 22:39 ..
drwx------  2 zeke zeke   6  5月 13 22:39 cur
drwx------  2 zeke zeke   6  5月 13 22:39 new
drwx------  2 zeke zeke   6  5月 13 22:39 tmp
[root@ace ~]#

新規ユーザ作成のために/etc/skel内にメールボックスを作っておきます。

また。既存ユーザにもメールボックスを作成。

[root@ace ~]# cp -p /etc/aliases /etc/aliases.orig
[root@ace ~]# vi /etc/aliases
[root@ace ~]# diff /etc/aliases /etc/aliases.orig
96c96
< root:         zeke
---
> #root:                marc
[root@ace ~]# newaliases
[root@ace ~]#

またroot宛のメールは既存ユーザに転送するようにailiasを変更です。

起動と動作確認

[root@ace ~]# systemctl status dovecot
● dovecot.service - Dovecot IMAP/POP3 email server
   Loaded: loaded (/usr/lib/systemd/system/dovecot.service; disabled; vendor pr>
   Active: inactive (dead)
     Docs: man:dovecot(1)
           http://wiki2.dovecot.org/
[root@ace ~]# systemctl start dovecot
[root@ace ~]# systemctl status dovecot
● dovecot.service - Dovecot IMAP/POP3 email server
   Loaded: loaded (/usr/lib/systemd/system/dovecot.service; disabled; vendor pr>
   Active: active (running) since Thu 2020-05-14 00:22:39 JST; 2s ago
     Docs: man:dovecot(1)
           http://wiki2.dovecot.org/
  Process: 7107 ExecStart=/usr/sbin/dovecot (code=exited, status=0/SUCCESS)
  Process: 7098 ExecStartPre=/usr/libexec/dovecot/prestartscript (code=exited, >
 Main PID: 7109 (dovecot)
    Tasks: 4 (limit: 12535)
   Memory: 5.1M
   CGroup: /system.slice/dovecot.service
           tq7109 /usr/sbin/dovecot
           tq7110 dovecot/anvil
           tq7111 dovecot/log
           mq7113 dovecot/config

 5月 14 00:22:39 ace.lo.zeke.ne.jp systemd[1]: Starting Dovecot IMAP/POP3 email>
 5月 14 00:22:39 ace.lo.zeke.ne.jp dovecot[7107]: Warning: Corrected permission>
 5月 14 00:22:39 ace.lo.zeke.ne.jp dovecot[7107]: master: Warning: Corrected pe>
 5月 14 00:22:39 ace.lo.zeke.ne.jp dovecot[7109]: master: Dovecot v2.2.36 (1f10>
 5月 14 00:22:39 ace.lo.zeke.ne.jp systemd[1]: Started Dovecot IMAP/POP3 email >
[root@ace ~]# systemctl enable dovecot
Created symlink /etc/systemd/system/multi-user.target.wants/dovecot.service → /usr/lib/systemd/system/dovecot.service.
[root@ace ~]#

とりあえず起動してみます。うん、うまく動いているようですね。

[root@ace ~]# telnet localhost 25
Trying ::1…
Connected to localhost.
Escape character is '^]'.
220 mail.zeke.ne.jp ESMTP Postfix
HELO foo.or.jp
250 mail.zeke.ne.jp
MAIL FROM: user@foo.or.jp
250 2.1.0 Ok
RCPT TO: zeke@zeke.ne.jp
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
test
mail

.
250 2.0.0 Ok: queued as 2C5BB204195A4
QUIT
221 2.0.0 Bye
Connection closed by foreign host.
[root@ace ~]#

こんな感じでテストします。赤字が入力した文字です。

[root@ace ~]# ls -al /home/zeke/Maildir/new/
合計 4
drwx------ 2 zeke zeke  67  5月 14 00:24  .
drwx------ 5 zeke zeke 177  5月 14 00:24  ..
-rw------- 1 zeke zeke 391  5月 14 00:24 '1589383493.M966044P7146.ace.lo.zeke.ne.jp,S=391,W=403'
[root@ace ~]# cat /home/zeke/Maildir/new/1589383493.M966044P7146.ace.lo.zeke.ne.jp\,S\=391\,W\=403
Return-Path: <user@foo.or.jp>
X-Original-To: zeke@zeke.ne.jp
Delivered-To: zeke@zeke.ne.jp
Received: from foo.or.jp (unknown [IPv6:::1])
        by mail.zeke.ne.jp (Postfix) with SMTP id 2C5BB204195A4
        for <zeke@zeke.ne.jp>; Thu, 14 May 2020 00:24:25 +0900 (JST)
Message-Id: <20200513152438.2C5BB204195A4@mail.zeke.ne.jp>
Date: Thu, 14 May 2020 00:24:25 +0900 (JST)
From: user@foo.or.jp

test
mail
[root@ace ~]#
[root@ace ~]# cat /var/log/maillog
:
省略
:
May 14 00:22:39 ace dovecot[7109]: master: Dovecot v2.2.36 (1f10bfa63) starting up for imap, pop3, sieve
May 14 00:24:08 ace postfix/smtpd[7141]: connect from unknown[::1]
May 14 00:24:38 ace postfix/smtpd[7141]: 2C5BB204195A4: client=unknown[::1]
May 14 00:24:53 ace postfix/cleanup[7144]: 2C5BB204195A4: message-id=<20200513152438.2C5BB204195A4@mail.zeke.ne.jp>
May 14 00:24:53 ace postfix/qmgr[1101]: 2C5BB204195A4: from=<user@foo.or.jp>, size=309, nrcpt=1 (queue active)
May 14 00:24:53 ace dovecot[7146]: lda(zeke): msgid=<20200513152438.2C5BB204195A4@mail.zeke.ne.jp>: saved mail to INBOX
May 14 00:24:53 ace postfix/local[7145]: 2C5BB204195A4: to=<zeke@zeke.ne.jp>, relay=local, delay=28, delays=28/0.01/0/0.03, dsn=2.0.0, status=sent (delivered to command: /usr/libexec/dovecot/deliver -f "$SENDER" -a "$RECIPIENT")
May 14 00:24:53 ace postfix/qmgr[1101]: 2C5BB204195A4: removed
May 14 00:24:58 ace postfix/smtpd[7141]: disconnect from unknown[::1] helo=1 mail=1 rcpt=1 data=1 quit=1 commands=5
[root@ace ~]#

結果を確認すると、ちゃんとローカルに配送されていますね。

VirtualBoxのテスト用WindowsXP環境で、動作確認です。新しいサーバに接続できるように環境を設定してから、メールソフトThunderbirdで、新しいアカウントを追加します。

サーバ設定で、サーバディレクトリを適当に設定すると、

先程送信したメールが読めました!

メールソフトを使って、自分自身に出してみて、ちゃんと届いたことを確認します。

サーバサイドのメール振り分け

メールの振り分けの確認です。

ThunderbirdにSieveプラグインをインストールして、適当にフィルタ定義を作成します。

ここでは、自分宛てのメールは、testフォルダに振り分けるように定義しました。

で、自分宛てにメールを出して、testフォルダに振り分けられることを確認しました。

いままで、サーバにログインして、振り分け定義をviでシコシコ書いていたのを、メールソフトのプラグインでできるようになったのが良いですね。

[root@ace zeke]# cat /home/zeke/.dovecot.sieve
#
# 2020-5-14
#
require ["fileinto","envelope","imap4flags"];
if address :contains "To" "zeke" {
        fileinto "INBOX.test";
}[root@ace zeke]#

定義はこのようにサーバ側に保存されます。

こちらのリンクも参考にしてみてください。

Firewallの設定

[root@ace zeke]# firewall-cmd --list-all-zones
:
省略
:
japan (active)
  target: default
  icmp-block-inversion: no
  interfaces:
  sources: ::/0 ipset:JAPAN
  services: dns ftp irc smtp smtp-submission smtps ssh
  ports: 5500-5501/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:


public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3
  sources:
  services: dns ftp irc smtp
  ports: 5500-5501/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:


trusted (active)
  target: ACCEPT
  icmp-block-inversion: no
  interfaces:
  sources: 192.168.1.0/24 2001:2c0:cd03:ca00::/64 fe80::/10
  services:
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
:
省略
:
[root@ace zeke]# firewall-cmd --permanent --zone=japan --add-service={pop3,pop3s,imap,imaps}
success
[root@ace zeke]# firewall-cmd --permanent --zone=japan --add-port=4190/tcp
success
[root@ace zeke]# systemctl restart firewalld
[root@ace zeke]# firewall-cmd --list-all-zones
ERROR:dbus.proxies:Introspect error on :1.864:/org/fedoraproject/FirewallD1: dbus.exceptions.DBusException: org.freedesktop.DBus.Error.NoReply: Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken.
:
省略
:
japan (active)
  target: default
  icmp-block-inversion: no
  interfaces:
  sources: ::/0 ipset:JAPAN
  services: dns ftp imap imaps irc pop3 pop3s smtp smtp-submission smtps ssh
  ports: 5500-5501/tcp 4190/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:


public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3
  sources:
  services: dns ftp irc smtp
  ports: 5500-5501/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:


trusted (active)
  target: ACCEPT
  icmp-block-inversion: no
  interfaces:
  sources: 192.168.1.0/24 2001:2c0:cd03:ca00::/64 fe80::/10
  services:
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
:
省略
:
[root@ace zeke]#

firewallの設定を行います。今回は認証するものなので、全て日本国内からのアクセスしか許しません。

4190/tcpはmanagesieveの使うポートになります。

firewalldの調子が悪いので、firewall-cmd --reloadの代わりに、systemctl restart firewalldコマンドで再起動させています。起動にも時間がかかるため、起動し切る前にfirewall-cmd --list-all-zonesを打ったらエラーが出ていますね。

Kindle Unlimited入会で無料で読めます!

コメント