2007年12月2日日曜日

[Postfix][SQLite][dovecot] バーチャルな受信まわり

・Postfix で virtual_mailbox〜〜などを設定した
・配送された
・dovecot, SQLite をいれて
・dovecot に sqlite 使わせて受信してみた


ざっとこんな風。

o main.cf に下記設定 (ここでは example.jp とした)
virtual_mailbox_domains = example.jp
virtual_mailbox_base = /home/vmailbox
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_alias_maps = hash:/etc/postfix/virtual

uid_maps,gid_mapsはめんどいのでstaticに。値は適当。
ユーザ、グループは存在しない。
/home/vmailbox は umask 027, chown 5000:5000で作っておいた。

・/etc/postfix/{vmailbox,virtual} は以下
- vmailbox
hoge@example.jp example.jp/hoge/Maildir/

- virtual (ほかに転送しないならいらない)
hoge@example.jp hoge@example.jp,fuga@example.com

Maildir 形式をつかうのでケツに/
作ったあとは postmap を忘れずに。

o dovecot いれ
sudo apt-get install dovecot-common dovecot-imapd dovecot-pop3d

o sqlite いれ
sudo apt-get install sqlite3 sqlite3-doc

o dovecot 設定
みたところ
PasswordDatabase
Authentication/PasswordSchemes
・デフォルト設定のdovecot.conf,dovecot-sql.conf

まずdovecot.conf
protocols = pop3 pop3s imaps
(pop3 は手で確認するため用.できたら削除)

passdb sql {
#Path for SQL configuration file
args = /etc/dovecot/dovecot-sql.conf
}
userdb sql {
#Path for SQL configuration file
args = /etc/dovecot/dovecot-sql.conf
}

passdb sql, userdb sql の箇所はコメントアウト -> コメントインしただけ。

次dovecot-sql.conf
driver = sqlite
connect = /etc/dovecot/authdb.sqlite
default_pass_scheme = SSHA
password_query = SELECT userid as user, password FROM users WHERE userid = '%u' AND active = 'Y'
user_query = SELECT home, uid, gid FROM users WHERE userid = '%u' AND active = 'Y'

を記述

sqliteをつかうぜ、な設定
connect でデータベースファイル設定.例のまま.
default_pass_scheme は なんとなく SSHAで (Salted SHA1)。SHA256 は 1.1系かららしいので使えず。。
password_query と user_query は書かれていたものほとんどそのまま。

で、dovecot 再起動。

o sqliteで受信用ユーザ設定
パスワードは sqliteにぶちこむので
echo -n 'パスワードの文字列' |sha1sum
をして sha1 した文字列を作成しておく。

dovecotpw で ssha なやつを作成しておく。

/etc/dovecot 以下でごそごそ
# touch authdb.sqlite
# chmod 640 authdb.sqlite
# chgrp mail authdb.sqlite
(sqliteつかう場合、まずtouchするのがフツーなんだろうか?ワカラン。)

# sqlite3 authdb.sqlite

以下sqlite3 のプロンプト

CREATE TABLE users (
userid VARCHAR(128) NOT NULL,
password VARCHAR(64) NOT NULL,
home VARCHAR(255) NOT NULL,
uid INTEGER NOT NULL,
gid INTEGER NOT NULL,
active CHAR(1) DEFAULT 'Y' NOT NULL
);

insert into users values (
'hoge@example.jp',
'ぱすわーどをsalted sha1した文字列',
'/home/vmailbox/example.jp/hoge',
5000,
5000,
'Y'
);

select * from users;
.quit

あとはtelnet で 110 たたいて確認。

telnet localhost 110

user hoge@example.jp
pass ぱすわーど

list なり
retr [数字]なり
dele [数字]なり


SQLite を使ったワケ: 個人用なので MySQL,Postgres をつかうのは大袈裟。SQLite がピッタリ。

0 件のコメント:

コメントを投稿