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

conoha Linux
記事内に広告が含まれています。
スポンサーリンク

ここまで、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 に容量を確認するようになります。

check_policy_service は必ず reject_unauth_destination の「後に」指定してください。そうしないとシステムがオープンリレーになってしまいます。

Postfix SMTP アクセスポリシー委譲 (postfix-jp.info)

設定したら Postfix を再起動しておきます。

PostfixAdmin の設定

最後に PostfixAdmin の設定ファイルを編集し、Quota を使用するように変更します。

メール振り分けの設定

Sieve の設定

ローカルメール配信エージェントである LMTP(Local Mail Transfer Protocol)と、LDA(Local Delivery Agent)に Sieve のプラグインを適用していきます。

/etc/dovecot/local.conf で lmtp と lda のプラグインに sieve を追記します。

Dovecot を再起動して設定を反映します。

Procmail の設定

普段使いのメール振り分けは Sieve で事足りるのですが、より細かい条件で振り分けが必要な場合は Procmail に頼る必要もあると思います。

最近もメールアドレスを跨いだ振り分けルールを設定して、バックアップメールを集約する要件があったので Procmail を併用する方法も覚書として記述しておきます。

まずは Procmail をインストールします。

main.cf で transport_maps を読み込むように変更します。

transport ファイルに Procmail を使いたいメールアドレス(またはドメイン)を列挙し、procmail: を指定します。

Sieve で振り分けるメールアドレス(またはドメイン)には dovecot: を指定します。

記述が上から順番に評価され、ヒットした条件でメールが配送されるので、個別のメールアドレスは上部、それ以外のドメイン全体の条件は下部に記述すると良いでしょう。

設定ファイルを postmap コマンドで変換します。

master.cf の最終行に Procmail の設定を追加します。

/etc/procmailrc を作成して、メールユーザーごとの .procmailrc を読み込むように設定します。

Procmail を設定するユーザーのディレクトリに .procmailrc を作成して、振り分けルールを記述します。

Postfix を再起動します。

ドメインとメールアドレスの作成

先ほど設定した PostfixAdmin にログインし、メールアドレスを作成します。

  1. PostfixAdmin(https://ドメイン名/postfixadmin/)にログインする
  2. ドメイン一覧から新しいドメインを作成します
  3. 作成したドメインの画面を開き、メールアドレスを追加します。

Web メール(SnappyMail)の設定

実際に MUA(電子メールクライアント)から接続して、メールの送受信ができるか確認しておきましょう。

Outlook や Thunderbird が使える環境の方はそちらに設定を入れても良いですが、今回は Web メールで行います。

Rainloop を導入しようと思っていましたが、2022 年で更新が途絶えてしまっているため、後継の SnappyMail を代わりに使ってみます。

Please Upgrade your Browser - SnappyMail

OpenLiteSpeed の設定

OLS の管理画面にログインし、バーチャルホスト ⇒(バーチャルホスト名)⇒ コンテキストと辿り、SnappyMail の設定を追加します。

SnappyMail の初期設定

SnappyMail の管理画面(https://ドメイン名/snappymail/?admin)にアクセスします。

  • ユーザー名:admin
  • パスワード:/usr/share/snappymail/data/_data_/_default_/admin_password.txt を参照
  • TOTP コード:(空欄)

最初に管理者パスワードの変更と、ドメインの設定を行います。その際 Sieve スクリプトを使用する設定で「テスト」が通るか確認しておきましょう。

また、PHP optional extensions の項目でいくつか不足しているものがあります。OpenLiteSpeed 用の PHP8.2 で簡単に導入できるものだけ入れておくことにします。

インストールができたら OpenLiteSpeed を再起動しておきます。

メールの送受信テスト

SnappyMail の管理画面ではなく、一般のログイン画面(https://ドメイン名/snappymail/)を表示します。

先ほど作成したメールアドレスとパスワードでログインし、メールの送受信ができるかどうかテストしておきましょう。

Sieve のルールを追加

SnappyMail にユーザーとしてログインした画面で、「設定」⇒「フィルター」と辿ると以下の画面になります。

分かりづらいですが Simple の項目にある rainloop.user から Sieve のルールを編集できます。

クリックすると「スクリプトを編集:rainloop.user」の画面になりますので、「フィルターを追加」から振り分けルールを追加します。

ルールを追加したら必ず「保存」をして反映しましょう。

後編に続く

長くなってしまったので、一旦ここまで。

後編では DKIM や SPF の設定などを入れつつ RSpamd による迷惑メール対策やウイルスチェックを設定していきます。

コメント

  1. zeke より:

    自分もRHEL9でサーバを構築しようとしているので、参考にさせてもらっています。
    一つ気になった点があるので連絡します。
    main.cfに
    smtpd_sasl_auth_enable = yes
    と書くと、25番ポートでの認証が有効になるようです。
    25番ポートはパスワードクラック行為がひどいので、無効にされるのが良いと思います。

    • Psychoco より:

      smtpd_sasl_auth_enable の意味を間違って認識していました。
      仰る通り 25 番ポートでの認証が有効になってしまっていたので、無効にしたほうが良いですね。
      記事の方も訂正させていただきます。

      ご指摘ありがとうございました!

タイトルとURLをコピーしました