ライン

ポイント:第一段階のlocal上での利用は問題なし

ライン

 はじめに

 POPサーバの入れ替えを何度も検討しようとするが、マッチした物が出てこなくて変えられない状態にある。
  ・Outlook ExpressなどのユーザやPostPetユーザがDRACの継続を期待している
  ・Mailbox形式のままで利用を継続したい
  ・APOP認証を残したい希望
  ・IPアドレスにより、アクセスを制限したい
  ・メール用のDBを別に作成したくない
 これらをすべて満たすものが出てこないのだ。こちら側の要件もあるのだけれど…。

 今回は、現状はそのままにIMAPサーバを同時に動作させることを実施することにしました。
 Dovecotを利用するので、IPアドレスによる制限はかけられませんし、今回はユーザに開放するまでしないかも知れません。
 開放していくにせよ、何かしらディフェンスを考えていこうとは思っています。

 …というわけで、Dovecot2の導入を実施しようと思います。

 導入

mail/dovecot2

 今回は、2.x系で導入を行おうと思います。ある意味初めての導入に近いかな。

# make config 

 選択肢を確認しておきましょう。

 初期値のままで良さそうです。

# make clean install clean

 コンパイルはそんなにかかりませんでした。
気づくと以下のメッセージがひょうじされて終わっていました。

===> Installing rc.d startup script(s)
cd /usr/ports/mail/dovecot2/work/dovecot-2.0.15/doc && install  -o root -g wheel -m 555 dovecot-openssl.cnf mkcert.sh /usr/local/share/examples/dovecot
cd /usr/ports/mail/dovecot2/work/dovecot-2.0.15 && install  -o root -g wheel -m 444 AUTHORS COPYING COPYING.LGPL COPYING.MIT INSTALL NEWS TODO README /usr/local/share/doc/dovecot
---------------------------------------------------------------------

 You can get basic IMAP and POP3 services running by enabling
 dovecot in the /etc/rc.conf file.

        dovecot_enable
                (bool) If set to ``YES'', run the dovecot command
                at boot time.

 In the basic configuration Dovecot will authenticate users against
 the system's passwd file and use the default /var/mail/$USER mbox
 files.

        dovecot_config
                (str) Path to dovecot configuration file(s).
                Default /usr/local/etc/dovecot/dovecot.conf.

 To start multiple instances of dovecot set dovecot_config to
 a space seperated list of configuration files.

---------------------------------------------------------------------

/etc/rc.conf に以下を加えました。

# 2011-11-11
dovecot_enable="YES"

 設定ファイルは、/usr/local/etc/dovecot/dovecot.conf だよ、といっている通りなんで、これをみてみることにする。
あ、READMEしか用意されていないんだね。中身をみると、こんなメッセージ。

Configuration files go to this directory. See example configuration files in
/usr/local/share/doc/dovecot/example-config/

 どんなサンプルがあるのかなと。

drwxr-xr-x  2 root  wheel  1024 Nov 11 11:17 conf.d
-r--r--r--  1 root  wheel   410 Nov 11 11:17 dovecot-db.conf.ext
-r--r--r--  1 root  wheel   782 Nov 11 11:17 dovecot-dict-sql.conf.ext
-r--r--r--  1 root  wheel  5192 Nov 11 11:17 dovecot-ldap.conf.ext
-r--r--r--  1 root  wheel  5348 Nov 11 11:17 dovecot-sql.conf.ext
-r--r--r--  1 root  wheel  3708 Nov 11 11:17 dovecot.conf

conf.d 以下は、

-r--r--r--  1 root  wheel   5259 Nov 11 11:17 10-auth.conf
-r--r--r--  1 root  wheel   1691 Nov 11 11:17 10-director.conf
-r--r--r--  1 root  wheel   2649 Nov 11 11:17 10-logging.conf
-r--r--r--  1 root  wheel  14424 Nov 11 11:17 10-mail.conf
-r--r--r--  1 root  wheel   2920 Nov 11 11:17 10-master.conf
-r--r--r--  1 root  wheel   1650 Nov 11 11:17 10-ssl.conf
-r--r--r--  1 root  wheel   1607 Nov 11 11:17 15-lda.conf
-r--r--r--  1 root  wheel   2402 Nov 11 11:17 20-imap.conf
-r--r--r--  1 root  wheel    469 Nov 11 11:17 20-lmtp.conf
-r--r--r--  1 root  wheel   3533 Nov 11 11:17 20-pop3.conf
-r--r--r--  1 root  wheel    676 Nov 11 11:17 90-acl.conf
-r--r--r--  1 root  wheel    292 Nov 11 11:17 90-plugin.conf
-r--r--r--  1 root  wheel   2251 Nov 11 11:17 90-quota.conf
-r--r--r--  1 root  wheel    496 Nov 11 11:17 auth-checkpassword.conf.ext
-r--r--r--  1 root  wheel    486 Nov 11 11:17 auth-deny.conf.ext
-r--r--r--  1 root  wheel    802 Nov 11 11:17 auth-ldap.conf.ext
-r--r--r--  1 root  wheel    558 Nov 11 11:17 auth-master.conf.ext
-r--r--r--  1 root  wheel    329 Nov 11 11:17 auth-passwdfile.conf.ext
-r--r--r--  1 root  wheel    785 Nov 11 11:17 auth-sql.conf.ext
-r--r--r--  1 root  wheel    608 Nov 11 11:17 auth-static.conf.ext
-r--r--r--  1 root  wheel   2106 Nov 11 11:17 auth-system.conf.ext
-r--r--r--  1 root  wheel    327 Nov 11 11:17 auth-vpopmail.conf.ext

