【Ubuntu Server 22.04】Postfix + SMTP-AUTH + Dovecotでバーチャルメールボックス(仮想メールアドレス)を導入する方法

Postfix + SMTP-AUTH + Dovecotの環境で、バーチャルメールボックスを導入する方法です。

バーチャルメールボックスについて

バーチャルメールボックスとは、システムのユーザとは別にメールを送受信するための仮想アカウントを作成して運用していく機能です。

このメール専用の仮想アカウントはシステムにログインできないため、不正アクセスが起こってしまった場合もシステムへの影響が少なくセキュリティリスクを減らすことができます。

ただし、バーチャルメールボックスを使用するためにはメールアカウントの作成方法が変更となったり、PostfixとDovecotの両方設定変更が必要になるため、慣れるまでは大変かもしれません。

また、システムのユーザを使用しないため「.forward」や「alias」でのメール転送設定が出来きませんので、この点も注意が必要になります。

バーチャルメールボックス管理用ユーザ作成

バーチャルメールボックスを使用するために、メールデータを管理するためのユーザを作成する必要があります。

今回は、下記の内容で管理用のユーザを作成します。

  • ユーザ名: vmail
  • uid: 10000 (既存のユーザと重複していないことを確認)
  • ログインシェル: /usr/sbin/nologin

uidについて

uidは既存のユーザと重複しないことを確認しておいてください。

もし重複する場合は別のuidを指定します。

uidを変更した場合は、これ以降の手順に記述されているuidを変更した数字に適宜読み替えてください。

$ sudo groupadd -g 10000 vmail
$ sudo adduser --uid 10000 --gid 10000 --shell /usr/sbin/nologin vmail
Adding user `vmail' ...
Adding new group `vmail' (10000) ...
Adding new user `vmail' (10000) with group `vmail' ...
Creating home directory `/home/vmail' ...
Copying files from `/etc/skel' ...
New password:         # パスワードを入力
Retype new password:  #パスワードの再入力
passwd: password updated successfully
Changing the user information for vmail
Enter the new value, or press ENTER for the default
	Full Name []:    # ENTERキーを押下
	Room Number []:  # ENTERキーを押下
	Work Phone []:   # ENTERキーを押下
	Home Phone []:   # ENTERキーを押下
	Other []:        # ENTERキーを押下
Is the information correct? [Y/n]  # ENTERキーを押下

作成したユーザの情報を確認しておきます。

$ cat /etc/passwd | grep vmail
vmail:x:10000:10000:,,,:/home/vmail:/usr/sbin/nologin

バーチャルメールボックス用ディレクトリ作成

通常は「/home/ユーザ名/Maildir」にメールデータが保存されるのですが、バーチャルメールボックスではシステムのユーザアカウントを使用しないため、別途メールデータを保存するための場所を用意する必要があります。

ですので、今回は/var/spool/vmailというディレクトリを作成して、そこでメールデータを管理することにします。

$ sudo mkdir /var/spool/vmail
$ sudo chown vmail:vmail /var/spool/vmail/
$ sudo chmod 700 /var/spool/vmail/

Postfix設定

Postfixでバーチャルメールボックスを使用できるように設定変更を行っていきます。

$ cd /etc/postfix
$ sudo cp -p main.cf main.cf_$(date "+%Y%m%d_%H%M%S")
$ sudo vi main.cf

編集内容

バーチャルメールボックスを適用するメールアドレスのドメインをmydestinationから削除します。

変更前
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

変更後
mydestination = localhost.$mydomain, localhost

バーチャルメールボックス用の設定を最下段に追加します。

virtual_mailbox_domains = メールアドレスのドメイン
virtual_mailbox_base = /var/spool/vmail
virtual_mailbox_maps = hash:/etc/postfix/vmail
virtual_uid_maps = static:10000
virtual_gid_maps = static:10000

