2013年8月25日日曜日

dovecot dbox形式 ”Alternate Storage”について

前回の続きです。
Dovecotのdbox形式のメールBOXフォーマットには、Alternate Storage機能があります。


具体的には、通常のメールBOXを配置しているディスク(またはパーティションやディレクトリ)とは別に、もう一つ代替となるディスク(またはパーティションやディレクトリ)を用意しておけば、その領域もメールBOXとして利用できるようになる機能です。
この機能を使えば、メールBOXのディスクが圧迫してきたので、古いメールを後から追加したディスクに退避させようといった事も可能になります。

この機能は、mail_locationに以下のように(青字の部分を追加で)指定するだけで利用できます。
※評価は、CentOS6.4(x86_64) + dovecot2.2.5 + システムアカウントで、/dev/sdb1を/archiveとしてマウントした状態で行っています

mail_location = sdbox:~/dbox:ALT=/archive/%n


以下、実際の操作例です。
 → 既読メールの移動を実施してみます

サンプルとしてuser01ユーザのメールBOXにメールが10通あり、全て既読の状態です。
# find /home/user01/dbox/
/home/user01/dbox/
/home/user01/dbox/dovecot-uidvalidity
/home/user01/dbox/mailboxes
/home/user01/dbox/mailboxes/INBOX
/home/user01/dbox/mailboxes/INBOX/dbox-Mails
/home/user01/dbox/mailboxes/INBOX/dbox-Mails/dovecot.index.log
/home/user01/dbox/mailboxes/INBOX/dbox-Mails/u.10
/home/user01/dbox/mailboxes/INBOX/dbox-Mails/dovecot.index.cache
/home/user01/dbox/mailboxes/INBOX/dbox-Mails/u.7
/home/user01/dbox/mailboxes/INBOX/dbox-Mails/u.2
/home/user01/dbox/mailboxes/INBOX/dbox-Mails/u.6
/home/user01/dbox/mailboxes/INBOX/dbox-Mails/u.8
/home/user01/dbox/mailboxes/INBOX/dbox-Mails/u.4
/home/user01/dbox/mailboxes/INBOX/dbox-Mails/u.5
/home/user01/dbox/mailboxes/INBOX/dbox-Mails/u.1
/home/user01/dbox/mailboxes/INBOX/dbox-Mails/u.3
/home/user01/dbox/mailboxes/INBOX/dbox-Mails/u.9
/home/user01/dbox/dovecot-uidvalidity.52127e52
/home/user01/dbox/dbox-alt-root
#

この状態から既読メールをAlternate Storageに移動させるには以下のように実行します。
# doveadm altmove -u user01 seen

結果、user01ユーザのメールBOXは以下のような状態になります。
 →既読メールの10通は/archive/user01ディレクトリ以下に移動しています
# find /home/user01/dbox/ /archive/user01
/home/user01/dbox/
/home/user01/dbox/dovecot-uidvalidity
/home/user01/dbox/mailboxes
/home/user01/dbox/mailboxes/INBOX
/home/user01/dbox/mailboxes/INBOX/dbox-Mails
/home/user01/dbox/mailboxes/INBOX/dbox-Mails/dovecot.index.log
/home/user01/dbox/mailboxes/INBOX/dbox-Mails/dovecot.index.cache
/home/user01/dbox/dovecot-uidvalidity.52127e52
/home/user01/dbox/dbox-alt-root
/archive/user01
/archive/user01/mailboxes
/archive/user01/mailboxes/INBOX
/archive/user01/mailboxes/INBOX/dbox-Mails
/archive/user01/mailboxes/INBOX/dbox-Mails/u.8
/archive/user01/mailboxes/INBOX/dbox-Mails/u.1
/archive/user01/mailboxes/INBOX/dbox-Mails/u.9
/archive/user01/mailboxes/INBOX/dbox-Mails/u.6
/archive/user01/mailboxes/INBOX/dbox-Mails/u.4
/archive/user01/mailboxes/INBOX/dbox-Mails/u.10
/archive/user01/mailboxes/INBOX/dbox-Mails/u.3
/archive/user01/mailboxes/INBOX/dbox-Mails/u.2
/archive/user01/mailboxes/INBOX/dbox-Mails/u.7
/archive/user01/mailboxes/INBOX/dbox-Mails/u.5

