質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.05%

CentOS7.9,postfix,dovecot,mysql(MariaDB)環境にてpostfixadminの「仮想ユーザーメールシステム」の事例が正しく動作しません。

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 2
  • VIEW 409

score 4

初めて投稿させて戴くHal.と申します。

https://wiki.archlinux.jp/index.php/%E4%BB%AE%E6%83%B3%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%83%A1%E3%83%BC%E3%83%AB%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0

を参照し、CentOS7.9(x64)にて、postfix/docecot/mysql(MariaDB)の環境にpostfixadminを導入しようと2w程度四苦八苦しててるのですが出口が見えません。

現在、postfix,dovecotのみの環境において、ローカルユーザのe-mailの送受信等は問題無く実行出来ております。
また、postfixadmin(最新v3.3.3)単体での導入に関してもpostfixadminとmysql(MariaDB)間の動作挙動に関しては問題無く見受けられ、postfixadminでバーチャルドメイン環境に移行させようとすると、ローカルユーザ・バーチャルドメインユーザ共にメールの送受信が出来なくなるという状況が発生して困り果てております。
バーチャルドメインと言っても実際には国際ドメインを発行済みで、固定IP1の環境ですが、Web(httpd)に関してはこれらの発行済みドメインで別々のトップページが閲覧出来る状況にはなっています。

archlinux.jpの議論欄にて「テラテイル」と「スタックオーバーフロー」という場があることをご教示戴き、質問をさせて頂く次第です。どなたか知見のお有りになる方からのアドバイスをいただきたく、何卒ご教示の程よろしくお願いいたします。

以下、archwikiへの投稿文です。
-----

/* 「仮想ユーザーメールシステム」の事例が正しく動作しません。 */ 

== 「仮想ユーザーメールシステム」の事例が正しく動作しません。 ==

先日より「仮想ユーザーメールシステム」を参照させて戴いております。

CentOS7(x64)にてpostfix&dovecotの状況にてローカルサーバにおいてはインターネットとの送受信が正常に出来ており、
httpd(apache2)やdns(named-chroot)でヴァーチャルドメインの設定も完了しており、Webに関してはヴァーチャルドメインでのURLアクセスでも、正しくヴァーチャルドメイン側のコンテンツにたどり着ける状況です。

その環境下にて、postfixadminの導入に苦戦しております。
少なくとも、2021/01/18時点の現行版を参照しながら必要な部分をアレンジして自サーバに導入すると、ローカルアカウントもヴァーチャルアカウントも全て送受信共にエラーとなってしまいます。
既に数日格闘しているので、即時復旧用に/etc/dovecot/と/etc/postfix/の2つのディレクトリに関しては、/etc/original_backup/配下に完全コピーを逃がしてあり、設定変更後にNGな状況になってもスグに元の環境に戻せるようにして実験しています。

まず、想定されているvmail/配下の構造ですが、こちらでは/home/vmail/配下を配信用ワークディレクトリとして設定しています。
しかし、こちらの事例こ基づいて実行すると、仮想ドメイン「hoge.jp」「foo.com」に関して、postfixadminの「ようこそメール」を受信しようとすると下記のようなディレクトリ実構造が出来上がり、sqlでの問い合わせと違うとエラーとなってしまいます。尚、デバッグの為、各モジュール間の認証はPLAINにしているつもりです。

<変更後の実際の構造>
/home/vmail/maindomain.com/main_account1_no_domainname/{cur,new,tmp}
/home/vmail/hoge.jp/user_account1_no_domainname/{cur,new,tmp}
/home/vmail/foo.com/user_account2_no_domainname/{cur,new,tmp}

postfixadmin側の設定は合っているようで、設定切り替え後、#systemctl restart postfix(dovecot)を行うと、
ローカルからのsmtp-auth送信は出来ますが、受信側に関しては/home/main_account1_no_domainname/MailDir/配下な配信されていたメールが、
<変更後の実際の構造>である
/home/vmail/maindomain.com/main_account1_no_domainname/new/
配下に新着メールが溜まり続ける状況になります。
この動作挙動自体は問題無いと思うのですが、実際にメーラ(Seamonkey≒Thunderbird)で受信しようとすると、エラーとなりメールログが下記のようになります。

