My IMAPサーバを再構築 (Fetchmail+Dovecot+Pigeonhole(Sieve))

2008年頃に構築したMy IMAPサーバ(以下の記事で書いていました)を再構築したのでメモ。

この時はcoLinuxを使ってWindows上でLinuxを走らせ、DovecotIMAPサーバを構築した。今回、使用していたWindowsPCをESXiサーバに入れ替えてしまったため、ESXi上に再構築することにした。

今回の移行方針

OS

以前はFedoraを何となく入れていたが、普段からなれているCentOS 6.2に変更。ディスク容量&メモリ使用量節約のため不要なソフトウェアは極力入れず、サービスも最低限起動することを基本方針とする。

IMAPサーバ

今までと同じでDovecotを使用する。ただし、メール振り分けはProcmailを使わず、Sieveを使うことにした。Seiveとは、電子メールフィルタリングのためのプログラミング言語で、Dovecotもサポートしている。

例えば、Sieveでは振り分けルールを以下のように書くことができる。非常にシンプルなので*1Procmailのレシピより読み易い。

if address :contains ["From", "To"] "@sourceforge.net" {
   fileinto "ML;
}

今回Sieveにした理由は以下の2点。

なお、Dovecot2系からはSieveはPigeonholeでサポートされているので、これを使う。

メールの取得〜Mailderへの格納

今までと同じでFetchmailを使用する。以前はFetchmailでメールサーバから取得したメールをProcmailに渡してMailDirに格納していたが、振り分けには前述の通りSieveを利用するので、直接Dovecotに渡すこととする。

構築手順

OSインストール

CentOSCentOS-6.2-x86_64-minimal.isoを使って、最小構成でインストールする。
なお、VMのメモリは512MBに設定。これは設定完了後に下げます*2

不要なサービスの停止

私の環境では以下のサービスを停止にした。今のところ問題は起きていないけど自己責任で。

  • auditd
  • ip6tables
  • iptables
  • netfs
  • nfslock
  • rpcbind
  • rpcgssd
  • rpcidmapd
  • iscsi
  • iscsid
  • lvm2-monitor
  • fcoe
  • lldpad

必要なソフトウェアのインストール

yumでさくっとインストール完了。

yum install fetchmail dovecot dovecot-pigeonhole

Fetchmailの設定

  • $HOME/.fetchmailrcの作成

以前作成したのとほぼ同じ。変わったのは、Procmailに渡していたところ。ここを、Dovecotに渡すようにする。"/usr/libexec/dovecot/deliver"とする。
また、設定に失敗してメールが消えないように、とりあえず"keep"を設定しておこう。

# directory for log
#set logfile "/home/hogehoge/fetchmail.log"

# destination for fetchmail error
set postmaster root
set no bouncemail

defaults
        protocol pop3
        keep
        no mimedecode

poll pop3.example.org
        protocol pop3
        user foo
        password bar
        mda "/usr/libexec/dovecot/deliver"

以前作成したのと全く同じ。サービス化しちゃってますが、別にcronで動作させてもOK。

#!/bin/sh
#
# chkconfig: 345 99 20
#
# description: Fetchmail auto start script

# Source function library.
. /etc/rc.d/init.d/functions

# See how we were called.
case "$1" in
  start)
        for user in `ls /home/`
        do
                if [ -f /home/$user/.fetchmailrc ]; then
                        echo "fetchmail for $user starting..."
                        su $user -c "/usr/bin/fetchmail --daemon 60"
                fi
        done
        ;;
  stop)
        # Stop daemons.
        for user in `ls /home/`
        do
                if [ -f /home/$user/.fetchmailrc ]; then
                        echo "fetchmail for $user stoping..."
                        su $user -c "/usr/bin/fetchmail --quit"
                fi
        done
        ;;
  *)
        echo "Usage: $0 {start|stop}"
        exit 1
esac

exit 0

Dovecotの設定

  • MailDirの設定を行う。
mail_location = maildir:~/Maildir
  • IMAPサーバの設定を行う。
protocols = imap
    • /etc/dovecot/conf.d/10-master.conf
service imap-login {
  inet_listener imap {
    port = 143
  }
  inet_listener imaps {
    port = 993
    ssl = yes
  }
  • Sieveを有効にする。
    • /etc/dovecot/conf.d/15-lda.conf
protocol lda {
  # Space separated list of plugins to load (default is global mail_plugins).
  mail_plugins = $mail_plugins sieve
}
    • /etc/dovecot/conf.d/20-managesieve.conf
protocols = $protocols sieve
    • /etc/dovecot/conf.d/90-sieve.conf
plugin {
  sieve = ~/.dovecot.sieve
  sieve_global_path = /var/lib/dovecot/sieve/default.sieve
  sieve_dir = ~/sieve
  sieve_global_dir = /var/lib/dovecot/sieve/

Thunderbirdから接続してみる。

IMAPで繋がることを確認。

SieveのAdd-Onをインストール

ThunderbirdのAdd-OnThunderbirdにインストールする。

Sieveによる振り分け設定

インストールするとThunderbirdのアカウント設定に「Sieve Settings」が登場する。そこから、「Yes, manage Sieve scripts for this account」を選択して保存する。
f:id:Hirohiro:20120707192240p:plain

有効にしたら、ツール>Sieve Filter Settingからフィルタの設定を開く。フィルタは複数作成できるが、有効にできるのは1つだけなので注意。画面右の「Edit」をクリックしてフィルタの編集画面を開く。
f:id:Hirohiro:20120707192227p:plain

Seieveのソース編集画面が開く。ここで振り分けルールを直接記述しても良いが、「Source」をクリックするとGUIでの設定に切り替わる。
f:id:Hirohiro:20120707192245p:plain

画面右の「Action」「Tests」「Operators」からドラッグ&ドロップで各コマンドを配置し、詳細設定を行うことができる。
f:id:Hirohiro:20120707192251p:plain

*1:その分言語としては制限が多い

*2:ある程度メモリを割り当てないとインストールできないようです