#

※この機能は、dbox-alt-rootファイルが、シンボリックリンクになることで実現しています。
# ls -l /home/user01/dbox/dbox-alt-root
lrwxrwxrwx 1 user01 user01 15 Aug 25 23:02 /home/user01/dbox/dbox-alt-root -> /archive/user01/
#

なお、移動したAtteanate Storageのメールを元に戻すには以下のように実行します。
# doveadm altmove -r -u user01 all


以上、今回は手動で既読メールを移動させる操作例をあげましたが、バッチ処理でより複雑な条件での操作も可能なので、詳しくは下記を参照してください。

http://wiki2.dovecot.org/Tools/Doveadm/Altmove
http://wiki2.dovecot.org/Tools/Doveadm/SearchQuery

2013年8月20日火曜日

dovecot dbox形式

Dovecotには、独自のメールBOXフォーマットが存在します。
※Maildir形式のように1通のメッセージを1つのファイルとして保存するsdbox形式、mbox形式のように複数のメッセージを1つのファイルとして保存するmdbox形式(ただし、ある程度のサイズで複数のファイルに分割されます)の2種類です。


設定は特に難しいところはなく、sdbox形式の場合を例にするとmail_locationに以下のよう指定するだけで利用できます。
※評価はCentOS6.4(x86_64) + dovecot2.2.4 + システムアカウントで行っています

mail_location = sdbox:~/dbox


実際にメールを格納するとMaildir形式とは異なりメールそのものは、u.1やu.2のような名前で保存され、メールが未読でも既読でもSeenフラグなどが付くことがありません。

# find ~user01/dbox/
/home/user01/dbox/
/home/user01/dbox/mailboxes
/home/user01/dbox/mailboxes/INBOX
/home/user01/dbox/mailboxes/INBOX/dbox-Mails
/home/user01/dbox/mailboxes/INBOX/dbox-Mails/u.3
/home/user01/dbox/mailboxes/INBOX/dbox-Mails/u.1
/home/user01/dbox/mailboxes/INBOX/dbox-Mails/dovecot.index.log
/home/user01/dbox/mailboxes/INBOX/dbox-Mails/dovecot.index.cache
/home/user01/dbox/mailboxes/INBOX/dbox-Mails/u.2
/home/user01/dbox/dovecot-uidvalidity
/home/user01/dbox/dovecot-uidvalidity.51ac2f97
#

1通のメールは以下のようになります。
Maildir形式と比較するとメッセージの前後に追加の情報が付くようです。

# cat /home/user01/dbox/mailboxes/INBOX/dbox-Mails/u.5
2 M1e C51ac33f6
N          0000000000000277

Return-Path: <user101@mail.example.com>
X-Original-To: user01@mail3.example.com
Delivered-To: user01@mail3.example.com
Received: from mail.example.com (R-538.mshome.net [192.168.137.1])
        by mail3.example.com (Postfix) with SMTP id 8AD6E3FF6B
        for <user01@mail3.example.com>; Mon,  3 Jun 2013 15:13:08 +0900 (JST)
From: user101 <user101@mail.example.com>
To: user01@mail3.example.com
Subject: test
Date: Mon, 03 Jun 2013 15:13:08 +0900
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-Id: <E1CE60216AB962user101@mail.example.com>
test

R51ac33f6
V288
G87ca8705f633ac51190a000048c9b678

#


