2023/06/10 RockyLinux 9.2





PostfixAdminのインストール(SQLite編)

PostfixAdminはメールドメイン、メールアカウントをウェブ画面から管理する機能を提供します。
その性質上、Postfixのバーチャルドメイン機能を前提としています。

バーチャルドメイン機能とは、メールエイリアスに似ていますが、デフォルトのメール機能とは以下の点で異なります。
・メールアドレス利用にOSのユーザーIDを必要としない
・一つのメールサーバ上で複数のドメイン名を運用でき、各ドメインは独立性が高い

バーチャルドメインのメールアカウント管理は、テキストファイルでメールアドレスとパスワードを管理しますが、テキストファイルの代わりに データベースも使用できます。
このデータベースをウェブから更新する仕組みがPostfixAdminになります。
テキストファイルをメンテナンスし続けるよりも保守性が高い点が特徴です。

ですから、PostfixAdminはPostfixとDovecotを管理するというより、PostfixAdminが管理しているデータ ベースをPostfixとDovecotが常に参照している、という関係です。




このページではPostfixAdminのインストール手順を解説していますが、それだけではメールサーバを運用することは出来ません。
PostfixAdminインストール → 初期構成 → PostfixとDovecotの構築 → PostfixとDovecotをPostfixAdminと連携、と進んでいきます。
その後必要ならPostfixAdminのクォータ管理を追加設定します。
そちらは別項にて解説します。

なお、データベースにMySQLを使用したい場合は、別 項のMySQL編を参照してください。

1.PostfixAdminのインストール(SQLite編)
2.PostfixAdminで PostfixとDovecotを管理する(SQLite編)
3.PostfixAdminでクォータ管理をする(SQLite 編)
4.PostfixAdminで SQLiteを使用した場合のパフォーマンスについて




インストールの流れ

1.PostfixAdminの展開
2.ウェブサーバの準備
3.データベースの準備
4.初期化スクリプトの準備
5.PostfixAdminの初期化
6.管理者アカウントの作成
7.管理画面へログイン


PostfixAdminの実体は、Apache上で動作するPHPとデータベースです。
コマント一つでインストール、というわけではないのでインストール手順は複雑というか、それなりに手間がかかります。
PostfixやDovecotの構成まで含めれば、(ハマる時間も含めて)それなりの時間がかかるでしょう。

Githubのページのファイル一覧にあるINSTALL.TXTに従ってインストールを進めます。
手順が複雑なので、先にインストールの流れを把握しておきます。

ダウンロードしたファイルを展開する。
公式手順によれば「PostfixAdminは/srvで運用しましょう」とあるので/srvへtar.gzを展開。
 ↓
バージョン込みのフォルダ名なので、運用のためpostfixadminという名前へ変更。
 ↓
ウェブサーバのインストール。
 ↓
ウェブサーバで公開するため/var/www/htmlへpostfixadminという名前へのシンボリックリンクを作る。
 ↓
PostfixAdminで使用するDBを準備。(3択)
 MySQLを使用する場合は、DBサーバにpostfixという名前のDBを作成する。
 PostgreSQLを使用する場合も同様。作成のコマンドはINSTALL.TXTに記載してある。
 SQLiteを使用する場合は、databaseというディレクトリと空ファイルを作成
 ↓
初期化用パスワードと使用するDBの種類を記載したphpファイルを作成、ブラウザから起動する。
 ↓
初期化が実行されてPostfixAdminにログイン可能になる。




1.PostfixAdmin の展開


まず、SELinuxを無効化します。
#getenforce
Enforcing

/etc/sysconfig/selinux の編集

SELinux=disabled

OSの再起動


PostfixAdminをダウンロードしてきます。
本家らしいサイトはもう無いのか、www.postfixadmin.orgへアクセスするとGithubへ転送されます。
https://github.com/postfixadmin/postfixadmin

GithubのPostfixAdminページの右側の中程のReleaseリンクページから最新がダウンロードできます。
各バージョンのリリース告知があり、その中にtar.gzがダウンロードできます。

ちなみに、Githubの右上の「About」の所にもダウンロードリンクがありますが、手に入るのは少し前のバージョンでした。展開する と、中のファイル構成もごく僅かに違います。
とりあえずReleaseページの最新のを使っておきましょう。




ここではダウンロードリンクだけ頂いて、wgetしました。
#wget https://github.com/postfixadmin/postfixadmin/archive/refs/tags/
postfixadmin-3.3.13.tar.gz

/srvの下へPostfixAdminを展開し、バージョン名を含まないシンボリックリンクを作成します。
#mv postfixadmin-3.3.13.tar.gz /srv
#cd /srv
#tar xzvf postfixadmin-3.3.13.tar.gz

