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_mechanisms
にlogin
を追加しました。平文でも認証時は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本です!
コメント