Last Updated on 2013年7月30日 by かんりにん
[pukiwiki]
#topicpath
#contents
編集日:2006/03/14
*courier-mta+phpcourier [#w0ec6df1]
courier-mta。
MySQLと連動したアカウント管理ツールにphpcourierを使用。
**参照サイト [#cce3f282]
-本家サイト
http://www.courier-mta.jp/
-日本語サイト
http://www.courier-mta.jp/
-日本Courierユーザ会
http://www.courier-users.jp/
-php-courier
[MySQLを利用したwebアカウント管理ツール]postfixadminのcourier版
http://phpcourier.sourceforge.net/
日本語の情報が無いので設定は上記サイトのほかアーカイブ内のドキュメントを参照。
**構築環境 [#ucb3c213]
pop3/imap認証にはcourier-authlibを使用するので
こちらは事前にインストールしておく。
またcourier-imapが動作している場合、
後ほどコンパイルするcourier-imapdとコンフリクトするので
アンインストールしておく。
※そのままでも恐らく使えるが、設定ファイルが分散&起動デーモンが増えるのが微妙。
**パッケージのビルドとインストール [#n3a68603]
courierのアプリはroot権限でのビルド/コンパイルが出来ないので
一般ユーザーで実行する。
# pwd
/home/testuser/rpm/SOURCE
# wget http://jaist.dl.sourceforge.net/sourceforge/courier/courier- 0.50.0.tar.bz2
# rpmbuild -ta courier-0.50.0.tar.bz2
コンパイルに成功すると以下のパッケージが出来上がる。
courier-0.50.0-1.4ES.src.rpm
courier-0.50.0-1.4ES.i386.rpm
courier-ldap-0.50.0-1.4ES.i386.rpm
courier-mysql-0.50.0-1.4ES.i386.rpm
courier-pgsql-0.50.0-1.4ES.i386.rpm
courier-pop3d-0.50.0-1.4ES.i386.rpm
courier-imapd-0.50.0-1.4ES.i386.rpm
courier-webmail-0.50.0-1.4ES.i386.rpm
courier-webadmin-0.50.0-1.4ES.i386.rpm
courier-mlm-0.50.0-1.4ES.i386.rpm
courier-maildrop-0.50.0-1.4ES.i386.rpm
courier-fax-0.50.0-1.4ES.i386.rpm
courier-maildrop-wrapper-0.50.0-1.4ES.i386.rpm
courier-debuginfo-0.50.0-1.4ES.i386.rpm
上記のうち、fax、ldap、pgsqlを除いたパッケージを
インストールする。
courier-0.50.0-1.4ES
courier-webadmin-0.50.0-1.4ES
courier-authlib-devel-0.56-1.4ES
courier-imapd-0.50.0-1.4ES
courier-authlib-debuginfo-0.56-1.4ES
courier-debuginfo-0.50.0-1.4ES
courier-mysql-0.50.0-1.4ES
courier-authlib-mysql-0.56-1.4ES
courier-maildrop-0.50.0-1.4ES
courier-mlm-0.50.0-1.4ES
courier-webmail-0.50.0-1.4ES
courier-maildrop-wrapper-0.50.0-1.4ES
courier-pop3d-0.50.0-1.4ES
**環境設定[初期設定] [#abf70945]
設定ファイルは”/etc/courier”以下に展開される。
初期設定ファイルはなぜか用意されていないので、自分でtouchして編集する。
書式はqmailに似ている。
-me 自ホスト名を記入
mail.example.com
-defaultdomain ドメインの無いアドレスを補完するドメイン記入
example.com
rootは、
-locals ローカルで受けるドメインを入力(デフォルトドメイン用)
localhost
example.com
example.net
user@example.comへのメールはアカウント “user” へ届けられます。
user@example.netへのメールもアカウント “user” へ届けられます。
-hosteddomains ローカルで受けるドメインを記載(バーチャルアカウント用)
example.com
example.net
user@example.comへのメールは、アカウント “user@example.com”へ届けられます。
user@example.netへのメールはアカウント “user@example.net” へ届けられます。
※変更後には makehosteddomains が必要
-esmtpacceptmailfor SMTPで受け付けるドメインを全て記載。
example.com
example.net
mail2ndry.example.org
-aliases/system システムアカウントのaliasを記載。
今回はphpcourierを使用するので未使用。
-esmtpd
変更箇所
73c73
< ESMTP_LOG_DIALOG=0
---
> ESMTP_LOG_DIALOG=1
267c268,269
< TCPDOPTS="-stderrlogger=/usr/sbin/courierlogger"
---
> #TCPDOPTS=”-stderrlogger=/usr/sbin/courierlogger”
> TCPDOPTS=”-stderrlogger=/usr/sbin/courierlogger -nodnslookup -noidentlookup”
281c284,286
< ESMTPAUTH=""
---
> AUTHMODULES=”authdaemon”
> ESMTPAUTH=”LOGIN CRAM-MD5″
> #ESMTPAUTH=””
326c331
< ESMTPDSTART=NO
---
> ESMTPDSTART=YES
***設定DBの更新 [#cae030f0]
postmapやpostaliasと同様、DBの更新を行う。
初めて実行する場合はDBファイルが作成される。
-hosteddomains
# /usr/lib/courier/sbin/makehosteddomains
-esmtpacceptmailfor
# /usr/lib/courier/sbin/makeacceptmailfor
-aliases
# /usr/lib/courier/sbin/makealiases
***デーモン設定 [#pa160693]
authlibやpop3/imap、esmtpの設定を行う。
-”authlib”
–”/etc/authlib/authdeamonrc”
25c25
< # can use are: authuserdb authpam authldap authmysql authcustom authpipe
---
> # can use are: authuserdb authpam authpgsql authldap authmysql authcustom authpipe
27c27,28
< authmodulelist="authuserdb authpam authldap authmysql authcustom authpipe"
---
> #authmodulelist=”authuserdb authpam authpgsql authldap authmysql authcustom authpipe”
> authmodulelist=”authmysql”
34c35,36
< authmodulelistorig="authuserdb authpam authldap authmysql authcustom authpipe"
---
> #authmodulelistorig=”authuserdb authpam authpgsql authldap authmysql authcustom authpipe”
> authmodulelistorig=”authmysql”
75c77
< DEBUG_LOGIN=0
---
> DEBUG_LOGIN=2
–”/etc/authlib/authmysqlrc”
下記phpcourierの設定を参照。
-”pop3/imap”
デフォルトで起動するので初期設定は不要。
tlsやsaslを使う場合は要編集&証明書を用意する。
-”esmtp”
デフォルトでは起動しないので起動を有効にする。
–”/etc/courier/esmtpd”
ESMTPDSTART=YES
smtp認証はデフォルトで有効になっているv(^o^)v
が、初期設定のままメーラーからメールを送信すると妙にレスポンスが悪いので
要検証。
***Maildir設定 [#s1df60f9]
※今回はphpcourierで運用するので以下を参照。
**phpcourierのインストールと設定 [#n16e3c13]
-ダウンロードと展開
アーカイブをダウンロード&展開後、apacheのdocumentrootに移動する。
# cd /usr/local/src/
# wget http://jaist.dl.sourceforge.net/sourceforge/phpcourier/phpcourier1.5.tgz
# tar -zxvf phpcourier1.5.tgz
# cp -pR phpcourier/ /var/www/html/
-DB作成
展開したファイル内にsqlファイルがあるので、それをもとにDBを作成。
下記はテスト環境なのでrootで作成してしまったが、実際に作成する場合は
専用ユーザーを作成しておくべき。
# cd /var/www/html/phpcourier/
# mysql -uroot -p******
mysql> create database phpcourier;
Query OK, 1 row affected (0.00 sec)
–専用ユーザーphpcourierを作成する場合の例
mysql> create database phpcourier;
mysql> GRANT ALL ON phpcourier.* TO phpcourier@localhost IDENTIFIED BY ‘*******’;
-DBへテーブル投入
mysql> source sql/remake.sql;
-DBを確認。
mysql> use phpcourier;
Database changed
mysql> show tables;
+———————-+
| Tables_in_phpcourier |
+———————-+
| Accounts |
| Aliases |
| DomainAccess |
| Domains |
| Forwards |
| Mail |
| Sessions |
| UpdateTime |
+———————-+
8 rows in set (0.00 sec)
mysql> quit
-設定ファイルの編集。
設定ファイルはglobals.php。これを編集する。
編集箇所は主にMySQLの設定とID/パスワード、courierが使用する
コマンドのパスの変更(変更が有る場合)など。
またapacheユーザーで動作するのでcommongrpをapacheに更新。
–変更箇所:
11c11
< $mysql['password'] = "";
---
> $mysql[‘password’] = “********”;
32c32,33
< $commongrp = "vmail";
---
> #$commongrp = “vmail”;
> $commongrp = “apache”;
-メール配信ディレクトリの作成
postfixadminのvirtualディレクトリと同様、
受信したメールファイルを置くユーザーとディレクトリを作成。
基本は/home/vmail←/home以下に設置するのがグッド。
オーナーはapache。
# useradd vmai
# chmod 775 /home/vmail
# chown apache:vmail /home/vmail
-crontabの設定
util/以下に有るextractスクリプトを実行するための
crontabを登録する。
extractはドメイン/エイリアスの最終更新時刻を更新するためのperlスクリプト。
デフォルトのcron記入例は以下のとおり。15分ごとに更新する。
# crontab -e
0-59/15 * * * * root /var/www/html/phpcourier/util/extract
-authlib設定
docs/authmysqlrcを参考に、authmysqlrcを編集する。
認証時に見に行くフィールドを変更したい場合は直接テーブルを
参照してもオッケー。
26,28c26,28
< MYSQL_SERVER mysql.example.com
< MYSQL_USERNAME admin
< MYSQL_PASSWORD admin
---
> MYSQL_SERVER localhost
> MYSQL_USERNAME root
> MYSQL_PASSWORD ********
35c35
< # MYSQL_SOCKET /var/mysql/mysql.sock
---
> MYSQL_SOCKET /var/lib/mysql/mysql.sock
42c42
< MYSQL_PORT 0
---
> MYSQL_PORT 3306
54c54
< MYSQL_DATABASE mysql
---
> MYSQL_DATABASE phpcourier
61c61
< MYSQL_USER_TABLE passwd
---
> MYSQL_USER_TABLE Mail
70c70
< MYSQL_CRYPT_PWFIELD crypt
---
> MYSQL_CRYPT_PWFIELD CryptPass
75c75
< # MYSQL_CLEAR_PWFIELD clear
---
> MYSQL_CLEAR_PWFIELD ClearPass
83c83
< # DEFAULT_DOMAIN example.com
---
> #DEFAULT_DOMAIN example.com
91c91
< MYSQL_UID_FIELD uid
---
> MYSQL_UID_FIELD 10001
97c97
< MYSQL_GID_FIELD gid
---
> MYSQL_GID_FIELD 10001
106c106
< MYSQL_LOGIN_FIELD id
---
> MYSQL_LOGIN_FIELD UserName
111c111
< MYSQL_HOME_FIELD home
---
> MYSQL_HOME_FIELD Home
117c117
< MYSQL_NAME_FIELD name
---
> MYSQL_NAME_FIELD UserName
128c128
< # MYSQL_MAILDIR_FIELD maildir
---
> #MYSQL_MAILDIR_FIELD MailboxName
143c143
< # MYSQL_QUOTA_FIELD quota
---
> MYSQL_QUOTA_FIELD quota
-グループ設定
最後に、実行ユーザーとなるapacheユーザーをvmailグループに追加する。
# vigr
vmail:x:10001:apache
**起動 [#z270adaa]
smtp/popの起動は全サービスがひとつのinitスクリプトに集約されるので
起動するのはcourier-authlibとcourie(mta本体)の2つのみでOK。
※先にcourier-authlibを起動しておく。
# /etc/init.d/courier-authlib start
Starting Courier authentication services: authdaemond
# /etc/init.d/courier start
courierfilter webmail courierd esmtpd esmtpd-msa pop3d pop3d-ssl imapd imapd-ssl
#
**テスト送受信 [#me3763f0]
ブラウザからphpcourierへアクセスし、DBにてアカウントを作成。
その後、OutLookExpressで送受信テストを行う。
受信:OK
送信:外部ドメインへの送信はOKだが
ローカルアカウントへの配信でパーミッションエラー発生。
該当ディレクトリのパーミッションを変更して一旦解消したが
実行ユーザーの確認と設定を要調査。
恐らくphpcourierの設定に依存すると思われる。
**smtp認証 [#o8326399]
smtp認証の設定はデフォルトで設定ファイル内に
ディレクティブが用意されているので速攻で実装可能(^▽^喜)
smtp認証の設定は/etc/courier/esmtpdファイル内の
AUTH_REQUIREDディレクティブで有効/無効化する。
デフォルトは無効となっている。
AUTH_REQUIRED=0 無効
↓
AUTH_REQUIRED=1 有効
その他、認証デーモンの指定や認証タイプを指定する。
編集したらデーモンを再起動。
# /etc/init.d/courier restart
その後、telnetコマンドで確認。
[root@mailsvr courier]# telnet localhost 25
Trying 127.0.0.1…
Connected to localhost.localdomain (127.0.0.1).
Escape character is ‘^]’.
220 mail.example.com ESMTP
ehlo localhost
250-mail.example.com Ok.
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN X-NETSCAPE-HAS-BUGS
250-STARTTLS
250-XVERP=Courier
250-XEXDATA
250-XSECURITY=NONE,STARTTLS
250-PIPELINING
250-8BITMIME
250-SIZE
250 DSN
quit
221 Bye.
Connection closed by foreign host.
[root@mailsvr courier]#
こちらも送受信は正常性を確認。
**TLS暗号化 [#c21eefca]
暗号化はデフォルトで設定ファイルが用意されているので
こちらも証明書を用意すればすぐ実装可能ヽ(*^。^*)ノ
対象ファイルは”/etc/courier/esmtpd-ssl”。
※今回はまだ編集中。
**懸案事項 [#a5e17969]
-sendmailとの互換性はどのくらいまであるのか?
→courierのバイナリ保存ディレクトリにsendmailコマンドがあるので
シンボリックリンクの設定で対応可能。
-smtp認証をNWごとに変更することが出来るか?
社内NWは認証不要、社外からのみ認証を必須としたいので
指定したNWは認証を許可する、などの設定。
-pop3/smtp認証時のパスワードが2種類保存される(clear/平文とcrypt/暗号)が
認証に使用するパスワードがclearのため、平文のままパスワードがログに残される。
ログレベルの指定でログに残さない設定は可能だが、スニッフィングの危険大。
というかsmtp認証の意味が無い。暗号化パスワードでの認証設定を要確認。
**認証パスワードの変更 [#eb101c65]
pop3/smtp登録/認証時に使用されるパスワードがデフォルトではClearPassと
なっているため、これをCryptPassに変更。
phpcourierの各ファイルを編集して対応する。
対象ファイル:phpcourier/editmbx.php
# diff editmbx.php.org editmbx.php
150c150,151
< "CryptPass = NULL, " .
---
> # “CryptPass = NULL, ” .
> “CryptPass = PASSWORD (‘$_POST[password]’), ” .
173c174,175
< "CryptPass = NULL, ";
---
> # “CryptPass = NULL, “;
> “CryptPass = PASSWORD (‘$_POST[password]’), “;
309c311
< " UserName, ClearPass, AliasLimit, Uid, Gid, Home, Quota, FullName, " .
---
> ” UserName, CryptPass, ClearPass, AliasLimit, Uid, Gid, Home, Quota, FullName, ” .
315a318,319
> # ” ‘$_POST[accountpwd]’,” .
> ” PASSWORD (‘$_POST[password]’),” .
これでテーブルMailにcryptパスワードを格納可能。
だが、pop3側の認証が対応していないため、実質利用できず。
同様にauthmysqlを使用するsmtp認証も使用不可。
-→結論
pop3/smtp認証にはcleartextのみ使用可能(→暗号化しないと実装は現実的ではない)
→暗号化の検証が必要?情報収集せねば。
*コメント [#de37d0f1]
#comment
[/pukiwiki]