virtual_uid_mapsとvirtual_gid_mapsはバーチャルメールボックス管理用ユーザとして作成したvmailユーザの「uid」「gid」と同じ数字を設定します。

設定ファイルの文法確認

設定した内容の文法チェックを行います。

$ sudo postfix check

バーチャルメールボックスのメールアカウント作成

バーチャルメールボックスを使用するメールアカウントの情報を、/etc/postfix/main.cfのvirtual_mailbox_mapsで設定した/etc/postfix/vmailに記述していきます。

$ sudo vi /etc/postfix/vmail

書式

メールアカウントの情報は下記の書式で記述します。

メールアドレス メールボックスの場所(メールドメイン/メールユーザ名/Maildir)

mailuser1@vpslife.server-memo.netの場合は下記のように記述します。

mailuser1@vpslife.server-memo.net vpslife.server-memo.net/mailuser1/Maildir/

これで、メールデータは/var/spool/vmail/vpslife.server-memo.net/mailuser1/Maildir/に保存されます。

ちなみに、/var/spool/vmailは/etc/postfix/main.cfのvirtual_mailbox_baseで設定されています。

hashデータベース作成

postmapコマンドを使って、/etc/postfix/vmailファイルからhash化したデータベースを作成します。

$ sudo postmap /etc/postfix/vmail

これで、vmail.dbという名前でデータベースファイルが作成されます。

$ ls -l vmail*
-rw-r--r-- 1 root root    75 Aug 16 18:56 vmail
-rw-r--r-- 1 root root 12288 Aug 16 18:56 vmail.db

fileコマンドで確認すると、Hash化されたデータベースであることが確認できます。

$ file vmail.db 
vmail.db: Berkeley DB (Hash, version 9, native byte-order)

stringsコマンドを使用すると、データベースの中身を確認することができます。

$ sudo strings /etc/postfix/vmail.db 
vpslife.server-memo.net/mailuser1/Maildir/
mailuser1@vpslife.server-memo.net

Postfix設定反映

Postfixを再起動して設定を反映させます。

$ sudo systemctl restart postfix

Dovecot設定

下記の設定ファイル編集してバーチャルメールボックスに対応させます。

  • /etc/dovecot/conf.d/10-auth.conf
  • /etc/dovecot/conf.d/auth-passwdfile.conf.ext
  • /etc/dovecot/conf.d/auth-static.conf.ext

10-auth.conf設定変更

$ cd /etc/dovecot/conf.d/
$ sudo cp -p 10-auth.conf 10-auth.conf_$(date "+%Y%m%d_%H%M%S")
$ sudo vi /etc/dovecot/conf.d/10-auth.conf

設定内容

  • auth_mechanismsにCRAM-MD5を追加
  • 「!include auth-system.conf.ext」を「#!include auth-system.conf.ext」に変更
  • 「#!include auth-passwdfile.conf.ext」を「!include auth-passwdfile.conf.ext」に変更
  • 「#!include auth-passwdfile.conf.ext」を「!include auth-passwdfile.conf.ext」に変更
auth_mechanisms = cram-md5 plain login

#!include auth-system.conf.ext

!include auth-passwdfile.conf.ext  # 行頭の「#」を削除し設定を有効化
!include auth-static.conf.ext      # 行頭の「#」を削除し設定を有効化
設定の説明

バーチャルメールボックスではユーザとパスワードを/etc/dovecot/usersで管理します。

パスワード暗号化せずに記述すると、ファイルを読まれてしまうとパスワードがだた漏れになってしまうので、auth_mechanismsにCRAM-MD5を追加し認証に暗号化したパスワードを使用できるようにします。

dovecotでの認証にシステムのユーザ情報をしないように「!include auth-system.conf.ext」をコメントにして「auth-system.conf.ext」ファイルを読み込まないようにします。

「!include auth-passwdfile.conf.ext」「!include auth-static.conf.ext」の行頭にある「#」を削除して設定を有効化し、「auth-passwdfile.conf.ext」「auth-static.conf.ext」を読み込むようにします。

