Red Hat Enterprise Linux 9 にメールサーバーを構築(前編)

conoha Linux
このサイトはアフィリエイト広告(Amazonアソシエイト含む)を掲載しています。
スポンサーリンク

ここまで、ConoHa の VPS 上に RHEL9 をインストールし、そこに OpenLiteSpeed による Web サーバーなどを構築してきました。

今回はそこにメールサーバーを構築していこうと思います。

方針としては、お決まりの Postfix +Dovecot を使い、ユーザー認証は MySQL と連動させようと思います。

事前準備

ファイヤーウォールの設定

まず、サーバーがメールを受信できるように 25 番ポートを開放する必要があります。

また、メールクライアントから接続する SMTPS(465 番ポート)と IMAPS(993 番ポート)は国内からしか接続しない想定で、国内のみに向けて開放するようにします。

POP 接続はしない方針なので、POPS(995 番ポート)は塞いでおきます。

また、SSL 接続しか許可しない方針なので POP(110 番ポート)、IMAP(143 番ポート)も塞いでおきます。

Sieve の設定は同じサーバーに設置した SnappyMail から行うので、ManageSieve(4190 番ポート)は塞いでおきます。MUA(Thunderbird など)から設定を行う場合は、国内のみに向けて開放してください。

詳しい設定方法は以前の記事をご参照ください。

ついでに、Fail2ban の postfix-sasl と dovecot を有効にしておくと、連続して不正なアクセスがあった場合に自動でブロックしてくれます。

/etc/fail2ban/jail.local の最終行に上記 2 項目を追加して、サービスを再起動しておきます。

メールユーザーを作成する

メール用のユーザーとグループを ID 番号を指定して作成します。

※UID は設定ファイルに記述しますので、わかりやすくするために 10000 としました。

データベースを作成

メールのユーザーをデータベースで管理するので、phpMyAdmin から postfix ユーザーを作成し、同名のデータベースにすべての権限を与えます。

PostfixAdmin

PostfixAdmin 現時点での最新版である Version 3.3.13 をダウンロードします。

OpenLiteSpeed に合わせて PostfixAdmin の所有者(グループ)を nobody にしていますが、Apache や Nginx の場合は適宜合わせてください。

PHP 関連パッケージのインストール

PostfixAdmin で使用する php-imap をインストールします。

※OpenLiteSpeed 用の PHP8.2 に対応した lsphp82-imap をインストールしました。

各種スクリプトの設置

PostfixAdmin を解凍すると、ADDITIONS ディレクトリにサンプルスクリプトが入っています。

メールアドレス削除時の処理と、ドメイン削除時の処理をユーザーディレクトリにコピーします。

メールアドレス作成時のディレクトリの作成は Dovecot に任せますので、postfixadmin-mailbox-postcreation.sh は設定不要です。

メールアドレス削除時に走るスクリプトの編集

PostfixAdmin からメールアドレスを削除する際のスクリプトを編集します。

ドメイン削除時に走るスクリプトの編集

PostfixAdmin からドメインを削除する際のスクリプトを編集します。

スクリプトの実行権限を調整

スクリプトを実行させるときのユーザーを sudo の例外に追加します。

スクリプトに対してパスワードなしで sudo できるように設定を追加します。

※OpenLiteSpeed から実行するので nobody になっています。Apache やNginx の場合は適宜ユーザーを合わせてください。

Postfix + Dovecot 2 + PostfixAdmin + MySQL [がらくたネット]

※PostfixAdmin からメールアドレス削除やドメイン削除を行った時の処理は、メールアドレス(ドメイン)のディレクトリを .deleted-maildirs に移動するだけなので、ディスク容量を空けるためには手動で削除する必要があります。

OpenLiteSpeed の設定

OLS の管理画面から「バーチャルホスト」⇒ ホスト名 ⇒「コンテキスト」と辿り、静的コンテキストを追加します。

  • タイプ:Static
  • URI:/postfixadmin
  • 場所:/usr/share/postfixAdmin/public

ロケーションには PostfixAdmin のディレクトリ配下の public を指定します。

