PostfixAdmin

PostfixをPHPベースのwebインターフェースで操作するプログラム。
データはMySQLに格納しておき、PostfixからSQLを叩く事によって受信制御を行う。

構築環境

今回検証した環境はこちら

  • debian 8.1 x86_64
    ※CentOS 6.x等の非Systemd環境で構築する場合には、各スクリプトをinit用に書き換える必要がある。

構築

1. ディレクトリ構成
Postfixをそのまま使うと、メールデータは"/var/spool"以下に保存されるのだが、
今回はPostfixAdminからディレクトリ操作を行う必要があるので、
1段掘り下げるなどして、ディレクトリ構成を変更する。

メールデータディレクトリ:/var/hostname/spool/*
Postfixのコンフィグディレクトリ:/etc/postfix/*
Postfixのシステムコンフィグファイル:/etc/sysconfig/postfix

ちなみに、今回はこのディレクトリ構成でMTA構築を行う

2. インストール
PostfixAdminの動作にはLAMP環境が必須なので事前に構築しておく。
インストール方法は、同梱されているINSTALL.TXTに全部書いてあるので、
わからなかったらINSTALL.TXTを見る。

# wget "http://sourceforge.net/projects/postfixadmin/postfixadmin.***.tar.gz"
# tar zxvf postfixadmin.***.tar.gz
# mv postfixadmin ${DocumentRoot}/postfixadmin
# chown -R root.apache ${DocumentRoot}/postfixadmin
# chown apache ${DocumentRoot}/postfixadmin
# find postfixadmin -type d -print | xargs chmod 750
# find postfixadmin -type f -print | xargs chmod 640


PostfixAdminの設定

1. apache設定
ver3.0辺りでPostfixAdminのディレクトリ構成が変わった為、
apacheのhttpd.confなどにエイリアス設定を行う。

Alias /postfixadmin "${DocumentRoot}/postfixadmin/public"


2. MySQLの設定
インストールを行う為に、MySQLのDB初期化を行う。
合わせてPostfixAdmin用のMySQLユーザも作成する。
下のユーザ名などは一例なので、本番環境では変更する事。

ユーザ名:postfix-admin-user , パスワード:postfix-admin-pass , データベース名:postfixadmin
# mysql -u root -p
==================================================
Enter password: {MySQLのrootユーザパスワード}
> create database postfixadmin;
> grant all on postfixadmin.* to postfix-admin-user identified by 'postfix-admin-pass';
> flush privileges;
> exit


3. PostfixAdminの設定変更
PostfixAdminの動作環境を満たしているか確認する為に、
コンフィグの一部を変更した後にWebブラウザで
"http://${サーバのIPアドレス}/postfixadmin/setup.php"にアクセスする
setup.phpにアクセスした後は画面に従って操作をすれば良いのでメモは省略
コンフィグを上書きする時は "config.inc.php" の代わりに "config.local.php" を編集する

# vi ${DocumentRoot}/postfixadmin/config.inc.php
==================================================
$CONF['configured'] = true;
$CONF['default_language'] = 'ja';
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfix-admin-user';
$CONF['database_password'] = 'postfix-admin-pass';
$CONF['database_name'] = 'postfixadmin';
$CONF['admin_email'] = '管理者のメールアドレス';
$CONF['encrypt'] = 'cleartext';  //<--SMTPSやIMAPSをやる時はcleartext。通常はmd5crypt

$CONF['default_aliases'] = array (
  //間を全てコメントアウト
);

//下を全てコメントアウト
//$CONF['mailbox_postcreation_script'] = '';
//$CONF['mailbox_postedit_script'] = '';
//$CONF['mailbox_postdeletion_script'] = '';
//$CONF['domain_postcreation_script'] = '';
//$CONF['domain_postdeletion_script'] = '';

//他はお好みで
$CONF['backup'] = 'YES';
$CONF['show_footer_text'] = 'YES';
$CONF['footer_text'] = 'サーバのドメイン名';
$CONF['footer_link'] = 'メインhttpサーバのFQDN';
$CONF['new_quota_table'] = 'NO'; 
$CONF['show_popimap']='YES';


4. インストール後処理
インストールした後は、インストーラとデフォルトパスワードの削除を行う。

# chown root ${DocumentRoot}/postfixadmin
# chown apache ${DocumentRoot}/postfixadmin/templates_c
# rm ${DocumentRoot}/postfixadmin/setup.php 
# vi ${DocumentRoot}/postfixadmin/config.inc.php
==================================================
//$CONF['setup_password'] = '';


Postfixの追加設定

PostfixAdminでMySQLに入力したデータと、Postfixを連携させる必要があるので、
Postfixの設定ファイルを変更する必要がある。
また、PostfixAdminで作成したユーザのメールフォルダは、
1発目のメールがユーザに届いた時に作成されるので、
Postfixから読み込んだ際のパーミッションも気をつける必要がある。

1. SQLコマンドパラメータ
作成内容はPostfixの方に書いてあるので、そちらを見る


Postfixで叩くSQLを記述する。
もしかしたら、PostfixAdminのバージョンによってFieldが変化するかもしれないが、
その時は実際にSQLを叩きながらオプションの修正を行う


ファイルを作成したらパーミッションを変更して、rootのみ参照顕現を付与する。

# chown root.root mysql_virtual_alias_maps.cf
# chown root.root mysql_virtual_domains_maps.cf
# chown root.root mysql_virtual_mailbox_limit_maps.cf
# chown root.root mysql_virtual_mailbox_maps.cf

# chmod 600 mysql_virtual_alias_maps.cf
# chmod 600 mysql_virtual_domains_maps.cf
# chmod 600 mysql_virtual_mailbox_limit_maps.cf
# chmod 600 mysql_virtual_mailbox_maps.cf


2. main.cfの変更
MySQLとPostfixを連携させる為にmain.cfを書き換える。
合わせて、メール受信時に仮想メールボックスに転送出来るように、
OSレベルでのユーザも作成しておく。

※/etc/postfix/main.cfのmail_ownerがpostfixで、
 postfixadminのユーザがpostfixadminだとすると...
==================================================
# groupadd -g 7700 postfixadmin
# useradd -g postfixadmin -u 7700 -s /bin/false postfixadmin
# mkdir /var/hostname/spool
# chown postfixadmin /var/hostname/spool
# chgrp postfix /var/hostname/spool
# chmod 750 /var/hostname/spool