harumaki.net

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

postfixadminでのメールサーバー構築

   


メールサーバ構築テスト4.postfixadmin

2006-03-01

会社のメールサーバーの再構築のための検証として、いろいろと。

参考サイト

お世話になっています!

AIT:postfixadminのインストール
http://www.yanbe.net/blog/archives/000231.html

パソコンおやじ
http://www.aconus.com/~oyaji/suse9.2/smtp-mysql-suse.htm

Vine Linux & Webmin
http://www.fkimura.com/webmin/vine-postfixadmin-0.html

MySQL をサポートした Postfix の構築
http://www.kobitosan.net/postfix/trans-2.1/jhtml/MYSQL_README.html

構築要件

会社のメールサーバの再構築時の要件として。

  • アカウントを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 -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> 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
  1. 変更箇所
    $CONF['database_type'] = 'mysql';
    $CONF['database_host'] = 'localhost';
    $CONF['database_user'] = 'postfixadmin';
    $CONF['database_password'] = '******';
    $CONF['database_name'] = 'postfix';
    $CONF['database_prefix'] = '';

    またMaildir名をアカウント+ドメインにするか、ドメイン名のみにするかは
    以下のパラメータで変更(mukaiさんより情報提供)

    $CONF['domain_path'] = '<YESorNO>';
    デフォルトはNOとなっており、アカウント+ドメイン名となる。
  2. DB作成
    # vi DATABASE_MYSQL.TXT
    # mysql -upostfixadmin -p****** < DATABASE_MYSQL.TXT
  3. DB確認
    # mysql -upostfixadmin -ppassword
    mysql> use postfixadmin;
    mysql> 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設定

管理画面へのアクセス制限を追加。

  1. ベーシック認証
    postfixadmin/admin以下に
    .htaccess
    .htpasswdファイルが有るので、apache設定でこれらの実行が許可されていれば
    そのまま使用可能。
    apache側で禁止している場合はhttpd.confへ。

    1. htpasswdファイルの指定
    2. ユーザー・パスワード追加
      # htpasswd -c .htpasswd USER
  2. sslでの接続強制
    httpd.confへ以下を追加。sshでのリダイレクトを実行する。

    <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 \
    > courier-authlib-debuginfo-0.56-1.3ES.i386.rpm \
    > courier-authlib-devel-0.56-1.3ES.i386.rpm \
    > 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
    # vi 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
    # vi 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=<null>,
    sysuserid=10000, sysgroupid=104, homedir=/usr/local/virtual, address=foo@example.com,
    fullname=<null>, maildir=foo@example.com/, quota=0, options=<null>
    Mar 21 20:32:57 testsvr authdaemond: Authenticated: sysusername=<null>,
    sysuserid=10000, sysgroupid=104, homedir=/usr/local/virtual, address=foo@example.com, 
    fullname=<null>, maildir=foo@example.com/, quota=0, options=<null>
    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=<null>, sysuserid=10000, sysgroupid=89, 
      homedir=/usr/local/virtual, address=foo2@example.com, fullname=foo2,  maildir=foo2@example.com/, quota=0, options=<null>
      Mar 22 19:18:10 testsvr authdaemond: authmysql: clearpasswd=<null>, passwd=$1$89315ab6$bOR8LZh5r3ZkfqvlIwsEZ0
      Mar 22 19:18:10 testsvr authdaemond: Authenticated: sysusername=<null>, sysuserid=10000, sysgroupid=89, 
      homedir=/usr/local/virtual, address=foo2@example.com, fullname=foo2, maildir=foo2@example.com/, quota=0, options=<null>
      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=<000b01c64d99$fcad03d0$ec010a0a@localnet.hogehoge.com>
      Mar 22 19:18:11 testsvr postfix/qmgr[32747]: E8ED9FC100: from=<foo2@example.com>, 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=<foo2@example.com>, relay=virtual, delay=1,
      status=sent (delivered to maildir)
      Mar 22 19:18:11 testsvr postfix/qmgr[32747]: E8ED9FC100: removed

Q&A

  • smtp認証を有効にするために削除したsaslのパラメータが影響が出るかどうか要検証。admin? 2006-03-22 (水) 19:50:40
  • smtpd_sasl_local_domainで指定するパラメータはデフォルトドメインを指定するためのものなので、削除しても問題なし — admin? 2006-03-23 (木) 13:49:41








 - GNU/Linux, infra, MAIL, postfix , ,