*** Postfix+Dovecot(バーチャルドメイン・メール)+pgsql形式 [#mc1f817c]

- Postfixでバーチャルドメイン化し、[[vpopmail形式>Postfix+Dovecot(バーチャルドメイン・メール)+vpopmail形式の設定の巻]]にしたのを味をしめたので今度は、pgsql=Postgresに挑戦してみました。~
設定としては意外と簡単でvpopmail形式よりこっちを先にやればと後悔(笑)~
※COLOR(RED){Postfixにより配送される先は、vpopmailのままなので環境に応じて変更したほうがいいです。}

- Postgresで設定するメリットは、データベースでありプログラムに自信があれば、~
バーチャルドメインのユーザを登録・変更・削除など作成可能だということ。vpopmailより自由度高いでしょ?

- Dovecotで管理するテーブルは、create文をみると単純そのものです。パスワードの管理は?~
と一番気になるのだか PLAIN, PLAIN-MD5, DIGEST-MD5, and CRYPT をサポートしています。

: 前提条件 | COLOR(RED){''postgresql''}パッケージがインストール((パーケッジの[[インストール方法>パーケッジのインストールの巻]]はこちらを参照))されていることが条件。~
パッケージの確認は、COLOR(RED){''rpm -q postgresql''}コマンドで確認できるよ。~

*** Dovecotを再コンパイル [#k413bb0f]

- こちらも yum で既に導入済みのDovecotでは、pgsqlをサポートしていないのでソースから再コンパイルします。~
※yum で既に導入済みのDovecotがあるとしたら、それはそれでおいておきましょう。
-- Dovecot : [[http://dovecot.org/>http://dovecot.org/]]
-- Dovecot 0.9xバージョンを[[ダウンロード>http://dovecot.org/download.html]]してくること。1.x系(現時点では、test版)は、プロセス構成も定義ファイルも違うから。
-- COLOR(RED){'''dovecot-0.99.14.tar.gz'''}をダウンロードする。
 % wget http://dovecot.org/releases/dovecot-0.99.14.tar.gz
 % gzip -cd dovecot-0.99.14.tar.gz | tar xf -
 % cd ddovecot-0.99.14/
 # ./configure --with-vpopmail --with-pgsql --with-rawlog
: 注意!! | ''configure''で最終行にCOLOR(RED){''pgsql''}と表示されていることを確認する。この表示がない場合は、pgsqlを使用することができない。~
configureを行うのは必ずCOLOR(RED){rootユーザ}で行うこと。~
それでもpgsqlが表示されていない場合は、Postgresqlの設定をやりなおす。
 Install prefix ...................... : /usr/local
 File offsets ........................ : 64bit
 Building with SSL support ........... : no
 Building with IPv6 support .......... : yes
 Building with pop3 server ........... : yes
 Building with user database modules . : static passwd passwd-file pgsql  vpopmail (modules)
 Building with password lookup modules : passwd passwd-file shadow pgsql vpopmail (modules)

--- インストールしましょう
 # make
 # make install-strip
 # make install
 
 # cp /usr/local/sbin/dovecot /usr/sbin/dovecot
 ※上記を行う場合は、オリジナルのdovecotを必ず退避しておくこと

*** バーチャルドメインユーザの管理アカウントの作成とPostgresqlデータベースの作成 [#ga158e27]

-- バーチャルドメインユーザを管理する専用のアカウントを作成します。
 # /usr/sbin/groupadd -g 21000 virtual
 # /usr/sbin/useradd -g 21000 -u 21000 virtual

-- COLOR(RED){''virtual''}アカウントがPostgresqlのデータベースを使用できるように設定します。
 $ su - postgres
 postgres$ /usr/bin/createuser virtual
 Shall the new user be allowed to create databases? (y/n) y
 Shall the new user be allowed to create more new users? (y/n) n
 CREATE USER

-- バーチャルドメインユーザの管理データベース''virtual''を作成します。
 postgres$ /usr/bin/createdb virtual
 CREATE DATABASE

-- ''virtual''アカウントが''virtual''データベースの全権限が使えるように設定します。~
※説明が・・・判りずらいですか?(^^
 postgres $ psql virtual
 virtual=# grant all on virtual.* to virtual

-- ''virtual''アカウントにて''virtual''バーチャルドメインユーザの管理テーブルを作成します。
 $ su - virtual
 virtual$ psql virtual
 CREATE TABLE users (
     userid VARCHAR(128) NOT NULL,
     password VARCHAR(64) NOT NULL,
     home VARCHAR(256) NOT NULL,
     uid INTEGER NOT NULL,
     gid INTEGER NOT NULL,
     active CHAR(1) DEFAULT 'Y' NOT NULL
 );

*** Postgresqlのリスナー生成と接続先の設定 [#d34dc5a5]

- yumによってインストールされたPostgresqlは、初期設定では外部から接続要求が行えないパラメタとして起動されています。~
そんな訳で当然リスナーも起動していません。~
※リスナーが起動されている場合は、5432portで接続要求待ちとなっています。
-- COLOR(RED){''/etc/rc.d/init.d/postgresql''}ファイルを修正しリスナーが起動できるように設定します。~
※postmasterの起動オプションに COLOR(RED){''-i''} を追加します。
 $SU -l postgres -c "$PGENGINE/postmaster -i -p ${PGPORT} -D '${PGDATA}' ${PGOPTS} &" >> $PGLOG 2>&1 /tmp/postmaster.log < /dev/null
: 接続できない場合などは |  PGLOG=/var/log/postgres.log と記述するのもいいのかも?~
エラーの原因が特定できるかもしれません。

-- COLOR(RED){''pg_hba.conf''}ファイルを修正しクライアントからの接続ができるように設定します。~
※yumでインストールした場合、''/var/lib/pgsql/data/pg_hba.conf''となります。
 host     all         all        192.168.0.0        255.255.255.0        trust
: 注意! | 接続可能なネットワークを指定しますが、間違っても 5432portを外部に公開してなんてしないように。

-- 上記の修正が終わったらPostgresqlを再起動します。
 # /etc/rc.d/init.d/postgresql restart

- Dovecotでのpgsql認証は、PQconnectdbコマンドによってユーザ・パスワードのデータを取得し認証を行います。~
そのためサーバであってもリスナーとやりとりしますので、上記で許可したネットワーク内からアクセスできるか確認します。~
アクセスがうまくいかない場合は、下記をみてがんばってください!
-- [[pgAdmin III>http://www.pgadmin.org/]] か [[つきみWeb>http://www.hi-ho.ne.jp/tsumiki/]] のソフトをクライアントに入れてvirtualテーブルにアクセスできるか確認します。
-- 手前ミソだけどこんな風に確認する [[PostgreSQL+CSEを設定するメモ>http://www.sea-bird.org/doc/Solaris8/postgres4.html]]
-- [[PQconnectdb データベースサーバーとの接続を新たに確立します>http://www.postgresql.jp/document/pg721doc/programmer/libpq-connect.html]]

*** Dovecotをpgsql形式に対応させる [#lb0f2a13]

- COLOR(RED){''/usr/local/etc/dovecot.conf''} の認証形式をPostgres=pgsqlに変更します。
 auth_userdb = pgsql /usr/local/etc/dovecot-pgsql.conf
 auth_passdb = pgsql /usr/local/etc/dovecot-pgsql.conf

- pgsql形式でのアクセス方法等の指定を ''/usr/local/etc/dovecot-pgsql.conf'' に記述します。~
COLOR(RED){./dovecot-0.99.14/doc} の下からコピーしてきます。
 # バーチャルドメインユーザの管理データベース・テープルの接続先(virtual/virtual)
 # password は、virtualアカウントを指定する
 connect = dbname=virtual user=virtual password=xxxxxx
 
 # password を取得するsql文を指定
 password_query = SELECT password FROM users WHERE userid = '%u'
 
 # バーチャルドメインユーザのディレクトリ、gid/uid を取得するsql文を指定
 # Postfixで指定したディレクトリのuid/gidと同じ物にする
 # Postfixでは、gid/uid共に20001/20001としているので固定の値を返すようにした
 user_query = SELECT home, 20001 AS uid, 20001 AS gid FROM users WHERE userid = '%u'
 
 # passwdの格納方式
 # DES, MD5 を使うのが良いがとりあえず生のパスワードで(^^
 default_pass_scheme = PLAIN

- ここまできたら、Dovecotを再起動しておきます。(/var/log/maillog でエラーが出てないことを確認)
 # /etc/rc.d/init.d/dovecot restart

*** バーチャルドメインユーザ管理データベースにデータを入れる [#x7baf313]

- 問題もなくここまでこれていればokっす。あとはバーチャルドメインユーザを登録するだけ♪

- ''virtual'' アカウントでhogeアカウントを追加するSQLを実行します。
 $ psql virtual
 virtual=> insert into users values ('hoge@sea-bird.org', 'hoge', '/home/vpopmail/domains/sea-bird.org/hoge', 0, 0);
-- hoge設定内容は、以下のとおり
|CENTER:項目|CENTER:値|CENTER:意味|h
|userid|hoge@sea-bird.org|バーチャルメールアカウントを指定します|
|password|hoge|passwordですが、default_pass_schemeに依存します|
|home|/home/vpopmail/domains/sea-bird.org/hoge|バーチャルメールアカウントのメール保管左記を指定します|
|uid|0|user_queryで、20001固定を返しているのでなんでもいいです|
|gid|0|user_queryで、20001固定を返しているのでなんでもいいです|
|active|Y|有効なユーザの場合 'Y'を指定します。default='Y'|

-- ドメインのpostmasterと、バーチャルドメイン指定している window-shop.biz も同じような設定をする。
 $ psql virtual
 virtual=> insert into users values ('postmaster@sea-bird.org', 'hoge', '/home/vpopmail/domains/sea-bird.org/postmaster', 0, 0);
 virtual=> insert into users values ('postmaster@window-shop.biz', 'hoge', '/home/vpopmail/domains/window-shop.biz/postmaster', 0, 0);

-- POP3でメールを受信するときには、ユーザIDを必ず ''user@domain'' という形式にすること。

*** パスワード認証をPLAIN-MD5にしてみる [#i3e40662]

- いくらローカルの環境とはいえ、データベースに生のパスワード文字列が設定されているのは~
気持ちが悪いので、PLAIN-MD5 認証を設定してみます。

- hoge@sea-bird.org のパスワードを、''hoge'' とした場合は、以下のようにします。~
md5_hex("hoge") 部分に、パスワードを設定しコマンドを実行します。~
この実行で得られた結果が、PLAIN-MD5 認証の値になります。
 $ perl -MDigest::MD5 -e 'printf "{PLAIN-MD5}%s\n", Digest::MD5::md5_hex("hoge")'
 {PLAIN-MD5}ea703e7aa1efda0064eaa507d9e8ab7e

- hogeのパスワードを更新します。
 virtual=> update users set password = '{PLAIN-MD5}ea703e7aa1efda0064eaa507d9e8ab7e'
              where userid = 'hoge@sea-bird.org';

- かんたんSQLコマンド
|CENTER:コマンド|CENTER:用途|h
|drop table テーブル名|テーブルの削除|
|update テーブル名 set 項目名 = '内容' where 項目名 = '条件'|項目の更新|
|select 項目名 from テーブル名|テーブル項目内容の参照|
|delete from テーブル名 where 項目名 = '条件'|テーブル項目の削除|

*** その他の認証 [#ne9afd98]

- ./doc/auth.txt からの抜粋
 DES:
   mkpasswd
   perl -e 'printf "%s\n", crypt("pass", "two-letter-salt")'
 
 MD5:
   mkpasswd --hash=md5
   perl -e 'printf "%s\n", crypt("pass", "\$1\$6-8-letter-salt\$")'
 
 PLAIN-MD5:
   perl -MDigest::MD5 -e 'printf "{PLAIN-MD5}%s\n", Digest::MD5::md5_hex("pass")'
 
 DIGEST-MD5:
   perl -MDigest::MD5 -e 'printf "{DIGEST-MD5}%s\n", Digest::MD5::md5_hex("user:realm:pass")'

*** COLOR(RED){注意点} [#k13ca181]

- ここでは、メール受信のための設定を行うのです。上記で説明している users テーブルにアカウント情報を~
追加しただけでは外部からメールを受け取ることはできません。ですのでバーチャルドメインに対するメールを~
受け取るための設定を行います。

-- /etc/postfix/vmailbox に、受け取るべきアカウントとドメイン、配送先を記述(羅列)する。 
 hoge@window-shop.biz        window-shop.biz/hoge/Maildir/
-- hash を作成します。この作業を行わないと上記で記述した内容が反映されません。 
 # /usr/sbin/postmap /etc/postfix/vmailbox
-- Postfix を再起動します。
 # /etc/rc.d/init.d/postfix restart

*** 参考にさせて頂いたサイト様 [#gb205fe4]
- [[PostgreSQLをコマンドラインで操作する>http://www.atmarkit.co.jp/flinux/rensai/postgres02/postgres02.html]]
- [[http://www.atmarkit.co.jp/flinux/rensai/postgres02/postgres02.html>http://www.atmarkit.co.jp/flinux/rensai/postgres02/postgres02.html]]

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS