qmail+vpopmailにて運用したことがある人であれば、「Unixの実アカウントを使わずにメールの運用ができれば…」と考えている方もたくさんいると思います。
そこで、PostfixとPostgreSQLとcourier-imapを使い、qmail+vpopmailのような環境を構成してみたいと思います。
(まとめになかなか時間がかかりました。。。)
[構築する環境]
OS:VineLinux4.0[postgreSQLの設定など]
データベース名 : postfix
DB文字符号 : EUC_JP
DB所有者 : pgsql
PostfixからのDB接続ユーザ/パスワード : postfix / postfix
PostfixAdminからのDB接続ユーザ/PWD : postfixadmin / postfixadmin[バーチャルアカウント宛メール受信用UNIXユーザ]
ユーザ名 : mailuser
UID : 10000
GID : 10000
HOME : /var/mail
1.PostfixをPgsql対応にする。
まずpostgreSQLを入れておきます。入れ方は任せます。(笑)
# apt-get install postgresql-server
次にPostfixをインストール…したいところですが、通常のインストールですとPostfixはpostgresqlに対応していませんので、postfixのrpmソースを準備し、パッケージを構築し直します。
# apt-get source postfix (Postfixのソースを取得)
# rpm -Uvh postfix-2.2.10-0vl6.src.rpm (ソースrpmを展開)
# cd /usr/src/vine/SPECS (展開されたソースrpmのspecファイルが置かれる場所)
# vi postfix.spec (specファイルを編集しましょう)
いろいろとこれは悩みましたが、Postfixをpostgresqlに対応させるため、specファイルは以下のように編集しました。
{postfix.spec 2行目あたり}
%define build_pgsql 1 ←とりあえず、1にして「pgsqlを使うぞっ」という意志を見せます。
その後、specファイルの編集を終え、rpmを作成します。
# rpm -ba postfix.spec (rpmができるまで、しばし待ちます…。)もし、構築中に、
エラー: ビルド依存性の失敗:
db4-devel >= 4.2.52 は postfix-2.2.10-0vl6.i386 に必要とされています
pam-devel は postfix-2.2.10-0vl6.i386 に必要とされています
gdbm-devel は postfix-2.2.10-0vl6.i386 に必要とされています
cyrus-sasl-devel は postfix-2.2.10-0vl6.i386 に必要とされています
openssl-devel は postfix-2.2.10-0vl6.i386 に必要とされています
postgresql-devel は postfix-2.2.10-0vl6.i386 に必要とされています
openldap-devel は postfix-2.2.10-0vl6.i386 に必要とされています
pcre-devel は postfix-2.2.10-0vl6.i386 に必要とされていますなどでた場合、
# apt-get install db4-devel pam-devel gdbm-devel …
として、ビルドに必要なパッケージを組み込んでおきます。
しばらくすると、rpmパッケージができあがります。
# cd /usr/src/vine/RPMS/i386/ (rpmはここにできます。)
# ls -la
-rw-r–r– 1 root root 1217456 12月16日 00:04 postfix-2.2.10-0vl6.i386.rpm
-rw-r–r– 1 root root 23837 12月16日 00:04 postfix-ldap-2.2.10-0vl6.i386.rpm
-rw-r–r– 1 root root 14981 12月16日 00:04 postfix-mysql-2.2.10-0vl6.i386.rpm
-rw-r–r– 1 root root 18919 12月16日 00:04 postfix-pcre-2.2.10-0vl6.i386.rpm
-rw-r–r– 1 root root 19425 12月16日 00:04 postfix-pgsql-2.2.10-0vl6.i386.rpmこんな感じで、rpmができあがっていればokかと。
あとは、このpostfixをインストールします。
# rpm -ivh –force postfix-2.2.10-0vl6.i386.rpm postfix-pgsql-2.2.10-0vl6.i386.rpm
※すでにPostfixがインストールされていた場合、先にアンインストールしてから実施のこと。
2.imapで必要になるものを入れる。
次は、courier-imapで必要となるものをインストールします。
# apt-get install courier-imap courier-authlib
この辺は特に難もなく入れられると思います。
なお、imapですが、実際にはpop3として使用します。
3.sasl系を入れる
昨今の迷惑メール対策で、SMTPはport25を使用して送ることがほとんど規制されてきています。
そこで、submission-port587を使用して送信できるよう、saslを入れておきます。
VineLinuxにはすでにsasldが入っていますが、これだとplain認証、md5認証ができない等のトラブルがあるため、一応以下のようにしてパッケージをインストールしておきます。
# apt-get install cyrus-sasl cyrus-sasl-plain cyrus-sasl-md5
私は、cyrus-sasl-plainとcyrus-sasl-md5の2つが入っていないばっかりに、Postfixが意図した動きをしてくれなくて、数日悩みました…。
4.postgresqlのDBを作成する。
Postfixと、PostfixAdminから管理するためのDBを作成します。
# su – postgres (postgresユーザになる)
$ createuser -A -D -P postfix
(postfixユーザのパスワードを入力)
$ createuser -A -D -P postfixadmin
(postfixadminユーザのパスワードを入力)$ createdb –encoding=EUC_JP postfix (DBを作成する)
CREATE DATABASE$ /var/lib/pgsql/data/pg_hba.conf
local postfix postfix,postfixadmin password
host postfix postfix,postfixadmin 127.0.0.1 255.255.255.255 password
host postfix all 0.0.0.0 0.0.0.0 rejectこんなところでしょうか。
5.PostfixAdminをインストールする。
qmailにも、qmail-adminっていうwebベースの管理画面がありましたよね。
それとだいたい同じことをやれるのがPostfixAdminです。
せっかくDB化したのですから、インストールしておくと便利ですよ。
# cd /var/www/html/ (apacheのドキュメントルートにでも移動します。)
# wget http://high5.net/page7_files/postfixadmin-2.1.0.tgz (downloadします。)
# tar xvzf postfixadmin-2.1.0.tgz (ファイルを展開…ってわかりますよね。)
# wget http://troels.arvin.dk/db/postfixadmin/postfixadmin-arvin.patch (パッチのdownload)
# patch -p0 < postfixadmin-arvin.patch (パッチをあてます。)ついでに、日本語化ファイルもdownloadし配置しておきます。
PostfixAdmin日本語化ファイル
これを、/var/www/html/postfixadmin-2.1.0/languages/ja.langとして置いておきます。
PostfixAdminのスクリプトが動作するよう、パーミッションを適切になおしておきます。
# cd /var/www/html
# chown -R apache:apache postfixadmin-2.1.0
# cd postfixadmin-2.1.0
# chmod 640 *.php *.css
# cd admin/
# chmod 640 *.php .ht*
# cd ../images/
# chmod 640 *.gif *.png
# cd ../languages/
# chmod 640 *.lang
# cd ../templates/
# chmod 640 *.tpl
# cd ../users/
# chmod 640 *.php
また、PostfixAdminを日本語で運用した際にきちんと表示がなされるよう、.htaccessで文字コードを強制的にEUCへ指定しておきます。
{/var/www/html/postfixadmin-2.1.0/.htaccess}
# for PostfixAdmin
php_flag magic_quotes_gpc On
php_value default_charset EUC-JP
php_flag file_uploads On
php_flag mbstring.encoding_translation ON
php_value mbstring.language Japanese
php_value mbstring.internal_encoding EUC-JP
php_value mbstring.http_input auto
php_value mbstring.http_output EUC-JP
php_value mbstring.detect_order auto
php_value mbstring.substitute_character none
php_value output_handler mb_output_handler日本語ファイルも編集しておきます。
# cd /var/www/html/postfixadmin-2.1.0/language
# cp ja.lang ja.lang.orim
# nkf –euc ja.lang.orim >ja.lang (EUCに変換しておく。){ja.langの最初の方にある部分もEUCに指定しておく。}
$PALANG[‘charset’] = ‘euc-jp’; //(EUCに)
//$PALANG[‘charset’] = ‘Shift_JIS’; //(コメントアウトしておく)また、Welcomeメールが送信された際、EUCだとメールが文字化けしてしまうので、以下を修正しておきます。
$PALANG[‘pSendmail_subject_text’] = ‘(TEST-MAIL) Welcome Mail’;
また、php.iniのMagicQuotesをonにしておきます。(GET/POSTなどができるように?)
なお、今回使用したphpのversionはphp5.2.0です。
{/etc/php5/php.ini}
; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = On
config.inc.phpを作成し、PostfixAdminが使用するDBなどを設定します。
# cd /var/www/html/postfixadmin-2.1.0
# cp config.inc.php.sample config.inc.php (サンプルからコピーして使用する。)
config.inc.php内にある項目を、以下のように書き換えます。
$CONF[‘database_type’] = ‘pgsql’;
$CONF[‘database_host’] = ‘127.0.0.1’;
$CONF[‘database_user’] = ‘postfixadmin’;
$CONF[‘database_password’] = ‘postfixadmin’;
$CONF[‘database_name’] = ‘postfix’;
$CONF[‘database_prefix’] = ”;ほか、
$CONF[‘default_language’] = ‘ja’;
としておくと、日本語になります。
だいたいPostfixAdminの設定も終盤にさしかかってきました…が、pgsqlで使用する際、そのままではユーザの権限で実行できないSQLなどがあるため、以下の修正をしておきます。
(GRANTで、postfixadminとpostfixユーザに権限を与えておきます。)
{/var/www/html/postfixadmin-2.1.0/DATABASE_PGSQL.TXTの最後の行}
GRANT SELECT,INSERT,UPDATE,DELETE ON admin,alias,domain,domain_admins,log,mailbox,vacation TO postfixadmin;
GRANT SELECT,INSERT,UPDATE,DELETE ON admin,alias,domain,domain_admins,log,mailbox,vacation TO postfix;
そして、今ほど編集したDATABASE_PGSQL.TXTのSQL文をpgsqlへ発行します。
# su – postgres
$ psql postfixPostgreSQL の会話型ターミナル、psql 8.1.5 へようこそ
\copyright とタイプすると、配布条件を表示します。
\h とタイプすると、SQL コマンドのヘルプを表示します。
\? とタイプすると、psql コマンドのヘルプを表示します。
\g と打つかセミコロンで閉じると、クエリーを実行します。
\q で終了します。postfix=# \i /var/www/html/postfixadmin-2.1.0/DATABASE_PGSQL.TXT
:
(SQL文が入力される)
:
postfix=# \q
これでPostfixAdminが動作する環境ができあがってきました。
http://127.0.0.1/postfixadmin-2.1.0/setup.php などにアクセスし、動作しているか確認してください。
(つづく)