Postfix+Dovecotのインストール(複数ドメイン/バーチャルユーザ/SSL対応)【CentOS 8】

PostfixとDovecotでメールサーバを構築します。
複数ドメイン対応で、実アカウントではなくバーチャルユーザを作成します。
また、SSL対応にします。
なお、SSLサーバ証明書は既にインストールされているものとします。まだインストールしていない場合には、先にインストールを完了して下さい。
※postfixの仕様で、設定できるSSLサーバ証明書は1つのみです。複数ドメインで利用したい場合には、1つの証明書で複数のドメインに対応するマルチドメイン証明書等を設定して下さい。

1. Postfixのインストール

postfixをインストールします。

(1) インストール
# dnf install postfix

(2) main.cfの編集
「/etc/postfix/main.cf」ファイルを編集します。
# cd /etc/postfix
# vi main.cf

===== [COMPATIBILITY] =====
■compatibility_level
以前のバージョンからパラメータのデフォルト値が変更されている場合に、以前のデフォルト値を使用するかどうかを設定します。
このレベルの数値が大きいほど、互換性は低くなります。
# The level below is what should be used with new (not upgrade) installs.
#
compatibility_level = 2
※「2」は最新のデフォルト値を使用、「0」は以前のデフォルト値。
===== [SOFT BOUNCE] =====
■soft_bounce
バウンスメールを返す際、すぐに返さずにキューに一旦格納するかどうかを設定します。
ただし有効にした場合、アドレス書き換えやルーティングに誤りがあっても対処されず、また、エラーコードが5xx系から4xx系に変換されます。
#soft_bounce = no
===== [LOCAL PATHNAME INFORMATION] =====
■queue_directory
queue_directory = /var/spool/postfi
■command_directory
command_directory = /usr/sbin
■daemon_directory
daemon_directory = /usr/libexec/postfix
■data_directory
data_directory = /var/lib/postfix
===== [QUEUE AND PROCESS OWNERSHIP] =====
■mail_owner
postfixのキューおよびプロセスの所有者です。専用のユーザを作成する必要があります。
mail_owner = postfix
■default_privs
ローカル配送の際に使用されるユーザです。デフォルトは「nobody」。
※特権ユーザやpostfix所有者ユーザを指定しないこと。
#default_privs = nobody
===== [INTERNET HOST AND DOMAIN NAMES] =====
■myhostname
マシンのホスト名(※ここでは指定しません。)
#myhostname = host.domain.tld
#myhostname = virtual.domain.tld
■mydomain
使用するドメイン名(※ここでは指定しません。)
#mydomain = domain.tld
===== [SENDING MAIL] =====
■myorigin
送付されるメールアドレスに使用されるドメイン。(※ここでは指定しません。)
#myorigin = $myhostname
#myorigin = $mydomain
===== [RECEIVING MAIL] =====
■inet_interfaces
アクセスを受け付けるネットワークインターフェース
inet_interfaces = all
#inet_interfaces = $myhostname
#inet_interfaces = $myhostname, localhost
#inet_interfaces = localhost
※外部からの送信を許可する場合には「all」、サーバ内から送信専用にする場合は「localhost」にします。
===== [Enable IPv4, and IPv6 if supported] =====
■inet_protocols
使用するネットワークプロトコル。(ipv4のみ)
inet_protocols = ipv4
■inet_protocols
使用するプロキシのIPアドレス。(※使用する場合は指定すること。)
#proxy_interfaces =
#proxy_interfaces = 1.2.3.4
■mydestination
ローカル配送するドメイン名
#mydestination = $myhostname, localhost.$mydomain, localhost
#mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
#mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain,
#       mail.$mydomain, www.$mydomain, ftp.$mydomain
mydestination = 
※バーチャルメールボックスで管理するドメインは mydestinationに指定してはいけません。(空白を指定)
■local_recipient_maps
登録もしくは認証されていないローカルユーザを拒否する方法を指定します。(※ここでは指定しません。)
#local_recipient_maps = unix:passwd.byname $alias_maps
#local_recipient_maps = proxy:unix:passwd.byname $alias_maps
#local_recipient_maps =
■unknown_local_recipient_reject_code
宛先に指定されたメールローカルユーザが存在しないときのエラーコードの指定です。
unknown_local_recipient_reject_code = 550
550:該当するユーザーが見当たらないので、そのメールは受信できません。
450:今は事情があって受信できないので、後からもう一度送信しなおしてください。
===== [TRUST AND RELAY CONTROL] =====
■mynetworks_style
信頼する中継元のネットワークの範囲。
#mynetworks_style = class
#mynetworks_style = subnet
#mynetworks_style = host
  • host:ローカルマシンのみ信頼する
  • subnet:ローカルマシンと同じサブネットのみ信頼する
  • class:クラスフルネットワークにおいて、ローカルマシンと同じネットワーククラスのみ信頼する