auth-passwdfile.conf.ext設定

バーチャルメールボックスのメールアカウント用のパスワード情報を記述しているファイルについての設定を行います。

$ sudo cp -p auth-passwdfile.conf.ext auth-passwdfile.conf.ext_$(date "+%Y%m%d_%H%M%S")
$ sudo vi auth-passwdfile.conf.ext

編集内容

  • passdbのargs部分に「scheme=CRAM-MD5」を追加
  • userdbの項目を行頭に「#」と追加してコメント化して設定を無効化
passdb {
    driver = passwd-file
    args = scheme=CRAM-MD5 username_format=%u /etc/dovecot/users  
}
# userdb項目をコメント化
#userdb {
#  driver = passwd-file
#  args = username_format=%u /etc/dovecot/users
    
  # Default fields that can be overridden by passwd-file
  #default_fields = quota_rule=*:storage=1G
    
  # Override fields from passwd-file
  #override_fields = home=/home/virtual/%u
#}
設定の説明

passdbのdriverでパスワードをファイルで管理すると設定しています。

argでは下記の設定が行われています。

  • scheme=CRAM-MD5 認証にCRAM-MD5形式の暗号化を使用
  • username_format=%u ユーザ名のフォーマットを指定「%u」はユーザ名@ドメイン名を示す
  • /etc/dovecot/users 認証情報が記述されれているファイル名

userdbの設定は「auth-static.conf.ext」で行うため、userdbの項目を行頭に「#」と追加してコメント化して設定を無効化しておきます。

auth-static.conf.ext設定変更

バーチャルメールボックスの「uid」「gid」メールボックスの場所を設定します。

$ sudo cp -p auth-static.conf.ext auth-static.conf.ext_$(date "+%Y%m%d_%H%M%S")
$ sudo vi /etc/dovecot/conf.d/auth-static.conf.ext

編集内容

userdb部分に下記の設定を行います。

  • userdb部分の行頭にある「#」を削除して設定を有効化
  • uidとgidをvmailに設定(初期設定でvmailに設定されていればそのまま)
  • home=/var/spool/vmail/%d/%nと設定

homeの項目で設定している「%d」「%n」は下記の内容を表しています。

  • %d ドメイン名
  • %n ドメイン名を除いたユーザ名
##### 変更前
#userdb {
#  driver = static
#  args = uid=vmail gid=vmail home=/home/%u
#}

##### 変更後
userdb {
  driver = static
  args = uid=vmail gid=vmail home=/var/spool/vmail/%d/%n 
}

10-mail.conf 設定変更

$ sudo cp -p 10-mail.conf 10-mail.conf_$(date "+%Y%m%d_%H%M%S")
$ sudo vi 10-mail.conf

設定内容

mail_location部分を「maildir:/var/spool/vmail/%d/%n/Maildir」と設定します。

# 変更前
#mail_location = maildir:~/Maildir

# 変更後
mail_location = maildir:/var/spool/vmail/%d/%n/Maildir

dovecot 設定反映

dovecotを再起動して設定を反映させます。

$ sudo systemctl restart dovecot

dovecotの認証情報作成

Dovecotの認証に必要なユーザ名(メールアカウント)とパスワードの情報を/etc/dovecot/usersに設定します。

CRAM-MD5暗号化パスワードの作成

パスワードはCRAM-MD5で暗号化されたものを記述する必要があるので、最初に下記の方法でパスワードを作成します。

作成されたパスワードはどこかにコピーする等しておいてください。

$ sudo doveadm pw -s CRAM-MD5
Enter new password:    # パスワードを入力
Retype new password:   # パスワードを再入力
{CRAM-MD5}9186d855e11eba527a7a52ca82b313e180d62234f0acc9051b527243d41e2740

/etc/dovecot/usersに認証情報を設定