今回の最終的なdovecotの設定は以下になります。
# doveconf -n
# 2.2.4: /etc/dovecot/dovecot.conf
# OS: Linux 2.6.32-358.14.1.el6.x86_64 x86_64 CentOS release 6.4 (Final)
disable_plaintext_auth = no
listen = *
mail_debug = yes
mail_location = sdbox:~/dbox
passdb {
  driver = pam
}
protocols = pop3
ssl = no
userdb {
  driver = passwd
}
#


またMTAにpostfixを利用する場合は、そのままだとメールBOXに配送ができないので、DovecotのLDAかLMTPなどを利用して配送を実施する必要があります。
※LDAとLMTPについては、今後書きたいと思います

一例を挙げておきます。
システムアカウントを利用してDovecotのLDAで配送をするなら、以下のように設定します。

mailbox_command = /usr/libexec/dovecot/dovecot-lda -f "$SENDER" -a "$RECIPIENT"


2013年8月5日月曜日

dovecot passwd-fileについて

今回は、Dovecotの認証データベースの1つであるpasswd-fileについてです。


特徴は、以下のようになります。

  • /etc/passwdと(ほぼ)同じ書式で記述ができる(⇒ extra_fieldが追加できる
  • 認証で必要な箇所だけ記述すれば利用できる(下記の設定例を参照ください)
  • システムアカウントにもバーチャルアカウントにも利用できる


以下、設定例です。
※評価はCentOS6.4(x86_64) + dovecot 2.2.4で行っています。


システムアカウントで利用する場合

※SSHのパスワードなどと、メールのパスワードを別にしたい場合に有用です

1./etc/dovecot/usersを以下のように作成します。
user01:{PLAIN}password
user02:{PLAIN}password

2.passwd-fileを利用する為の設定

/etc/dovecot/conf.d/10-auth.conf:
※以下の行を有効にします
!include auth-system.conf.ext
!include auth-passwdfile.conf.ext

/etc/dovecot/conf.d/auth-system.conf.ext:
※以下の行だけ有効にします
userdb {
  driver = passwd
}

/etc/dovecot/conf.d/auth-passwdfile.conf.ext:
※以下の行だけ有効にします
passdb {
  driver = passwd-file
  args = scheme=CRYPT username_format=%u /etc/dovecot/users
}

最終的な全体設定は以下のようになります。
# doveconf -n
# 2.2.4: /etc/dovecot/dovecot.conf
# OS: Linux 2.6.32-358.14.1.el6.x86_64 x86_64 CentOS release 6.4 (Final)
disable_plaintext_auth = no
listen = *
mail_debug = yes
mail_location = maildir:~/Maildir
passdb {
  args = scheme=CRYPT username_format=%u /etc/dovecot/users
  driver = passwd-file
}
protocols = pop3
ssl = no
userdb {
  driver = passwd
}


バーチャルアカウントでの利用する場合

下記ではメールBOXなどの情報をstaticに持たせています


1./etc/dovecot/usersを以下のように作成します。
user01@example.com:{PLAIN}password
user02@example.jp:{PLAIN}password

2. passwd-fileを利用する為の設定

/etc/dovecot/conf.d/10-auth.conf:
※以下の行を有効にします
!include auth-passwdfile.conf.ext
!include auth-static.conf.ext

/etc/dovecot/conf.d/auth-passwdfile.conf.ext:
※以下の行だけ有効にします
passdb {
  driver = passwd-file
  args = scheme=CRYPT username_format=%u /etc/dovecot/users
}

/etc/dovecot/conf.d/auth-static.conf.ext:
※以下の行だけ有効にします
userdb {
  driver = static
  args = uid=vmail gid=vmail home=/home/vmail/%d/%u
}
※vmailユーザはあらかじめ以下のように作成しておく必要があります
# groupadd -g 5000 vmail
# useradd -g 5000 -u 5000 -s /sbin/nologin vmail

最終的な全体設定は以下のようになります。
# doveconf -n
# 2.2.4: /etc/dovecot/dovecot.conf
# OS: Linux 2.6.32-358.14.1.el6.x86_64 x86_64 CentOS release 6.4 (Final)
disable_plaintext_auth = no
listen = *
mail_debug = yes
mail_location = maildir:~/Maildir
passdb {
  args = scheme=CRYPT username_format=%u /etc/dovecot/users
  driver = passwd-file
}
protocols = pop3
ssl = no
userdb {
  args = uid=vmail gid=vmail home=/home/vmail/%d/%u
  driver = static
}


以上で、/etc/dovecot/usersに記述した2ユーザーでアクセスするとメールBOXは
以下のようになります。

# pwd
/home/vmail
# ls -l
total 8
drwx------ 3 vmail vmail 4096 Aug  5 00:06 example.com/
drwx------ 3 vmail vmail 4096 Aug  5 00:05 example.jp/
# find .
.
./example.jp
./example.jp/user02@example.jp
./example.jp/user02@example.jp/Maildir
./example.jp/user02@example.jp/Maildir/dovecot-uidvalidity.51fe6dce
./example.jp/user02@example.jp/Maildir/maildirfolder
./example.jp/user02@example.jp/Maildir/dovecot.index.log
./example.jp/user02@example.jp/Maildir/dovecot-uidlist
./example.jp/user02@example.jp/Maildir/dovecot-uidvalidity
./example.jp/user02@example.jp/Maildir/tmp
./example.jp/user02@example.jp/Maildir/cur
./example.jp/user02@example.jp/Maildir/new
./.bash_logout
./example.com
./example.com/user01@example.com
./example.com/user01@example.com/Maildir
./example.com/user01@example.com/Maildir/maildirfolder
./example.com/user01@example.com/Maildir/dovecot.index.log
./example.com/user01@example.com/Maildir/dovecot-uidlist
./example.com/user01@example.com/Maildir/dovecot-uidvalidity
./example.com/user01@example.com/Maildir/tmp
./example.com/user01@example.com/Maildir/cur
./example.com/user01@example.com/Maildir/new
./example.com/user01@example.com/Maildir/dovecot-uidvalidity.51fe6de3
./.bash_profile
./.bashrc
#


2013年7月14日日曜日

Dovecot Enterprise Editionについて

2018/01/08追記:いつのまにかリポジトリにアクセスできなくなったので、問い合わせをしました。
         以下のような返信をもらいました。
         要するに一般ユーザーには、同エディションは提供されないようです。
We have done some maintenance for expired accountsbecause we no longer have webshop and we don't provide dovecot-eerepository access without valid support contract with us.

Next year we disable all accounts without active support contract withus but start providing Dovecot Communition Edition packages for free. Wesend information about this change later.


2016/01/14追記: Dovecot Enterpriseについて(2016年1月現在)という記事を追加しました。

2014/07/01追記: ライセンス更新のお知らせがこないのでサイトを覗きにいったら、今現在は$0で提供されているようです。



今回は商用版dovecotについてです。


結論から先に書いてしまうと、(あたりまえですが)サポートを必要としない限り
購入するメリットは一切ありません。

なのに何で購入したかというと、商用版にはAmazon S3やDropboxをメールボックスのストレージとして
利用するための”Dovecot Object Storage Plugin”なるものがありドキュメントだけでも
読んでみたいと思ったからです。
#実際には、1ヵ月のデモライセンスと簡素なドキュメントがおまけでついてきました


商用版dovecotの導入

以下のサイトからまずは、商用版dovecotのリポジトリへのアクセスキーを購入します。

http://shop.dovecot.fi/

するとユーザ名とパスワードがメールで送られてくるので、/etc/yum.repos.d/dovecot.repoとして保存します。
[dovecot]
name=RHEL $releasever - $basearch - Dovecot Solutions
baseurl=https://username:password@yum.dovecot.fi/default/stable-2.2/el$releasever-$basearch
gpgkey=https://yum.dovecot.fi/RPM-GPG-KEY.dovecot
gpgcheck=1

次に、以下のどちらかを選択して導入します。

・ 新規にdovecotを導入する場合
   
 # yum install dovecot-ee

・ dovecotが既に導入されていて、アップデートする場合

 # yum update 


後はいつもどおりにdovecotを設定すれば普通に使えます。


Object Storage Pluginについて

試しにDropboxにメールを保存してみましたので、手順を書いておきます。
ただし、ドキュメントがあまりにも貧弱で、自分もひとまず動作が確認できただけという
状態です。なので、この内容を試す場合はあくまでも自己責任でお願いします。


a) Object Storage Pluginに必要なパッケージの導入

