□Courier-MTA+PostgreSQL(Vine5)
□Courier-MTA+PostgreSQL(Vine5)
http://vine.1-max.net/postfix-SMTP-Auth.html
↑ここに基本的なことは全て書いてある
http://park1.wakwak.com/~ima/freebsd_courierimap_postgresql.html
↑ここにPostgreSQLデータベースを利用した場合のことが書いてある
apt-get install -y courier-imap courier-authlib courier-authlib-devel courier-authlib-pgsql
としてインストールしたら
/etc/authlib/authpgsqlrc.dist
という設定ファイルの元ができているので、これをコピーする
cd /etc/authlib/
cp ./authpgsqlrc.dist ./authpgsqlrc
として、./authpgsqlrcをいじる。
パラメーターとしては
PGSQL_HOST pgsql.example.com
PGSQL_PORT 5400
PGSQL_USERNAME admin
PGSQL_PASSWORD admin
PGSQL_DATABASE template1
PGSQL_USER_TABLE passwd
PGSQL_CRYPT_PWFIELD crypt
PGSQL_UID_FIELD uid
PGSQL_GID_FIELD gid
PGSQL_LOGIN_FIELD id
PGSQL_HOME_FIELD home
PGSQL_NAME_FIELD name
があるが、オプションパラメータとして
# PGSQL_CLEAR_PWFIELD clear
# PGSQL_MAILDIR_FIELD maildir
# PGSQL_DEFAULTDELIVERY defaultDelivery
# PGSQL_QUOTA_FIELD quota
:
:
こんなのもある。
とりあえず、ホストやポート番号を以下のように現状に合わせて
テーブル定義をきちんとする。
こんな感じでいかがでしょ?
create table mail_passwd_tbl
(
masterid text,
cryptpwd text,
clearpwd text,
mastername text,
masteruid integer,
mastergid integer,
masterhome text,
maildir text,
defaultdelivery text,
quote text,
registdate integer,
lastdate integer
);
create unique index mail_cryptpwd_index on mail_passwd_tbl (masterid, cryptpwd);
create unique index mail_clearpwd_index on mail_passwd_tbl (masterid, clearpwd);
grant all on mail_passwd_tbl to public;
これにあう./authpgsqlrcは
:
PGSQL_USER_TABLE mail_passwd_tbl
PGSQL_CRYPT_PWFIELD cryptpwd
PGSQL_UID_FIELD masteruid
PGSQL_GID_FIELD mastergid
PGSQL_LOGIN_FIELD masterid
PGSQL_HOME_FIELD masterhome
PGSQL_NAME_FIELD mastername
:
となる。
さらにコメントのままだけど
# PGSQL_CLEAR_PWFIELD clearpwd
としておくと、いざ平文パスワードにしたときにあわてなくていいかも。
(って平文パスワードにはしないだろうけど)
で、あとはPostgreSQLで認証させるために/etc/authlib/authdaemonrcのなかの
次のパラメータにauthpgsqlが書いてある事を確認する
emacs /etc/authlib/authdaemonrc
authmodulelist=”authpgsql”
authmodulelistorig=”authpgsql”
(他にもauthuserdbとかauthpamとか書いてあるはず)
確認したらcourier-imapとcourier-authlibの起動。
/etc/init.d/courier-authlib start
/etc/init.d/courier-imap start
として、エラーもなく、プロセスがいる事も確認。
# pgrep courier -l
9319 courierlogger
9451 couriertcpd
9453 courierlogger
9492 couriertcpd
9494 courierlogger
9498 couriertcpd
9500 courierlogger
9611 couriertcpd
9613 courierlogger
そうしたら、後は実際にユーザーを追加登録すればよい。
別途メモした「□Postfix+PostgreSQL(Vine)」と共に、hogehoge に対して
メールを送信して、実在しないhogehogeでメールが受信できる事を試して
みるといい。
例:
実在ユーザー(user00001)を追加する。
/usr/sbin/useradd user00001
パスワードは未設定の状態でためしにPOP3にアクセスしてもInvalidで
はじかれる。
つづいて転送用データと認証用データをインサートする。
INSERT into mail_alias_tbl VALUES
(
‘root’, ルートさんが登録しました
‘TEST’, グループとしてはテストです
‘hogehoge’, hogehoge宛のメールは
‘user00001’, user00001さんに転送します
0,
0
);
INSERT INTO mail_passwd_tbl VALUES
(
‘hogehoge’, hogehogeさんの認証用データで
‘$1$EGq5av3o$rVopfAi8sPbqHHSSo8vGV.’, 暗号化してあるパスワード
‘areare’,
‘TEST USER’,
‘10001’,
‘10001’,
‘/home/user00001/’,
‘/home/user00001/Maildir/’,
”,
”,
0,
0
);
ちなみにこれのパスワードはclearpwdに書いたようにareare。
PHPでコマンドラインでちゃちゃっと作れる。
userdbpwで作ってもいいけど短すぎるかと…
PHPの例:<? print crypt(“areare”); ?> →$1$EGq5av3o$rVopfAi8sPbqHHSSo8vGV.
userdbpwの例:→9T3u0YXzuFDNU
なにはともあれ、このデータをインサートしてから、テストメールを
送信して、さらにPOP3にアクセスすると、
# mail hogehoge
Subject: TEST MAIL
TEST MAIL.
.
Cc:
#
# tail -f /var/log/maillog
May 13 14:40:04 www postfix/qmgr[6124]: A96864464B6: removed
May 13 14:42:30 www postfix/postfix-script[15612]: stopping the Postfix mail system
May 13 14:42:31 www postfix/master[6121]: terminating on signal 15
May 13 14:42:31 www postfix/postfix-script[15705]: starting the Postfix mail system
May 13 14:42:31 www postfix/master[15706]: daemon started — version 2.6.3, configuration /etc/postfix
May 13 14:42:46 www postfix/pickup[15709]: CD81A4464B7: uid=0 from=<root>
May 13 14:42:46 www postfix/cleanup[15879]: CD81A4464B7: message-id=<20100513054246.CD81A4464B7@test1.mydns.jp>
May 13 14:42:46 www postfix/qmgr[15710]: CD81A4464B7: from=<root@test1.mydns.jp>, size=329, nrcpt=1 (queue active)
May 13 14:42:46 www postfix/local[15883]: CD81A4464B7: to=<user00001@test1.mydns.jp>, orig_to=<hogehoge>, relay=local, delay=0.22, delays=0.2/0.01/0/0.02, dsn=2.0.0, status=sent (delivered to maildir)
May 13 14:42:46 www postfix/qmgr[15710]: CD81A4464B7: removed
#
# telnet localhost pop3
Trying 127.0.0.1…
Connected to localhost.
Escape character is ‘^]’.
+OK Hello there. <bd911bbdd9e1726615c52bbd0de061fc>
user hogehoge
+OK Password required.
pass areare
+OK logged in.
LIST
+OK POP3 clients that break here, they violate STD53.
1 437
.
quit
+OK Bye-bye.
Connection closed by foreign host.
というように、実在しないユーザー宛にメールを送って、実在しない
ユーザーでPOP3接続してメールが取り出せる。
ワンダホー!!