ライン

ポイント:Qpopperと置き換えが可能

ライン

 導入

 これまでは、qpopperとdrac を使っていました。pop3やpops、apop認証も利用することができ、特に問題はなかったのですが、Dovecotを使ってみたかったのです。そんなお試しメモ。

 今回ESXi のゲストOSとして、FreeBSD 8.1-RELEASE が動作しているので、ここに導入して試すことにします。
mail/dovecot にportsがありました。
 Makefileを見る限り、オプションしていがありそうです。

# make config 
いろいろできるんでしょうけど、良くわかりません。
デフォルトのままで導入することにしました。
# make install 

 気づいたら、導入終わっていました。
依存して導入されたパッケージはありませんでした。

 /usr/local/etc/rc.d 以下にスクリプトがある。

/etc/rc.conf には、

dovecot_enable="YES"

を追加することでよさそう。

# ./dovecot start
Error: ssl_cert_file: Can't use /etc/ssl/certs/dovecot.pem: No such file or directory
Fatal: Invalid configuration in /usr/local/etc/dovecot.conf
Error: ssl_cert_file: Can't use /etc/ssl/certs/dovecot.pem: No such file or directory
Fatal: Invalid configuration in /usr/local/etc/dovecot.conf
Error: ssl_cert_file: Can't use /etc/ssl/certs/dovecot.pem: No such file or directory
Fatal: Invalid configuration in /usr/local/etc/dovecot.conf
usage: install [-bCcpSsv] [-B suffix] [-f flags] [-g group] [-m mode]
               [-o owner] file1 file2
       install [-bCcpSsv] [-B suffix] [-f flags] [-g group] [-m mode]
               [-o owner] file1 ... fileN directory
       install -d [-v] [-g group] [-m mode] [-o owner] directory ...
install: -m: Invalid argument
./dovecot: WARNING: failed precmd routine for dovecot

のように叱られてしまった。
ssl=no
とsieve関連をコメントにしておいた。
 とりあえず、これでサービスは動くようになった。
Windowsのメールアプリで受信してみたけど、受信できることを確認。
しかし、ログが /var/log/maillog に出力されるのだね。これはうざいな。
これに関する修正は後述予定。

Oct 16 23:15:02 esxi dovecot: pop3-login: Login: user=<foo>, method=PLAIN, rip=192.168.0.101, lip=192.168.0.200
Oct 16 23:15:02 esxi dovecot: POP3(foo): Disconnected: Logged out top=0/0, retr=1/679, del=1/1, size=663

 さて、設定ファイルの有効になっている部分を見ておきます。(デフォルト値で見ています。上記修正は反映してません)

# grep -v "#" dovecot.conf | grep -v '^$'
protocols = imap pop3 imaps pop3s managesieve
disable_plaintext_auth = no
mail_location = mbox:~/mail/:INBOX=/var/mail/%u
mail_privileged_group = mail
dotlock_use_excl = yes
verbose_proctitle = yes
first_valid_uid = 1000
first_valid_gid = 1000
maildir_copy_with_hardlinks = yes
protocol imap {
  imap_client_workarounds = delay-newmail netscape-eoh tb-extra-mailbox-sep
}

protocol pop3 {
  pop3_uidl_format = %08Xu%08Xv
  pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
}
protocol managesieve {
}
protocol lda {
  sendmail_path = /usr/sbin/sendmail
}
auth_username_format = %Lu
auth default {
  mechanisms = plain login
  passdb pam {
    args = session=yes dovecot
  }
  userdb passwd {
    args = blocking=yes
  }
  user = root
  socket listen {
    master {
      path = /var/run/dovecot/auth-master
      mode = 0600
    }
    client {
      path = /var/run/dovecot/auth-client
      mode = 0660
    }
  }
}
dict {
}
plugin {
}

こんな設定になっているのだね。
不要なものもあるけれど、追加すべきものもありそうです。

 ちなみに、専用のユーザ等は加わっているようで、

dovecot:*:143:143::0:0:Dovecot User:/var/empty:/usr/sbin/nologin

というIDが加わっていました。

# ps -axj | grep dovecot
root    18214 18213 18213 18213    0 S     ??    0:00.01 dovecot-auth
root    18215 18213 18213 18213    0 I     ??    0:00.01 dovecot-auth -w
dovecot 18216 18213 18213 18213    0 I     ??    0:00.01 pop3-login
dovecot 18217 18213 18213 18213    0 I     ??    0:00.01 pop3-login
dovecot 18218 18213 18213 18213    0 I     ??    0:00.01 pop3-login

こんな感じで動作しているようです。

 設定ファイルの修正

 Dovecotの通常設定だけで結構手間がかかりそうな予感。
ただし、設定ファイルがばらけていないことと、サンプルの記述が多いので、使い回しがききそうな感じ。

●ログ関連

 まず、ログファイルの出力先の変更を記述することに。

