POP/IMAP サーバープログラムの移行

スポンサーリンク

つい先日「Postfix DE VirtualMailBox」の記事に書いたとおり、VirtualMailbox を
実装してみた。
そんでもって 2004 年の運用当初から使っていた POP/IMAP サーバーである
「Courier-IMAP」から「Dovecot」へと移行した。

# 2007/11/19 ちょいと加筆 & 修正

入れ替えた理由は、サーバー構築当初は今ほどの知識がなくてほぼ適当だろうこれ
というようなコンパイルして入れていた。これが原因で IMAP 経由だと日本語名の
ディレクトリが作れても振り分けができなかったりという問題まで抱えていた。
更に Courier はファイル構成がめちゃくちゃに散らばっていたりする上に、Auth, POP, IMAP
の 3 つを init と rc3.d に放り込んでやらないとサーバー起動時に自動起動させることが
できなかった。

要は面倒くさすぎた。といったところだろうか。

今回移行した Dovecot というのはかなり後発のサーバープログラムで、Courier や Cyrus
WU などが実装している機能に加えて Postfix とも連携が取れる物まであって非常に
使いやすそうだったから。

それと、メール系でも POP という受信側だったのでそれほどクリティカルな作業でもないってのも
挙げられた。Postfix のバージョン入替でへくったらメールが届かなくなってしまうからやばい…。

で、実作業に入ってみたのが朝方。
メールの量も少ないし~ということでした。

入替完了したらもうこれは楽。コマンド一個打つだけで Auth, POP, IMAP の全サーバーが
動いてくれた。楽すぎる。

とりあえず今回は POP/IMAP のみとして POP3S/IMAPS の SSL 使う物は後日とした。

以下、すぐ忘れるから備忘録 (笑

まずはソースファイルを落としてきてコンパイル。

$ ./configure --prefix=/usr/local --disable-ipv6 --disable-debug \
--with-libiconv=/usr/local/lib --with-ssl=openssl --without-ldap --without-pam

引数はこんな感じで。IPv6 は未使用で libiconv は日本語使うので必須と。
OpenSSL も使う。LDAP は俺にはきつい。PAM は使うべきではないだろうということで OFF。

でもって make して su して make install でインスコは完了と。
Dovecot ユーザーも作っておこう

# useradd -s /sbin/nologin -c 'MRA' -d /dev/null -u 906 dovecot
# finger dovecot
Login: dovecot                          Name: MRA
Directory: /dev/null                    Shell: /sbin/nologin
Never logged in.
No mail.
No Plan.

uid は任意で。うちはポリシーとしてサーバープロセスを持つべきユーザーは uid 900 から割り振っている。
gid も然り。
(2007/11/19 1:09 追記)

ラストは設定。

vi で /usr/local/etc/dovecot.conf を編集してやる。
今回は POP/IMAP のみなので

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

プロトコルはこの 2 つだけ。後日 SSL 使う時はここに pop3s と imaps を追記する。
Listen させるポート設定は一応きっちり書いておく。SSL 使うところも書いておいて
コメントアウトしておいた。

# IP or host address where to listen in for connections. It's not currently
# possible to specify multiple addresses. "*" listens in all IPv4 interfaces.
# "[::]" listens in all IPv6 interfaces, but may also listen in all IPv4
# interfaces depending on the operating system.
#
# If you want to specify ports for each service, you will need to configure
# these settings inside the protocol imap/pop3 { ... } section, so you can
# specify different ports for IMAP/POP3. For example:
   protocol imap {
     listen = *:143
#     ssl_listen = *:943
   }
   protocol pop3 {
     listen = *:110
#     ssl_listen = *:995
   }
#listen = *

ログインに関して、パスワードは現状平文で ok だから plain を許可させておく。

# Disable LOGIN command and all other plaintext authentications unless
# SSL/TLS is used (LOGINDISABLED capability). Note that if the remote IP
# matches the local IP (ie. you're connecting from the same computer), the
# connection is considered secure and plaintext authentication is allowed.
disable_plaintext_auth = no

ログファイルの出力やらは自分なりに設定したので割愛。デフォルトでもかまわないでしょう。と。
重要なのは次の 1 行。
Postfix は Maildir 形式でメールを配送させているからこれに合わせなければならない。

mail_location = maildir:~/Maildir

普通に設定して ok なところをざーっと割愛して大事なところ。
認証部でつかう認証方法の設定。今回は plain だけ。今後は CRAM-MD5 を追加予定。

auth default {
  # Space separated list of wanted authentication mechanisms:
  #   plain login digest-md5 cram-md5 ntlm rpa apop anonymous gssapi
  # NOTE: See also disable_plaintext_auth setting.
  mechanisms = plain

そして認証で使うユーザー名とパスワードのシステムアカウントに関するところでは
Shadow を使う。

  # Shadow passwords for system users (NSS, /etc/shadow or similiar).
  # Deprecated by PAM nowadays.
  # 
  passdb shadow {
  }

この記述があるすぐしたで、VirtualMailbox ユーザーのアカウント情報を入れたファイルを
指定し、認証部へ引き渡せるようにしてやると。ファイルは自前で用意。
dovecotpw コマンドを使ってパスを出力させ、「ユーザー名:パス」といった一行を入れておいた。

  # passwd-like file with specified location
  # 
  passdb passwd-file {
    # Path for passwd-file
    args = /usr/local/etc/dovecot-passwd
  }

後ここも大事な所。
VirtualMailbox の位置を指定してやる。Courier はユーザー追加時に指定したけど、
Dovecot は Conf で指定なのねぇ~と。

  # static settings generated from template 
  userdb static {
    args = uid=5000 gid=5000 home=/var/mail/vmb/ mail=maildir:/var/mail/vmb/%d/%n/
  }

%d はドメインが入って %n はローカルパートが入る。
とまぁこれだけ設定して完了と。
# 2007/11/19 1:01 修正
# “home=” はメールボックスのホームになるので実体までのパスは不要。
# ホーム以下に各ドメインとユーザー名のディレクトリが作成される為。
# UNIX アカウント (/home 以下にユーザーディレクトリ) を思い出せば似たような物と思った。

ここまでの設定で想定通りの動作してくれるまで数時間かかりました…。
あほな Typo していたり、同じようなディレクティブがあって順序が逆だったりとかうんたら…。
初期設定はかなり面倒だった…。

とりあえずこれで既存の UNIX アカウントのアドレスと、バーチャルメールアドレス共に受信完了。
あとは時間を追ってチューニングしていくだけとなった。

現状でも結果として IMAP がだいぶ使い物になるような感じになった。
POP に関しては今後という感じかな。
個人運用でユーザー数も少ないから UIDL やら IMAP のキャッシュは全部削除してやった。
ユーザー数が多い人はマニュアル見て Courier やら他のサーバープログラムの UIDL や IMAP
のキャッシュは Dovecot 互換に変換しましょう。

ということで以上。

起動スクリプトかいてねぇや… orz
書いた (笑

スポンサーリンク