Debian 環境セットアップ

Poastfix.adminをメールサーバに組み込む

アカウントの管理は少数であれば、特にツールを使う必要もないのですが、ユーザーが多数登録されているメールサーバの場合、ユーザーのパスワード管理だけでも、大変なものです。 個人のパスワード変更などの管理は、個人に任せたいと言うのが正直なところでしょう。
そこでWebベースのアカウント管理のソフトウェアを使用することになります。 Postfixの場合は、Postfix.Adminというツールが使えます。
PHPとmysqlがあれば、 Webベースでアカウント管理ができるので、アカウント管理のわずらわしさが軽減します。

● apache2のインストール

Postfix.adminを使って、ブラウザからユーザー管理をしたいので、まずはApacheをインストールする。

(1)Apacheをインストールする。
DebianのApacheには、mpm-prefork、mpm-worker、mpm-threadpool、mpm-perchildなどがあるが、一般的なWebサーバであれば、mpm-preforkで問題なし。
# apt-get install apache2-mpm-prefork    (2.2.3-4)

(2)ここで一般的な設定を行っておく。

# vi /etc/apache2/sites-available/default

----------------------------------------

<VirtualHost *>
DocumentRoot /home/www/htdocs (ドキュメントルート変更)
Indexesオプション削除
AllowOverride All (.htaccessの有効化)
##RedirectMatch ^/$ /apache2-default/ (デフォルトのコメント)

ServerSignature Off (サーバー名表示の無効化)

# vi /etc/apache2/apache2.conf

----------------------------------------

Servername www.fulldigit.net →なくても動作に問題はないが、起動時にwarningが表示される。
ServerTokens Prod →クラッカーに対して余計な情報を与える必要はない。
ServerSignature Off →これも同じくクラッカーに対して余計な情報を与える必要はない。
User www

(3)ユーザーを追加する。
今回は例としてWWWを追加している。

# useradd www

# mkdir /home/www/htdocs

# passwd www

(4)後はApacheを再起動して、ブラウザでページが見えるか確認しておきます。

# /etc/init.d/apache2 restart

● apache2 SSLの設定

(1)証明書の作成する。
Apache2.0.xxまでは存在していたapache2-ssl-certificateは、現時点のDebian etchのapache2.2-commonにはないため、OpenSSLで個別に組み込むこととする。

・まずは最初にOpensslの設定を変更

# vi /etc/ssl/openssl.cnf

--------------------------

[usr_cert]
nsCertType=server ←コメントを外す
[v3_ca]
nsCertType=sslCA,emailCA ←コメントを外す

--------------------------

・サーバ個別の証明書を作成する。

# cd /usr/lib/ssl/misc/

# ./CA.sh -newca

CA certificate filename (or enter to create) ←そのままenter

Making CA certificate ...
Generating a 1024 bit RSA private key
.......................++++++
............++++++
writing new private key to './demoCA/private/./cakey.pem'
Enter PEM pass phrase: ←適当なフレーズ
Verifying - Enter PEM pass phrase: ←上記と同じ
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Ishikawa
Locality Name (eg, city) []:Kanazawa
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Full Digit, Inc.
Organizational Unit Name (eg, section) []:fulldigit
Common Name (eg, YOUR name) []:www.fulldigit.net

Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /usr/lib/ssl/openssl.cnf
Enter pass phrase for ./demoCA/private/./cakey.pem:
Check that the request matches the signature
Signature ok

~中略~

Write out database with 1 new entries
Data Base Updated

・自己証明レベルなので、パスフレーズを消す

# openssl rsa -in ./demoCA/private/cakey.pem -out ./demoCA/private/cakey.pem

Enter pass phrase for ./demoCA/private/cakey.pem: ←最初に設定したパスフレーズ
writing RSA key

・証明書を作成します

# openssl x509 -in ./demoCA/cacert.pem -out ./demoCA/cacert.crt

・ブラウザ用のderファイル作成します(あると警告が出なくなる)