# yum install dovecot-ee-obox dovecot-ee-license

b) デモライセンスの登録

ライセンスがメールで送られてくるので、/var/lib/dovecot/dovecot-license.txtと
して保存します。

c) dropboxのマイアプリへdovecotを登録

https://dropbox.dovecot.fi/

上記URLにアクセスし、dovecotがdropboxにアクセスできるように許可をします。
登録が完了すると設定ファイルとして追加すべき内容が表示されます。



d) /etc/dovecot/conf.d/11-object-storage.confの作成

 c)の手順で表示された内容をもとに作成します。

mail_prefetch_count = 10
mailbox_list_index = yes
mail_uid = vmail
mail_location = obox:%d/%u:INDEX=~/:CONTROL=~/
mail_plugins = $mail_plugins obox
metacache_upload_interval = 5 mins
metacache_close_delay = 0 min
ssl_client_ca_file = /etc/pki/tls/cert.pem
plugin {
  obox_fs = fscache 100G:/var/lib/dovecot/cache:dropbox:https://XXXXXX:XXXXXXX@dropbox/
}

pluginの設定としては以上で、後は、メールの配送用にLMTPなりをセットアップすれば完了です。
Dropboxには以下のように保存されます。









使ってみた感想としては。。

・LTMPでメールを配送するのも、POPやIMAPでメールを取得するにも非常に時間がかかるのが気になります。
 → 単に設定が悪いだけかもしれませんが、S3QLと比較すると非常に遅いです

