2023/06/24 RockyLinux 9.2





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

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

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

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

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




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

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

1.PostfixAdminのインストール(MySQL編)
2.PostfixAdminで PostfixとDovecotを管理する(MySQL編)
3.PostfixAdminでクォータ管理をする(MySQL 編)




インストールの流れ

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から選択する必要があります。

今回はMySQLの構築手順です。(SQLiteを使用する手順は別 項を確認してください)
MySQLを選択する利点としては、SQLiteでは発生するパフォーマンスの問題(登録メールアドレスが1000件以上になると画面遷移が 遅くなる、一括登録を行うとエラーメッセージが表示される)が発生しないことです。

SQLiteの簡便さも魅力なので、1000件ぐらいのアドレス管理を目的にしているのなら、構築して画面遷移のパフォーマンスを比べてみる といいと思います。
SQLiteを使用した場合のパフォーマンスについては別項「PostfixAdmin で SQLiteを使用した場合のパフォーマンスについて」も参照してください。


まずは、MySQL本体とPostfixAdminがMySQLと連携するためのモジュールをインストールします。
#dnf install mysql-server
#dnf install php-mysqli   ※末尾の i を忘れない
mysql-server-8.0.32と、php-mysqldn-8.0.27がインストールされました。

MySQLのデフォルトはIPv6にポートがバインドされているので、変更します。
/etc/my.cnf の編集

(略)

[mysqld]
bind-address=127.0.0.1

サービスを起動します。
#systemctl start mysqld
#systemctl enable mysqld

空のデータベースを準備するため、MySQLにrootでログインします。
このパターンではMySQLのデフォルトはパスワードなしです。
PostfixAdminのための空のデータベースとユーザーを用意します。
#mysql -u root -p
Enter Password: (空パスワード)

・root自体のパスワード設定
mysql>ALTER USER 'root'@'localhost' IDENTIFIED BY 'password123';

・postfxiのデータベースと、アカウントの作成
mysql>CREATE DATABASE postfix;
mysql>CREATE USER 'postfix'@'localhost' IDENTIFIED BY 'password123';
mysql>GRANT ALL PRIVILEGES ON `postfix` . * TO 'postfix'@'localhost';
mysql>FLUSH PRIVILEGES;
postfixというデータベースを作成し、postfixというユーザーを作ってパスワードを設定し、データベースへアクセスできるよう設 定しています。
ここで指定したパスワードは、後に出てくる設定ファイル、SQLクエリファイル全てで使用します。後から変更するのは面倒なので、ちゃんと決 めておきましょう。

mysqlコマンドから、データベースの保存パスを確認。
mysql> use postfix;
mysql> SELECT @@datadir;
+-----------------+
| @@datadir       |
+-----------------+
| /var/lib/mysql/ |
+-----------------+
1 row in set (0.00 sec)
DBの実体が/var/lib/mysql の、postfixディレクトリであることがわかります。
DBの準備は以上です。

コマンドに差異はありますが、PostgreSQLでも流れは基本的に同じです。




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

INSTALL.TXTの説明通り、自分環境用のコンフィグPHPを作成します。
config.local.phpというファイルを作成し、そこへ以下のコードを全て貼り付けます。
MySQLであることと、ユーザー名とパスワードを指定します。
/srv/postfixadmin/config.local.phpの作成

<?php
$CONF['database_type'] = 'mysqli';    ※末尾のiを忘れないこと
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = 'password123';

$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は一応を目を通しましょう。

初期化によりデータベースに必要なデータが書き込まれます。




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を管理する(MySQL編)に続く。






prev.gif