■mynetworks
信頼する中継元のネットワーク。
#mynetworks = 168.100.189.0/28, 127.0.0.0/8
#mynetworks = $config_directory/mynetworks
#mynetworks = hash:/etc/postfix/network_table
※信頼する中継元のネットワークを指定する場合には、「mynetworks_style」もしくは「mynetworks」のどちらか一方を指定します。(※ここではどちらも指定しません。)
■relay_domains
中継を許可するドメインです。(※ここでは指定しません。)
#relay_domains = $mydestination
===== [INTERNET OR INTRANET] =====
■relayhost
外部に中継する場合のメールサーバです。[ ]で囲むとMXの検索をしません。ローカルの場合には指定しません。
#relayhost = $mydomain
#relayhost = [gateway.my.domain]
#relayhost = [mailserver.isp.tld]
#relayhost = uucphost
#relayhost = [an.ip.add.ress]
またポートを指定する場合は、以下の通りです。
#relayhost = [mail.example.jp]:587
===== [REJECTING UNKNOWN RELAY USERS] =====
■relay_recipient_maps
有効な受信リストのファイル名。ファイル名が指定されている場合には、指定のファイルから有効なユーザかどうかリストを検索し、ここに載っていないユーザ宛のメールアドレスは拒否されます。(デフォルトは空白で無効。)
#relay_recipient_maps = hash:/etc/postfix/relay_recipients
===== [INPUT RATE CONTROL] =====
■in_flow_delay
1秒あたりのメールの配送要求数がメール配送完了数を超えた場合に新たな配送要求を停止する時間。
パラメータ「default_process_limit」で指定した数、またはSMTPプロセス数を個別に設定した場合はその値分の配送要求をここで指定した時間内に受け取ることができるようになる。
例えば、「default_process_limit=100」、「in_flow_delay=1」の場合、毎秒最大100配送要求を受け取ることができる。
指定できる値は0-10で、0は本機能の無効となる。
#in_flow_delay = 1s
===== [ALIAS DATABASE] =====
■alias_maps
ローカル配送で使用するエイリアス用のデータベースの種類とパスを指定します。
alias_maps = hash:/etc/aliases
■alias_database
エイリアス用のデータベースを更新するコマンドを実行した際に更新されるデータベースファイルのパス。
エイリアスを使用したローカル配送にはパラメータ「alias_maps」が使用されるので、そちらと合わせる必要がある。
alias_database = hash:/etc/aliases
===== [ADDRESS EXTENSIONS] =====
■recipient_delimiter
ユーザ名と拡張アドレスの間の区切文字。
#recipient_delimiter = +
===== [DELIVERY TO MAILBOX] =====
■home_mailbox
受信したメールを保存するパス。ユーザのホームディレクトリからの相対パスで指定します。
パスの最後に”/”をつけるとMaildir形式となります。
空白の場合、パラメータ「mail_spool_directory」のディレクトリ上に保存されます。その際、メールボックスファイルの名前はユーザ名となります。
home_mailbox = Maildir/
■mail_spool_directory
全ユーザ共通の受信メールの保存パス(スプール)を指定します。
設定値の最後が”/”で終わるとMaildir形式となり、そうでない場合はMailbox形式でメールが保存されます。
#mail_spool_directory = /var/mail
#mail_spool_directory = /var/spool/mail
■mailbox_command
メールをローカル配送する際に実行する全宛先アカウント共通のコマンド。コマンドは配送先のユーザ権限で動作します。
ただし、root宛のメールはパラメータdefault_privsのユーザ権限で実行されます。
ローカル配送の優先度の関係で、別名が設定されていた場合、その別名のユーザで実行されることになります。
デフォルトは空白で、何もしません。
#mailbox_command = /some/where/procmail
#mailbox_command = /some/where/procmail -a "$EXTENSION"
なお、以下の変数が利用できます。
  • $CLIENT_ADDRESS:リモートクライアントネットワークアドレス
  • $CLIENT_HELO:リモートクライアントEHLOコマンドパラメータ
  • $CLIENT_HOSTNAME:リモートクライアントホスト名
  • $CLIENT_PROTOCOL:リモートクライアントプロトコル
  • $DOMAIN:受信者アドレスのドメイン部分
  • $EXTENSION:オプションの拡張アドレス
  • $HOME:受信者のホームディレクトリ
  • $LOCAL:受信者アドレスのローカル部分
  • $LOGNAME:受信者のユーザ名。
  • $RECIPIENT:完全な受信者アドレス。
  • $SASL_METHOD:リモートクライアントAUTHコマンドで指定されたSASL認証の方法
  • $SASL_SENDER:リモートクライアントMAIL FROMコマンドで指定されたSASL送信者アドレス
  • $SASL_USER:リモートクライアントAUTHコマンドで指定されたSASLユーザ名
  • $SENDER:完全な送信者アドレス
  • $SHELL:受信者のログインシェル
  • $USER:受信者のユーザ名
■mailbox_transport
ローカル配送する際に使用する配送方法を一括指定します。
ここで指定した配送方法によりローカル配送がおこなわれるので、Postfix自身はローカル配送を行わない。
配送方法は設定ファイル「master.cf」にて記載したサービス名でなければならない。
まお、空白の場合、通常のローカル配送を行う。
また、次転送先を指定しない場合、宛先メールアドレスのドメインに転送される。
#mailbox_transport = lmtp:unix:/var/lib/imap/socket/lmtp
#mailbox_transport
= cyrus
■local_destination_recipient_limit
localトランスポートを使用した場合に、同一ドメインに対し、並列して送れるメールの数。
ただし、同じ宛先ユーザのメールは1配送として扱われます。
# local_destination_recipient_limit = 300
■local_destination_concurrency_limit
localトランスポートを使用した場合に、同一ドメインに対し、並列して送れるメールの数。
ただし、同じ宛先ユーザのメールは1配送として扱われる。
# local_destination_concurrency_limit = 5
■fallback_transport
ローカルに配送先ユーザが見つからない場合の配送方法を一括指定します。
ここで指定した配送方法によりローカル配送がおこなわれるので、Postfix自身はローカル配送を行わない。
配送方法は設定ファイル”master.cf”にて記載したサービス名でなければならない。
空白の場合、通常は配送不能とみなされる(以降の優先度の配送方法で配送できた場合を除く)。
次転送先を指定しない場合、宛先メールアドレスのドメインに転送されます。
#fallback_transport = lmtp:unix:/var/lib/imap/socket/lmtp
#fallback_transport =
■luser_relay
受信したメールがローカル配送不能となった場合の通知先メールアドレス。
空白の場合、送信者にバウンスメールが返されます。
#luser_relay = $user@other.host
#luser_relay = $local@other.host
#luser_relay = admin+$local
以下の変数を利用できます。
  • $domain:受信者のドメイン
  • $extension:受信者の拡張アドレス
  • $home:受信者のホームディレクトリ
  • $local:受信者アドレスのローカル部分全体
  • $recipient:完全な受信者アドレス
  • $recipient_delimiter:システム全体にわたる、受信者拡張アドレスの区切り文字
  • $shell:受信者のログインシェル
  • $user:受信者のユーザ名
  • ${name?value}:$nameが空でない場合のみ$valueが展開される
  • ${name:value}:$nameが空の場合のみ$valueが展開される