・突然サーバが死んでもメール自体はなくならないので安心です。




2013年6月23日日曜日

yum インストールねた

yumのインストールで、自分が多用するものを2つピックアップしてみます。


パスでインストールするものを指定する


インストールしたいコマンド名、またはライブラリ名そのものは分かってはいるが、パッケージ名が分からないような場合に利用します。
以下は、partprobeコマンドをインストールする例です。
(partprobeコマンドはCentOS5では、partedパッケージに含まれます)

# yum install /sbin/partprobe
Loaded plugins: fastestmirror, protectbase
Loading mirror speeds from cached hostfile
 * base: ftp.riken.jp
 * extras: ftp.riken.jp
 * updates: ftp.riken.jp
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package parted.i386 0:1.8.1-30.el5 set to be updated
--> Finished Dependency Resolution
Dependencies Resolved
===============================================================
 Package       Arch     Version           Repository     Size
===============================================================
Installing:
 parted       i386     1.8.1-30.el5       base           542 k
Transaction Summary
===============================================================
Install       1 Package(s)
Upgrade       0 Package(s)
Total download size: 542 k
Is this ok [y/N]:



ダウンロードしてきたRPMを依存関係を解消しつつインストールする


標準のリポジトリ以外のRPMパッケージなどをダウンロードし、rpmコマンドでインストールしようとしたら依存関係が原因でインストールに失敗するような場合に利用します。

以下は、AWS関連のRPMをダウンロードしてインストールする例です。
依存関係でrubyとruby-libsがインストールされます。


# yum localinstall ec2-ami-tools.noarch.rpm
Loaded plugins: fastestmirror, presto
Setting up Local Package Process
Examining ec2-ami-tools.noarch.rpm: ec2-ami-tools-1.4-0.9.noarch
Marking ec2-ami-tools.noarch.rpm to be installed
Loading mirror speeds from cached hostfile
 * base: ftp.riken.jp
 * epel: ftp.riken.jp
 * extras: ftp.riken.jp
 * updates: ftp.riken.jp
