オカムラと申します。
サイトを参考に
Postfix2.3.3 + Postfix Admin2.2.1.1 + MySQL5.0.45 + Dovecot1.0.7
という構成でバーチャルドメイン環境を構築しています。
現在、2つの問題を抱えているのですが、良い方法はないでしょうか?
1.メールクライアントのPOPアカウントは、アカントだけ(ドメインを含めたくない)にしたい。
現在は、hogehogeと設定してメールクライアントの設定を、バーチャルドメイン環境に移行するにあたり、hogehoge@example.jpとしない方法はあるのでしょうか?
Postfix Adminでアカウントを作成すると、ドメインを含んだアカントがmailbox.usernameに登録されてしますので、まずはそこから直す必要があると思いますが、そのような設定は可能なのでしょうか?
既存の環境から移行する際に、クライアントの設定を変更しないで良い方法を探しています。
DovecotとMySQLの認証には、下記のSQLを設定しています。
password_query = SELECT password FROM mailbox WHERE username = '%u' AND active == '1'
user_query = SELECT concat('/usr/local/virtual/', maildir) as home, 10000 as uidd, 10000 as gid FROM mailbox WHERE username = '%u' AND active = '1'
メールボックスは、/usr/local/virtual/hogehoge@example.jp に保存されています。
2.MySQLに保存するパスワードはcleartextにするしかないのでしょうか?
下記ページの「10.次に、PostfixAdminで管理するパスワード体系を決めておく必要があり、〜」に書かれているようにMySQLと直接認証をする場合は、cleartextにするしかないようですが、セキュリティ的に不安が残ります。(メールサーバ、MySQLは、インターネットに公開されます)
rimapなるものを経由するとmd5cryptを利用できるようですが、rimapの情報がほとんどインターネット上に無いようです。
データベースを公開しない環境に置くという方法が考えられますが、MySQLのパスワードをcleartext以外に保存する方法は無いのでしょうか?
Postfix+MySQL+Postfix AdminによるバーチャルSMTPサーバの構築(CentOS4.x編)
http://www.aconus.com/~oyaji/centos/smtp-mysql-centos.htm#preparation
> 1.メールクライアントのPOPアカウントは、アカントだけ(ドメインを含めたくない)にしたい。
> 現在は、hogehogeと設定してメールクライアントの設定を、バーチャルドメイン環境に移行するにあたり、hogehoge@example.jpとしない方法はあるのでしょうか?
本質論として、何のためのバーチャルドメインか? を考えると、hogehoge@example.jpとhogehoge@example.comを全く異なるアカウントして1つのサーバで扱いためですから、ドメインを省略するという考えは、その区別をしないということなので、基本からは外れているという認識です。
が、実環境からの以降の場合、既存ユーザはそのままにしたいでしょうから、そこはドメイン(realm)の補完機能を使えばいいのではないでしょうか?
具体的には、@以降が省略されたときに補完するドメインを最近のdovecotでは指定できるようですから、そこで指定すればいいのでは?
auth_default_realm = example.jp
> 2.MySQLに保存するパスワードはcleartextにするしかないのでしょうか?
> 下記ページの「10.次に、PostfixAdminで管理するパスワード体系を決めておく必要があり、〜」に書かれているようにMySQLと直接認証をする場合は、cleartextにするしかないようですが、セキュリティ的に不安が残ります。(メールサーバ、MySQLは、インターネットに公開されます)
> rimapなるものを経由するとmd5cryptを利用できるようですが、rimapの情報がほとんどインターネット上に無いようです。
> データベースを公開しない環境に置くという方法が考えられますが、MySQLのパスワードをcleartext以外に保存する方法は無いのでしょうか?
>
> Postfix+MySQL+Postfix AdminによるバーチャルSMTPサーバの構築(CentOS4.x編)
> http://www.aconus.com/~oyaji/centos/smtp-mysql-centos.htm#preparation
上記の「saslauthd 関係の設定」のところで、[rimapによる方法]としてrimapでの認証方式についてチャント書いてあるつもりですが・・・。 ここに書いてあるとおりやればできます。rimapはimapの認証部分だけを使ってユーザ認証する仕組みです。従って、前提として(はじめに)dovecotをimapでも使えるようにしておかなければなりません。なお、localhostで使うだけなので必要なければ外部にimapを公開する必要はありません。
オカムラです。
> 本質論として、何のためのバーチャルドメインか? を考えると、hogehoge@example.jpとhogehoge@example.comを全く異なるアカウントして1つのサーバで扱いためですから、ドメインを省略するという考えは、その区別をしないということなので、基本からは外れているという認識です。
POP3のサーバからドメイン情報を取れればと考えていたのですが、ダメなんですね。
> 具体的には、@以降が省略されたときに補完するドメインを最近のdovecotでは指定できるようですから、そこで指定すればいいのでは?
>
> auth_default_realm = example.jp
上記の設定でドメイン無しで認証できる事が確認できました。
ありがとうございます。
> 上記の「saslauthd 関係の設定」のところで、[rimapによる方法]としてrimapでの認証方式についてチャント書いてあるつもりですが・・・。
すみません、rimapの記述について確認不足でした。
>ここに書いてあるとおりやればできます。rimapはimapの認証部分だけを使ってユーザ認証する仕組みです。従って、前提として(はじめに)dovecotをimapでも使えるようにしておかなければなりません。なお、localhostで使うだけなので必要なければ外部にimapを公開する必要はありません。
MySQLに保持するアカウントのパスワードはmd5で暗号化をおこない、POP3とSMTP AUTHで利用することは出来るのでしょうか?
設定としては、下記のようなイメージでしたが、うまくいきませんでした。
postfixadmin設定ファイル(config.inc.php)
$CONF['encrypt'] = 'md5crypt';
Dovecot設定ファイル(/etc/dovecot.conf)
auth default {
mechanisms = digest-md5
Dovecot SQLファイル(dovecot-mysql.conf)
default_pass_scheme = PLAIN-MD5
その他のパターンでも試しましたが、メールクライアントから送信されるPOP用パスワードとMD5で保存されているMySQLのアカウントパスワードが食い違っていることに問題があるようです。
メールクライアントから送信されるPOP用パスワードをMD5化してから認証することは出来ないのでしょうか?
受信(POP)と送信(SMTP)が整理できていない部分がありますが、ご教授をお願いします。
> POP3のサーバからドメイン情報を取れればと考えていたのですが、ダメなんですね。
この返事と下の返事をどう捉えればいいのか分からないのですが、もう一度整理しておきます。
上記のとおり、ドメインが違ってアカウント名が異なるものを1つのサーバで別々のユーザ(メールボックス)として扱うのがバーチャルドメインの機能です。従って、区別するにはドメインが必要なのは自明の理です。
ただ、今回のように既存からの移行のような場合は、既存ユーザはドメインなしで運用したいでしょうから、そういう場合にあるドメインに所属しているものとみなすのが下記パラメータです。従って、これ以外のドメインのユーザは当然ドメインを省略できません。
> > 具体的には、@以降が省略されたときに補完するドメインを最近のdovecotでは指定できるようですから、そこで指定すればいいのでは?
> >
> > auth_default_realm = example.jp
>
> 上記の設定でドメイン無しで認証できる事が確認できました。
> ありがとうございます。
>
> >ここに書いてあるとおりやればできます。rimapはimapの認証部分だけを使ってユーザ認証する仕組みです。従って、前提として(はじめに)dovecotをimapでも使えるようにしておかなければなりません。なお、localhostで使うだけなので必要なければ外部にimapを公開する必要はありません。
>
> MySQLに保持するアカウントのパスワードはmd5で暗号化をおこない、POP3とSMTP AUTHで利用することは出来るのでしょうか?
できます。というかおやじはそうしています。設定というか使い方というかが誤っているためうまくいかないだけです。
> 設定としては、下記のようなイメージでしたが、うまくいきませんでした。
>
> postfixadmin設定ファイル(config.inc.php)
> $CONF['encrypt'] = 'md5crypt';
>
> Dovecot設定ファイル(/etc/dovecot.conf)
> auth default {
> mechanisms = digest-md5
>
> Dovecot SQLファイル(dovecot-mysql.conf)
> default_pass_scheme = PLAIN-MD5
>
> その他のパターンでも試しましたが、メールクライアントから送信されるPOP用パスワードとMD5で保存されているMySQLのアカウントパスワードが食い違っていることに問題があるようです。
違います。おやじのページにも書いてありますがわかりにくいので、ここで再整理しておきます。認証の仕組みから考えればできないことをされているのです。
サーバ側が認証用データをmd5のパスワードにした時点で、クライアント側の認証はPLAINかLOGINの平文パスワードしか利用できません。
これは、チャレンジ/レスポンス (CRAM-MD5, DIGEST-MD5)方式では、
1. クライアントからのアクセスに対してチャレンジ(ランダム文字列)をサーバが返し、それを受けたクライアントは、そのチャレンジとパスワードをMD5で暗号化してパスワードして送信する。
2. サーバは受信した暗号化パスワードと自分が送ったチャレンジとサーバのパスワード(PLAIN)でクライアントが行ったのと同じようにMD5で暗号化したパスワードを比較して、同じならパスワードはOKとする。
仕組みなので、サーバ側は、PLAINなパスワードが無ければ認証できません。
従って、サーバ側がMD5CRYPTならPLAINかLOGINの平文パスワードしか利用できません。逆に、サーバがPLAINならチャレンジ/レスポンス (CRAM-MD5, DIGEST-MD5)方式が使えます。
従って、おやじのコンテンツにも書いてありますが、通信でパスワードだけ保護してもほとんど意味がない(むしろ重要なのは本文や添付ファイル)ので、サーバはMD5CRYPTで暗号化し、通信路はSSLで保護するという考え方が正解と思います。
この内容に従った設定は、下記のとおりです。
postfixadmin設定ファイル(config.inc.php)
$CONF['encrypt'] = 'md5crypt';
Dovecot設定ファイル(/etc/dovecot.conf)
auth default {
mechanisms = plain login
Dovecot SQLファイル(dovecot-mysql.conf)
default_pass_scheme = MD5-CRYPT
> メールクライアントから送信されるPOP用パスワードをMD5化してから認証することは出来ないのでしょうか?
上記のとおりです。サーバがPLAINならできます。
> 上記のとおり、ドメインが違ってアカウント名が異なるものを1つのサーバで別々のユーザ(メールボックス)として扱うのがバーチャルドメインの機能です。従って、区別するにはドメインが必要なのは自明の理です。
分かり難い表現になっていましたが、メールクライアントに設定するPOP3の接続先を利用出来ればと考えていたのですが、必ずしもPOP3接続先=ドメインではないので、認証には使えないという風に理解しました。
認証に関して、丁寧な説明ありがとうございました。
再度、最初から設定を見直した結果、無事目的を達成することができました。
Dovecotの認証の手順に確信が持てないのですが、下記の認識に間違いはないでしょう。
1.メールクライアントから平文のパスワード(hogehoge)を送信
2.Dovecotでパスワード(hogehoge)の平文として受信
dovecot.conf の設定 mechanisms = plain login に依存
3.DovecotがMySQLの格納されているパスワードと照合するためにパスワード(hogehoge)をmd5化(xxxxxxxx)
dovecot-mysql.conf の設定 default_pass_scheme = MD5-CRYPT に依存
どこでmd5化がおこなわれるかがよく分からなかったのですが、上記が合っているとスッキリと理解できるのですが。
> 再度、最初から設定を見直した結果、無事目的を達成することができました。
>
> Dovecotの認証の手順に確信が持てないのですが、下記の認識に間違いはないでしょう。
>
> 1.メールクライアントから平文のパスワード(hogehoge)を送信
>
> 2.Dovecotでパスワード(hogehoge)の平文として受信
> dovecot.conf の設定 mechanisms = plain login に依存
>
> 3.DovecotがMySQLの格納されているパスワードと照合するためにパスワード(hogehoge)をmd5化(xxxxxxxx)
> dovecot-mysql.conf の設定 default_pass_scheme = MD5-CRYPT に依存
>
> どこでmd5化がおこなわれるかがよく分からなかったのですが、上記が合っているとスッキリと理解できるのですが。
遅くなりましたが、上記はあっています。もう少し整理しておくと簡単です。
1. 認証はサーバで行われる。
2. 認証するには、サーバが蓄積しているパスワードかクライアントからのパスワードか、どちらかが生パスワードでなければならない。
ということです。
従って、サーバ側がMD5-CRYPTならクライアントからは生パスワードでなければなりません。何故なら、この場合、サーバは非可逆暗号化(MD5)されたパスワードしか持っていないので、生パスワードが無い限りが認証しようがないですよね。
逆も同じ話で、例えば、CRAM-MD5で認証するならサーバ側に生パスワードが無い限り、クライアントから来た非可逆暗号化(MD5)されたパスワードと比較するパスワードを生成できないからです。
オカムラです。
色々とご教授いただきありがとうございました。
メールに関しては、まだまだ曖昧な部分がありますので、少しずつ理解を深めていきたいと思います。