===== [JUNK MAIL CONTROLS] =====
■header_checks
受信したメールのメールヘッダの検査を行うルールを記述したデータベースを指定します。
ただし、MIME関連のヘッダ(MIME-Version、Content-Type、Content-Transfer-Encoding)の検査はパラメータ「mime_header_checks」に設定したデータベースにて行います。
また、添付されたメールの検査も行わず、こちらはパラメータ「nested_header_checks」に設定したデータベースにて行います。
#header_checks = regexp:/etc/postfix/header_checks
===== [FAST ETRN SERVICE] =====
■fast_flush_domains
遅延しているメールを再送する宛先を指定します。
デフォルトはすべてのドメインで、空白にするとこの機能は無効となります。
#fast_flush_domains = $relay_domains
===== [SHOW SOFTWARE VERSION OR NOT] =====
■smtpd_banner
メールサーバがSMTPを受け入れるグリーティングメッセージを指定します。(220の後に表示されます。)
デフォルトはバージョンを表示しません。
なお、RFC要件ではテキストの先頭に「$myhostname」を指定する必要がありますが、postfixでは任意に指定できます。
#smtpd_banner = $myhostname ESMTP $mail_name
#smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)
===== [PARALLEL DELIVERY TO THE SAME DESTINATION] =====
■local_destination_concurrency_limit
localトランスポートで配送する際に同一の宛先へ同時に配送できる上限です。
#local_destination_concurrency_limit = 2
■default_destination_concurrency_limit
同一の宛先へ同時に配送できる上限です。
#default_destination_concurrency_limit = 20
この設定値は以下の各設定項目のデフォルト値となっています。
  • virtual_destination_concurrency_limit
  • lmtp_destination_concurrency_limit
  • retry_destination_concurrency_limit
  • smtp_destination_concurrency_limit
  • error_destination_concurrency_limit
  • relay_destination_concurrency_limit
===== [DEBUGGING CONTROL] =====
■debug_peer_level
ログの出力レベルです。0~3まで指定でき、数値が大きいほど詳細になります。
なお、「0」の場合にはログを出力しません。
debug_peer_level = 2
■debug_peer_list
パラメータ「debug_peer_level」で設定したログレベルを有効化する接続ホストのリスト。
ここで指定したホストとの接続に関するログのみ「debug_peer_level」が適用されます。
空白の場合は、全てのホストに適用されます。(デフォルト値)
#debug_peer_list = 127.0.0.1
#debug_peer_list = some.domain
■debugger_command
Postfixを「-D」オプションをつけて実行した場合に同時に起動させるデバッグ用コマンド。
debugger_command =
         PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
         ddd $daemon_directory/$process_name $process_id & sleep 5
 
===== [INSTALL-TIME CONFIGURATION INFORMATION] =====
■sendmail_path
postfixの「sendmail」コマンドのパス名。
sendmail_path = /usr/sbin/sendmail.postfix
■newaliases_path
「newaliases」コマンドのパス名。
newaliases_path = /usr/bin/newaliases.postfix
■mailq_path
「mailq」コマンドのパス名。
mailq_path = /usr/bin/mailq.postfix
■setgid_group
メール送信とキュー管理のためのグループです。
これは、数値グループIDを持つグループ名でなければなりません。また、他のアカウントと共有してはいけません。
setgid_group = postdrop
■html_directory
postfixのHTMLドキュメントのパス名。
「no」の場合はインストールされません。
html_directory = no
■manpage_directory
マニュアルのパス名。
manpage_directory = /usr/share/man
■sample_directory
設定ファイルのサンプルのパス名。
※postfix2.1で廃止されたため、現在は使用されていません。
sample_directory = /usr/share/doc/postfix/samples
■readme_directory
READMEファイルのパス名。
readme_directory = /usr/share/doc/postfix/README_FILES
===== [TLS CONFIGURATION] =====
■smtpd_tls_cert_file
「SSLサーバ証明書+中間CA証明書」をまとめたファイルのパス名。
smtpd_tls_cert_file = /etc/letsencrypt/live/example.jp/fullchain.pem
※実際の環境に合わせて指定して下さい。
■smtpd_tls_key_file
RSA秘密鍵ファイルのパス名。(パスフレーズなし)
smtpd_tls_key_file = /etc/letsencrypt/live/example.jp/privkey.pem
※実際の環境に合わせて指定して下さい。
■smtpd_tls_security_level
TLSの使用を強制するかどうかを指定します。
smtpd_tls_security_level = may
  • may:SMTPクライアントにSTARTTLSサポートを案内しますが、クライアントがTLS暗号化を使用するのは任意です。
  • encrypt:SMTPクライアントにSTARTTLSを案内し、TLSで暗号化されていないメールは受け付けません。(「smtpd_enforce_tls = yes」と同じですが、この指定は今後使用できなくなるかもしれません。)
  • verify:「encrypt」に加えて、さらに証明書のCAが信用できるかも検証します。
  • secure:「verify」に加えて、証明書の「SubjectAlternativeName」か「CommonName」が接続先サーバ名と一致している事が必須です。