# openssl x509 -inform pem -in ./demoCA/cacert.pem -outform der -out ./demoCA/ca.der

○証明書をapache2に登録します

# cd /usr/lib/ssl/misc/demoCA
# mkdir /etc/apache2/ssl
# cp ./cacert.crt /etc/apache2/ssl/
# cd private/
# mkdir /etc/apache2/ssl/private
# cp ./cakey.pem /etc/apache2/ssl/private/
# cd /etc/apache2/sites-available
# gunzip -c /usr/share/doc/apache2.2-common/examples/apache2/extra/httpd-ssl.conf.gz > httpd-ssl.conf

# ln -s /etc/apache2/sites-available/httpd-ssl.conf /etc/apache2/sites-enabled/httpd-ssl.conf

# vi httpd-ssl.conf

-------------------------------------
<VirtualHost 192.168.0.2:443>
DocumentRoot "/home/www/htdocs"
ServerName www.fulldigit.net:443

ServerAdmin webmaster@tfulldigit.net

SSLCertificateFile /etc/apache2/ssl/cacert.crt
SSLCertificateKeyFile /etc/apache2/ssl/private/cakey.pem
-------------------------------------

(2)apache2にsslモジュールを組み込む
作成した証明書をWebサーバに組み込みます。

# a2enmod ssl

Module ssl installed; run /etc/init.d/apache2 force-reload to enable.

(3)秘密鍵と証明書を別々に指定することができないPOPサーバがあるため メール用証明書作成しておきます。

# cd /etc/apache2/ssl/

# (cat cacert.crt ; cat private/cakey.pem) > courier.pem

(4)apache2を再起動する

# /etc/init.d/apache2 restart

● phpの組み込み

Postfix.adminはPHPで動くソフトウェアなので、php4をインストールする。

# apt-get install php4   (4.4.4-8+etch4)
# apt-get install php4-mysql  (4.4.4-8+etch4)

PHPがロードしていない場合はここをチェック
/etc/apache2/mods-enabledにphpのシンボリックリンクがない

# a2enmod php4

Apacheを再起動して、PHPの動作を確認する。

# /etc/init.d/apache2 restart

webテスト用のスプリクトを作る

# vi /home/www/https/test.php
------------------------------
<?php phpinfo() ?>
ここでブラウザよりtest.phpを参照してみて、PHPの情報が表示されたらOK. ※画面の確認ができたら、test.phpは忘れずに消しておこう。(サーバーの設定が丸見えになるので..。)

● mysqlの準備

こちらも、Postfix.Adminのためにmysqlをインストールする。

# apt-get install mysql-server    (5.0.32-7etch5)

mysqlのroot管理者権限を設定

# mysqladmin -u root password 'abcdefg'

・ユーザーの確認

mysql> select host,user,password from mysql.user;
+-----------+------------------+-------------------------------------------+
|host|user|password|
+-----------+------------------+-------------------------------------------+
|localhost|root|*D75CC763C51A420D28A227AC294ADE26A2F2|
|test|root||
|localhost |debian-sys-maint|*D8632BAE842E391F45830332B82010F7F2C|
+-----------+------------------+-------------------------------------------+

・匿名ユーザーがあったら削除

mysql> delete from mysql.user where user="";
mysql> flush privileges;

・パスワードなしもら削除

mysql> delete from mysql.user where host="test";

● postfix-admin インストール

ソースは、本家サーバーからpostfix-adminをダウンロード。

http://sourceforge.net/projects/postfixadmin/

