harumaki.net

インフラ屋の覚書や、ラーメン食べある記とか。

GNU/Linux MAIL MySQL

courier-mta+phpcourier

投稿日:2006年3月14日

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]

-GNU/Linux, MAIL, MySQL
-

執筆者:


comment

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

CAPTCHA


関連記事

no image

[メモ]WindowsサーバのフォルダをLinuxサーバーへマウント

[pukiwiki] しばらくsmbを使っていなかったので、いつの間にかsmbmountを使わずとも mountコマンドのオプションでマウントを出来ることを知らなかったw WindowsフォルダのLi …

no image

[メモ] Linux: pathmunge について

※RedHat、CentOSの話です。 /etc/profileの中で、シェルスクリプトの関数”pathmunge”という定義を見かけたので それとなくメモ。 rootアカウン …

no image

ポート転送ツール rinetd

[pukiwiki] #topicpath #contents ポート指定で別の外部ホストへサービスを転送できるツール。 受付ホストと転送先ホストをIPアドレスで指定するところがポイント。 URLをそ …

[AWS] EC2 HVMタイプを使う時のファイルシステム周りの作業2(swap追加)

  さしあたりAWSだから、t2インスタンスだから、というわけでは全くないけどメモ。 t2インスタンスは、もともとスワップ領域がないインスタンスタイプのため、スワップが必要な場合は、EBSを追加してm …

no image

カーネル負荷テストツール(LTP)

[pukiwiki] *カーネル負荷テストツール(LTP) IBM、SGI、OSDLなどが共同で運営している[[Linux Test Project(ltp):http://ltp.sourcefor …