■smtp_tls_CApath
Postfix SMTPクライアントは、リモートSMTPサーバー証明書の検証に使用するPEM形式のディレクトリを指定します。
smtp_tls_CApath = /etc/pki/tls/certs
■smtp_tls_CAfile
ルートCAのCA証明書を含むファイルの完全パス名。
smtp_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt
■smtp_tls_security_level
SMTPクライアントが送信時にTLSを使用するかどうかを指定します。
smtp_tls_security_level = may
  • none:TLS暗号化を無効にします。
  • may:SMTPサーバがSTARTTLS ESMTP機能をサポートしていると、SMTPトランザクションは暗号化されます。そうでなければ、メッセージは平文で送られます。
  • verify:「encrypt」に加えて、さらにサーバの証明書の検証を強制します。
  • secure:DNS偽装に耐性を持つサーバ証明書の検証が成功したセキュリティチャネルTLS セッションを使ってのみ、メッセージは送られます。適切なサーバが見つからないと、メッセージは遅延されます。
■meta_directory
Postfixのインスタンスを多重起動させる際に使用する設定ファイルの保存ディレクトリ名です。
meta_directory = /etc/postfix
■shlib_directory
shlib_directory = /usr/lib64/postfix
===== [追加設定] =====
行末に以下を追加します。
########## 追加設定 ##########
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = mail.example.jp, mail.example.com
smtpd_recipient_restrictions =
    permit_mynetworks,
    permit_sasl_authenticated,
    reject_unauth_destination
smtpd_sasl_security_options = noanonymous
 
message_size_limit = 10240000
mailbox_size_limit = 102400000
 
virtual_transport = virtual
virtual_mailbox_domains = example.jp, example.com
virtual_mailbox_maps = hash:/etc/postfix/virtual-mailbox
virtual_mailbox_base = /var/spool/virtual
virtual_alias_maps = hash:/etc/postfix/valias_map
virtual_uid_maps = static:10000
virtual_gid_maps = static:10000
 
########## TLS/SSL関連 ##########
# TLSを有効化
smtpd_use_tls = yes
 
# TLSログレベルの設定
# 0:出力しない 1:TLSハンドシェイクと証明書情報 2:TLSネゴシエーションの全て
smtpd_tls_loglevel = 1
 
# 暗号に関する情報を "Received:" メッセージヘッダに含める
smtpd_tls_received_header = yes
 
# 接続キャッシュファイルの指定
smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache
 
# キャッシュの保持時間の指定
smtpd_tls_session_cache_timeout = 3600s
※「smtpd_sasl_local_domain」、「virtual_mailbox_domains」の項目は運用するドメイン名に変更して下さい。
※「smtpd_tls_cert_file」、「smtpd_tls_key_file」の項目には、SSLサーバ証明書のファイル名を指定して下さい。

標準のpostfixに存在していないファイルを作成します。
# touch /etc/postfix/virtual-mailbox
# touch /etc/postfix/valias_map

(3) master.cfの編集
「/etc/postfix/master.cf」ファイルを編集します。
# cd /etc/postfix
# vi master.cf
サブミッションポートの設定を行います。
submission inet n       -       n       -       -       smtpd
#  -o syslog_name=postfix/submission
#  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_reject_unlisted_recipient=no
#  -o smtpd_client_restrictions=$mua_client_restrictions
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
#  -o smtpd_sender_restrictions=$mua_sender_restrictions
  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING
SMTPSの設定も行います。
smtps     inet  n       -       n       -       -       smtpd
#  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_reject_unlisted_recipient=no
#  -o smtpd_client_restrictions=$mua_client_restrictions
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
#  -o smtpd_sender_restrictions=$mua_sender_restrictions
  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING

設定ファイルのチェックを行います。
何も表示されなければOKです。
# /usr/sbin/postfix check

(4) postfixのサービスの起動
postfixのサービスを起動します。
# systemctl start postfix.service

postfixの自動起動の設定を行います。
# systemctl enable postfix.service

(5) 管理用ユーザの作成
管理用ユーザを作成します。
# groupadd -g 10000 vmail
# useradd -u 10000 -g vmail -s /usr/sbin/nologin vmail

(6) 配信用ディレクトリの作成
仮想アカウントへメールが配信されるディレクトリを作成します。
# mkdir /var/spool/virtual
# chown -R vmail:vmail /var/spool/virtual
# chmod -R 700 /var/spool/virtual

(7) 配送ファイルの作成
ドメイン毎、ユーザ毎のディレクトリはPostfixが自動的に「/var/spool/virtual」の下に作成しますので、事前に作成しておく必要はありません。
このディレクトリに各ユーザ用ディレクトリに配送するためのファイルを作成します。
ここでは「main.cf」の「virtual_mailbox_map」項目に設定した「/etc/postfix/virtual-mailbox」というファイルを新規作成します。
# vi /etc/postfix/virtual-mailbox
info@example.jp        example.jp/info/Maildir/
test@example.com       example.com/test/Maildir/
※末尾の「Maildir/」の「/」を忘れないこと

postmapコマンドで「virtual-mailbox.db」を作成・更新します。
# postmap /etc/postfix/virtual-mailbox

(8) エイリアス(転送)設定
実メールアカウントの場合には「/etc/aliases」ファイルを使用しますが、バーチャルユーザの場合には「main.cf」に追加した「virtual_alias_maps」項目に指定したファイルを作成します。
# vi /etc/postfix/valias_map
test@example.jp    info@xxxxx.jp, info@example.com
※外部メールアドレスおよびバーチャルドメインメールアドレス共指定できます。

また、自身のメールアドレスにも残したい場合は、転送元と同じメールアドレスを右側に記入します。
test@example.jp    test@example.jp, info@xxxxx.jp, info@example.com
※一見無限ループになるように思えますが、正常に転送されます。


「/etc/postfix/valias_map.db」を作成・更新します。
# postmap /etc/postfix/valias_map

(9) SMTP認証クライアントのインストール
SMTP認証クライアントとしてCyrusをインストールします。
# dnf install cyrus-sasl cyrus-sasl-plain cyrus-sasl-md5

なお、STMP認証ユーザおよびパスワードは、Linuxのアカウントではなく、SASL独自のパスワードデータベースで管理します。
そこで「/etc/sasl2/smtpd.conf」を編集します。
# vi /etc/sasl2/smtpd.conf
#pwcheck_method: saslauthd
pwcheck_method: auxprop
#mech_list: plain login
mech_list: cram-md5 plain login

sasldb2のグループをpostfixに変更します。
# chgrp postfix /etc/sasldb2
※ユーザの登録が1件もない場合にはこのファイルが存在していない可能性があります。その場合にはユーザを登録後にこの設定を行って下さい。

saslauthdサービスを停止します。
# systemctl stop saslauthd.service
# systemctl disable saslauthd.service

(10) saslのコマンド
■ユーザー登録
# /usr/sbin/saslpasswd2 -u mail.example.com -c (ユーザー名)
【例】
# /usr/sbin/saslpasswd2 -u mail.example.com -c info@example.com
※-uのドメインは、postfixのmain.cfの「smtpd_sasl_local_domain」で指定したものと同じ値にします。この値が一致しないと認証に失敗します。

■ユーザー削除
# /usr/sbin/saslpasswd2 -u mail.example.com -d (ユーザー名)
【例】
# /usr/sbin/saslpasswd2 -u mail.example.com -d info@example.com)

■登録している認証ユーザーの確認
# /usr/sbin/sasldblistusers2

2. Dovecotのインストール

dovecotをインストールします。

(1) インストール
# dnf install dovecot
# dnf install dovecot-devel

(2) dovecot.confの設定
「/etc/dovecot/dovecot.conf」を編集します。
# vi /etc/dovecot/dovecot.conf
protocols = imap pop3
※「imaps」、「pop3s」を利用する場合でも、この項目は上記の2つだけでOKです。
listen = *

