先日、メールサーバー構築をする際の定番である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/vmailbox
はpostmap
コマンドを用いてハッシュ化しておく。
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 件のコメント:
コメントを投稿