postfixでバーチャルメールボックス

postfixとdovecotでバーチャルメールボックスを使用したメールサーバを構築する方法
バーチャルドメインの実装方法には幾つかあるようです。
1.追加する宛先ドメインを「mydestination」に追加するだけ
2.バーチャルエイリアスで設定する方法
 Unixアカウントにメールアドレスのエイリアスを付けて実現します。
3.バーチャルメールボックスで設定する方法
 Unixアカウントは使用せずvpopmailのように特定のUnixユーザーで仮想的に実行します。

ここでは「3.バーチャルメールボックスで設定する方法」で実現することにします。
メールアカウントの認証にはユーザー名@ドメイン名を指定します。

バーチャルメールボックスを使えるように設定を追加する

main.cfに以下の様にの設定を追加すにはる。

# 最終行へ追記
# 送受信メールサイズを100Mに制限
message_size_limit = 104857600
# メールボックスサイズを1Gに制限
mailbox_size_limit = 1073741824
#
# バーチャルメールボックスの設定
# 
virtual_mailbox_domains = /etc/postfix/virtual-domains
virtual_mailbox_base = /home/mail/virtual
virtual_mailbox_maps = hash:/etc/postfix/virtual-mailbox
virtual_uid_maps = static:10000
virtual_gid_maps = static:10000

メールが配信されるディレクトリを作成する

# mkdir /home/mail/virtual
# chown -R 10000.10000 /home/mail/virtual

バーチャルドメインの設定

mydestinationという項目に、ここで追加したドメインと同じものがないようにしないとそのドメイン宛のメールはUnixアカウント宛に配送されてしまう。

# /etc/postfix/virtual-domains
ドメイン名1
ドメイン名2
ドメイン名3

バーチャルドメインのユーザー設定

バーチャルメールボックスのユーザーの設定は「/etc/postfix/virtual-mailbox」で行う。
行末の「/」を忘れないように
「 status=deferred (delivery failed to mailbox Maildir: cannot open file: Is a directory)」と怒られます!!

foo@example.com    example.com/foo/Maildir/
hoge@example.com   example.com/hoge/Maildir/
hoge@example1.com   example1.com/hoge/Maildir/

設定を反映させる。

# postmap /etc/postfix/virtual-mailbox

# systemctl restart postfix

バーチャルドメインでのDovecotの設定

# vi /etc/dovecot/dovecot.conf
protocols = imap pop3 lmtp
listen = *, ::
dict {
}
!include conf.d/*.conf
!include_try local.conf
# vi /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = no
auth_mechanisms = cram-md5 plain login
!include auth-passwdfile.conf.ext
!include auth-static.conf.ext 
# vi /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:/home/mail/virtual/%d/%n/Maildir
namespace inbox {
  inbox = yes
}
first_valid_uid = 1000
mbox_write_locks = fcntl
# vi /etc/dovecot/conf.d/10-ssl.conf
ssl = no

ssl有効時は
ssl = required
ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_key = </etc/pki/dovecot/private/dovecot.pem
# vi /etc/dovecot/conf.d/auth-passwdfile.conf.ext
passdb {
 driver = passwd-file
 args = scheme=CRAM-MD5 username_format=%u /etc/dovecot/users
}
# vi /etc/dovecot/conf.d/auth-static.conf.ext
userdb {
 driver = static
 args = uid=10000 gid=10000 home=/home/mail/virtual/%d/%n
}

dovecotを起動

# systemctl restart dovecot 

ユーザーの追加は

# doveadm pw -s CRAM-MD5 -p plantext
{CRAM-MD5}ハッシュ値

# vi /etc/dovecot/users
ユーザー名@ドメイン名:{CRAM-MD5}ハッシュ値

dovecotの設定確認

# doveconf -n
# 2.2.10: /etc/dovecot/dovecot.conf
# OS: Linux 3.10.0-693.21.1.el7.x86_64 x86_64 CentOS Linux release 7.4.1708 (Core)  xfs
auth_mechanisms = cram-md5 plain login
disable_plaintext_auth = no
first_valid_uid = 1000
mail_location = maildir:/home/mail/virtual/%d/%n/Maildir
mbox_write_locks = fcntl
namespace inbox {
  inbox = yes
  location =
  mailbox Drafts {
    special_use = \Drafts
  }
  mailbox Junk {
    special_use = \Junk
  }
  mailbox Sent {
    special_use = \Sent
  }
  mailbox "Sent Messages" {
    special_use = \Sent
  }
  mailbox Trash {
    special_use = \Trash
  }
  prefix =
}
passdb {
  args = scheme=CRAM-MD5 username_format=%u /etc/dovecot/users
  driver = passwd-file
}
service auth {
  unix_listener /var/spool/postfix/private/auth {
    group = postfix
    mode = 0666
    user = postfix
  }
}
ssl = no
ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_key = </etc/pki/dovecot/private/dovecot.pem
userdb {
  args = uid=vmail gid=vmail home=/home/vmail/%d/%n
  driver = static
}

 ***Tips グリーティングメッセージの変更

標準のままでPOP3で接続すると

+OK Dovecot ready.

と帰ってきますが以下のようにこのメッセージを変更することが可能です

# vi /etc/dovecot/dovecot.conf
#login_greeting = Dovecot ready.
   ↓
login_greeting = POP3 Server ready.

# systemctl reload dovecot

こうすると

+OK POP3 Server ready.

の様になります。

バーチャルドメインを追加する場合

Postfix側の設定
宛先ドメインの追加
「/etc/postfix/virtual-domains」に以下の様にの設定を追加

example.com
example2.com
example3.com
example4.com

バーチャルドメインのユーザー追加

「/etc/postfix/virtual-mailbox」に以下の様にの設定を追加

foo@example2.com    example2.com/foo/Maildir/

設定を反映させる。

# postmap /etc/postfix/virtual-mailbox
# systemctl restart postfix

dovecot側の設定

# doveadm pw -s CRAM-MD -p plantext
{CRAM-MD5}ハッシュ値

# vi /etc/dovecot/users
ユーザー名@ドメイン名:{CRAM-MD5}ハッシュ値

Submission対応

OPB25対応する為Submission方式で対応する。

# vi /etc/postfix/master.cf
 -o syslog_name=postfix/submission
 -o smtpd_tls_security_level=may
 -o smtpd_sasl_auth_enable=yes
 -o smtpd_client_restrictions=permit_sasl_authenticated,reject
 -o milter_macro_daemon_name=ORIGINATING
# systemctl restart postfix

AntiVirus+Spamの設定

予めSophos Anti Virus for Linux Free Editionとamavisd-new、spamassassinが必要です。

# vi /etc/postfix/master.cf
# 最終行に追記
smtp-amavis unix -    -    n    -    2 smtp
   -o smtp_data_done_timeout=1200
   -o smtp_send_xforward_command=yes
   -o disable_dns_lookups=yes
127.0.0.1:10025 inet n    -    n    -    - smtpd
   -o content_filter=
   -o local_recipient_maps=
   -o relay_recipient_maps=
   -o smtpd_restriction_classes=
   -o smtpd_client_restrictions=
   -o smtpd_helo_restrictions=
   -o smtpd_sender_restrictions=
   -o smtpd_recipient_restrictions=permit_mynetworks,reject
   -o mynetworks=127.0.0.0/8
   -o strict_rfc821_envelopes=yes
   -o smtpd_error_sleep_time=0
   -o smtpd_soft_error_limit=1001
   -o smtpd_hard_error_limit=1000
# systemctl restart postfix