2023年11月4日土曜日

Postfix+DovecotでバーチャルドメインのIMAPメールサーバーを構築する手順

先日、メールサーバー構築をする際の定番であるPostfixとDovecotを使ってIMAPのメールサーバーを構築した。

本記事ではその際に得られたノウハウをもとに、Postfix+DovecotでバーチャルドメインのIMAPメールサーバーを構築する手順を記載する。

環境

今回Postfix及びDovecotをインストールした環境は以下の通り。

  • OS : AlmaLinux 8.8
  • Postfix : 3.5.8
  • Dovecot : 2.3.16

共通

1. Postfix及びDovecotをインストール

Postfix及びDovecotのパッケージがインストールされていない場合は、dnfでインストールする。

dnf install postfix dovecot -y

2. バーチャルドメイン用のOSユーザ・グループの作成

バーチャルドメインの場合は、OSユーザではなくDovecot独自のユーザにてメールボックスのユーザが管理される。ただし、メールボックスへのメール配送等はOSユーザを用いる必要があることから、vmailという名前のユーザ・グループを作成する。

groupadd -g 10000 vmail
useradd -u 10000 -g vmail vmail

3. メールボックス作成

メールボックスを/var/spool/virtualというディレクトリで作成する。

mkdir /var/spool/virtual
chown -R vmail:vmail /var/spool/virtual/

上記ディレクトリの配下に、各ユーザのメールボックスが以下のディレクトリ構成で作成される。

/var/spool/virtual/[ドメイン名]/[ユーザ名]/Maildir

Postfix構築手順

1. 設定ファイルバックアップ

設定変更の前に設定ファイルをディレクトリ丸ごとバックアップする。

cp -rp /etc/postfix /root/postfix.org

2. main.cf設定

Postfixの主要な設定は/etc/postfix/main.cfに記載する。以下に主要な設定内容を記載する。

設定項目 説明
myhostname メールサーバのホスト名をFQDNで記載する。
mydomain メールサーバのドメインを記載する。今回はバーチャルドメイン環境であるため、管理対象のメールアドレスのドメインと一致しなくても問題ない。
inet_interfaces 外部からSMTPでアクセスできるようにallを指定する。
inet_protocols 今回はIPv4を指定するが、IPv4にだけでなくIPv6も使用する場合はallを指定する。
mynetworks 外部から接続可能なIPアドレスやネットワークを指定する。ここで設定したネットワークは後述するSASL認証も不要でメール送信が可能となるため、必必要以上に設定しないよう注意する。
relayhost 自ドメイン以外のメールをリレーするサーバを指定する。
home_mailbox メールボックス形式をMailbox形式(ユーザ単位で1ファイルでメールを管理)またはMaildir形式(1メールに対して1ファイルで管理)で指定する。通常はMaildir形式を指定すれば問題ない。なお、Maildir形式に場合は最後に/を付け、Maildir/で指定すること。
smtpd_banner メールヘッダー等に表示するメールサーバ情報を指定する。セキュリティの観点から、使用しているバージョン等は記載しない方針とし、ESMTPのみ設定する。
virtual_mailbox_domains バーチャルドメインで管理するドメインを記載したファイルのパスを指定する。今回は、/etc/postfix/vdomainsというファイルで管理する。
virtual_mailbox_base バーチャルドメインで管理するメールボックスのディレクトリを指定する。今回は/var/spool/virtualを指定する。
virtual_mailbox_maps バーチャルドメインで管理するユーザと、ユーザのメールボックスを紐づけするファイルのパスを指定する。今回は、/etc/postfix/vmailboxというファイルで管理する。なお、大規模環境においてはユーザを大量に管理する必要があることから、処理速度を考慮しハッシュ化したものを指定する(ハッシュ化はpostmapコマンドで行う)。
virtual_uid_maps バーチャルドメインでメール配送等の処理に使用するOSユーザを指定する。前述したvmailユーザのUIDを指定する。
virtual_gid_maps バーチャルドメインでメール配送等の処理に使用するOSグループを指定する。前述したvmailグループのGIDを指定する。
smtpd_sasl_auth_enable SASL認証を有効にする。
smtpd_sasl_type SASL認証で使用する認証先を設定する。今回はDovecotで設定するユーザ・パスワードを用いることからDovecotを指定する。なお、SASLの認証設定は、後程Dovecot側でも実施する。
smtpd_sasl_path PostfixとDovecotが同一環境で動作する環境であれば、private/authを指定すれば問題ない。これが、通信に使用するUNIXソケットファイルのパスになる。
smtpd_sasl_security_options SASL認証時のオプションを指定する。noanonymousにて匿名での認証を拒否し、noplaintextにて平文での認証を拒否する。
smtpd_recipient_restrictions メールを配送する際の制限を行う。permit_sasl_authenticatedにてSASL認証済みであれば許可し、permit_mynetworksにてmynetworksで設定したネットワークからの接続であれば許可する。最後に記載されているrejectにて、それ以外のメール配送を拒否する。
disable_vrfy_command セキュリティの観点からVRFYコマンドを禁止するため、yesで設定する。
smtpd_helo_required セキュリティの観点からSMTPコマンド接続時のHELOコマンドを必須にするため、yesで設定する。