******************************

Jan 17 15:43:48 maindomain dovecot: auth: Debug: Module loaded: /usr/lib64/dovecot/auth/libdriver_mysql.so
Jan 17 15:43:48 maindomain dovecot: auth: Debug: Module loaded: /usr/lib64/dovecot/auth/libdriver_sqlite.so
Jan 17 15:43:48 maindomain dovecot: auth: Debug: Read auth token secret from /var/run/dovecot/auth-token-secret.dat
Jan 17 15:43:48 maindomain dovecot: auth: Debug: auth client connected (pid=16268)
Jan 17 15:43:48 maindomain dovecot: auth: Debug: client in: AUTH#0111#011PLAIN#011service=pop3#011session=iWiC7RK5ODbAqAAz#011lip=192.168.0.5#011rip=192.168.0.51#011lport=110#011rport=13880
Jan 17 15:43:48 maindomain dovecot: auth: Debug: client passdb out: CONT#0111
Jan 17 15:43:48 maindomain dovecot: auth: Debug: client in: CONT<hidden>
Jan 17 15:43:48 maindomain dovecot: auth-worker(16270): Debug: Loading modules from directory: /usr/lib64/dovecot/auth
Jan 17 15:43:48 maindomain dovecot: auth-worker(16270): Debug: Module loaded: /usr/lib64/dovecot/auth/lib20_auth_var_expand_crypt.so
Jan 17 15:43:48 maindomain dovecot: auth-worker(16270): Debug: Module loaded: /usr/lib64/dovecot/auth/libdriver_mysql.so
Jan 17 15:43:48 maindomain dovecot: auth-worker(16270): Debug: Module loaded: /usr/lib64/dovecot/auth/libdriver_sqlite.so
Jan 17 15:43:48 maindomain dovecot: auth-worker(16270): Debug: sql(main_account1_no_domainname,192.168.0.51,<iWiC7RK5ODbAqAAz>): query: SELECT username as user, password, '/home/vmail//main_account1_no_domainname' as userdb_home, 'maildir:/home/vmail//main_account1_no_domainname' as userdb_mail, 5000 as  userdb_uid, 5000 as userdb_gid FROM mailbox WHERE username = 'main_account1_no_domainname' AND active = '1'
Jan 17 15:43:48 maindomain dovecot: auth-worker(16270): sql(main_account1_no_domainname,192.168.0.51,<iWiC7RK5ODbAqAAz>): unknown user
Jan 17 15:43:50 maindomain dovecot: auth: Debug: client passdb out: FAIL#0111#011user=main_account1_no_domainname
Jan 17 15:43:52 maindomain dovecot: pop3-login: Disconnected (auth failed, 1 attempts in 4 secs): user=<main_account1_no_domainname>, method=PLAIN, rip=192.168.0.51, lip=192.168.0.5, session=<iWiC7RK5ODbAqAAz>


******************************

特に気になる点が「'maildir:/home/vmail//main_account1_no_domainname'」の部分で「vmail」の後に「//」と二重スラッシュが登場している点、
及び、本来は「/home/vmail/maindomain.com/main_account1_no_domainname/」と「/maindomain.com/」の配下に「main_account1_no_domainname」が有るにもかかわらず、
ログでは「/home/vmail//」とドメインネームが記載されていない点です。

sql文の部分を、実験的に「%d:%n:%u:/123」といった形にして試してみたところ、%nと%uの値が同じ、かつ%dにはドメイン名が含まれていないため、<変更後の実際の構造>に合致したディレクトリ名へのクエリが生成されていないように見受けられます。

*****

