いよいよPostfix導入実験の山場へと来た。
virtual_mailboxを使って、メールアカウントをOSのアカウントから分離して扱うための実験を始める。
まずは、PostgreSQLにvirtual_mailboxで使うテーブルを用意する。
今回用意するテーブルは2つ。
一つはvirtual_mailboxで扱うドメイン名のリスト。
もう一つはvirtual_mailboxで扱うメールアカウントの情報。
ドメイン名のリストは
CREATE TABLE virtual_domains (
と言った感じ。
record_id serial PRIMARY KEY,
domain TEXT NOT NULL,
status_flag SMALLINT DEFAULT 0,
note TEXT
);
GRANT SELECT ON TABLE virtual_domains TO postfix;
基本的にエイリアス用に作ったテーブルと考え方は同じで、基本的にはドメイン名を格納するカラムがあればいい。
メールアカウントの情報は
CREATE TABLE virtual_maps (
と言う風になり、受信する時に使うログインIDとパスワードがあり、メールアドレスとスプール先のディレクトリ情報を格納している。
record_id serial PRIMARY KEY,
login_id TEXT NOT NULL,
password TEXT NOT NULL,
address TEXT NOT NULL,
maildir TEXT NOT NULL,
status_flag SMALLINT DEFAULT 0,
note TEXT
);
GRANT SELECT ON TABLE virtual_maps TO postfix;
それぞれにテスト用のデータを入れてやる。
INSERT INTO virtual_domains (domain,status_flag) VALUES ('sample.com',1);
INSERT INTO virtual_maps (login_id,password,address,maildir,status_flag) VALUES ('vm0001','password','testmail@sample.com','vm/vm0001/',1);
続いて /etc/postfix/main.cf にvirtual_mailboxの設定を追記する。
virtual_transport = virtual
と言う感じで基本的にはデフォルト値のコピー。
virtual_minimum_uid = 100
virtual_uid_maps = static:10000
virtual_gid_maps = static:10000
virtual_mailbox_base = /var/mail
virtual_mailbox_domains = pgsql:/etc/postfix/pgsql-virtual_domains.cf
virtual_mailbox_maps = pgsql:/etc/postfix/pgsql-virtual_maps.cf
virtual_mailbox_limit = 51200000
virtual_mailbox_lock = fcntl, dotlock
virtual_mailbox_domains用のPostgreSQLの設定情報を用意する。
ファイルはmain.cf内に書いた /etc/postfix/pgsql-virtual_domains.cf で
hosts = unix:/tmp
user = postfix
password = *******
dbname = postfix
select_field = domain
table = virtual_domains
where_field = domain
additional_conditions = and status_flag = 1
もう一つ、virtual_mailbox_maps用のPostgreSQLの設定情報を用意する。
ファイルはmain.cf内に書いた /etc/postfix/pgsql-virtual_maps.cf で
hosts = unix:/tmp
となる。
user = postfix
password = *******
dbname = postfix
query = SELECT maildir || 'Maildir/' FROM virtual_maps WHERE address = '%s' AND status_flag = 1
virtual_mailbox_maps用のクエリーはこれまでと異なり、SELECT文を丸ごと記載する方法をとっている。
理由はSELECT結果の表記がちょっと複雑になっているため。
ここまで用意できたら /var/mail の所有権をmain.cfで書いたUIDとGIDに書き換えてPostfixを再起動する。
# chown 10000:10000 /var/mail
# /usr/sbin/postfix reload
後はメールを送ってみて /var/mail の中にスプールディレクトリが出来てメールが保存されていれば成功。
とりあえずメールは送れたので、次は受信できるようにしなければ。