実際のmain.cfの記載例を以下に記載する。

/etc/postfix/main.cf変更箇所抜粋

myhostname = mx01.example.com
mydomain = example.com
inet_interfaces = all
inet_protocols = ipv4
mynetworks = 10.0.0.1
relayhost = [10.0.0.1]:25
home_mailbox = Maildir/
smtpd_banner = ESMTP
virtual_mailbox_domains = /etc/postfix/vdomains
virtual_mailbox_base = /var/spool/virtual
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_uid_maps = static:10000
virtual_gid_maps = static:10000
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous, noplaintext
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject
disable_vrfy_command = yes
smtpd_helo_required = yes

3. バーチャルドメインの設定ファイルの作成

バーチャルドメインの設定として、以下2つのファイルを作成する。

ファイル 内容
/etc/postfix/vdomains バーチャルドメインで管理するドメインを記載したファイル。メールサーバーで管理するドメインを一覧として記載する。
/etc/postfix/vmailbox バーチャルドメインで管理するユーザと、ユーザのメールボックスを紐づけするファイル。メールアドレスとメール保存先のディレクトリを一覧として記載する。ディレクトリは、[ドメイン名]/[メールアドレスのローカルパート]/Maildir/の形式で記載する。

それぞれのファイルの記載例を以下に記載する。

/etc/postfix/vdomains

example.com
example1.com

/etc/postfix/vmailbox

ex01@example.com      example.com/ex01/Maildir/
ex02@example.com      example.com/ex02/Maildir/
ex11@example1.com     example1.com/ex11/Maildir/

/etc/postfix/vmailboxpostmapコマンドを用いてハッシュ化しておく。

postmap /etc/postfix/vmailbox

4. Postfix設定反映

設定反映前に設定ファイルのチェックを行う。

# postfix check
#  ←★エラーがなければ何も表示しない

問題がなければ、Postfixに設定を反映するため再起動する。

systemctl restart postfix
systemctl enable postfix

Dovecot構築手順

1. 設定ファイルバックアップ

設定変更の前に設定ファイルをディレクトリ丸ごとバックアップする。

cp -rp /etc/dovecot /root/dovecot.org

2. 各種設定を実施

DovecotはPostfix以上に設定ファイルが細分化されている。今回の修正対象ファイルを以下に記載する。

ファイル 内容
/etc/dovecot/dovecot.conf メインの設定ファイル。プロトコルとしてIMAPを指定する(デフォルトではPOP3、IMAPの両方が動作する)。
/etc/dovecot/conf.d/10-auth.conf 認証方式を記載する。今回は平文による認証を無効化したうえで、CRAM-MD5による認証方式を用いる。
/etc/dovecot/conf.d/auth-passwdfile.conf.ext 認証する際のパスワードファイルの指定を行う。パスワード認証情報(passdb)及びユーザ認証情報(userdb)は、後程作成する/etc/dovecot/usersファイルを参照するよう設定する。
/etc/dovecot/conf.d/10-master.conf PostfixがSASL認証で使用する際のUNIXソケットファイルのパスを指定する。

それぞれのファイルの記載例を以下に記載する。

/etc/dovecot/dovecot.conf変更箇所抜粋

protocols = imap lmtp

/etc/dovecot/conf.d/10-auth.conf変更箇所抜粋

disable_plaintext_auth = yes
auth_mechanisms = cram-md5
#!include auth-system.conf.ext
!include auth-passwdfile.conf.ext

/etc/dovecot/conf.d/auth-passwdfile.conf.ext変更箇所抜粋