PostfixAdmin の設定ファイルを作成

PostfixAdmin の設定ファイル(config.inc.php)は編集せず、同じ階層の config.local.php で設定していきます。

セットアップパスワードの取得

PostfixAdmin のセットアップ画面(https://ドメイン名/postfixadmin/setup.php)にアクセスして、Generate setup_password hash を行います。

ここで生成した setup_password を設定ファイル(config.local.php)に貼り付けます。

PostfixAdmin のセットアップ画面にログインして、エラーがなければ完了です。

※Postfix データベースの中のテーブルもこのタイミングで作成されます。

セットアップユーザーが完了したら、管理ユーザーとパスワードを登録しておきましょう。

Postfix のインストール

Postfix の基本設定

home_mailbox(メールボックス形式)を Maildir 形式にするところがポイントです。

認証の設定

SASL(Simple Authentication and Security Layer)を設定して、メールの認証は Dovecot に任せます。

Virtual Mail Box の設定

ユーザー認証に MySQL(MariaDB)を使用するので、データベース接続用の各種クエリを作成します。

Postfix の main.conf の最終行にバーチャルメールボックスについての設定を入れていきます。

また、メールのローカル配送は Dovecot に任せるため、virtual_transport には Dovecot を指定します。

Postfix の master.cf の最終行に、ローカル配送を Dovecot に送る設定を追加します。

Postfix のセキュリティ設定

Postfix のセキュリティに関する設定を追加します。

main.cf の最終行に下記を追加してください。

Postfix の起動

ここまでできたら、Postfix を起動します。

Dovecot のインストール

Dovecot をインストールしていきます。MySQL でユーザー認証するため dovecot-mysql を、Sieve でメール振り分けをするので dovecot-pigeonhole もあわせてインストールします。

Dovecot の設定ファイルは、dovecot.conf と同じディレクトリに local.conf を新規作成して、全てそちらに記述するようにします。

Archive フォルダーにはパフォーマンスが高いといわれている Single-dbox(sdbox)形式を使ってみます。そのため、Maildir 形式の場合は maildir に纏めるように location を変更しました。

Just a moment...

10-auth.conf を編集して、使用しない設定を読み込まないようにします。

Dovecot の SQL 接続設定ファイル(dovecot-sql.conf.ext)を作成します。

Dovecot を起動します。

SSL 対応

Web サーバー構築の際に取得した SSL 証明書を再利用します。

Let's Encrypt のワイルドカード証明書を取得した場合は、下記のように設定します。

Postfix

まず main.cf を編集します。

smtpd_tls_~ は送信時に対して、smtp_tls_~は受信時に対する設定となります。

メールサーバー間通信内容暗号化(Postfix+Dovecot+OpenSSL+Let's Encrypt+Certbot) - AlmaLinuxで自宅サーバー構築
メールサーバー間通信内容暗号化(Postfix+Dovecot+OpenSSL+Let's Encrypt+Certbot)

次に master.cf の smtps の項目をコメント解除します。

設定したら、Postfix を再起動します。

Dovecot

Dovecot は 10-ssl.conf で証明書の場所を指定します。

設定したら、Dovecot を再起動します。

Quota(容量制限)の設定

ユーザーごとにメールボックスの容量を制限したい場合は、Quota の設定を追加します。

Quota の方法としては、過去には Postfix に VDA パッチを当てたり、データベースのディクショナリ(dict)形式があったりしましたが、Dovecot 2.2.19 以降では count 形式が推奨されているようです。

Dovecot の設定

Dovecot の設定に Quota の設定を追加します。

Dovecot の SQL 接続設定ファイル(dovecot-sql.conf.ext)を修正して、Quota の値を取得するようにします。

https://github.com/postfixadmin/postfixadmin/blob/master/DOCUMENTS/DOVECOT.txt

設定を反映するために Dovecot を再起動します。

Postfix の設定

Postfix に設定を追加し、Dovecot と連携させるように設定を変更します。

main.cf の smtpd_recipient_restrictions に check_policy_service を追加することで、メール送信前に Dovecot に容量を確認するようになります。