meta1-1.0.PreAlpha27.0からmeta1-1.0.PreAlpha30.0へアップデートしました。
meta1 をMSA(Mail Submission Agent)としてだけ利用しています。
現状ではSTARTTLS+AUTH(CRAM-MD5)で使用しています。
2009年 9月 24(木曜日)
meta1 1.0.PreAlpha30.0へアップデート
環境
インストール
SASLで使用しているBerkeleyDBとの整合性のため、これまでは付属のではなくてSASLで使
用しているものと同じもの(Berkeley-DB 4.6系)を使用していました。
今回はmeta1に付属の4.3.28.NCを利用します。
ちなみに、4.7.25.3を利用するとlibedb/edb.cでコンパイルエラーとなります。
http://www.meta1.org/からmeta1-1.0.PreAlpha30.0.tar.gzを取得します。
PreAlpha30.0のconfigureやinclude/sm/bdb.hはdb4.6以上をはじいてしまうので以下のように対処します。
コンパイルします。
設定
meta1.conf設定
aliases設定
MSAとして利用するとのaliasesは関係なし
mailertable(mt)設定
access設定
tls設定
前準備
CA証明書の生成
自己署名済みの証明書と秘密鍵を生成します
meta1用証明書の生成
smx用証明書への署名
パスフレーズの削除
SASLのDBにアクセス権設定
ユーザmeta1sがSASLのDBにアクセスできるように設定します。
今回は、他にsasldbをアクセスするアプリケーションの権限はrootであるため、以下の方法を用います。
起動
meta1を起動
# cd /var/spool/meta1
# ./mcp.sh
注意事項
その1
※ client_name=Hostname_Not_Determined のメッセージがでる
→smtpsでaccess DBを見るように設定すればresolveが行われる
その2
meta1.conf中、READMEのサンプルでは、
trusted_mechs = { CRAM-MD5, DIGEST-MD5 }
となっているが、実際には
trusted_mechanisms="CRAM-MD5 DIGEST-MD5"
のようにしないとパースエラーとなる。
その3
dbの不整合で起動しなくなった場合には、/var/spool/meta1/defedb/*, /var/spool/meta1/ibdb/* を消して再起動すると
たちあがるかも。
デバッグ用メモ
/var/spool/meta1/mcp.sh 中の /usr/local/sbin/mcp のオプションに -d を追加すると詳細のログがでるようになる。
調査するファイルリスト
起動用スクリプト作成
- OS: NetBSD 3.1
- meta1: 1.0.PreAlpha30.0
- cyrus-sasl: 2.1.23
- (db: 4.7.25.3)今回はmeta1付属のdbを使用
インストール
SASLで使用しているBerkeleyDBとの整合性のため、これまでは付属のではなくてSASLで使
用しているものと同じもの(Berkeley-DB 4.6系)を使用していました。
今回はmeta1に付属の4.3.28.NCを利用します。
ちなみに、4.7.25.3を利用するとlibedb/edb.cでコンパイルエラーとなります。
http://www.meta1.org/からmeta1-1.0.PreAlpha30.0.tar.gzを取得します。
% tar zxvf meta1-1.0.PreAlpha30.0.tar.gz
% cd meta1-1.0.PreAlpha30.0
PreAlpha30.0のconfigureやinclude/sm/bdb.hはdb4.6以上をはじいてしまうので以下のように対処します。
diff -ur meta1-1.0.PreAlpha30.0/configure meta1-1.0.PreAlpha30.0/configure
--- meta1-1.0.PreAlpha30.0/configure 2009-08-17 11:39:37.000000000 +0900
+++ meta1-1.0.PreAlpha30.0/configure 2009-09-24 13:32:47.000000000 +0900
@@ -3512,7 +3512,7 @@
#include <stdio.h>
#include <db.h>
-#if DB_VERSION_MAJOR != 4 || (DB_VERSION_MINOR < 1 || DB_VERSION_MINOR > 5)
+#if DB_VERSION_MAJOR != 4 || (DB_VERSION_MINOR < 1 || DB_VERSION_MINOR > 7)
# error wrong DB version, need 4.[1-5]
_DB_VERSION_MAJOR DB_VERSION_MAJOR
_DB_VERSION_MINOR DB_VERSION_MINOR
@@ -3566,7 +3566,7 @@
#include <stdio.h>
#include <db.h>
-#if DB_VERSION_MAJOR != 4 || (DB_VERSION_MINOR < 1 || DB_VERSION_MINOR > 5)
+#if DB_VERSION_MAJOR != 4 || (DB_VERSION_MINOR < 1 || DB_VERSION_MINOR > 7)
# error wrong DB version, need 4.[1-5]
_DB_VERSION_MAJOR DB_VERSION_MAJOR
_DB_VERSION_MINOR DB_VERSION_MINOR
@@ -3626,7 +3626,7 @@
#include <stdio.h>
#include <db.h>
-#if DB_VERSION_MAJOR != 4 || (DB_VERSION_MINOR < 1 || DB_VERSION_MINOR > 5)
+#if DB_VERSION_MAJOR != 4 || (DB_VERSION_MINOR < 1 || DB_VERSION_MINOR > 7)
# error wrong DB version, need 4.[1-5]
_DB_VERSION_MAJOR DB_VERSION_MAJOR
_DB_VERSION_MINOR DB_VERSION_MINOR
@@ -3680,7 +3680,7 @@
#include <stdio.h>
#include <db.h>
-#if DB_VERSION_MAJOR != 4 || (DB_VERSION_MINOR < 1 || DB_VERSION_MINOR > 5)
+#if DB_VERSION_MAJOR != 4 || (DB_VERSION_MINOR < 1 || DB_VERSION_MINOR > 7)
# error wrong DB version, need 4.[1-5]
_DB_VERSION_MAJOR DB_VERSION_MAJOR
_DB_VERSION_MINOR DB_VERSION_MINOR
diff -ur meta1-1.0.PreAlpha30.0/include/sm/bdb.h meta1-1.0.PreAlpha30.0/include/sm/bdb.h
--- meta1-1.0.PreAlpha30.0/include/sm/bdb.h 2006-10-06 08:44:05.000000000 +0900
+++ meta1-1.0.PreAlpha30.0/include/sm/bdb.h 2009-09-24 13:32:59.000000000 +0900
@@ -17,7 +17,7 @@
#if HAVE_BERKELEYDB4
# include <db.h>
-# if DB_VERSION_MAJOR != 4 || (DB_VERSION_MINOR < 1 || DB_VERSION_MINOR > 5)
+# if DB_VERSION_MAJOR != 4 || (DB_VERSION_MINOR < 1 || DB_VERSION_MINOR > 7)
# error wrong DB version, need 4.[1-5] got DB_VERSION_MAJOR DB_VERSION_MINOR
# endif
#else
コンパイルします。
% mkdir obj.netbsd
% cd obj.netbsd
% ../configure --prefix=/usr/local \
--enable-TLS --enable-SASL --with-sasl-libdir=/usr/pkg/lib --with-sasl-incdir=/usr/pkg/include \
--disable-included-bdb --with-bdb-incdir=/usr/pkg/include/db4 --with-bdb-libdir=/usr/pkg/lib
% make
(groupadd, useraddはアップデートの際には不要)
# groupadd -g 260 meta1s
# groupadd -g 261 meta1q
# groupadd -g 262 meta1c
# groupadd -g 263 meta1m
# groupadd -g 264 meta1
# useradd -G meta1c,meta1m -g meta1s -u 260 meta1s
# useradd -G meta1m -g meta1q -u 261 meta1q
# useradd -g meta1c -u 262 meta1c
# useradd -g meta1m -u 263 meta1m
# useradd -g meta1 -u 264 meta1
# make install
設定
meta1.conf設定
# cd /etc/meta1
# vi meta1.conf
smtps MSA {
auth {
trusted_mechanisms="CRAM-MD5 DIGEST-MD5";
flags = { noplaintext };
}
tls { cert_file = "/var/db/CA/certs/smxcrt.pem";
key_file = "/var/db/CA/smxkey.pem";
CAcert_file = "/var/db/CA/cacert.pem";
CAcert_directory = "/var/db/CA/certs";
}
log_level = 11;
log { facility=mail; ident="MSA"; }
CDB_gid = 262;
listen_socket { type = inet; port = 587; }
start_action = pass;
pass_fd_socket = smtps/msafd;
user = meta1s;
path = "/usr/local/libexec/smtps";
arguments = "smtps -I 1 -N MSA -f /etc/meta1/meta1.conf";
}
smtpc {
log_level = 12;
tls { cert_file = "/var/db/CA/certs/smxcrt.pem";
key_file = "/var/db/CA/smxkey.pem";
CAcert_file = "/var/db/CA/cacert.pem";
CAcert_directory = "/var/db/CA/certs";
}
log { facility=mail; ident="smtpc"; }
wait_for_server = 4;
start_action = wait;
user = meta1c;
path = "/usr/local/libexec/smtpc";
arguments = "smtpc -f /etc/meta1/meta1.conf";
}
qmgr {
log_level = 12;
log { facility=mail; ident="qmgr"; }
wait_for_server = 4;
wait_for_client = 3;
start_action = wait;
user = meta1q;
restart_dependencies = { smtps, smtpc, smar };
path = "/usr/local/libexec/qmgr";
arguments = "qmgr -f /etc/meta1/meta1.conf";
}
smar {
log_level = 12;
log { facility=mail; ident="smar"; }
nameserver = { 192.168.1.1, 192.168.1.2 };
start_action = wait;
user = meta1m;
restart_dependencies = { smtps, qmgr };
path = "/usr/local/libexec/smar";
arguments = "smar -f /etc/meta1/meta1.conf";
}
aliases設定
MSAとして利用するとのaliasesは関係なし
mailertable(mt)設定
# cd /etc/meta1
# vi mt
. esmtp:[127.0.0.1]
(すべてMTAに転送するように設定)
# make
access設定
# cd /etc/meta1
# vi access
cltaddr:127.0.0.1 relay
cltaddr:192.168.1 relay
(ローカルからのみ許可)
# make
tls設定
前準備
# vi /etc/openssl/openssl.cnf
dir = /var/db/CA
# mkdir /var/db/CA
# cd /var/db/CA
# mkdir certs crl newcerts private
# chmod 700 private
# echo 01 > serial
# touch index.txt
CA証明書の生成
自己署名済みの証明書と秘密鍵を生成します
# openssl req -new -x509 -newkey rsa:2048 -out cacert.pem -keyout private/cakey.pem
meta1用証明書の生成
# openssl req -new -keyout private/smxkey.pem -keyform PEM -out smxcsr.pem -outform PEM
smx用証明書への署名
# openssl ca -out certs/smxcrt.pem -infiles smxcsr.pem
パスフレーズの削除
# openssl rsa -in private/smxkey.pem -out smxkey.pem
SASLのDBにアクセス権設定
ユーザmeta1sがSASLのDBにアクセスできるように設定します。
今回は、他にsasldbをアクセスするアプリケーションの権限はrootであるため、以下の方法を用います。
# chown meta1s /usr/pkg/etc/sasldb
起動
meta1を起動
# cd /var/spool/meta1
# ./mcp.sh
注意事項
その1
※ client_name=Hostname_Not_Determined のメッセージがでる
→smtpsでaccess DBを見るように設定すればresolveが行われる
その2
meta1.conf中、READMEのサンプルでは、
trusted_mechs = { CRAM-MD5, DIGEST-MD5 }
となっているが、実際には
trusted_mechanisms="CRAM-MD5 DIGEST-MD5"
のようにしないとパースエラーとなる。
その3
dbの不整合で起動しなくなった場合には、/var/spool/meta1/defedb/*, /var/spool/meta1/ibdb/* を消して再起動すると
たちあがるかも。
デバッグ用メモ
/var/spool/meta1/mcp.sh 中の /usr/local/sbin/mcp のオプションに -d を追加すると詳細のログがでるようになる。
調査するファイルリスト
- /var/spool/meta1/mcp.out
- /var/log/maillog
- /var/log/messages
- /var/spool/meta1/MSA.log
- /var/spool/meta1/qmgr.log
- /var/spool/meta1/smtpc.log
起動用スクリプト作成
# cp /var/spool/meta1/mcp.sh /etc/rc.d/meta1
トラックバック
このエントリーのトラックバック URI を指定する