/etc/dovecot/usersにDovecotで使用する認証情報を設定していきます。

$ sudo vi /etc/dovecot/users

書式

ユーザ名と先程作成したCRAM-MD5で暗号されたパスワードを下記のように「:」で区切って記述します。

ユーザ名(メールアドレス):{CRAM-MD5}パスワード

mailuser1@vpslife.server-memo.netの場合は下記のように設定を行います。

mailuser1@vpslife.server-memo.net:{CRAM-MD5}9186d855e11eba527a7a52ca82b313e180d62234f0acc9051b527243d41e2740

メーラー(Thunderbird)にアカウントを作成

メーラー(Thunderbird)でバーチャルメールボックス用に作成したメールアカウントで、メールの送受信をするためにメールアカウントの作成を行います。

ここではThunderbirdにメールアカウントを作成する方法を説明していきます。

Thunderbirdを起動して、上部のメニューから「ファイル」-「新規作成」-「既存のメールアカウント...」と選択をします。

「既存のメールアドレスのセットアップ」画面が表示されるので、「あなたのお名前」「メールアドレス」「パスワード」を入力します。

そうすると「手動設定」が表示されるのでクリックします。

手動設定で「受信サーバ」と「送信サーバ」を設定する画面が表示されるので設定を行います。

受信サーバ部分の「プロトコル」「ホスト名」「ポート番号」「接続の保護」は接続するDovecotの環境に合わせて設定を行います。

今回設定したバーチャルメールボックス用の設定として下記の設定を行います。

  • 認証方式: 暗号化されたパスワード
  • ユーザ名:メールアカウント

送信サーバ部分の「ホスト名」「ポート番号」「接続の保護」は、接続するSMTP(Postfix)サーバの環境に合わせて設定を行います。

今回設定したバーチャルメールボックス用の設定として下記の設定を行います。

  • 認証方式: 暗号化されたパスワード
  • ユーザ名:メールアカウント

設定が終わったら「完了」ボタンをクリックします。

メールアカウントの設定が完了すると、「アカウント作成が完了しました」画面が表示されるので、「完了」ボタンをクリックします。

メールアカウトが追加されていることを確認して作業は完了となります。

メールの送受信テスト

メールアカウントが追加されたら、メールの送受信ができるか動作確認を行ってください。

メールアカウントの追加方法

バーチャルメールボックス環境でのメールアカウント追加方法です。

  1. /etc/postfix/vmailにメールアカウント情報を追加
  2. postconfで/etc/postfix/vmailをHashデータベース化
  3. /etc/dovecot/usersに認証情報を追加

/etc/postfix/vmailにメールアカウント情報を追加

メールアカウント追加する場合は、/etc/postfix/vmailと/etc/postfix/vmail.dbのバックアップを行ってから/etc/postfix/vmailを編集してメールアカウントを追加します。

$ sudo cp -p /etc/postfix/vmail /etc/postfix/vmail_$(date "+%Y%m%d_%H%M%S")
$ sudo cp -p /etc/postfix/vmail.db /etc/postfix/vmail.db_$(date "+%Y%m%d_%H%M%S")
$ sudo vi /etc/postfix/vmail

postconfで/etc/postfix/vmailをHashデータベース化

ユーザ追加後にpostmapコマンドを実行して、Hashデータベースを更新します。

$ sudo postmap /etc/postfix/vmail

/etc/dovecot/usersに認証情報を追加

Dovecotへの接続に必要な認証情報を/etc/dovecot/users追加します。

$ sudo cp -p /etc/dovecot/users /etc/dovecot/users_$(date "+%Y%m%d_%H%M%S")
$ sudo vi /etc/dovecot/users

CRAM-MD5で暗号化されたパスワードの作成方法

CRAM-MD5で暗号化されたパスワードはdoveadmコマンドで作成することが出来ます。

$ sudo doveadm pw -s CRAM-MD5

コメント

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