passdb {
  driver = passwd-file
  args = scheme=CRAM-MD5 username_format=%u /etc/dovecot/users
}
userdb {
  driver = passwd-file
  args = username_format=%u /etc/dovecot/users
  default_fields = uid=vmail gid=vmail home=/var/spool/virtual/%d/%n/Maildir
}

/etc/dovecot/conf.d/10-master.conf変更箇所抜粋

service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }
  ~(略)~
}

3. ユーザ・パスワードファイルを作成

Dovecotのユーザ・パスワードファイルを作成する。パスワード情報は平文ではなくCRAM-MD5で暗号化されたものを記載する。CRAM-MD5の暗号化文字列の作成は以下コマンドで行う。

doveadm pw -s CRAM-MD5 -p [パスワード文字列]

上記で作成したパスワード文字列を用いて、以下書式でユーザ・パスワードファイルを作成する。行末のコロン2つ(::)は必要となるので省略しないこと。

[ユーザ名]:[暗号化パスワード文字列]::

ユーザ・パスワードファイルの記載例を以下に記載する。

/etc/dovecot/users

test01@example.com:{CRAM-MD5}dcbe8064d829ee98ad16817611150a123455fe1c9dfd79f5395be892f162bfd3::
test02@example.com:{CRAM-MD5}0a9a6905dfdefaf79e95b5a63274464123456166a2f27e593150e37ef2db952::
test11@example1.com:{CRAM-MD5}b71384fd047350e89123456a80ee9959dec89ff9766d75d45ab923792e44ea16::

4. 設定を反映

設定反映前に設定ファイルのチェックを行う。以下コマンドをすると各種設定値が羅列されるが、その際にエラーが表示されていなければ、設定値としては問題ない。

doveconf -n

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

systemctl restart dovecot
systemctl enable dovecot

動作確認

メールクライアントを使って確認することが手っ取り早い。

Windows環境であれば、Thunderbird Portable Editionがインストール不要で使え、複数アカウント登録も簡単にできるのでお勧めとなる(ただし、容量は120MB程度あるので注意)。

今回はThunderbird Portable Editionを用いた確認手順を記載する。

1. Thunderbirdのアカウントの設定

Thunderbirdを開き、「設定」→「アカウント設定」を開き、「アカウント操作」から「メールアカウントを追加」を選択する。

でアカウント追加を行う。その際に受信サーバー(IMAP)と送信サーバー(SMTP)の設定を以下の通り行う。

受信サーバー

設定項目 設定値 説明
プロトコル IMAP -
ホスト名 構築したサーバのIPアドレス -
ポート番号 143 STARTTLSであれば143、SSL/TLSであれば993を選択する。
接続の保護 STARTTLS Dovecotの/etc/dovecot/conf.d/10-ssl.confにてssl = requiredの設定がされていることから、STARTTLSまたはSSL/TLSのどちらかを選択する。ここまでの設定で明示的に設定はしていないが、DovecotはデフォルトでIMAPSの通信が可能な構成となっている。
認証方式 暗号化されたパスワード認証 CRAM-MD5で設定されているため、「暗号化されたパスワード認証」を指定する。
ユーザー名 Dovecotで設定したユーザ名を指定 /etc/dovecot/usersに記載したユーザ名を指定する。

送信サーバー

設定項目 設定値 説明
ホスト名 構築したサーバのIPアドレス -
ポート番号 25 -
接続の保護 なし SSL/TLSの設定はしていないため、「なし」を指定する。
認証方式 暗号化されたパスワード認証 CRAM-MD5で設定されているため、「暗号化されたパスワード認証」を指定する。
ユーザー名 Dovecotで設定したユーザ名を指定 /etc/dovecot/usersに記載したユーザ名を指定する。

図13

2. 設定時の警告を承認

アカウントの作成指示に以下のセキュリティ警告が表示される。いずれも、「確認」と「セキュリティ例外を承認」を選択する。


4. アカウント作成

設定が問題なければ「アカウント作成が完了しました」の画面が表示される。

3. メール送受信テスト

同様の手順で複数アカウントを作成し、お互いでメールを送受信できることを確認できれば動作確認完了となる。

以上で、Postfix+DovecotでバーチャルドメインのIMAPメールサーバーを構築する手順は完了となる。

0 件のコメント:

コメントを投稿

人気の投稿