#mv postfixadmin-postfixadmin-3.3.13/ postfixadmin-3.3.13/
#ln -s postfixadmin-3.3.13 postfixadmin
なぜか展開時のディレクトリ名がpostfixadmin-postfixadmin-xxxなのでpostfixadmin-xxxへ変更 しておきます。(誤って既存環境を上書きさせない意図でもあるんでしょうか)
マニュアルでは「ディレクトリ名をpostfixadminへ変更せよ」、とありますが今後のバージョンアップなどを見越してシンボリックリ ンクのほうが柔軟性があると思います。




2.ウェブサーバの準備


PostfixAdminはApacheウェブサーバとPHPで動作しますので、インストールします。
#dnf install httpd
#dnf install php php-devel
#
#firewall-cmd --add-service=http --permanent
#firewall-cmd --reload
#firewall-cmd --list-service
cockpit dhcpv6-client http ssh
現在の環境では、httpd-2.4.53-11とPHP-8.0.27がインストールされました。
RockyLinux8系では、php-pdoもさらに必要かもしれません。

続いて、httpdでPHPが動作するように設定します。
/etc/httpd/conf/httpd.conf の編集

<IfModule mime_module>
 …

  AddType application/x-httpd-php .php
</IfModule>

PostfixAdminの公開用ディレクトリをシンボリックリンクで公開します。
#ln -s /srv/postfixadmin/public /var/www/html/postfixadmin




3.データベース の準備


データベースをMySQL、PostgreSQL、SQLiteから選択する必要があります。

今回はSQLiteを使用する事にしました。(MySQLを使用する手順は別 項を確認してください)
PostfixAdminは、メールの送受信のたびにDBの読み出しは発生しますが書き込みは発生しません。
軽くて高速、読み出しのほうが圧倒的に多い今回みたいな利用目的なら十分です。構築が簡単ということは更改も簡単です。
MySQL、Postfixだとサービスが停止するとメールサービスが送受信ともに停止します。SQLiteならサービスの停止はありませ ん。
アカウント300〜800件程度の単一企業ならSQLiteで十分でしょう。

DBの選択は重要です。
SQLiteは読み出しは高速ですが、書き込みは苦手です。
書き込みが発生するタイミングはユーザーアカウントを作成したりパスワード変更をするときです。
別項「PostfixAdminで SQLiteを使用した場合のパフォーマンスについて」も参照してください。


まずは、SQLite本体とPostfixがSQLiteと連携するためのモジュールをインストールします。
#dnf install sqlite postfix-sqlite
sqlite-3.34.1とモジュールがインストールされました。


PostfixAddminにSQLiteを使用するなら、databaseディレクトリを作成して、その中に空ファイルを作成し、ファイル を含めてdatabaseディレクトリ全体にapacheのアクセス権を与えて作業終了です。
#cd /srv/postfixadmin
#mkdir database
#touch /srv/postfixadmin/database/postfixadmin.db
#chown -R apache:apache /srv/postfixadmin/database
#ll
-rw-r--r-- 1 apache apache 0  6月 6 22:02 postfixadmin.db
debianならwww-dataに所有権を与えるようです。
MySQLの場合やPostfixの場合のDB作成コマンドは、INSTALL.TXTに丁寧に記載してあります。




4.初期化 スクリプトの準備

INSTALL.TXTの説明通り、自分環境用のコンフィグPHPを作成します。
config.local.phpというファイルを作成し、そこへ以下のコードを全て貼り付けます。
SQLiteを前提にしているので、MySQL系で必要となるログインIDやパスワード行は省いてあります。
/srv/postfixadmin/config.local.phpの作成

<?php
$CONF['database_type'] = 'sqlite';
$CONF['database_name'] = '/srv/postfixadmin/database/postfixadmin.db';
$CONF['configured'] = true;

//ようこそメールの本文
$CONF['welcome_text'] = <<<EOM
ようこそ。
これはテストメールです。
EOM;

//PostfixAdmin管理画面のフッターメニューの非表示
$CONF['show_footer_text'] = 'NO';

//postmasterやwebmasterのエイリアスを作らない
$CONF['default_aliases'] = array ();

//セットアップパスワード。後で記述します
$CONF['setup_password'] = '';

?>
設定はconfig.inc.phpに網羅されています。その中でも、自分の環境用へ変更したい項目だけを
config.local.phpへ記載することで、設定をオーバーライドします。

例えば、welcome_textプロパティはメールアドレスを追加したとき自動送付するメール本文を指定する値ですが、デフォルトの 「Hi! Welcome to your new account.」を日本語本文にしています。
show_footer_textプロパティは、画面に常時表示するフッターを非表示に設定しています。
その他、変更したい項目をconfi.inc.phpから転記して、利用します。

PostfixAdmin初期化のための、コマンドから初回パスワードのハッシュ値を生成します。
ここでは「password999」。このパスワードは後で使用します。
#php -r "echo password_hash('password999', PASSWORD_DEFAULT);"
$2y$10$zIJhHxjLEc1QE0IQLgZVF.ZG.LcaHSFl7QLcPSJhi9/U01npspqEe
生成されたハッシュ値を、config.local.phpへ記述します。
/srv/postfixadmin/config.local.php の編集

