やかんブログ

pop3/imap サーバdovecotのユーザをmysqlで管理する

2008年05月16日(金)17:06|天方

dovecot(pop3/imapサーバ)をmysqlとpostfix adminで管理する

少し前に、それなりの数のユーザ数を扱うメールサーバを立てました。

MTAにはpostfix、POP3サーバにはdovecot 1.0.7 、アカウント管理アプリにはpostfix admin(http://sourceforge.net/projects/postfixadmin/)、アカウント情報の管理にはmysqlを利用するといった構成にしました。

postfix adminでは、

・WEBアプリで管理ができる。

・複数ドメインを管理可能。

・各ドメインに複数管理者を設置可能

・各ドメインでは、仮想メールユーザ(UNIXユーザはつくらない)を設定可能

・各ドメインでは、メールアドレス転送設定を設定可能

と基本的な機能は網羅しています。

メールをバーチャルホストで管理していて、簡単にメールユーザを管理するのに向いています。

今回は、dovecotとpostfix adminの連携の設定について話をしたいと思います。 postfix adminはDBにアカウント情報を保持しますが、そのうち、dovecotで扱うのはmailboxテーブルのみです。

postfix adminのテーブル

mailboxテーブルは以下のような構造になっています。

Create Table: CREATE TABLE `mailbox` (   
  `username` varchar(255) NOT NULL default '',
  `password` varchar(255) NOT NULL default '',
  `name` varchar(255) NOT NULL default '',
    `maildir` varchar(255) NOT NULL default '',
  `quota` int(10) NOT NULL default '0',
  `domain` varchar(255) NOT NULL default '',
  `created` datetime NOT NULL default '0000-00-00 00:00:00',
  `modified` datetime NOT NULL default '0000-00-00 00:00:00',
  `active` tinyint(1) NOT NULL default '1',
  PRIMARY KEY  (`username`),
  KEY `username` (`username`)
) ENGINE=MyISAM DEFAULT CHARSET=latin COMMENT='Postfix Admin - Virtual Mailboxes'

このうち、username、password、maildir、activeカラムを利用します。 maildirカラムは、メールを保持するフォルダ名、activeカラムは1の場合に有効となります。

今回は、postfix adminが設定されていて、DBにテーブルが存在する前提で、dovecotの設定をどのようにするかを扱いたいと思います。

dovecotの基本設定

最初にdovecotの基本設定ファイルである/etc/dovecot.confの設定をします。dovecot.confは下記のようにします。

mail_location = maildir:~/Maildir
protocol pop3 {
  mail_executable = /usr/libexec/dovecot/popbsmtp.sh /usr/libexec/dovecot/pop3
  pop3_uidl_format = %08Xu%08Xv
}

protocol lda {
}

auth default {
  mechanisms = plain
  #  passdb pam {
  # 認証でpamも使いたい場合はここのコメントを外す。
  #  }
  passdb sql {
    args = /etc/dovecot-mysql.conf
  }
  userdb sql {
    args = /etc/dovecot-mysql.conf
  }
  user = root
}
dict {
}
plugin {
}

「passdb sql」、「userdb sql」の項目を追加します。実際にはこの設定項目の

args = /etc/dovecot-mysql.conf

で設定したファイルにmailboxテーブルを参照するクエリを設定することで、dovecotの認証にmailboxテーブルの情報を使うことができます。

dovecotでのmysqlの設定

/etc/dovecot-mysql.confの設定は以下の通りです。

driver=mysql
connect=host=localhost dbname=****** user=****** password=*****
default_pass_scheme=PLAIN
user_query = SELECT concat('/var/spool/virtual/', maildir) as home,
concat('/var/spool/virtual/', maildir) as mail,
10000 as uid,
10000 as gid FROM mailbox
WHERE username='%u' AND active='1'
password_query = SELECT username as user,
password FROM mailbox
WHERE username = '%u' AND active='1'

******の部分は適切な設定に読み替えてください。 ここで、一番重要な設定はuser_queryとpassword_queyです。

user_queryには、ユーザ情報を取得するクエリを、password_queryには、有効なユーザに対応するユーザ名とパスワードを返すクエリを記述しています。 user_queryでは、メールを格納するフォルダパスをconcat(‘/var/spool/virtual/’, maildir)のようにして指定しています。

このようにmysqlでユーザ管理をするpop3/imapサーバは簡単に構築できます。Linuxメールサーバのユーザ管理が面倒という人は一度導入を検討してみてはいかがでしょうか。

この記事に関するお問い合わせはこちら

ページの先頭へ