harumaki.net

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

GNU/Linux infra MAIL postfix

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

投稿日:2006年3月22日

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;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;amp;lt;YESorNO&amp;amp;gt;';

デフォルトはNOとなっており、アカウント+ドメイン名となる。

+DB作成

 # vi DATABASE_MYSQL.TXT
 # mysql -upostfixadmin -p****** &amp;amp;lt; DATABASE_MYSQL.TXT

+DB確認

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

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

執筆者:


comment

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

CAPTCHA


関連記事

nagios​/plugin​/Recurring schedule

  [pukiwiki] *nagios ダウンタイムの定期スケジューリング nagios標準のダウンタイム機能は一回限りのスケジュール設定のみが可能で、 “毎晩03時~05時は非通知&# …

nagios NRPEインストール

  [pukiwiki] *NRPEインストールログ [#udb00d6c] 作業日:2010-11-22 -参考ページ お世話になっています!! –NRPE (Nagios Remote …

no image

haproxyを試す 2.syslog設定

  ※haproxy RPM版です。 Contents haproxyのログをrsyslogへ出力する場合の設定方法。 ログの書き出しはsyslogファシリティを利用するが、送信方法はrsyslogの …

no image

MailScannerインストール

[pukiwiki] #contents *MailScannerインストール [#u6675e2d] RHEL4+postfix環境にて、MailScannerを試す。 これでウィルス/スパムを同時 …

no image

haproxyを試す 4.ソケット接続とステータス出力

  haproxyでステータスやバックエンドサーバーの状態やプールを確認する場合、コマンドラインからチェックできるツールは無い様子。代わりにソケットリレーツール”socat(SOcketを …

宅麺