Linux/dovecotのインストール

dovecot のソースからのビルド(2016-11-26)


(※ここにある情報は古いです。CentOS Stream8での手順 を別途メモしています)



はじめに

dovecot は メール受信機能を実装するためのパッケージです。
送信サーバについては、別途 postfix で実装します。

以下に絡む話は、 postfix の方 で説明しています。

  • メールの設定はファイル(mbox)ではなくディレクトリを使用
  • /var/mail/spool のパーミッション変更
  • useradd 時に メールファイル を作成させないように /etc/default/useradd を変える など

既存のdovecotの確認

まず、入っているかどうかの確認から。 既存のバージョンで満足するならば、yum install 等でよろしいかと。

# dovecot --version
# yum info dovecot

新たにソースからビルドしたい場合は、パッケージの方は一旦削りましょう。
要るファイルがあれば先に退避すること。
(/etc/dovecot とか、/etc/init.d/dovecot とか)

# yum remove dovecot

srcのダウンロード

Dovecotのサイト で適当なURLを探してダウンロード。

# cd 任意のディレクトリ
# wget http://www.dovecot.org/releases/2.2/dovecot-2.2.26.0.tar.gz

必要ならば、鍵の検証もやっておくこと

# vi ~/.gnupg/gpg.conf
  (で、keyserver-options auto-key-retrieve のコメントを外しておく)
# wget http://www.dovecot.org/releases/2.2/dovecot-2.2.26.0.tar.gz.sig
# gpg --verify dovecot-2.2.26.0.tar.gz.sig

特に問題なければ、ファイルを展開、makeまで行う。
以下の例では sysconfidir と localstatedri を指定しましたが、お好みで。

# tar zxvf dovecot-2.2.26.0.tar.gz
# cd dovecot-2.2.26.0/
# ./configure  --sysconfdir=/etc --localstatedir=/var
(デフォルトは /usr/local 配下にインストールされるので、
 オプションはお好みで。 ./configure --help 参照)
# make
# make install
(上記では sysconfdir=/etc にしているので、/etc/dovecot にコピー)
# cp -pri /usr/local/share/doc/dovecot/example-config/* /etc/dovecot/

yum installだと 専用のユーザ、dovecot と dovenull も作ってくれそうですが(忘れました)、
今回は自分で作らないといけません。
dovecotのユーザid は、私の環境 CentOS 7 だと /usr/share/doc/setup-*/uidgid に dovecot(=97) が載っていました。

# useradd -u 97 -d /usr/libexec/dovecot -s /sbin/nologin dovecot
# useradd -d /dev/null -s /sbin/nologin dovenull

以下、 /var/run は configure で指定した場所に読み替えてください。 (指定しなかった場合は、 /usr/local/dovecot/var かと)

# mkdir -p /var/run/dovecot/{login,empty}
# chown -R root:dovecot /var/run/dovecot
# chown root:dovenull /var/run/dovecot/login
# chmod 750 -R /var/run/dovecot/login

さらに、(CentOS 7より)
/var/run配下 を自力で作った場合は、reboot時に消されないようにします。

# vi /etc/tmpfiles.d/dovecot.conf
d /var/run/dovecot 0775 root dovecot -
d /var/run/dovecot/empty 0775 root dovecot -
d /var/run/dovecot/login 0775 root dovenull -

(消されないように、なら d では無くて x が正解かもしれませんが。
 詳細は「man tmpfiles.d」を参照)

あとは、退避したファイルがあれば戻して、

/etc/init.d/dovecot を作ってから chkconfig --add dovecot します。*1
サンプルは wiki2.dovecot.org にあります。
make時にPATHを変更している場合は、更新すること。

サンプルの頭に、こんなかんじで追記。chkconfig の値を環境に合わせて変える事。
#!/bin/sh
#
# Starts the dovecot daemon
#
# chkconfig: 2345 65 35
# description: Dovecot Imap Server
# processname: dovecot
# config: /etc/dovecot.conf
(以下はサンプルをそのままコピペ)

