Linux Install Memo

サーバー管理者によるLinux関連ソフトのインストールメモ

Home » □Courier-MTA+PostgreSQL(Vine5)

□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接続してメールが取り出せる。

ワンダホー!!

Name of author

Name: admin

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です