Resolving Dependencies
--> Running transaction check
---> Package ec2-ami-tools.noarch 0:1.4-0.9 will be installed
--> Processing Dependency: ruby for package: ec2-ami-tools-1.4-0.9.noarch
--> Running transaction check
---> Package ruby.x86_64 0:1.8.7.352-10.el6_4 will be installed
--> Processing Dependency: ruby-libs = 1.8.7.352-10.el6_4 for package: ruby-1.8.7.352-10.el6_4.x86_64
--> Processing Dependency: libruby.so.1.8()(64bit) for package: ruby-1.8.7.352-10.el6_4.x86_64
--> Running transaction check
---> Package ruby-libs.x86_64 0:1.8.7.352-10.el6_4 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
=========================================================================
 Package                Arch          Version             Repository        Size
=========================================================================
Installing:
 ec2-ami-tools        noarch        1.4-0.9             /ec2-ami-tools.noarch   680 k
Installing for dependencies:
 ruby                    x86_64      1.8.7.352-10.el6_4   updates             533 k
 ruby-libs               x86_64      1.8.7.352-10.el6_4   updates             1.6 M
Transaction Summary
==========================================================================
Install       3 Package(s)
Total size: 2.8 M
Total download size: 2.2 M
Installed size: 8.1 M
Is this ok [y/N]:



2013年6月11日火曜日

CentOS6.4で最新DovecotをRPMで導入する

2018/01/08追記: 元記事のサイトは全く更新されておらず、最新のdovecotを導入する事はできないので、「Dovecot community repositoriesが公開されました」を参照してください


2016/05/04追記: 「CentOS6.x 最新のpostfixとdovecotをRPMで導入する」も参照ください


最近知ったのですが、http://repos.fedorapeople.org/なるサイトがあって、
ここにdovecotやpostfixの最新版のRPMが転がってます。

RPMそのものを落として利用しても良いでしょうし、リポジトリ用ファイルも
用意されているので、そちらを利用しても良いでしょう。

例えば、CentOS6.4の環境で、リポジトリ用ファイルを用意してインストールするには以下のようにします。
 ※既にdovocotがインストールされている環境では、yum updateするだけで最新になります
 ※別途、依存関係でepelリポジトリも必要になるので先にセットアップしておいてください
    # rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm


# cd /etc/yum.repos.d/
# wget http://repos.fedorapeople.org/repos/mstevens/dovecot/epel-dovecot.repo
# yum install dovecot

2013年6月9日日曜日

rsyslog $AllowedSenderについて

今回は、”$AllowedSender"ディレクティブについてです。

このディレクティブは、ログサーバとしてrsyslogを稼動させた場合に、シスログを受け取るべき
ホストやネットワークを制限する為に使います。
※なんでもかんでも送られてきたシスログを受け取ってはまずいので


まずは正しい記述からです。
TCPとUDPの両方に制限が必要な場合、以下のようにそれぞれを分けて記述する必要があります。

$ModLoad imudp
$UDPServerRun 514
$AllowedSender UDP, 127.0.0.1, *.example.jp, 192.168.0.0/24

$ModLoad imtcp
$InputTCPServerRun 514
$AllowedSender TCP, 127.0.0.1, *.example.jp, 192.168.0.0/24



次に、結構良く見かける間違った記述についてです。

※TCPとUDPを一行で設定できると考えたのだと思うのですが、以下のように
  記述してるケースです。
$AllowedSender TCP, UDP,127.0.0.1, *.example.jp, 192.168.0.0/24

この場合の”UDP”部分はホスト名として扱われてしまい、ログにもその旨が表示されます。

rsyslogd: DNS error: Can't resolve "UDP"
ryslogd: Hostname "UDP" WON'T be added to ACL.

で、厄介なことに$AllowedSenderのデフォルトは、"all allowed"なので、この場合は
UDPに全く制限がかかっていない事にご注意ください。。