Jan 18 15:23:00 maindomain dovecot: auth-worker(16429): Debug: sql(main_account1_no_domainname,192.168.0.51,&lt;b/zywCa57YrAqAAz>): query: SELECT username as user, password, '/home/vmail//main_account1_no_domainname:main_account1_no_domainname:/123' as userdb_home, 'maildir:/home/vmail//main_account1_no_domainname:main_account1_no_domainname:/123' as userdb_mail, 5000 as  userdb_uid, 5000 as userdb_gid FROM mailbox WHERE username = 'main_account1_no_domainname' AND active = '1'
Jan 18 15:23:00 maindomain dovecot: auth-worker(16429): sql(main_account1_no_domainname,192.168.0.51,&lt;b/zywCa57YrAqAAz>): unknown user


*****

私的に力量と知見が乏しく、どこに誤りがあってこのような事態に陥っているのかが解りません。
どなたか切り分けが出来る方に、ご教示願えればとお願いする次第です。

---
2021/01/28、追記。

そもそも論になってしまうかも知れませんが、SMTP-AUTHに関してport 25/587等、WinPCメールクライアント(Seamonkey)での確認以前に、ローカルコンソール上のtelnetでの確認が不十分であったと反省しております。

また、この点で切り分けていくと、postfixadminを導入する前段階として、sasl2に関する設定とpostfixのmail.cfの設定で最小限必要な要件も、正しく満たされていなかったらしく、telnetで接続確認をするとエラーとなる状況でした。

さらに、/etc/sasl2/smtpd.confの「pwcheck_method:」を、従来は「saslauthd」であった設定を「pwcheck_method: auxprop」に変更した場合(saslauthdのsmtpd.confを変更した場合)、これを確かめる際に必要なパッケージのリスタートは「saslauthd」のみで無く、「postfix」の2パッケージを共にリスタートさせることが必須だと学びましたた。

この前提において、postfixadminの前段階としてmysqlのデータベースパスワードでは無く、sasldb2をauth-dbとして利用して、telnet接続での確認をクリアする為に必要な部分として、現時点で自己理解している(正しいのかなぁ?)設定状況は下記の通りです。

/etc/postfix/mail.cf

smtpd_etrn_restrictions = permit_mynetworks, reject_invalid_hostname
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions =
     permit_mynetworks
     permit_sasl_authenticated
     reject_unauth_destination
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
broken_sasl_auth_clients = yes

/etc/sasl2/smtpd.conf

#pwcheck_method: saslauthd
pwcheck_method: auxprop
mech_list: plain login
#auxprop_plugin: sql
auxprop_plugin: sasldb
allowanonymouslogin: no
allowplaintext: true
mech_list: PLAIN LOGIN CRAM-MD5 DIGEST-MD5

この設定状況で、

systemctl restart postfix

systemctl status postfix

systemctl restart saslauthd

systemctl status saslauthd

にてリスタートと正常起動の確認、及びtelnetでの接続確認などを行い、WinPCクライアントからport25/587それぞれに対するSMTP-AUTH送信、及びpop受信が従来通りできるところまで確認いたしました。

この先にdovecot,postfixをmysql対応とし、postfixでのMTA受信がvmailアカウントへ転送され、postfixadminで作成したドメインやアカウント対して正しい挙動が得られるかを確認していきたいと思います。

ここ数日SMTP-AUTH回り及びpostfixadminに関してインターネットコンテンツを頼りに自己勉強をしておったのですが、その間において、
postfixadmin関連に不具合が残存している事も解り、片言の英語でレポートを挙げました。

https://github.com/postfixadmin/postfixadmin/issues/434

その結果からか、他の方々からの不具合レポートを含め、本日postfixadminが3.3.5へアップデートされておりました。
(example.com/postfixadmin/setup.php・・・初回実行時の「$CONF['encrypt'] 」の設定内容によって、初回セットアップ時のみ有効であるはずのセットアップパスワードハッシュ「$CONF['setup_password'] 」の内容が変化する事(妥当かどうか不明?)は変わってませんでした)