##
## Logging
##

# Log file to use for error messages, instead of sending them to syslog.
# /dev/stderr can be used to log into stderr.
#log_path =
log_path = /var/log/dovecot.log

# Log file to use for informational and debug messages.
# Default is the same as log_path.
#info_log_path =

# Prefix for each line written to log file. % codes are in strftime(3)
# format.
#log_timestamp = "%b %d %H:%M:%S "

# Syslog facility to use if you're logging to syslog. Usually if you don't
# want to use "mail", you'll use local0..local7. Also other standard
# facilities are supported.
#syslog_facility = mail

1行を追加しました。ファシリティの指定で逃げても良かったけど。
dovecot をrestartとして、正しくそっちにログが出力されたことを確認。

 ついでなので、/etc/newsyslog.conf に2行追加。

/var/log/dovecot.log                     600  6     100  $M1D0 JC /var/run/dovecot/master.pid 30
/var/log/dovecot_info.log                600  6     100  $M1D0 JC /var/run/dovecot/master.pid 30

これでログは終わり。

●プロトコル

 APOPの指定は、デフォルトではダメっぽいので後回し。 ※ (mechanisms)の部分にはあるっぽい
imap関連は今回は入れる予定がないので、削除。
managesieveは何ができるかを把握していないので、現時点削除の方針。
フォルダの振り分けとかに使うっぽいので、今回はオプションで指定しないのが良かったかも。

# Protocols we want to be serving: imap imaps pop3 pop3s managesieve
# If you only want to use dovecot-auth, you can set this to "none".
protocols = pop3 pop3s

APOPは使えなくても、POPsは入れておきたいので、こっちは後で設定してみるつもり。
※指定だけしてみると "auth(default): Fatal: APOP mechanism can't be supported with given passdbs" とかいわれるので、パスワードファイルの作成するだけでいけそうな気がしてきた

●(追加)APOP

 protocols = pop3 pop3s apop

  passdb passwd-file {
    # File contains a list of usernames, one per line
    #args = /usr/local/etc/dovecot.deny
    #deny = yes
    args = /usr/local/etc/dovecot.apop
  }

のように、passdbの記述を追加します。
同ファイルに、IDとパスワードをコロン区切りで記述。
dovecotのrestart後に実際にテスト。

+OK Dovecot ready. <499.3.4cba7ec2.Ft6fD/HLFaD8mRKrWWq6sg==@esxi.fkimura.com>
APOP foo *****
-ERR Authentication failed.

エラーになってしまいました。よく見てみると、なるほど。ID:{PLAIN}PASSWORD のように {PLAIN} を挟んで記述するのか。

foo:{PLAIN}passwordtest

パスワードが可視できるというのは、やっぱりこれは気持ちが悪いものですね。
ファイルのパーミッションを変更しておくのは当然としても…。
Becky!などでは、CRAM-MD5なども対応していますが、EdMaxなどではこれがありませんので…。

 この後記述する、POP before SMTPは、POP認証後に一定時間を認証なしにSMTPを許可する設定です。
POPのパスワードがプレーンで流れてしまうのはセキュリティ上悲しいのです。
 どっちにしても、Outlook Expressなどを使う限りにおいてはAPOPさえも使えないので、プレーンは続くのだけれど。
そこで、どっちにも使えそうなPOPsを試すというところに入ってきます。

●POPs

 まず、キーを作成するところから。

# mkdir -p /etc/ssl/private
# mkdir -p /etc/ssl/certs

# cd /usr/ports/mail/dovecot/work/dovecot-1.2.14/doc 
# sh ./mkcert.sh
Generating a 1024 bit RSA private key
...............++++++
.........++++++
writing new private key to '/etc/ssl/private/dovecot.pem'
-----

subject= /OU=IMAP server/CN=imap.example.com/emailAddress=postmaster@example.com
SHA1 Fingerprint=E9:3D:40:D4:8E:2A:64:3C:1F:50:8A:69:00:65:28:AC:59:D8:9D:3E

こんな感じで生成完了。
・/etc/ssl/private/dovecot.pem
・/etc/ssl/certs/dovecot.pem
以上の2つが作成。

##
## SSL settings
##

# IP or host address where to listen in for SSL connections. Remember to also
# add imaps and/or pop3s to protocols setting. Defaults to same as "listen"
# setting if not specified.
#ssl_listen =

# SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt>
ssl = yes

# PEM encoded X.509 SSL/TLS certificate and private key. They're opened before
# dropping root privileges, so keep the key file unreadable by anyone but
# root. Included doc/mkcert.sh can be used to easily generate self-signed
# certificate, just make sure to update the domains in dovecot-openssl.cnf
ssl_cert_file = /etc/ssl/certs/dovecot.pem
ssl_key_file = /etc/ssl/private/dovecot.pem

