既にCUI型で稼動しているメールサーバに管理効率化のため、
Postfix Admin を搭載し構築し直します。
これによりバーチャルドメイン対応でのメール運用がGUI化され、
Webブウウザより楽に運用可能となります。
初めてメールサーバを稼動させる場合はCUI型のFedora10(メールサーバー)も参考に構築します。
Postfix Admin はおおまかですが下記のような事がWebブウウザから操作出来ます。
・ ドメインの追加、変更、削除
・ メールアカウントやパスワード、転送設定等の追加、変更、削除
また、現在稼動しているデフォルトでのPostfixはMySQLに対応していないので、
MySQLに対応するように再構築します
更に、通信の暗号化対策としてSSLを運用します。
再構築後の動作環境
Postfix(今回MySQL対応に再構築) + Dovecot + MySQL
+ Apache + PHP + SSL + Postfix Admin
①PostfixAdminが使用するデータベース作成
# mysql -u ユーザ名 -p パスワード(例: mysql -u root -p mysql )
→ MySQLへログイン
mysql> create database postfix;
→ postfix データベース作成(環境により名前は変更)
mysql> use postfix; → postfix デーダースへ接続
mysql> grant all privileges on postfix.* to abc@localhost identified by 'パスワード';
→ ユーザabcに全ての権限を付与しパスワードを設定
mysql> exit;
②PostfixAdmin用のバーチャルドメインユーザーと専用ディレクトリを作成
* PostfixAdminでは、データベース化されたユーザーにメールを配送します。
# groupadd -g 10000 vuser
# useradd -g vuser -u 10000 vuser
# mkdir /home/mailvirtual
# chown vuser:vuser /home/mailvirtual
# chmod 771 /home/mailvirtual
③postfixをMySQLに対応させる
* postfixのデフォルトパッケージはMySQLに対応していません。
# cd /usr/local/src/ → で作業します。
# wget http://ftp.riken.jp/Linux/centos/5.2/os/SRPMS/postfix-2.3.3-2.src.rpm
# mkdir -p /usr/src/redhat/SOURCES → SOURCESは大文字で!!
# rpm -ihv postfix-2.3.3-2.src.rpm
* 「警告:mockbuild は存在しません -root を使用します」と出ますが、
ユーザー名 mockbuild が存在しないというだけで影響無いので無視します。
#cd /usr/src/redhat/SOURCES
# wget http://vda.sourceforge.net/VDA/postfix-2.3.3-vda.patch.gz
# gunzip postfix-2.3.3-vda.patch.gz
# cd /usr/src/redhat/SPECS/
# cp postfix.spec postfix.spec.df → コピーしておきます。
# vi postfix.spec → MySQLを有効にする設定とパッチの追加設定を行います。
%define MYSQL 0 → %define MYSQL 1 に変更
(省略)
Patch10: postfix-2.3.3-vda.patch → 追加
(省略)
%patch10 -p1 -b .vda → 追加
# yum -y install rpm-build db4-devel zlib-devel openldap-devel cyrus-sasl-devel pcre-devel mysql-devel openssl-devel
→ Postfixをリビルドする準備をします。(必要なものだけ)
* リビルドするには下記パッケージが必要となります。
# yum list | grep ファイル名(名前の一部でも可)
としてインストール対象の確認をします。
(installedと出たものは既にインストールされています。)
・ gcc
・ rpm-build
・ pkgconfig
・ db4-devel
・ zlib-devel
・ openldap-devel
・ cyrus-sasl-devel
・ pcre-devel
・ mysql-devel
・ openssl-devel
# rpmbuild -ba postfix.spec → パッチをあてPostfixをリビルドします。
* 暫し、先達たちの開発者に感謝しながら待ちます。
# rpm -e postfix-2.3.3-2.1.el5_2 → 既にあるpostfixをアンインストールします。
* 先の構築によりインストールしたpostfix関連のファイルで編集したものは、
xxx.xxx.rpmsave として保存されます。(同一ディレクトリ)
# rpm -Uhv /usr/src/redhat/RPMS/i386/postfix-2.3.3-2.i386.rpm
→ 出来上がったMySQL対応のpostfixをインストールします。
* rpm -Uhv --force /usr/src/redhat/RPMS/i386/postfix-2.3.3-2.i386.rpm
とすれば同一バージョンの場合はアンインストールとインストールが続けて行われます。
# yum list | grep postfix → バージョンが変わっていることを確認。
# vi /etc/yum.conf → postfixを自動アップデートしないように設定します。
(ここを飛ばすと後で大変なことになります。)
exclude=postfix* → 最後の行に追加
# chkconfig sendmail off → sendmail の自動起動を停止
# chkconfig postfix on → postfix の自動起動を開始
④バーチャル対応Postfixの設定(main.cfの編集)---右端の数値はおおよその行番号
* postfixをアンインストールしたので新規の作成になります。
* セーブ版より全コピーし修正すると間違いが発生する可能性大なので、
ここは新規に作成としましょう。部分的に旧と同じところは、
rpmsave版 よりコピーします。
# cd /etc/pki/tls/certs/
# make mail.pem → 環境にあわせます。
# /etc/postfix/main.cf
myhostname = mail.abc.xyz.com → 追加71
mydomain = abc.xyz.com → 追加79
myorigin = $mydomain → 修正(アンコメント削除;必ず追加します)95
myorigin = $myhostname → 修正(アンコメント削除)96
inet_interfaces = all → 修正(アンコメント削除)114
#inet_interfaces = localhost → 修正(アンコメント追加)115
#mydestination = $myhostname, localhost.$mydomain, localhost
→ 修正(アンコメント追加)159
mydestination =
→ 空を追加(仮想サイトに登録したアドレス宛以外は受けない様にします。)163
mynetworks = 192.168.0.0/24, 127.0.0.0/8 → 追加263
relay_domains = $mydestination → 修正(アンコメント削除)294
home_mailbox = Maildir/ → 修正(アンコメント削除)418
smtpd_banner = $myhostname ESMTP unknown → 追加570
#sendmail_path = /usr/sbin/sendmail.postfix → 修正(アンコメント追加)643
sendmail_path = /usr/sbin/sendmail → 追加(CGIの挙動合わせ)644
----------------- 追加 ------------------------
local_transport = virtual
virtual_transport = virtual
virtual_mailbox_base = /home/mailvirtual → 環境にあわせます。
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 → 環境にあわせます。
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_local_domain = $myhostname
smtpd_client_restrictions = reject_rbl_client bl.spamcop.net
→ 環境にあわせます。
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/pki/tls/certs/mail.pem → 環境にあわせます。
smtpd_tls_key_file = /etc/pki/tls/certs/mail.pem → 環境にあわせます。
smtpd_tls_session_cache_database = btree:/etc/postfix/smtpd_scache
tls_daemon_random_source = dev:/dev/urandom
----------------------------------------------------
⑤PostfixにあわせMySQL認証用ファイルを作成
# vi /etc/postfix/mysql_virtual_alias_maps.cf
user = abc
password = ********
hosts = localhost
dbname = postfix
table = alias
select_field = goto
where_field = address
# vi /etc/postfix/mysql_virtual_domains_maps.cf
user = abc
password = ********
hosts = localhost
dbname = postfix
table = domains
select_field = domains
where_field = domains
additional_conditions = and active = '1'
# vi /etc/postfix/mysql_virtual_mailbox_maps.cf
user = abc
password = ********
hosts = localhost
dbname = postfix
table = mailbox
select_field = maildir
where_field = username
⑥MySQL用設定ファイル作成
# vi /etc/dovecot-mysql.conf
driver = mysql
default_pass_scheme = PLAIN
connect = dbname=postfix user=abc host=/var/lib/mysql/mysql.sock password=********
→ 環境にあわせ user host password を設定します。
password_query = SELECT password FROM mailbox WHERE username = '%u' AND active = '1'
user_query = SELECT concat('/home/mailvirtual/', maildir) as home, 10000 as uid, 10000 as gid FROM mailbox WHERE username = '%u' AND active = '1'
⑦TLS セッションキャッシュマネージャの設定(master.cf の編集)
* SSLの利用に必要です。
# vi /etc/postfix/master.cf
submission inet n - n - - smtpd → アンコメントを外します。
smtps inet n - n - - smtpd → アンコメントを外します。
-o smtpd_tls_wrappermode=yes → アンコメントを外します。
-o smtpd_sasl_auth_enable=yes → アンコメントを外します。
⑧Dovecot の設定(dovecot.confの編集)
# cd /etc/pki/tls/certs/
# make mail.pem → 鍵を作成します。
# openssl x509 -in mail.pem -outform DER -out mail.der
→ クライアント向けインポート用サーバー証明書作成
# cp /etc/dovecot.conf /etc/dovecot.conf.save
# vi /etc/dovecot.conf
----------------- 修正内容--右端の数値はおおよその行番号--------------------------------
protocols = imap imaps pop3 pop3s → 変更(アンコメントを外す)20
listen = [::] → 変更(アンコメントを外す)39
log_path = /var/log/dovecot.log → 変更(アンコメントを外しパス追加)61
ssl_disable = no → 変更(アンコメントを外す。disable+no = yes。へんなの!!)85
ssl_cert_file = /etc/pki/tls/certs/mail.pem → 変更(追加。鍵ファイルを指定)93
ssl_key_file = /etc/pki/tls/certs/mail.pem → 変更(追加。鍵ファイルを指定)94
verbose_ssl = yes → 変更(アンコメントを外しno→yes;ログ解析用)119
mail_location = maildir:/home/mailvirtual/%d/%u → 変更(追加)213
first_valid_uid = 10000 → 変更(アンコメントを外し数値は環境に合わせ変更)330
first_valid_gid = 10000 → 変更(アンコメントを外し数値は環境に合わせ変更)338
protocol pop3 { → 変更しません。575
pop3_uidl_format = %08Xu%08Xv → 変更(アンコメントを外す)626
} → 変更しません。652
auth_verbose = yes → 変更(アンコメントを外しno→yes;ログ解析用)740
auth_debug = yes → 変更(アンコメントを外しno→yes;ログ解析用)745
auth_debug_passwords = yes → 変更(アンコメントを外しno→yes;ログ解析用)750
auth default { → そのまま。762
#mechanisms = plain → 変更(アンコメントを付ける)766
mechanisms = plain login digest-md5 cram-md5 apop → 追加771
passdb pam { → そのまま。805
} → そのまま。838
passdb sql { → 変更(アンコメントを外す)879
args = /etc/dovecot-mysql.conf → 変更(アンコメントを外しパス追加)881
} → 変更(アンコメントを外す)882
userdb passwd { → そのまま。906
} → そのまま。913
userdb sql { → 変更(アンコメントを外す)940
args = /etc/dovecot-mysql.conf → 変更(アンコメントを外しパス追加)942
} → 変更(アンコメントを外す)943
socket listen { → 変更(アンコメントを外す)988
client { → 変更(アンコメントを外す)999
path = /var/spool/postfix/private/auth → 追加(authは自動的に生成される)999
mode = 0660 → 変更(アンコメントを外す)1005
user = postfix → 追加1006
group = postfix → 追加1007
} → 変更(アンコメントを外す)1008
} → 変更(アンコメントを外す)1009
} → そのまま。1010
--------------------------------------------------------------
⑨認証ライブラリ関連のインストール
# yum -y install cyrus-sasl-md5 cyrus_sasl_sql
* cyrus-sasl-plain も必要ですが、インストール済みでした。
⑩postfixadmin のインストール
# cd /var/www → 環境により変更
# wget http://nchc.dl.sourceforge.net/sourceforge/postfixadmin/postfixadmin-2.3beta.tar.gz → ダウンロード
* postfixadmin の最新版を確認します。バージョンpostfixadmin-2.3betaが最新版でした。
# tar zxvf postfixadmin-2.3beta.tar.gz → 展開
# mv postfixadmin-2.3beta/ /var/www/postfixadmin → ディレクトリ名変更
⑪コンフィグファイルの編集
# vi /var/www/postfixadmin/config.inc.php
----------------------------------------------------
//$CONF['configured'] = false;
$CONF['configured'] = true; → 変更
//$CONF['default_language'] = 'en';
$CONF['default_language'] = 'ja'; → 変更
$CONF['database_type'] = 'mysql'; → 既に登録されています。(mysqlの場合)
$CONF['database_host'] = 'localhost'; → 既に登録されています。
$CONF['database_user'] = 'abc'; → 登録
$CONF['database_password'] = '********'; → 登録
$CONF['database_name'] = 'postfix'; → 登録
$CONF['database_prefix'] = ''; → 空のまま
//$CONF['encrypt'] = 'md5crypt';
$CONF['encrypt'] = 'cleartext'; → 変更
$CONF['page_size'] = '100'; → 変更
//$CONF['domain_path'] = 'NO';
$CONF['domain_path'] = 'YES'; → 変更
// Default Domain Values
// Specify your default values below. Quota in MB.
$CONF['aliases'] = '100'; → 変更
$CONF['mailboxes'] = '100'; → 変更
$CONF['maxquota'] = '300'; → 変更
// Quota
// When you want to enforce quota for your mailbox users set this to 'YES'.
$CONF['quota'] = 'NO'; → YESより変更
$CONF['backup'] = 'NO'; → YESより変更
$CONF['sendmail'] = 'NO'; → YESより変更
$CONF['fetchmail'] = 'NO'; → YESより変更
$CONF['footer_text'] = 'Postfix Admin Top'; → 変更
$CONF['footer_link'] = 'http://www.ホスト名ドメイン名/postfixadmin/'; → 変更
$CONF['emailcheck_resolve_domain']='NO'; → YESより変更
----------------------------------------------------
⑫Apache用の設定ファイル作成
# vi /etc/httpd/conf.d/postfixadmin.conf
-------------- 追加内容 (注:<>は大文字になっています。)--------------------------
Alias /postfixadmin "/var/www/postfixadmin"
<Directory "/var/www/postfixadmin">
Order allow,deny
Allow from all
</Directory>
<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>
------------------------------------------------------------------------------------------
# service dovecot start → dovecot の再起動
# service postfix start → postfix の再起動
# service httpd restart → Apache の再起動
⑬ファイアウォールの設定
サーバーとルーターのポートへ設定
465 番 SMTP over SSL
993 番 IMAP over SSL
995 番 POP3 over SSL
を開けます。
まさかと思いますが、25番(SMTP)、110番(POP3)、443番(https)もお忘れなく。
* /etc/services にサービス名とポート番号の関連リストがあります。
⑬postfixadminのセットアップと管理者情報の登録
クライアントpcより
http://www.ホスト名ドメイン名/postfixadmin/setup.php を入力
Postfix Admin Setup Checker が動作し環境のチェックをします。
他はOKだったのですが
# Warning: Depends on: IMAP functions - NOT FOUND
To install IMAP support, install php5-imap
と表示された(Warning情報は環境により違ってきます)ので、
# yum -y install php-imap としてインストール
→ php5-imap の 5.1.6-20.el5_2.1 がインストールされました。
再度
http://www.ホスト名ドメイン名/postfixadmin/setup.php を入力
Checking for dependencies:の項目全て OK となりました。
次にサーバーより
# service httpd restart
次にクライアントPCに戻り
Postfix Admin Setup Checkerの最後にある、
Admin(管理者のメールアドレス:唯のidなので架空アドレスでもok)、
Password(パスワード)
を入力しAdd Admin(登録)します。
* 次の画面で表示された中にある click here からログインします。
⑭不要ファイルの削除
# rm -f /var/www/postfixadmin/setup.php
# rm -f /var/www/postfixadmin/motd* → 不必要な表示をするので削除。
⑮動作確認
クライアントpcより
http://サイト名ドメイン名/postfixadmin/ を入力しログイン
いやー今回はハマリどころが多くどっぷりと浸かってしまいました。
とりあえずは完成です。
今回の構築をすることによりメールクライアントの設定も少々変更になります。
特にユーザー名にはPostfixAdminの仕様により「@ホスト名ドメイン名」が追加となります。