現時点('08.02.25)の最新版は postfixadmin-2.1.0.tgz

# cd /home/www/htdocs

tar zxvf postfixadmin-2.1.0.tgz

解凍したら、ディレクトリ名を好きな名前に変更。

# mv postfixadmin-2.1.0 mail

・パーミッションの変更(もしくは確認:下記のように644になっていればOK)

# cd mail

# chmod 644 *.php *.css
# chmod 644 admin/*.php admin/.ht*
# chmod 644 images/*.png
# chmod 644 languages/*.lang
# chmod 644 templates/*.tpl
# chmod 644 users/*.php

・セットアップcheckプログラムにアクセス
ブラウザからsetup.phpを実行して下記の画像が表示されればOK
https://192.168.0.2/mail/setup.php

config.inc.php - NOT FOUNDは、これから作成するので無視してもOK

・コンフィグファイル(copnfig.inc.php)を作成する。

# cp -pr config.inc.php.sample config.inc.php

config.inc.phpを作成して再度リロードすると、NOT FOUNDのエラーは消えて、「setup.phpを削除して」といったメッセージが出るので、setup.phpファイルを削除する。

# rm setup.php

ベーシック認証が入っているので、サーバー管理方針に従い変更する。
ここでは/home/wwwにパスワードファイル(.htpasswd)を作成した。

# cd admin

# vi .htaccess

パスワードファイル

# htpasswd -c /home/www/.htpasswd admin

New password: *******

Re-type new password: *******

アナウンスの情報を表示しているファイルは、リネームしておく。(削除でもOK)

# cd /var/www/htdocs
# mv motd.txt motd.txtORG
# mv motd-admin.txt motd-admin.txtORG
# mv motd-users.txt otd-users.txtORG

・config.inc.phpを修正する。
変更する点は、「change-this-to-your.domain.tld」となっている部分。メールとURLの部分を自サーバの環境に合わせる。

# vi config.inc.php

$CONF['admin_email'] = ' postmaster@fulldigit.net';

$CONF['default_aliases'] = array (

    'abuse' => ' abuse@fulldigit.net',

    'hostmaster' => ' hostmaster@fulldigit.net',

    'postmaster' => ' postmaster@fulldigit.net',

    'webmaster' => ' webmaster@fulldigit.net'

$CONF['vacation_domain'] = 'www.fulldigit.net';

$CONF['footer_text'] = 'Return to www.fulldigit.net';

$CONF['footer_link'] = 'http://www.fulldigit.net';

管理画面を日本語の表示に変更する。

$CONF['default_language'] = 'en'; → $CONF['default_language'] = 'jp';

・日本語表記ファイルがないので、jp.langを作成してアップする。
language/の下に配置します。

・mysqlにパスワードがMD5で暗号化された場合、popを使って直接認証ができないため、この場合はクリアテキストで保存する。

//$CONF['encrypt'] = 'md5crypt';
>$CONF['encrypt'] = 'cleartext';

・デザインテンプレートの変更(文字コードを変更)
(管理画面はテンプレートを使って表示している)

# vi templates/header.tpl

iso-8859-1 → Shift_JIS

デザインを変更したい場合は、templates/下のファイルを好きなように修正すればOK

・最後にpostfix.admin用のテーブルを作成する
mysqlのデータベースにテーブルを作る場合は、DATABASE_MYSQL.TXTを使う。

# mysql -u root -p < DATABASE_MYSQL.TXT

Enter password:*********(rootのパスワードを入力)

mysqlに入って、データベースへのID、パスワード作成

# mysql -u root -p

mysql> set password for postfix@'localhost'=password('abcdefg01'); mysql> set password for postfixadmin@'localhost'=password('abcdefg02'); mysql> flush privileges;

config.inc.php内のデータベースパスワードを変更しておく。
なお、ここで変更するのはpostfixadminのみ。postfixは後述するpostfixのコンフィグファイルで指定する。

# vi config.inc.php

$CONF['database_password'] = 'abcdefg01';

・管理画面にアクセスする

https://192.168.0.2/mail/admin/

あとは実際にドメインとアカウントを作成してデータベースに登録されていれば(一覧表示されれば)、インストール完了ということになります。

ちなみにドメイン管理者と一般ユーザーのログインURLは以下のとおり

(1)ドメイン管理者のログイン
https://192.168.0.2/mail/users/login.php

(2)一般ユーザーのログイン
https://192.168.0.2/mail/users/login.php

なお、postfixのインストールはこちらのページに掲載していますので、必要であればそちらを参照して下さい。