Last Updated on 2013年9月6日 by かんりにん
会社のメールサーバーの再構築のための検証として、いろいろと。
参考サイト
お世話になっています!
AIT:postfixadminのインストール
Postfix+MySQL+Postfix AdminによるバーチャルSMTPサーバの構築(SuSE9.2/9.3編)
Vine Linux & Webmin
MySQL をサポートした Postfix の構築
構築要件
会社のメールサーバの再構築時の要件として。
- アカウントをDBにて管理(パスワードをMD5化)
- ブラウザから管理ツールを使用して運用の手間を簡略化する(←重要)
- ID/パスワードを変更しない
- smtp認証、TLS(SSL)実装
- rimapは採用しない”(ログインアカウントが変更されるため)
ただ今後LDAPを採用することになったときどうするかは微妙〜
設定環境
smtp認証に使用するsaslライブラリのバージョンは
”mysqlでsmtp認証を実現するために2.1.19以降が必須。”
また依存関係に厳しいためRPMでのインストールにはRHEL4.0での環境が必要になる。
ソースならRHEL3.0でもオッケー。
- OS
RedHat Enterprise Linux4.0 - application
postfix 2.2.8
courier-imap 4.0.3
courier-authlib 0.56
mysql 4.1
cyrus-sasl 2.1.19 ←ここが重要ポイント
事前準備
パッケージ管理のための下準備。
▼MySQL
postfixでMySQLを利用するため、MySQL-devel、MySQL-sharedが必要。
今回はRPMパッケージを用意するが、src.rpmからパッケージをコンパイル。
▼postfix
MySQLライブラリを読み込むため、また最新版2.2-8をRHEL3.0へインストールするため
src.rpmからパッケージを再コンパイル。
※なのでパッケージ管理はしてますがup2dateの意味は全く無し…
コンパイルする要件に合わせてspecファイルを以下のとおり変更。
# pwd /usr/src/redhat/SRPM # rpm -Uvh postfix-2.2.8-4.src.rpm # cd ../SPEC/ # cp postfix.spec postfix.spec.org # vi postfix.spec
-変更箇所
85,86c85,86 < %define with_mysql 0 < %define with_mysql_redhat 0 --- > %define with_mysql 1 # mysqlライブラリ読み込み設定を追 加(こちらはソース) > %define with_mysql_redhat 1 # mysqlライブラリ読み込み設定を追 加(こちらはRPM) 89c89 < %define with_sasl 0 --- > %define with_sasl 2 # saslオプションを追加 1=sasl-1.*、2=sasl-2.*なので2とする 93c93 < %define with_vda 0 --- > %define with_vda 1 239,240c239,241 < Requires: MySQL-shared < BuildRequires: MySQL-shared, MySQL-devel --- > #Requires: MySQL-shared > Requires: MySQL-shared-standard > BuildRequires: MySQL-shared-standard, MySQL-devel-standard
編集後、rpmbuild実行。
# rpmbuild -bb postfix.spec
これにてpostfixのRPMパッケージのコンパイルがOK。アップデートを行う。
実作業
1)DB作成
# mysql -uroot -p***** mysql> create database postfixadmin; Query OK, 1 row affected (0.00 sec) mysql>; GRANT ALL ON postfixadmin.* TO postfixadmin@localhost IDENTIFIED BY <password>; Query OK, 0 rows affected (0.01 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) mysql&amp;gt; quit
2)postfixadmin展開
# pwd /usr/local/src # tar -zxvf postfixadmin-2.1.0.tgz
展開後、apacheのDocumentRoot以下へ設置。
# cp -pr postfixadmin-2.1.0 /var/www/html/ # cd /var/www/html/ # ls -al 合計 12 drwxr-xr-x 3 root root 4096 3月 20 18:47 . drwxr-xr-x 9 root root 4096 3月 20 14:23 .. drwxr-xr-x 9 501 501 4096 1月 7 2005 postfixadmin-2.1.0
あとから権限を変更するが、ひとまずユーザーをrootにしておく。
# chown -R root:root postfixadmin-2.1.0/ # ln -s postfixadmin-2.1.0/ postfixadmin
3)設定
configファイルをサンプルからコピーして編集。
# cd postfixadmin # cp config.inc.php.sample config.inc.php
+変更箇所
$CONF['database_type'] = 'mysql'; $CONF['database_host'] = 'localhost'; $CONF['database_user'] = 'postfixadmin'; $CONF['database_password'] = '******'; $CONF['database_name'] = 'postfix'; $CONF['database_prefix'] = '';
またMaildir名をアカウント+ドメインにするか、ドメイン名のみにするかは以下のパラメータで変更。
$CONF['domain_path'] = '&amp;lt;YESorNO&amp;gt;';
デフォルトはNOとなっており、アカウント+ドメイン名となる。
+DB作成
# vi DATABASE_MYSQL.TXT # mysql -upostfixadmin -p****** &amp;lt; DATABASE_MYSQL.TXT
+DB確認
# mysql -upostfixadmin -ppassword mysql&amp;gt; use postfixadmin; mysql&amp;gt; show tables; +------------------------+ | Tables_in_postfixadmin | +------------------------+ | admin | | alias | | domain | | domain_admins | | log | | mailbox | | vacation | +------------------------+ 7 rows in set (0.00 sec) mysql> select * from admin; Empty set (0.00 sec) mysql> quit Bye
4)トップページ表示確認
http://example/postfixadmin/setup.phpへアクセス。
問題なく表示されたらadminディレクトリへアクセス。
http://example/postfixadmin/admin/
表示できたら、パーミッションを適宜変更する。
5)apache設定
管理画面へのアクセス制限を追加。
ベーシック認証
postfixadmin/admin以下に
.htaccess
.htpasswd
ファイルが有るので、apache設定でこれらの実行が許可されていればそのまま使用可能。
apache側で禁止している場合はhttpd.confへ。
++htpasswdファイルの指定
++ユーザー・パスワード追加
# htpasswd -c .htpasswd USER
sslでの接続強制
httpd.confへ以下を追加。sslでのリダイレクトを実行する。
<IfModule mod_rewrite.c> RewriteEngine On RewriteLog "logs/rewrite_log" RewriteLogLevel 0 RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^/postfixadmin/(.*)?$ https://%{HTTP_HOST}/postfixadmin/$1 [L,R] </IfModule>
設定が完了したら接続確認。
6)バーチャルドメイン用の管理アカウントとメールボックス用ディレクトリを作成
バーチャルドメイン用のメールボックスは/usr/local以下に作成。
※本運用では/home/virtualとしたいが、テストなのでデフォルトディレクトリで。
ユーザーvirtualをグループpostfixへ追加しておくこと。
メール受信時の認証に必要になる。
# groupadd -g 10000 virtual # useradd -g virtual -u 10000 virtual # usermod -G postfix virtual # mkdir /usr/local/virtual # chown virtual:virtual /usr/local/virtual/ # chmod 771 /usr/local/virtual/
*7)postfix設定
以下、バーチャルホストとMysql運用のために追加する設定。
local_transport = virtual virtual_transport = virtual virtual_mailbox_base = /usr/local/virtual virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf virtual_alias_domains = $virtual_alias_maps virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf virtual_minimum_uid = 10000 virtual_uid_maps = static:10000 virtual_gid_maps = static:10000 mailbox_size_limit = 51200000 message_size_limit = 10240000 virtual_mailbox_limit = 51200000 virtual_mailbox_limit_maps = hash:/etc/postfix/vquota virtual_mailbox_limit_override = yes virtual_overquota_bounce = yes virtual_mailbox_limit_inbox = yes
8)バーチャルドメイン関係の設定ファイルの作成
作成するのは以下のファイル。
パーミッションは全て644。
userとpasswdはMySQLへアクセスする際のアカウント。
※下記はpostfix2.2系の設定。以前のバージョンは
http://www.aconus.com/~oyaji/suse9.2/smtp-mysql-suse.htm を参照。
mysql_virtual_alias_maps.cf
mysql_virtual_domains_maps.cf
mysql_virtual_mailbox_maps.cf
-mysql_virtual_alias_maps.cf
# touch mysql_virtual_alias_maps.cf # vi mysql_virtual_alias_maps.cf
–記入項目
user = postfixadmin password = ****** hosts = localhost dbname = postfixadmin query = SELECT goto FROM alias WHERE address='%s'
-mysql_virtual_domains_maps.cf
# touch mysql_virtual_domains_maps.cf # vi mysql_virtual_domains_maps.cf
–記入項目
user = postfixadmin password = ****** hosts = localhost dbname = postfixadmin query = SELECT description FROM domain WHERE domain='%s'
mysql_virtual_mailbox_maps.cf
# touch mysql_virtual_mailbox_maps.cf # vi mysql_virtual_mailbox_maps.cf
–記入項目
user = postfixadmin password = ****** hosts = localhost dbname = postfixadmin query = SELECT maildir FROM mailbox WHERE username='%s'
9)soft quota関係の設定ファイルの作成
ユーザー、ドメイン毎メールボックスのサイズ制限を指定。
# touch vquota # vi vquota
記入項目
user@mail.example.com 51200000 @mail.example.com 25600000 @mail.example.com 12800000
設定適用
# postmap /etc/postfix/vquota
postmap後、vquota.dbが作成される。
-rw-r--r-- 1 root root 59 3月 21 17:49 vquota -rw-r--r-- 1 root root 12288 3月 21 17:49 vquota.db
10)pop/imapの設定
アプリはcourier-imap、認証にcourier-authlibを使用。
また今回はMySQLで運用するので、MySQL用モジュールも追加インストール。
courier-authlibインストール
# cd /usr/src/redhat/RPMS/i386/ # ls | grep courier courier-authlib-0.56-1.3ES.i386.rpm courier-authlib-debuginfo-0.56-1.3ES.i386.rpm courier-authlib-devel-0.56-1.3ES.i386.rpm courier-authlib-ldap-0.56-1.3ES.i386.rpm courier-authlib-mysql-0.56-1.3ES.i386.rpm courier-authlib-pgsql-0.56-1.3ES.i386.rpm courier-authlib-pipe-0.56-1.3ES.i386.rpm courier-authlib-userdb-0.56-1.3ES.i386.rpm # rpm -ivh courier-authlib-0.56-1.3ES.i386.rpm \ &amp;gt; courier-authlib-debuginfo-0.56-1.3ES.i386.rpm \ &amp;gt; courier-authlib-devel-0.56-1.3ES.i386.rpm \ &amp;gt; courier-authlib-mysql-0.56-1.3ES.i386.rpm Preparing... ########################################### [100%] 1:courier-authlib ########################################### [ 25%] 2:courier-authlib-debugin########################################### [ 50%] 3:courier-authlib-devel ########################################### [ 75%] 4:courier-authlib-mysql ########################################### [100%] #
courier-imapインストール
デフォルトでインストールされているimapが有る場合は削除。
# rpm -ivh courier-imap-4.0.3-1.3ES.i386.rpm courier-imap-debuginfo-4.0.3-1.3ES.i386.rpm Preparing... ########################################### [100%] file /etc/pam.d/imap from install of courier-imap-4.0.3-1.3ES conflicts with file from package imap-2002d-11 # rpm -qa | grep imap imap-2002d-11 php-imap-4.3.2-25.ent imap-devel-2002d-11 imap-utils-2002d-11 # rpm -e imap-2002d-11 imap-devel-2002d-11 imap-utils-2002d-11 # rpm -ivh courier-imap-4.0.3-1.3ES.i386.rpm courier-imap-debuginfo-4.0.3- 1.3ES.i386.rpm Preparing... ########################################### [100%] 1:courier-imap-debuginfo ########################################### [ 50%] 2:courier-imap ########################################### [100%] #
設定
設定ファイルは/etc/authlib以下にある authdaemonrc及びauthmysqlrc。
適宜設定。
# cd /etc/authlib/ # ls -al 合計 68 drwxr-xr-x 2 daemon daemon 4096 3月 21 18:12 . drwxr-xr-x 83 root root 8192 3月 21 18:12 .. -rw-rw---- 1 daemon daemon 3358 3月 21 18:12 authdaemonrc -rw-rw---- 1 daemon daemon 3358 3月 15 17:31 authdaemonrc.dist -rw-rw---- 1 daemon daemon 7916 3月 21 18:12 authldaprc -rw-rw---- 1 daemon daemon 7916 3月 15 17:31 authldaprc.dist -rw-rw---- 1 daemon daemon 8187 3月 21 18:12 authmysqlrc -rw-rw---- 1 daemon daemon 8187 3月 15 17:31 authmysqlrc.dist -rw-rw---- 1 daemon daemon 7905 3月 21 18:12 authpgsqlrc -rw-rw---- 1 daemon daemon 7905 3月 15 17:31 authpgsqlrc.dist
authdeamonrc
変更箇所
27c27,28 authmodulelist="authuserdb authpam authpgsql authldap authmysql authcustom authpipe" ↓ #authmodulelist="authuserdb authpam authpgsql authldap authmysql authcustom authpipe" authmodulelist="authmysql" authmodulelistorig="authuserdb authpam authpgsql authldap authmysql authcustom authpipe" ↓ #authmodulelistorig="authuserdb authpam authpgsql authldap authmysql authcustom authpipe" authmodulelistorig="authmysql"
authmysqlrc
変更箇所
以下の箇所を変更 MYSQL_SERVER localhost MYSQL_USERNAME postfixadmin # mysqlへ接続するユーザ MYSQL_PASSWORD ****** # mysqlへ接続するパスワード MYSQL_PORT 3306 MYSQL_DATABASE postfixadmin # データベースpostfixadminを指定 MYSQL_USER_TABLE mailbox # データベースpostfixadmin内のテーブル MYSQL_CRYPT_PWFIELD password # データベースpostfixadmin内のテーブル MYSQL_UID_FIELD 10000 # ユーザーvirtualのuid MYSQL_GID_FIELD 104 # グループpostfixのGID MYSQL_LOGIN_FIELD username # データベースpostfixadmin内のテーブル MYSQL_HOME_FIELD '/usr/local/virtual' # データベースpostfixadmin内のテーブル #MYSQL_NAME_FIELD name # データベースpostfixadmin内のテーブル MYSQL_MAILDIR_FIELD maildir # データベースpostfixadmin内のテーブル MYSQL_QUOTA_FIELD quota # データベースpostfixadmin内のテーブル
各デーモンを起動
courier-authlib
# /etc/init.d/courier-authlib start Starting Courier authentication services: authdaemond #
courier-imap
# /etc/init.d/courier-imap start Starting Courier-IMAP server: imap generating-SSL-certificate... imap-ssl pop3 generating-SSL-certificate... pop3-ssl #
送受信テスト
ここで一旦送受信のテストを行う。
アカウント作成
Web管理画面へログインし、バーチャルドメインとアカウント(mailbox)を作成。
ドメイン: example.com
アカウント: foo@example.com
※パスワードも同時に設定。
外部のアカウントから送信し、受信を行うと、/usr/local/virtual以下に
メールボックスが作成される。
# ls -al /usr/local/virtual/ 合計 12 drwxrwx--x 3 virtual virtual 4096 3月 21 19:52 . drwxr-xr-x 13 root root 4096 3月 21 16:50 .. drwx------ 5 virtual virtual 4096 3月 21 20:32 foo@example.com
ディレクトリ構成はMaildir形式と同じ。
[root@testsvr SPECS]# ls -al /usr/local/virtual/foo\@example.com/ 合計 24 drwx------ 5 virtual virtual 4096 3月 21 20:32 . drwxrwx--x 3 virtual virtual 4096 3月 21 19:52 .. -rw-r--r-- 1 virtual postfix 75 3月 21 20:32 courierpop3dsizelist drwx------ 2 virtual virtual 4096 3月 21 20:32 cur drwx------ 2 virtual virtual 4096 3月 21 20:32 new drwx------ 2 virtual virtual 4096 3月 21 20:32 tmp
メールボックスのディレクトリはユーザーvirtualだけが閲覧可能なので
authmysqlrcへユーザーvirtualのUIDを記述しておく。
テスト設定
メールサーバ: mail.example.com
アカウント: foo@example.com
-受信OK時のログ
Mar 21 20:32:57 testsvr pop3d: Connection, ip=[::ffff:10.10.11.110] Mar 21 20:32:57 testsvr pop3d: LOGIN, user=foo@example.com, ip= [::ffff:10.10.11.110] Mar 21 20:32:57 testsvr authdaemond: received auth request, service=pop3,authtype=login Mar 21 20:32:57 testsvr authdaemond: authmysql: trying this module Mar 21 20:32:57 testsvr authdaemond: SQL query: SELECT username, password, "", 10000, 104, '/usr/local/virtual', maildir, quota, "", "" FROM mailbox WHERE username = "foo@example.com" Mar 21 20:32:57 testsvr authdaemond: password matches successfully Mar 21 20:32:57 testsvr authdaemond: authmysql: sysusername=&amp;lt;null&amp;gt;, sysuserid=10000, sysgroupid=104, homedir=/usr/local/virtual, address=foo@example.com, fullname=&amp;lt;null&amp;gt;, maildir=foo@example.com/, quota=0, options=&amp;lt;null&amp;gt; Mar 21 20:32:57 testsvr authdaemond: Authenticated: sysusername=&amp;lt;null&amp;gt;, sysuserid=10000, sysgroupid=104, homedir=/usr/local/virtual, address=foo@example.com, fullname=&amp;lt;null&amp;gt;, maildir=foo@example.com/, quota=0, options=&amp;lt;null&amp;gt; Mar 21 20:32:58 testsvr pop3d: LOGOUT, user=foo@example.com, ip=[::ffff:10.10.11.110], top=0, retr=417, time=1
懸案事項
ログインアカウントの設定
pop3ログイン時のアカウントをフルドメインへ変更する必要がある。
foo
↓
foo@example.com
解決方法
MySQL使用時のログイン認証はデータベース”postfixadmin”内のテーブル
“mailbox”で管理しており、以下の構成になっている。
※フィールドのデータは一部省略
mysql> select * from mailbox; +-----------------------+------------------+--------+------------------------+-------+----------------+------------+------------+--------+ | username | password | name | maildir | quota | domain | created | modified | active | +-----------------------+------------------+--------+------------------------+-------+----------------+------------+------------+--------+ | foo@example.com | **************** | foo | foo@example.com/ | 0 | example.com | 20**-mm-dd | 20**-mm-dd | 1 | | test@example.com | **************** | test | test@example.com/ | 0 | example.com | 20**-mm-dd | 20**-mm-dd | 1 | | yeah@test.com | **************** | yeah | yeah@test.com/ | 0 | test.com | 20**-mm-dd | 20**-mm-dd | 1 | +-----------------------+------------------+--------+------------------------+-------+----------------+------------+------------+--------+ 3 rows in set (0.00 sec)
authmysqlrcの設定ではユーザー認証の際、デフォルト値”username”(フルドメイン)を読みに言っている。
MYSQL_LOGIN_FIELD username
となっているので、この部分を
MYSQL_LOGIN_FIELD name
へ変更すると、フィールド”name”を見に行くので、ログインアカウントを通常のUNIXアカウントと同様に設定できる。
例)
MYSQL_LOGIN_FIELD username # ユーザー名をフルドメインで保存
↓
MYSQL_LOGIN_FIELD name # ユーザー名をドメイン無しで保存
11)SMTP認証の追加
sasl認証にcourier-authlibを使用するのでpop/imapの後で。
cyrus-saslのインストール(アップグレード)
2.1.18以降でcourier-authlibのauthdaemonを利用できるようになった(^^)
MySQL認証プラグインとしてauthdaemonを有効にするためspecファイルを編集。
# wget ftp://rpmfind.net/linux/redhat/updates/enterprise/3ES/en/os/SRPMS/cyrus-sasl-2.1.19-5.EL4.src.rpm # rpm -Uvh cyrus-sasl-2.1.19-5.EL4.src.rpm # cd ../SPEC # cp cyrus-sasl.spec cyrus-sasl.spec.org # vi cyrus-sasl.spec
編集箇所
51c51 < BuildPrereq: mysql-devel, postgresql-devel --- < BuildPrereq: mysql-devel # postgresは使わないので依存関係から削除 226a227 > --with-authdaemond=/var/spool/authdaemon/socket \ # authdaemonを有効にする 238,239c239,240 < SQL_CFLAGS=`mysql_config --cflags`" -I"`pg_config --includedir` < SQL_LIBS=`mysql_config --libs`" -L"`pg_config --libdir`"" --- > SQL_CFLAGS=`mysql_config --cflags` # postgresは使わないので依存関係から削除 > SQL_LIBS=`mysql_config --libs` # postgresは使わないので依存関係から削除 260c261 < moreflags="--enable-sql --with-mysql=%{_prefix} --with-pgsql=%{_prefix}" --- > moreflags="--enable-sql --with-mysql=%{_prefix}" # postgresは使わないので依存関係から削除
編集後、ビルド/コンパイルを実施してインストール
# rpmbuild -bb cyrus-sasl.spec # ll /usr/src/redhat/RPMS/i386/ | grep cyrus drwxr-xr-x 2 root root 4096 3月 22 17:13 cyrus -rw-r--r-- 1 root root 1231388 3月 22 17:22 cyrus-sasl-2.1.19- 5.EL4.i386.rpm -rw-r--r-- 1 root root 5840155 3月 22 17:23 cyrus-sasl-debuginfo-2.1.19-5.EL4.i386.rpm -rw-r--r-- 1 root root 1374159 3月 22 17:22 cyrus-sasl-devel-2.1.19-5.EL4.i386.rpm -rw-r--r-- 1 root root 28553 3月 22 17:22 cyrus-sasl-gssapi-2.1.19-5.EL4.i386.rpm -rw-r--r-- 1 root root 58302 3月 22 17:22 cyrus-sasl-md5-2.1.19-5.EL4.i386.rpm -rw-r--r-- 1 root root 26558 3月 22 17:22 cyrus-sasl-ntlm-2.1.19-5.EL4.i386.rpm -rw-r--r-- 1 root root 27200 3月 22 17:22 cyrus-sasl-plain-2.1.19-5.EL4.i386.rpm -rw-r--r-- 1 root root 593781 3月 22 17:22 cyrus-sasl-sql-2.1.19-5.EL4.i386.rpm # rpm -Uvh cyrus-sasl-*
postfixの設定
UNIXアカウントでのsasl認証時と多少異なる。
# SASLによるSMTP認証を使用 smtpd_sasl_auth_enable = yes #smtpd_sasl_local_domain # 通常のUNIXアカウントでは有効にするが、バーチャルホスト対応のためコメントにする #smtpd_sasl_local_domain = $mydomain # リレー許可のオブジェクト設定 # 許可するのは、自NW、認証を通過したユーザ。 smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated,reject_unauth_destination #AUTHコマンド未サポートのクライアントへの対応 # 現状ではOE4や5への対策となる。 broken_sasl_auth_clients = yes # 使用可能な認証メカニズムの設定 # 通常はLOGINなどを記述するが未指定。 smtpd_sasl_security_options = noanonymous
sasl側のsmtp-auth設定
smtp-auth時に認証デーモンをauthlibに指定。
# cd /usr/lib/sasl2 # vi smtpd.conf
編集箇所
pwcheck_method: authdaemond
authdaemond_path: /var/spool/authdaemon/socket
mech_list: PLAIN LOGIN
log_level: 3
daemonグループへpostfixを追加
postfixデーモンがauthdaemonで認証をするため、daemonグループへ追加。
# usermod -G postfix,mail,daemon postfix
各デーモン起動
# /etc/init.d/saslauthd # /etc/init.d/courier-authlib restart # /etc/init.d/courier-imap restart # /etc/init.d/postfix restart
送受信テスト
OutlookExpressからの送信テスト。ひとまずログにて開設。
送信失敗ログ
Mar 22 18:43:23 testsvr postfix/smtpd[32641]: initializing the server-side TLS engine Mar 22 18:43:23 testsvr postfix/smtpd[32641]: connect from y-foo.localnet.hogehoge.com[10.10.1.236] Mar 22 18:43:23 testsvr authdaemond: received auth request, service=smtp, authtype=login Mar 22 18:43:23 testsvr authdaemond: authmysql: trying this module Mar 22 18:43:23 testsvr authdaemond: SQL query: SELECT name, password, "", 10000, 89, '/usr/local/virtual', maildir, quota, name, "" FROM mailbox WHERE name = "foo2@example.com" Mar 22 18:43:23 testsvr authdaemond: zero rows returned Mar 22 18:43:23 testsvr authdaemond: no password available to compare Mar 22 18:43:23 testsvr authdaemond: authmysql: REJECT - try next module Mar 22 18:43:23 testsvr authdaemond: FAIL, all modules rejected Mar 22 18:43:23 testsvr postfix/smtpd[32641]: warning: y-foo.localnet.hogehoge.com[10.10.1.236]: SASL LOGIN authentication failed Mar 22 18:43:23 testsvr postfix/smtpd[32641]: lost connection after AUTH from y-foo.localnet.hogehoge.com[10.10.1.236] Mar 22 18:43:23 testsvr postfix/smtpd[32641]: disconnect from y-foo.localnet.hogehoge.com[10.10.1.236]
認証時に発行されたSQLを確認すると、
FROM mailbox WHERE name = "foo2@example.com"
となっており、ユーザー名をFQDNでリクエストしている。
認証時のリクエストを見直すため、main.cfの以下のパラメータをコメント。
705c706 < smtpd_sasl_local_domain = $mydomain --- > #smtpd_sasl_local_domain = $mydomain
上記を変更後、再起動し、成功。
成功時ログ
Mar 22 19:18:10 testsvr postfix/smtpd[390]: connect from y-foo.localnet.hogehoge.com[10.10.1.236] Mar 22 19:18:10 testsvr authdaemond: received auth request, service=smtp, authtype=login Mar 22 19:18:10 testsvr authdaemond: authmysql: trying this module Mar 22 19:18:10 testsvr authdaemond: SQL query: SELECT username, password, "", 10000, 89, '/usr/local/virtual', maildir, quota, name, "" FROM mailbox WHERE username = "foo2@example.com" Mar 22 19:18:10 testsvr authdaemond: password matches successfully Mar 22 19:18:10 testsvr authdaemond: authmysql: sysusername=&amp;lt;null&amp;gt;, sysuserid=10000, sysgroupid=89, homedir=/usr/local/virtual, address=foo2@example.com, fullname=foo2, maildir=foo2@example.com/, quota=0, options=&amp;lt;null&amp;gt; Mar 22 19:18:10 testsvr authdaemond: authmysql: clearpasswd=&amp;lt;null&amp;gt;, passwd=$1$89315ab6$bOR8LZh5r3ZkfqvlIwsEZ0 Mar 22 19:18:10 testsvr authdaemond: Authenticated: sysusername=&amp;lt;null&amp;gt;, sysuserid=10000, sysgroupid=89, homedir=/usr/local/virtual, address=foo2@example.com, fullname=foo2, maildir=foo2@example.com/, quota=0, options=&amp;lt;null&amp;gt; Mar 22 19:18:10 testsvr authdaemond: Authenticated: clearpasswd=password, passwd=************************************ Mar 22 19:18:10 testsvr postfix/trivial-rewrite[397]: warning: do not list domain example.com in BOTH mydestination and virtual_mailbox_domains Mar 22 19:18:10 testsvr postfix/smtpd[390]: E8ED9FC100: client=y-foo.localnet.hogehoge.com[10.10.1.236], sasl_method=LOGIN, sasl_username=foo2@example.com Mar 22 19:18:10 testsvr postfix/cleanup[401]: E8ED9FC100: message-id=&amp;lt;000b01c64d99$fcad03d0$ec010a0a@localnet.hogehoge.com&amp;gt; Mar 22 19:18:11 testsvr postfix/qmgr[32747]: E8ED9FC100: from=&amp;lt;foo2@example.com&amp;gt;, size=705, nrcpt=1 (queue active) Mar 22 19:18:11 testsvr postfix/smtpd[390]: disconnect from y-foo.localnet.hogehoge.com[10.10.1.236] Mar 22 19:18:11 testsvr postfix/virtual[404]: E8ED9FC100: to=&amp;lt;foo2@example.com&amp;gt;, relay=virtual, delay=1, status=sent (delivered to maildir) Mar 22 19:18:11 testsvr postfix/qmgr[32747]: E8ED9FC100: removed