<?php



//セットアップパスワードの記載
$CONF['setup_password'] = '$2y$10$zIJhHxjLEc1QE0IQLgZVF.ZG.LcaHSFl7QLcPSJhi
9/U01npspqEe
';

?>


最後にPHPが動作するために必要なテンプレートディレクトリを作成します。
#mkdir -p /srv/postfixadmin/templates_c/
#chown -R apache /srv/postfixadmin/templates_c/
このテンプレートフォルダが作成されていなかったりアクセス権がないと、次のPostfixAdminの初期化ページで警告が表示されます。




5.PostfixAdmin の初期化


ブラウザでsetup.phpにアクセスすることで、PostfixAdminの初期化を実施します。
まずはウェブサーバを起動します。
#systemctl start httpd
#systemctl enable httpd
#firewall-cmd --list-service
cockpit dhcpv6-client http ssh
もちろん、Firewallを許可し忘れているとアクセスできません。

ブラウザから「http://サーバアドレス/postfixadmin/setup.php」へアクセスします。
HTTPSではなくHTTPで構成されているので、最近 のブラウザは注意です。

さきほどハッシュ化のときに使った初回パスワード password999 を入力してログインします。です。


正常に初期化が可能なら、グリーンのチェックが並びます。

Warningは一応を目を通しましょう。


初期化によりデータベースに必要なデータが書き込まれます。
今回はSQLiteを使用しているので、0バイトだったファイルが初期化でサイズが増えています。
#ll /srv/postfixadmin/database
-rw-r--r-- 1 apache apache 110592  6月  6 22:07 postfixadmin.db


赤のエラーが表示された場合は解決する必要があります。(MUST be fixed)

エラーメッセージの例
Database connection string : sqlite:/srv/postfixadmin/database/postfixadmin.db
Problem connecting to database, check database configuration ($CONF['database_*'] entries in config.local.php)
SQLite database missing: /srv/postfixadmin/database/postfixadmin.db

このメッセージはDBへアクセスできない・書き込めないと言っているので、例えばdatabaseディレクトリへのapacheのアクセス権 付与(chown -R)が抜けていることやtemplate_cが作成されていないことが考えられます。




6.管理者アカウントの 作成


PostfixAdminの管理アカウントを作成します。
この管理者アカウントは、ようこそメールや警告メールの送信元アドレスとして使用されるため、あまりめちゃくちゃなものは使用しないほうがい いでしょう。

Setup Password = setup.phpにアクセスしたときに使った初期化パスワード
管理者 = Postfixの最高権限のアカウント。メールアドレス形式である必要があります
パスワード = 2個以上の数字が含まれる5文字以上の長さ、とあります


以下のようなメッセージが表示された場合、管理者アカウントに指定したログインIDが
「メールアドレスではない=DNSで解決できない」場合です。例えばexample.local、のようなドメインを指定した場合です。
(メールアドレスとして存在するかはチェックされないので、admin@の部分は自由)

example.comは、インターネット上で名前解決が出来る実在ドメインですから、通ります。

管理者アカウントにはDNSで解決可能な実在メールドメインを使用するか、どうしてもそうでないドメイン名を使いたいなら、 config.local.phpに「DNSチェックをしない」を指定します。
ついでにパスワード条件も変更します。
このパスワード条件は、全メールユーザーのパスワードルールでもあります。
/srv/postfixadmin/config.local.php の編集

//メールアドレスのDNSの解決をしない
$CONF['emailcheck_resolve_domain'] = 'NO';

//パスワード条件(長さ5文字以上、数字は1つ以上)
$CONF['password_validation'] = array(
    '/.{5}/' => 'password_too_short 5',
    '/([a-zA-Z].*){1}/' => 'password_no_characters 1',
    '/([0-9].*){1}/'  => 'password_no_digits 1',
);


追加できました。

画面下にも「 login to PostfixAdmin 」というリンクが表示されています。
ここからログインします。

setup.phpは管理者アカウントを作成できるURLです。
セキュリティのためにも、config.local.phpのパスワード行はコメントアウトしておくとよいでしょう。
/srv/postfixadmin/config.local.php の編集

//セットアップパスワードのコメントアウト
# $CONF['setup_password'] = '$2y$10$zIJhHxjLEc1QE0IQLgZVF.ZG.LcaHSFl7QLcPSJhi
9/U01npspqEe
';





7.管理画面へログイン


http://サーバアドレス/postfixadmin/login.php へアクセスし、ログイン画面を表示します。


ログインできました。



これでPostfixAdminのインストールは完了です。
といってもまだPostfixAdminというウェブ管理コンソールと、管理データベースが構築できただけでメールサーバの管理システムとし ては動作していません。
PostfixAdminのデータベースを、PostfixとDovecotが参照する仕組みを追加する必要があります。

PostfixAdminで PostfixとDovecotを管理する(SQLite編)に続く。






prev.gif