これに加えて、つい先日、WinPCでのメール送受信クライアントとしていたSeamonkeyも2.53.6へのバージョンアップがあり、
従来と確認環境も変更されたことから、本件は途中段階までの確認を進めることが出来た事で(質疑の書き方やログの添付方法などにも問題があったと認識・反省しております)、一旦Closeとし、この先の確認プロセスを含め、新たな質疑として解り易くまとめ直したいと存じます。
CHERRYさま、TaichiYanagiyaさま、68userさま各位からのコメント・ご教示誠にありがとうございました。 

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • Hal.

    2021/01/25 10:49

    TaichiYanagiyaさま。
    整理の件、大元質疑に関しては68userさまにご教示戴いた<code>挿入にて編集してみました。
    長文をコメント投稿した部分に関してはどのようにするのが妥当かアドバイス戴ければ幸いです。
    (一つ前のコメントで68userさまにもお尋ねしています)
    妥当な方向性がまとまりましたら、修正等行いたいと思います。

    キャンセル

  • Hal.

    2021/01/25 11:04

    TaichiYanagiyaさま。
    後先になるかも知れませんが、現時点(コメント側)で追記できることを簡略に追記いたします。
    >・質問事項 (箇条書きで)
    CentOS7.9(x64)上でpostfixadminにてバーチャルドメイン環境を作成したいが正しく動作しない。

    >・現在の設定
    (すみません、長くなるのでコメント側では一旦略します)

    >・できていること、できていないこと (メール受信しスプールに保存できるが、POP アクセスできない、SMTP-Auth での送信ができない、など)

    postfix,dovecot,mysql(MariaDB)をスタンバイさせており、ArchWikiの参考事例でpostfixadmin用の設定変更に切り替える前はPOP3受信(各ユーザ個別のunixIDとPasswordにて認証=pam?),SMTP-AUTH(全利用ユーザ共通のIDとPasswordで運用)はPort25,587共に正常動作。
    postfixadmin用の設定変更に切り替える後、pop3受信は全て不可、SMTP-AUTHはPort25は動作するが、Port587側での送信が出来なくなる。尚、postfixadminで「ようこそメール」送信後は/home/vmail/配下に既存ユーザのメールスプールはたまり続ける(切り替わった)状況が確認出来る。

    >・できないときのログ (全文ではなく、Try したときに出力されたもの)
    こちらも、コメント側では一旦略します。尚、昨日長文コメントで記載した物は実験時刻帯のアタックログなどを排除した関連すると思われるログを抜粋した物です

    >・その他、参考 URL、経緯などの補足情報
    参考にした事例はArchWikiの「仮想ユーザーメールシステム」・・・

    https://wiki.archlinux.jp/index.php/%E4%BB%AE%E6%83%B3%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%83%A1%E3%83%BC%E3%83%AB%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0

    ・・・ですが、postfix,dovecot,postfixadmin間の暗号化設定が共通化されていないように見受けられ、かつ、現在のpostfixadmin3.3.4では「cleartext」以外でのセッティングでは/setup.php /login.phpで正常なログインが出来ない為、postfixadmin側は「cleartext」でのセッティングにするしかないように感じています(postfixadmin側の不具合?)。

    以上、一旦まとめました。

    キャンセル

  • Hal.

    2021/01/28 17:53

    CHERRYさま、TaichiYanagiyaさま、68userさま各位からのコメント・ご教示誠にありがとうございました。 質疑本文に現状報告の追記をさせて頂き、一旦Closeさせて頂きます。

    キャンセル

回答 1

checkベストアンサー

+1

元のドメイン(maindomain.com)は postfixadmin に登録しておらず、OSユーザー=メールアカウントなのですよね?

おそらく、postfix 側では、maindomain.com は  local 配送 (home_mailbox)、hoge.jp, foo.com は virtual 配送 (virtual_mailbox_maps → proxy:mysql) で受信・保存できるのですが、
dovecot の passdbuserdb が MySQL (driver = sql) しか参照しないため、maindomain.com のユーザーが unknown user となっているのだと思います。

