Last Updated on 2013年7月30日 by かんりにん
編集日:2006/03/14
courier-mta+phpcourier †
courier-mta。
MySQLと連動したアカウント管理ツールにphpcourierを使用。
参照サイト †
- 日本語サイト
http://www.courier-mta.jp/
- 日本Courierユーザ会
http://www.courier-users.jp/
- php-courier
[MySQLを利用したwebアカウント管理ツール]postfixadminのcourier版
http://phpcourier.sourceforge.net/
日本語の情報が無いので設定は上記サイトのほかアーカイブ内のドキュメントを参照。
構築環境 †
pop3/imap認証にはcourier-authlibを使用するので
こちらは事前にインストールしておく。
またcourier-imapが動作している場合、
後ほどコンパイルするcourier-imapdとコンフリクトするので
アンインストールしておく。
※そのままでも恐らく使えるが、設定ファイルが分散&起動デーモンが増えるのが微妙。
パッケージのビルドとインストール †
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
環境設定[初期設定] †
設定ファイルは/etc/courier以下に展開される。
初期設定ファイルはなぜか用意されていないので、自分でtouchして編集する。
書式はqmailに似ている。
- me 自ホスト名を記入
mail.example.com
- defaultdomain ドメインの無いアドレスを補完するドメイン記入
example.com
rootは、 <root@example.com> となります。
- 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の更新 †
postmapやpostaliasと同様、DBの更新を行う。
初めて実行する場合はDBファイルが作成される。
- hosteddomains
# /usr/lib/courier/sbin/makehosteddomains
- esmtpacceptmailfor
# /usr/lib/courier/sbin/makeacceptmailfor
- aliases
# /usr/lib/courier/sbin/makealiases
デーモン設定 †
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の設定を参照。
- /etc/authlib/authdeamonrc
- pop3/imap
デフォルトで起動するので初期設定は不要。
tlsやsaslを使う場合は要編集&証明書を用意する。 - esmtp
デフォルトでは起動しないので起動を有効にする。- /etc/courier/esmtpd
ESMTPDSTART=YES
smtp認証はデフォルトで有効になっているv(^o^)v
が、初期設定のままメーラーからメールを送信すると妙にレスポンスが悪いので
要検証。
- /etc/courier/esmtpd
Maildir設定 †
※今回はphpcourierで運用するので以下を参照。
phpcourierのインストールと設定 †
- ダウンロードと展開
アーカイブをダウンロード&展開後、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 '*******';
- 専用ユーザーphpcourierを作成する場合の例
- 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
起動 †
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 #
テスト送受信 †
ブラウザからphpcourierへアクセスし、DBにてアカウントを作成。
その後、OutLookExpressで送受信テストを行う。
受信:OK
送信:外部ドメインへの送信はOKだが
ローカルアカウントへの配信でパーミッションエラー発生。
該当ディレクトリのパーミッションを変更して一旦解消したが
実行ユーザーの確認と設定を要調査。
恐らくphpcourierの設定に依存すると思われる。
smtp認証 †
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暗号化 †
暗号化はデフォルトで設定ファイルが用意されているので
こちらも証明書を用意すればすぐ実装可能ヽ(*^。^*)ノ
対象ファイルは/etc/courier/esmtpd-ssl。
※今回はまだ編集中。
懸案事項 †
- sendmailとの互換性はどのくらいまであるのか?
→courierのバイナリ保存ディレクトリにsendmailコマンドがあるので
シンボリックリンクの設定で対応可能。 - smtp認証をNWごとに変更することが出来るか?
社内NWは認証不要、社外からのみ認証を必須としたいので
指定したNWは認証を許可する、などの設定。 - pop3/smtp認証時のパスワードが2種類保存される(clear/平文とcrypt/暗号)が
認証に使用するパスワードがclearのため、平文のままパスワードがログに残される。
ログレベルの指定でログに残さない設定は可能だが、スニッフィングの危険大。
というかsmtp認証の意味が無い。暗号化パスワードでの認証設定を要確認。
認証パスワードの変更 †
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のみ使用可能(→暗号化しないと実装は現実的ではない)
→暗号化の検証が必要?情報収集せねば。