Last Updated on 2013年7月20日 by かんりにん
[pukiwiki]
約2年ぶりくらいにpostfix+mysql+postfixadminでメールサーバーをセットアップしたので
備忘録として。
割とスタンダードな内容なので、参考になるかわかりませんが・・・
*概要 [#j6fb952e]
– サーバー
CentOS5.7
– ドメイン
example.comに置換しています。
メールサーバー名:mail.example.com
**構成ミドルウェア [#x54ef5c5]
ライブラリや関連パッケージは省略。postfixadmin以外は、基本的にすべてRPMで。
 postifx
 postfixadmin
 dovecot
 php
 mysql
**セットアップ順序 [#d2181fa0]
DB環境が構築された状態でpostfixの環境を構成する必要があるため
以下の順序で実施。
1.mysql
2.php
3.postfixadmin
4.postifx
5.dovecot
**備考 [#ted9ce30]
ドキュメント内の各種パスワードは例として記載しています。
参考にされる際はご注意下さい。
*セットアップログ [#p18cdfad]
**1)mysql [#j64765bc]
 設定ファイル /etc/my.cnf
 rootパスワード MYSQLPASSWD
***1.文字コードをUTF-8に統一 [#b9929375]
起動後も変更が可能だが、インストール直後なのであらかじめ設定しておく。
 0a1,4
 > #
 > [client]
 > default-character-set=utf8
 >
 12a17,22
 > default-character-set = utf8
 > skip-character-set-client-handshake
 > character-set-server = utf8
 > collation-server = utf8_general_ci
 > init-connect = SET NAMES utf8
***2.mysqld起動 [#q55b20d6]
 # /etc/init.d/mysqld start
合わせてデータベースの初期化を実施(postgresのinitdbと同じ)
***3.rootパスワード設定 [#f0dc4454]
設定は乱数で。
+ パスワード設定
 # mysqladmin -u root password ‘MYSQLPASSWD’
+ ログイン確認
 # mysql -uroot -p
 Enter password:
 Welcome to the MySQL monitor.  Commands end with ; or \g.
 Your MySQL connection id is 3
 Server version: 5.0.77 Source distribution
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.
 mysql>
+ 環境確認
 mysql> show variables like ‘character_set%’;
 +————————–+—————————-+
 | Variable_name            | Value                      |
 +————————–+—————————-+
 | character_set_client     | utf8                       |
 | character_set_connection | utf8                       |
 | character_set_database   | utf8                       |
 | character_set_filesystem | binary                     |
 | character_set_results    | utf8                       |
 | character_set_server     | utf8                       |
 | character_set_system     | utf8                       |
 | character_sets_dir       | /usr/share/mysql/charsets/ |
 +————————–+—————————-+
 8 rows in set (0.00 sec)
 mysql> status
 ————–
 mysql  Ver 14.12 Distrib 5.0.77, for redhat-linux-gnu (i686) using readline 5.1
 Connection id:          3
 Current database:
 Current user:           root@localhost
 SSL:                    Not in use
 Current pager:          stdout
 Using outfile:          ”
 Using delimiter:        ;
 Server version:         5.0.77 Source distribution
 Protocol version:       10
 Connection:             Localhost via UNIX socket
 Server characterset:    utf8
 Db     characterset:    utf8
 Client characterset:    utf8
 Conn.  characterset:    utf8
 UNIX socket:            /var/lib/mysql/mysql.sock
 Uptime:                 1 min 10 sec
 Threads: 1  Questions: 11  Slow queries: 0  Opens: 12  Flush tables: 1  Open tables: 6  Queries per second avg: 0.157
 ————–
 mysql>
+ 不要な匿名ユーザーの削除と、全デフォルトDBへのrootパスワード設定
 mysql> select host,user,password from mysql.user;
 +———————+——+——————+
 | host                | user | password         |
 +———————+——+——————+
 | localhost           | root | 53f0d3581cd33a0d |
 | mailsvr.example.com | root |                  |
 | 127.0.0.1           | root |                  |
 | localhost           |      |                  |
 | mailsvr.example.com |      |                  |
 +———————+——+——————+
 5 rows in set (0.00 sec)
 mysql> delete from mysql.user where user=””;
 Query OK, 2 rows affected (0.00 sec)
 mysql> select host,user,password from mysql.user;
 +———————+——+——————+
 | host                | user | password         |
 +———————+——+——————+
 | localhost           | root | 53f0d3581cd33a0d |
 | mailsvr.example.com | root |                  |
 | 127.0.0.1           | root |                  |
 +———————+——+——————+
 3 rows in set (0.00 sec)
 mysql> set password for root@’mailsvr.example.com’=password(‘MYSQLPASSWD’);
 Query OK, 0 rows affected (0.00 sec)
 mysql> set password for root@’127.0.0.1’=password(‘MYSQLPASSWD’);
 Query OK, 0 rows affected (0.00 sec)
 mysql> select host,user,password from mysql.user;
 +———————+——+——————+
 | host                | user | password         |
 +———————+——+——————+
 | localhost           | root | 53f0d3581cd33a0d |
 | mailsvr.example.com | root | 53f0d3581cd33a0d |
 | 127.0.0.1           | root | 53f0d3581cd33a0d |
 +———————+——+——————+
 3 rows in set (0.00 sec)
 mysql> flush privileges;
 Query OK, 0 rows affected (0.00 sec)
 mysql>
+ postfixadmin用DB作成
 # mysql -uroot -p
 Enter password:
 Welcome to the MySQL monitor.  Commands end with ; or \g.
 Your MySQL connection id is 15
 Server version: 5.0.77 Source distribution
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.
 mysql> CREATE DATABASE postfix;
 Query OK, 1 row affected (0.00 sec)
 mysql> CREATE USER ‘postfix’@’localhost’ IDENTIFIED BY ‘POSTFIXADMINPASSWD’;
 Query OK, 0 rows affected (0.00 sec)
 mysql> GRANT ALL PRIVILEGES ON `postfix` . * TO ‘postfix’@’localhost’;
 Query OK, 0 rows affected (0.00 sec)
 mysql> flush privileges;
  Query OK, 0 rows affected (0.00 sec)
 mysql> quit
 Bye
**2)php [#c3c0e3e7]
-初期設定
設定ファイル /etc/php.ini
 # cd /etc/
 # cp -p php.ini php.ini.bak
 # vi php.ini
— [設定内容]
 501c501
 < ;default_charset = "iso-8859-1"
 ---
 > default_charset = “UTF-8”
 639c639
 < ;date.timezone =
 ---
 > date.timezone = “Asia/Tokyo”
 1133c1133
 < ;mbstring.http_input = auto
 ---
 > mbstring.http_input = pass
 1137c1137
 < ;mbstring.http_output = SJIS
 ---
 > mbstring.http_output = pass
 1144c1144
 < mbstring.encoding_translation = on
 ---
 > mbstring.encoding_translation = Off
 1162c1162
 < ;mbstring.func_overload = 0
 ---
 > mbstring.func_overload = 0
**3)httpd [#r73ac32b]
ドキュメントルートはhttpdのデフォルトの/var/www/html、
postfix管理画面は/var/www/html/postfixとする。
 # cd /etc/httpd/conf
 # cp -p httpd.conf httpd.conf.bak
 # vi httpd.conf
– [設定内容1]基本設定
 44c44
 < ServerTokens OS
 ---
 > ServerTokens Prod
 996a997,998
 >
 > TraceEnable Off
– [設定内容2]ダイジェスト認証
/var/www/html/postfixに対して認証を設定。
ベーシック認証では心もとないのでダイジェスト認証で設定する。
— httpd.conf
 > Alias /postfixadmin “/var/www/html/postfixadmin”
 >
 > 
 >
 >         #order allow,deny
 >         #allow from all
 >
 >         AuthType Digest
 >         AuthName “Digest Auth”
 >         AuthUserFile /etc/httpd/conf/htdigestpasswd
 >         require valid-user
 >
 > 
 >
– [設定内容3]ユーザーおよびパスワード設定
 # htdigest -c /etc/httpd/conf/htdigestpasswd “Digest Auth” postfixadmin
 Adding password for postfixadmin in realm Digest Auth.
 New password:
 Re-type new password:
 #
→設定後、httpdを再起動。
**4)postfixadmin [#g8206ba6]
+ ソースアーカイブのダウンロード
 # cd /usr/local/src/
 # wget http://sourceforge.net/projects/postfixadmin/files/postfixadmin/postfixadmin-2.3.4/postfixadmin_2.3.4.tar.gz/download
 # tar -zxvf postfixadmin_2.3.4.tar.gz
 # cp -pR postfixadmin-2.3.4 /var/www/html/
 # cd /var/www/html/
 # chown -R apache.apache postfixadmin-2.3.4/
 # mv postfixadmin-2.3.4 postfixadmin
+ 初期設定
 # cd postfixadmin/
 # cp -p config.inc.php config.inc.php.bak
 # vi config.inc.php
— [設定内容]
 26c26
 < $CONF['configured'] = false;
 ---
 > $CONF[‘configured’] = true;
 52c52
 < $CONF['database_password'] = 'postfixadmin';
 ---
 > $CONF[‘database_password’] = ‘POSTFIXADMINPASSWD’;
 82c82
 < $CONF['admin_email'] = 'postmaster@change-this-to-your.domain.tld';
 ---
 > $CONF[‘admin_email’] = ‘postmaster@example.com’;
 99c99,100
 < $CONF['encrypt'] = 'md5crypt';
 ---
 > //$CONF[‘encrypt’] = ‘md5crypt’;
 > $CONF[‘encrypt’] = ‘cleartext’;
 133,136c134,137
 <     'abuse' => ‘abuse@change-this-to-your.domain.tld’,
 <     'hostmaster' => ‘hostmaster@change-this-to-your.domain.tld’,
 <     'postmaster' => ‘postmaster@change-this-to-your.domain.tld’,
 <     'webmaster' => ‘webmaster@change-this-to-your.domain.tld’
 —
 >     ‘abuse’ => ‘abuse@example.com’,
 >     ‘hostmaster’ => ‘hostmaster@example.com’,
 >     ‘postmaster’ => ‘postmaster@example.com’,
 >     ‘webmaster’ => ‘webmaster@example.com’
 144c145
 < $CONF['domain_path'] = 'NO';
 ---
 > $CONF[‘domain_path’] = ‘YES’;
 150c151
 < $CONF['domain_in_mailbox'] = 'YES';
 ---
 > $CONF[‘domain_in_mailbox’] = ‘NO’;
 216c217
 < $CONF['vacation_domain'] = 'autoreply.change-this-to-your.domain.tld';
 ---
 > $CONF[‘vacation_domain’] = ‘autoreply.example.com’;
 233c234
 < $CONF['alias_control'] = 'NO';
 ---
 > $CONF[‘alias_control’] = ‘YES’;
 236c237
 < $CONF['alias_control_admin'] = 'NO';
 ---
 > $CONF[‘alias_control_admin’] = ‘YES’;
 241c242
 < $CONF['special_alias_control'] = 'NO';
 ---
 > $CONF[‘special_alias_control’] = ‘YES’;
→設定後、http://DOMAINNAME.TLD/postfixadmin/setup.php へアクセスし
Web上からセットアップを行う。
+ セットアップパスワードの投入とhash化パスワードの反映
管理画面の最下段にてセットアップパスワードを入力すると、hash化したパスワードが
Web画面へ出力されるので、config.ini.phpへ反映させる。
※セットアップパスワードは管理者パスワードの変更などに必要となるため
メモをとって保管しておくこと。
— [追加内容
 31c31
 < $CONF['setup_password'] = 'changeme';
 ---
 > $CONF[‘setup_password’] = ’53a1d7cbf72b7bdb4d1c72c7f238570f:49aaaf3cf2807a331e0532dc123e387339cda37b’;
**5)postifx [#zbea30eb]
***再コンパイル [#aa1be2dc]
postfixadminへ対応するため、mysql対応パッケージをビルドする
+ パッケージのダウンロード
理研のサイトからCentOS5.7用のpostfixのソースパッケージをダウンロード。
 # cd /usr/src/redhat/SRPMS/
 # wget http://ftp.riken.go.jp/Linux/centos/5.7/centosplus/SRPMS/postfix-2.3.3-2.3.centos.mysql_pgsql.src.rpm
+ ビルド
パッケージのビルドに当たって、VDOからのパッチを当てておく
 # rpm -Uvh postfix-2.3.3-2.3.centos.mysql_pgsql.src.rpm
 # cd ../SOURCES/
 # wget http://vda.sourceforge.net/VDA/postfix-2.3.3-vda.patch.gz
 # gunzip -d postfix-2.3.3-vda.patch.gz
–[specファイル編集]
上記のvdaパッチを適用するため、以下をspecファイルへ追記。
 # cd ../SPECS
 # cp -p postfix.spec postfix.spec.bak
 # vi postfix.spec
 78a79
 > Patch2: postfix-2.3.3-vda.patch
 141a143
 > %patch2 -p1 -b .trash
+specファイル編集後、rpmbuild実行。
 # rpmbuild -bb postfix.spec
+作成パッケージを確認。
 書き込み完了: /usr/src/redhat/RPMS/i386/postfix-2.3.3-2.3.centos.mysql_pgsql.i386.rpm
 書き込み完了: /usr/src/redhat/RPMS/i386/postfix-pflogsumm-2.3.3-2.3.centos.mysql_pgsql.i386.rpm
 書き込み完了: /usr/src/redhat/RPMS/i386/postfix-debuginfo-2.3.3-2.3.centos.mysql_pgsql.i386.rpm
+ インストール後、yum update時にpostfixが自動アップデートされないよう
無効にしておく。
 # cd /etc/
 # cp -p yum.conf yum.conf.bak
 # vi yum.conf
— [設定値]
 20a21,23
 >
 > # postfix is excepted from update.
 > exclude=postfix*
+ postfixとpostfixadminを連携するための実行ユーザーを設定
 # groupadd -g 10000 vuser
 # useradd -g vuser -u 10000 vuser
 # mkdir /usr/local/virtual
 # chown vuser:vuser /usr/local/virtual
 # chmod 771 /usr/local/virtual
+ インストール
 # cd /usr/src/redhat/RPMS/i386/
 # rpm –force -Uvh –test postfix-2.3.3-2.3.centos.mysql_pgsql.i386.rpm
 準備中…                ########################################### [100%]
 # rpm –force -Uvh postfix-2.3.3-2.3.centos.mysql_pgsql.i386.rpm
 準備中…                ########################################### [100%]
    1:postfix                ########################################### [100%]
+ インストール確認
 # rpm -qa | grep postfix
 postfix-2.3.3-2.3.centos.mysql_pgsql
***初期設定 [#p97275e5]
-[main.cf]
 # cd /etc/postfix/
 # cp -p main.cf main.cf.bak
 # vi main.cf
–[設定内容]
 70c70
 < #myhostname = virtual.domain.tld
 ---
 > myhostname = mail.example.com
 77c77
 < #mydomain = domain.tld
 ---
 > mydomain = example.com
 93c93
 < #myorigin = $mydomain
 ---
 > myorigin = $mydomain
 107c107
 < #inet_interfaces = all
 ---
 > inet_interfaces = all
 110c110
 < inet_interfaces = localhost
 ---
 > #inet_interfaces = localhost
 155c155
 < mydestination = $myhostname, localhost.$mydomain, localhost
 ---
 > #mydestination = $myhostname, localhost.$mydomain, localhost
 158a159
 > mydestination =
 287c288
 < #relay_domains = $mydestination
 ---
 > relay_domains = $mydestination
 377c378
 < alias_maps = hash:/etc/aliases
 ---
 > alias_maps = hash:/etc/postfix/aliases
 388c389
 < alias_database = hash:/etc/aliases
 ---
 > alias_database = hash:/etc/postfix/aliases
 410c411
 < #home_mailbox = Maildir/
 ---
 > home_mailbox = Maildir/
 561a563
 > smtpd_banner = $myhostname
 667a670,722
 >
 > # postfix advanced configuration
 > disable_vrfy_command = yes
 >
 >
 > ## postfix and postfixadmin configuration
 > 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 50MB
 > mailbox_size_limit = 51200000
 >
 > # mail size limit 10MB
 > 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
 >
 > ## smtp auth configutation
 > smtpd_sasl_auth_enable = yes
 >
 > smtpd_sasl_type = dovecot
 >
 > smtpd_sasl_path = private/auth
 >
 > smtpd_sasl_local_domain = $myhostname
 >
 > smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
– master.cf
 サブミッションポートを有効にしておく。
 # cp -p master.cf master.cf.bak
 # vi master.cf
— [設定値]
 10c10
 < #submission inet n       -       n       -       -       smtpd
 ---
 > submission inet n       –       n       –       –       smtpd
***postfixadminの関連設定ファイルを追加 [#v3a78e9a]
– mysql_virtual_alias_maps.cf
 # touch mysql_virtual_alias_maps.cf
 # vi mysql_virtual_alias_maps.cf
— [設定値]
 user = postfix
 password = POSTFIXADMINPASSWD(mysqlのpostfixユーザーのパスワード)
 hosts = localhost
 dbname = postfix
 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 = postfix
 password = jzbinKrBwssZ
 hosts = localhost
 dbname = postfix
 query = SELECT domain FROM domain WHERE domain=’%s’
– mysql_virtual_mailbox_maps.cf
 # touch mysql_virtual_mailbox_maps.cf
 # vi mysql_virtual_mailbox_maps.cf
— [設定値]
 user = postfix
 password = jzbinKrBwssZ
 hosts = localhost
 dbname = postfix
 query = SELECT maildir FROM mailbox WHERE username=’%s’
– vquota
※ユーザーごとのメールボックスのサイズ上限を設定するファイル。
 デフォルトは空ファイルのままdbファイルを作成しておき、後で必要に応じて変更。
 # touch vquota
 # postmap vquota
 # ll vquota*
 -rw-r–r– 1 root root     0  9月 28 23:04 vquota
 -rw-r–r– 1 root root 12288  9月 28 23:04 vquota.db ←vquota.dbファイルが作成されていることを確認。
設定完了後、postfixを再起動(reloadではない)
#/etc/init.d/postfix restart 
**6)dovecot [#h0638301]
***初期設定 [#v4dda50b]
– /etc/dovecot.conf
 # cd /etc/
 # cp -p dovecot.conf dovecot.conf.bak
 # vi dovecot.conf
— [設定値]
 ※32ビットOSなので64ビット対応は不要。
 211c211
 < #mail_location =
 ---
 > mail_location = maildir:/usr/local/virtual/example.com/%u
 327c327
 < #first_valid_uid = 500
 ---
 > first_valid_uid = 10000
 334c334
 < #first_valid_gid = 1
 ---
 > first_valid_gid = 10000
 622c622
 <   #pop3_uidl_format = %08Xu%08Xv
 ---
 >   pop3_uidl_format = %08Xu%08Xv
 762c762,763
 <   mechanisms = plain
 ---
 >   #mechanisms = plain
 >   mechanisms = plain login digest-md5 cram-md5
 869c870
 <   #passdb sql {
 ---
 >   passdb sql {
 871,872c872,873
 <     #args =
 <   #}
 ---
 >     ar gs = /etc/dovecot-mysql.conf
 >   }
 930c931
 <   #userdb sql {
 ---
 >   userdb sql {
 932,933c933,934
 <     #args =
 <   #}
 ---
 >     args = /etc/dovecot-mysql.conf
 >   }
 978c979
 <   #socket listen {
 ---
 >   socket listen {
 989c990
 <     #client {
 ---
 >     client {
 994,996c995,1000
 <       #mode = 0660
 <     #}
 <   #}
 ---
 >       path = /var/spool/postfix/private/auth
 >       mode = 0660
 >       user = postfix
 >       group = postfix
 >     }
 >   }
– /etc/dovecot-mysql.conf
pop、imap認証のためmysqlへ接続する設定を追加。
設定ファイル内でユーザー認証のためのSQL文も含まれる。
 # cd /etc/
 # touch dovecot-mysql.conf
 # vi dovecot-mysql.conf
— [設定値]
 driver = mysql
 default_pass_scheme = PLAIN
 connect = dbname=postfix user=postfix host=/var/lib/mysql/mysql.sock password=POSTFIXADMINPASSWD
 password_query = SELECT password FROM mailbox WHERE local_part = ‘%u’ AND active = ‘1’
 user_query = SELECT concat(‘/usr/local/virtual/’, maildir) as home, 10000 as uid, 10000 as gid FROM mailbox WHERE local_part = ‘%u’
→設定完了後、サービスを再起動。
*動作検証 [#q27b100d]
**1)SMTPサーバをsendmailからpostfixへ切り替え [#s8dc92a6]
 # system-switch-mail
→CUIウィザードでpostfix変更。切り替えと同時にpostfixサービスが起動される。
– ログ確認
–/var/log/maillog
 Sep 28 23:16:23 example.com postfix/postfix-script: starting the Postfix mail system
 Sep 28 23:16:23 example.com postfix/master[23324]: daemon started — version 2.3.3, configuration /etc/postfix
**2)dovecot [#o8c5fe04]
 # /etc/init.d/dovecot start
 Dovecot Imap を起動中:                                     [  OK  ]
– ログ確認
 /var/log/maillog
 Sep 29 00:41:23 example.com dovecot: Dovecot v1.0.7 starting up
 Sep 29 00:41:23 example.com dovecot: auth-worker(default): mysql: Connected to /var/lib/mysql/mysql.sock (postfix)
*自動起動設定を追加 [#jc671272]
postfixはsystem-switch-mail実行時にchkconfig onとなっているので、dovecotとmysqlのみ設定。
 # chkconfig –list | grep dovecot
 dovecot         0:off   1:off   2:off   3:off   4:off   5:off   6:off
 # chkconfig dovecot on
 # chkconfig –list | grep dovecot
 dovecot         0:off   1:off   2:on    3:on    4:on    5:on    6:off
 
 # chkconfig –list | grep mysqld
 mysqld          0:off   1:off   2:off   3:off   4:off   5:off   6:off
 # chkconfig mysqld on
 # chkconfig –list | grep mysqld
 mysqld          0:off   1:off   2:on    3:on    4:on    5:on    6:off
[/pukiwiki]
 
 
											