(3) /etc/dovecot/conf.dの各ファイルの設定
■10-auth.conf
disable_plaintext_auth = no
auth_mechanisms = cram-md5 plain login
#!include auth-deny.conf.ext
#!include auth-master.conf.ext

!include auth-system.conf.ext
#!include auth-sql.conf.ext
#!include auth-ldap.conf.ext
!include auth-passwdfile.conf.ext
#!include auth-checkpassword.conf.ext
#!include auth-vpopmail.conf.ext
!include auth-static.conf.ext

■ 10-mail.conf
mail_location = maildir:/var/spool/virtual/%d/%n/Maildir
※%d:ドメイン、%n:ユーザ

■ 10-master.conf
service imap-login {
  inet_listener imap {
    port = 143
  }
  inet_listener imaps {
    port = 993
    ssl = yes
service pop3-login {
  inet_listener pop3 {
    port = 110
  }
  inet_listener pop3s {
    port = 995
    ssl = yes
  }
}
service auth {
・・・ () ・・・
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }
 
  # Auth process is run as this user.
  #user = $default_internal_user
}
 

■ 10-ssl.conf
ssl = yes
 
ssl_cert = </etc/letsencrypt/live/(ドメイン名)/fullchain.pem
ssl_key = </etc/letsencrypt/live/(ドメイン名)/privkey.pem
 

■ auth-passwdfile.conf.ext
passdb {
    driver = passwd-file
    args = /etc/dovecot/users
}
 
userdb {
    driver = passwd-file
    args = /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
}
 
■ auth-static.conf.ext
userdb {
  driver = static
  args = uid=vmail gid=vmail home=/var/spool/virtual/%d/%u/Maildir
}
 

(4) CRAM-MD5ユーザファイルの作成
CRAM-MD5のパスワードを生成します。
# doveadm pw -s CRAM-MD5
Enter new password: (パスワード入力)
Retype new password: (同じパスワードをもう一度)
※ここでのパスワードはsaslpasswd2で作成したパスワードと同じにします。

以下のようなパスワード文字列が生成されます。(※この文字列はサンプルです。)
{CRAM-MD5}072c56cabbc67d2399eeaec47e5962395de0b711ab6f76366f6b80d5671cde47

前述の「auth-passwdfile.conf.ext」で記載したパス名でパスワードファイルを作成し、ユーザー情報および生成したパスワードをファイルに書き込みます。
# vi /etc/dovecot/users

書式は、以下の通りです。
ユーザ名):{CRAM-MD5}(生成したパスワード文字列)
【例】
info@example.jp:{CRAM-MD5}072c56cabbc67d2399eeaec47e5962395de0b711ab6f76366f6b80d5671cde47

作成したパスワードファイルのオーナーをdovecotにします。
# chown dovecot:dovecot users

(5) dovecotのサービスの起動
dovecotのサービスを起動します。
# systemctl start dovecot.service

dovecotの自動起動の設定を行います。
# systemctl enable dovecot.service

3. メール用アカウントの作成

ここでは「info@example.jp」ユーザを作成してみます。
※パスワードは、すべて同じにします。

(1) 配送用ファイルの編集
「/etc/postfix/virtual-mailbox」にユーザアカウント情報を追加します。
# vi /etc/postfix/virtual-mailbox
test@example.com      example.com/test/Maildir/
info@example.jp       example.jp/info/Maildir/
# postmap /etc/postfix/virtual-mailbox

(2) SASL認証用のアカウントとパスワードを作成
# saslpasswd2 -u mail.example.jp -c info@example.jp
Password:(パスワード)
Again (for verification):(パスワード)

(3) CRAM-MD5用のアカウントとパスワードを作成
# doveadm pw -s CRAM-MD5
{CRAM-MD5}072c56cabbc67d2399eeaec47e5962395de0b711ab6f76366f6b80d5671cde47
※上記文字列はサンプルです。実際の暗号化した文字列とは異なります。
# vi /etc/dovecot/users
info@example.jp:{CRAM-MD5}072c56cabbc67d2399eeaec47e5962395de0b711ab6f76366f6b80d5671cde47



最終更新:2020年05月12日 07:45