passdbuserdb は複数設定できるので(おそらく最初に見つかったものが採用される)、元の OSユーザーで認証する設定を残し、postfixadmin 用の設定を追加するといいと思います。
CentOS 7 の標準構成であれば、/etc/dovecot/conf.d/10-auth.conf から include している auth-system.conf.ext の設定です。

あるいは、最初から maindomain.com も postfixadmin で管理した方が簡単かもしれません。


(2021/01/25 09:12) 追記

ようこそメールなどのメールは受信しスプールに保存できるが、POP アクセスできない、SMTP-Auth での送信ができない、ということですか?
まず、postfixadmin でマルチドメインにしたので、認証ユーザー名はドメイン付きにする必要があります。
mainfoo ではなく、mainfoo@example.com です。

認証については、メールクライアントに原因があるかもしれないので、先にサーバー上で telnet, openssl s_client などで確認するといいと思います。

// AUTH PLAIN 用の文字列生成
[centos7]$ echo -en '\0mainfoo@example.com\0password' | base64
AG1haW5mb29AZXhhbXBsZS5jb20AcGFzc3dvcmQ=

// POP 認証確認
[centos7]$ telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK Dovecot ready.
auth plain AG1haW5mb29AZXhhbXBsZS5jb20AcGFzc3dvcmQ=
+OK Logged in.
quit
+OK Logging out.
Connection closed by foreign host.

// POP 認証確認 (TLS)
[centos7]$ openssl s_client -connect localhost:995
CONNECTED(00000003)
  (略)
+OK Dovecot ready.
auth plain AHVzZXIxMDAxQGV4YW1wbGUuY29tAHBhc3MxMDAx
+OK Logged in.
quit
+OK Logging out.
closed

// SMTP-Auth 認証確認 (TLS)
[centos7]$ openssl s_client -connect localhost:587 -starttls smtp
CONNECTED(00000003)
  (略)
250 DSN
auth plain AHVzZXIxMDAxQGV4YW1wbGUuY29tAHBhc3MxMDAx
235 2.7.0 Authentication successful
quit
221 2.0.0 Bye
closed

(2021/01/28 18:05) 追記
postfixadmin は DB でユーザー管理しますので、SMTP-Auth も DB を見に行く必要があるのですが、postfix も saslauthd も MySQL には接続できません。
なので、sasldb2 も saslauthd も使わずに、postfix main.cf で smtpd_sasl_type = dovecot として dovecot に認証を依頼します。
dovecot 側で service auth { ... } で postfix 用のソケットファイルを用意し、postfix 側の smtpd_sasl_path にこのソケットファイルのパスを設定します。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2021/02/01 17:48

    > SMTP-AUTHに関しては便宜上1つの(sasl2dbの)ID/Passwordで対処してました。
    > postfixadmin環境下だと、SMTP-AUTHに関してもDBのID/Passで認証しなければならない事になるのでしょうか?

    技術的には SMTP-Auth 用に 1つのユーザー/パスワードを共用することは可能ですが、悪意あるユーザーに悪用されたとき、そのユーザーを特定する方法がありません。

    キャンセル

  • 2021/02/03 17:08

    TaichiYanagiyaさま、
    >技術的には SMTP-Auth 用に 1つのユーザー/パスワードを共用することは可能ですが、悪意あるユーザーに悪用されたとき、そのユーザーを特定する方法がありません。

    やはりそういう事なんですね。了解いたしました、コメントありがとうございました_(^_^)_

    キャンセル

  • 2021/02/05 17:28

    新しく質疑を立てました、皆様よろしくご教示の程、よろしくお願いいたします。
    https://teratail.com/questions/320475?modal=q-comp

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.05%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • トップ
  • MySQLに関する質問
  • CentOS7.9,postfix,dovecot,mysql(MariaDB)環境にてpostfixadminの「仮想ユーザーメールシステム」の事例が正しく動作しません。