となっていました。

 設定

dovecot.conf

 まずは、ちゃっちゃとサンプルをコピーしてきます。

# cp /usr/local/share/doc/dovecot/example-config/dovecot.conf /usr/local/etc/dovecot

のようなコマンドでコピーを済ませる。87行ありました。
listen =~,~
なんて書けるし、
login_access_sockets = tcpwrap
なんていうのが使えるんだ?
ただし、コンパイルの時点で --with-libwrap を指定しているかを確認してみる。
with-libwrap=autoになっているな。いけそうだ。
"[--with-libwrap], [Build with libwrap, ie. TCP-wrappers]"
すばらしい。/etc/hosts.allowな記述でいけるね。
ネット検索では、
service tcpwrap { unix_listener login/tcpwrap { group = $default_login_user mode = 0600 user = $default_login_user } }
とかを別記述すれば良い感じだ。動きました…と書いている人がいる。

何にしても、今回はこれらはまだやらないのでお楽しみとしてとっておくことにする。
 実際に指定した内容は以下の通り。

# Protocols we want to be serving.
protocols = imap lmtp

listen = 127.0.0.1

##
## Dictionary server settings
##

# Dictionary can be used to store key=value lists. This is used by several
# plugins. The dictionary can be accessed either directly or though a
# dictionary server. The following dict block maps dictionary names to URIs
# when the server is used. These can then be referenced using URIs in format
# "proxy::<name>".

dict {
  #quota = mysql:/usr/local/etc/dovecot/dovecot-dict-sql.conf.ext
  #expire = sqlite:/usr/local/etc/dovecot/dovecot-dict-sql.conf.ext
}