# If key file is password protected, give the password here. Alternatively
# give it when starting dovecot with -p parameter. Since this file is often
# world-readable, you may want to place this setting instead to a different
# root owned 0600 file by using !include_try <path>.
#ssl_key_password =

# File containing trusted SSL certificate authorities. Set this only if you
# intend to use ssl_verify_client_cert=yes. The CAfile should contain the
# CA-certificate(s) followed by the matching CRL(s).
#ssl_ca_file =

# Request client to send a certificate. If you also want to require it, set
# ssl_require_client_cert=yes in auth section.
#ssl_verify_client_cert = no

# Which field from certificate to use for username. commonName and
# x500UniqueIdentifier are the usual choices. You'll also need to set
# ssl_username_from_cert=yes.
#ssl_cert_username_field = commonName

# How often to regenerate the SSL parameters file. Generation is quite CPU
# intensive operation. The value is in hours, 0 disables regeneration
# entirely.
#ssl_parameters_regenerate = 168

# SSL ciphers to use
#ssl_cipher_list = ALL:!LOW:!SSLv2

# Show protocol level SSL errors.
#verbose_ssl = no

変更箇所はこんなところ。dovecot をまた再起動。
早速試してみることにしました。

Oct 17 16:18:39 dovecot: Info: Dovecot v1.2.14 starting up
Oct 17 16:18:39 dovecot: Info: Generating Diffie-Hellman parameters for the first time. This may take a while..
Oct 17 16:18:41 ssl-build-param: Info: SSL parameters regeneration completed
Oct 17 16:21:57 pop3-login: Info: Disconnected (no auth attempts): rip=192.168.0.101, lip=192.168.0.200, TLS
Oct 17 16:22:09 pop3-login: Info: Login: user=<foo>, method=PLAIN, rip=192.168.0.101, lip=192.168.0.200, TLS
Oct 17 16:22:09 POP3(foo): Info: Disconnected: Logged out top=0/0, retr=0/0, del=0/0, size=0

なんともあっさり。これなら安心して使えそうです。

●パッチの適用(PbS)

 Pop before SMTPのためのパッチは、みつけることができましたので適用することにします。
portsに組み込めるようにしても良かったのですが、面倒なので手動にて実施することに。
 検索からKINUさんのFreeBSD:Dovecot-1.0.13設定のページにほぼそのものが探せましたので、参考に実施しました。

# cd /usr/ports/mail/dovecot
# make configure
# cd work/dovecot-1.2.14/
# setenv dovecot /usr/ports/mail/dovecot/work/dovecot-1.2.14
# fetch http://dovecot.org/patches/1.1/drac.c
# gcc -Wall -W -shared -fPIC -DHAVE_CONFIG_H -I$dovecot -I$dovecot/src/lib drac.c -o drac.so -L/usr/local/lib -ldrac
# cp -p drac.so /usr/local/lib/dovecot/pop3/

こんなでいいみたいです。

●mail/drac の導入

 これは、デフォルトのままで導入。

dracd_enable="YES"
dracd_flags="-i -e 15"
rpcbind_enable="YES"
rpcbind_flags="-s"

 上記を /etc/rc.conf に設定する。15分の設定が正しいかどうかは個人差がありますけど、メールの返信を書いている人が10分では不足だという超えもあって、こうなっています。
また、この辺りの設定については、以前のページを参照ください。ページが大きくなるのも面倒なので割愛します。
 一連の設定が終わり、sendmail系の設定箇所も完了。

●dovecot.conf の修正

  # Support for dynamically loadable plugins. mail_plugins is a space separated
  # list of plugins to load.
  #mail_plugins =
  #mail_plugin_dir = /usr/local/lib/dovecot/imap
   mail_plugins = drac
   mail_plugin_dir = /usr/local/lib/dovecot/pop3

上記のように修正。
実際に、POPを動作させて /usr/local/etc/dracd.db が更新されるかを確認…しないな?
おーっ。IMAPのセクションに書いておりました…。(※上記の部分も失敗した際の通りを残してあります)

 修正して、dovecotを再起動。popの受信操作をして確認します。
よし!書き込まれたことを確認できました。

# makemap -u btree /usr/local/etc/dracd.db
192.168.0.101  1287305150

内容も正しく、書き込まれているようですね。

 まとめ

 一通りを試してやりたかったことがすべてできることを確認することができました。
非常にシンプルだし、良い感じです。

 DB等の連動など、多くの使い方があるみたいなのでこの先も楽しみです。
最新のリリース版は 2.0.5 というものがあるようですが、portsではまだ未提供のようでした。
安定版では、1.2.15 が出ているので、こっちは適用されてきそうな感じです。

 


【改訂履歴】作成:2010/10/16  改訂: -/-/-
【参考リンク】

Dovecot 設定ファイル 日本語訳


Copyright © 1996,1997-2006,2007- by F.Kimura,