# chmod 755 /etc/init.d/dovecot
# chkconfig --add dovecot

設定

※注意:この段階では、インターネット接続なのにSSL認証を使っていません。
 (暗号化していないから盗聴できるし、外からの防御も甘い)
 各環境に合わせて読み替えて設定すること。

confを設定していきます。ちなみに、dovecot.conf には、こう書いてありますね。

# If you're in a hurry, see http://wiki2.dovecot.org/QuickConfiguration

/etc/dovecot/ で、取り急ぎ変えたのはこんな感じ。

# vi dovecot.conf
protocols = imap pop3    # コメントを外す
# vi 10-logging.conf
log_path = /var/log/dovecot.log
auth_verbose = yes              # 認証失敗の記録を見る場合。
auth_verbose_passwords = plain  # 失敗passを表示。暗号化したければsha1など。
# vi 10-mail.conf
mail_location = maildir:/var/spool/mail/%u   # postfixに合わせること
# vi 10-master.conf

 inet_listener imap {
   port = 143   # コメント外す
 }
 
 inet_listener pop3 {
   port = 110   # コメント外す
 }
# vi 10-ssl.conf
ssl = no  # yes にするのは後日
#ssl_cert = </etc/ssl/certs/dovecot.pem  # コメントアウト
#ssl_key = </etc/ssl/private/dovecot.pem # コメントアウト
# vi 10-auth.conf
disable_plaintext_auth = no  # 一時的にOKにする
# vi auth-system.conf.ext
#driver = pam     # コメントアウト。pam の方がベターらしいですが・・・
driver = shadow   # 私は手抜きで shadow を使います。pam は後日・・・

※shadow ではなく、PAM認証を使う場合は
wiki2.dovecot.org/PasswordDatabase/PAM に実装例があります。

一通り終わったら、設定内容をチェックします。
デフォルトから変更されている箇所を出力しています。*2

# doveconf -n

chkconfig で add しているので、起動は service から

# service dovecot start

で、tail -f /var/log/dovecot などを見ながら、外のアドレスにメールを投げられるか確認。
今回の設定はインターネット接続が前提なので、確認できたら安全のためにすぐに stop します。
また、この時点ではパスワードが平文で飛ぶことになるので、テスト用のユーザを作ってます。*3

# useradd  -d /dev/null -s /sbin/nologin testuser
# passwd testuser  # 検証用のパスワードを作りましょう
# echo "test mail for dovecot" | mail testuser@localhost
 (メールソフトで、POP3から受信してみる)

・・・繋がらない! どうやら、CentOS7 にしたら firewall でデフォルト止められていた模様。

# firewall-cmd --list-all-zones
(で、通らないことを確認)
# firewall-cmd --get-services
(そもそもpop3 なんて扱っていない。pop3sはある。)

一時的に firewall を止めて、再実行し、受信できることを確認・・・

# systemctl status firewalld
# systemctl stop firewalld

後始末

# systemctl start firewalld
# userdel testuser
# service dovecot stop

あとはログのローテーション。wiki2.dovecot.orgを参考に。

# vi /etc/logrotate.d/dovecot
/var/log/dovecot*.log {
 weekly
 rotate 4
 missingok
 notifempty
 compress
 delaycompress
 sharedscripts
 postrotate
   doveadm log reopen
 endscript
}

まずは、こんなところでしょうか。
これを踏まえて、

へと続きます。


*1 私の環境は CentOS 7なので、 systemd で起動すべきかもしれませんが。
*2 ちなみにdovenullが居ないことに気づいたのはこのコマンドでした:doveconf: Error: default_login_user doesn't exist: dovenull
*3 メールspoolをファイルではなくディレクトリ指定した場合は、 /etc/default/useradd のCREATE_MAIL_SPOOL=no を先にやる事。また、メールしか使わないユーザならば useradd の時に /sbin/nologin にしておきましょう。実行例を参照。