# Most of the actual configuration gets included below. The filenames are
# first sorted by their ASCII value and parsed in that order. The 00-prefixes
# in filenames are intended to make it easier to understand the ordering.
!include conf.d/*.conf

# A config file can also tried to be included without giving an error if
# it's not found:
!include_try local.conf

conf.d のディレクトリは作成してサンプルで必要そうなものを入れる感じかな。
…cp -r でそのまんまコピーしちゃったけど。
LMTPはどこで使う用途なのか把握していないけど。

netstatで開いているポートを確認した後に、起動スクリプトを実行(安易だけど)。
以前と同じく、

Starting dovecot.
doveconf: Fatal: Error in configuration file /usr/local/etc/dovecot/conf.d/10-ssl.conf line 12: ssl_cert: Can't open file /etc/ssl/certs/dovecot.pem: No such file or directory

と叱られる。そうだった。SSLのファイルを作成していない。
以前のページ(1.2.14のバージョン)では、mkcert.shを実施してファイルを作成したのだっけね。
同じであるのかな。(手動でやろうとしないのがだらけているんですが)
/usr/local/share/doc/dovecot/ 以下にはコピーされていないな。
/usr/ports/mail/dovecot2/work/dovecot-2.0.15/doc には存在するようだ。(make cleanしなければ良かったな)

# cd /usr/ports/mail/dovecot2/work/dovecot-2.0.15/doc 
# sh ./mkcert.sh
/etc/ssl/certs directory doesn't exist
# mkdir /etc/ssl/certs
# mkdir /etc/ssl/private
# 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=〜
# chmod 700 /etc/ssl/certs/ /etc/ssl/private

なんでも良いのだ。できてくれれば。
再度、起動スクリプトを入れると無事に起動。

Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)
tcp4       0      0 localhost.imaps        *.*                    LISTEN
tcp4       0      0 localhost.imap         *.*                    LISTEN

ちゃんと、Listenしてくれるようになっていました。

その他、設定箇所は、
[/usr/local/etc/dovecot/conf.d/10-mail.conf]
mail_location = mbox:~/mail:INBOX=/var/mail/%u
mail_privileged_group=mail
を追加しています。

mail/roundcube

動作確認用に、Roundcubeを導入してみることにしました。

おおげさにDBサーバ連携にしたくなかったので、SQLiteでの動作にしようと思います。

# make config 

 選択肢は以下としました。いや、NSCははずしたのでした。

 PHPその他、前提になっているものはおおよそが導入されているサーバだったので、お気軽にコンパイルを開始します。

# make clean install clean

 しばしの待ちでインストール完了。

---------------------------------------------------------------------
FIRST INSTALLATION

If this is a first installation of RoundCube you have to create
a new database and a db user. Read INSTALL for detailed instructions.

UPGRADING

If you already had a previous version of RoundCube installed,
you should check your config files and DB schema are up-to-date.
Read UPGRADING for detailed instructions.
---------------------------------------------------------------------
===>   Registering installation for roundcube-0.6_1,1
===>  Cleaning for php5-mbstring-5.3.8
===>  Cleaning for php5-session-5.3.8
===>  Cleaning for php5-iconv-5.3.8
===>  Cleaning for php5-dom-5.3.8
===>  Cleaning for php5-xml-5.3.8
===>  Cleaning for php5-json-5.3.8
===>  Cleaning for pecl-intl-1.1.2_3
===>  Cleaning for php5-sqlite-5.3.8
===>  Cleaning for php5-openssl-5.3.8
===>  Cleaning for oniguruma-4.7.1
===>  Cleaning for icu-4.8.1.1
===>  Cleaning for roundcube-0.6_1,1

 思っていたよりも、新規導入が多かった。いや、まだSQLite本体が入れていないな。
これも追加。databases/sqlite3 というのでいいのかな。良く知らずまま。

 さて、導入先は /usr/local/www/roundcube/ なので、Apache側に設定を加える。
index.phpがあるので、そのままそこを見えるようにすれば良さそうだ。

httpd.conf の例は以下の通り。

Alias /roundcube/ "/usr/local/www/roundcube/"
<Directory "/usr/local/www/roundcube">
   AllowOverride   None
   Options None
   Order   allow,deny
   Allow   from 192.168.0.
   DirectoryIndex index.php
</Directory>

 この状態でApacheを再起動すれば良い。後はウェブからアクセスすれば良いだけ。

CONFIGURATION ERROR
 
main.inc.php was not found.
 db.inc.php was not found.
Please read the INSTALL instructions!

 でも、予定通りにエラー。ちゃんとドキュメントを読めってことだ。
/usr/local/www/roundcube/config に該当するものは存在していました。

db.inc.php.distがあるので、これをリネームして設定ファイルに。
そういえば、SQLiteってあまり使ったことがなくて良くわからないな。
DBはどこにつくるのが一般的なんだろう。
良くわからないので、こんなにした。

# mkdir /var/db/roundcube
# chown www:www /var/db/roundcube
# cd /var/db/roundcube
# sqlite3 -init /usr/local/www/roundcube/SQL/sqlite.initial.sql roundcube.db
SQLite version 3.7.9 2011-11-01 00:52:41
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .quit
# chown www roundcube.db

 のように実行し、db.inc.php の該当箇所を

$rcmail_config['db_dsnw'] = 'sqlite:////var/db/roundcube/roundcube.db?mode=0646';

 のように変更した。main.inc.php.distも同様にみていく。なんだかいっぱい…。
リネームしただけでひとまず先に進めることにした。

 ウェブより再度アクセスすると、

Unable to connect to the database!
Please contact your server-administrator. (ログ上)Native message: file is encrypted or is not a database

 とかいわれる。SQLite3じゃ駄目っていう落ちだな?
パッチがあるらしいけど、SQLite2で動くらしいのでそっちに変更。

# cd /var/db/roundcube
# sqlite -init /usr/local/www/roundcube/SQL/sqlite.initial.sql roundcube.db
Loading resources from /usr/local/www/roundcube/SQL/sqlite.initial.sql
SQLite version 2.8.17
Enter ".help" for instructions
sqlite> .quit
# chown www roundcube.db

 ウェブアクセスするとエラーにならないでちゃんと表示しますね。
なんだかな。

 ちゃんと表示してきました。

 では、http://該当ホスト/roundcube/installer/ にアクセスします。
※config/main.inc.php の 以下を一時的に以下にします
→ $rcmail_config['enable_installer'] = true;

 こんな表示。終わったら、元に戻す。

 これでやっと、Dovecotが試せる環境になりました。

 連動を確認

 やっと確認するところまでやってきました。

 ログイン後の表示は、こんな感じですね。

 現状のままだと、ログがsyslog標準の/var/log/maillog に出力されます。
これはこれで困るので、別に出力するように変更することにしました。
 /usr/local/etc/dovecot/conf.dの10-logging.confをsyslog_facility = local3と指定。(デフォルトは mail)
 /etc/syslog.conf にlocal3.* /var/log/imaplogを追加。
 touch /var/log/imaplogしてchmod 660 と chown dovecot:mail を指定。kill -HUP (syslogのPID) で反映。
 テストは、dovecotの再起動でログ表示が変更されたことを確認する。
 その他のログのローテーションなどの指定はいつも通りなので、ここでの記述は省略します。(必要??)

 


【改訂履歴】作成:2011/11/11  改訂: 2011/11/12
【参考リンク】

Dovecot…オフィシャルサイト
Roundcube…オフィシャルサイト
Roundcube webmailのインストールと設定…Tomoya Sakuraiさんの作成しているページ

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