Linuxでの仮想ドメインユーザーを使用したPostfixおよびDovecotの設定方法 - パート2
このシリーズの前の記事では、phpMyAdminを使ってメールサーバーのデータベースを安全に設定し、管理する方法を説明しました。
要件:
- PostfixメールサーバーとDovecotをMariaDBでインストールする - パート1
さて、メールの送受信を実現するために、内部プログラムの設定を行う時が来ました:Postfix(送信メールを処理するため)とDovecot(受信メールを処理するため)です。
Postfixメールサーバーの設定
Postfixの設定を始める前に、ここにあるマニュアルページを見てみる価値があり、特に「新しいPostfixユーザーのための情報」というタイトルのセクションに特別な注意を払うと良いでしょう。そうすれば、このチュートリアルに沿って進むのが容易になります。
簡単に言えば、Postfixには2つの設定ファイルがあることを知っておくべきです。
- /etc/postfix/main.cf (Postfixの設定パラメータ、詳細については man 5 postconf を参照してください)。
- /etc/postfix/master.cf (Postfixマスターデーモンの設定、詳細についてはman 5 masterを参照してください)。
/etc/postfix/main.cfで、以下の行を見つける(必要に応じて追加する)か、そしてそれらが以下の値と一致することを確認してください:
append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
dovecot_destination_recipient_limit = 1
message_size_limit = 4194304
readme_directory = no
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (CentOS)
smtpd_tls_cert_file = /etc/pki/dovecot/certs/dovecot.pem
smtpd_tls_key_file = /etc/pki/dovecot/private/dovecot.pem
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes
virtual_transport = dovecot
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
次の3つの設定は特に重要です。黄で示されたファイルでは、PostfixのDomains_tbl、Users_tbl、およびAlias_tblテーブルへのアクセスを設定します:
virtual_mailbox_domains = mysql:/etc/postfix/mariadb-vdomains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mariadb-vusers.cf
virtual_alias_maps = mysql:/etc/postfix/mariadb-valias.cf
上記で異なるファイル名を選択することができることに注意してください。ただし、それらを作成し、次の内容を挿入することを確認してください。各ケースで、YourPassword を Part 1 で選択した dba ユーザーのパスワードに置き換えるか、以下の MariaDB のルート資格情報を使用することもできます。
また、パート1で作成したメールサーバーのデータベースおよびテーブルの正確な名前を使用することを確認してください。
/etc/postfix/mariadb-vdomains.cf において:
user = dba
password = YourPassword
hosts = 127.0.0.1
dbname = EmailServer_db
query = SELECT 1 FROM Domains_tbl WHERE DomainName='%s'
/etc/postfix/mariadb-vusers.cf において:
user = dba
password = YourPassword
hosts = 127.0.0.1
dbname = EmailServer_db
query = SELECT 1 FROM Users_tbl WHERE Email='%s'
/etc/postfix/mariadb-valias.cf において:
user = dba
password = YourPassword
hosts = 127.0.0.1
dbname = EmailServer_db
query = SELECT Destination FROM Alias_tbl WHERE Source='%s'
最後に、これらのファイルの権限を640に変更することを忘れないでください:
chmod 640 /etc/postfix/mariadb-vdomains.cf
chmod 640 /etc/postfix/mariadb-vusers.cf
chmod 640 /etc/postfix/mariadb-valias.cf
そして、ユーザーrootとグループpostfixへの所有権です。
chown root:postfix /etc/postfix/mariadb-vdomains.cf
chown root:postfix /etc/postfix/mariadb-vusers.cf
chown root:postfix /etc/postfix/mariadb-valias.cf
次に、安全な接続を有効にするために、以下の設定が /etc/postfix/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_recipient_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
pickup unix n - n 60 1 pickup
cleanup unix n - n - 0 cleanup
qmgr unix n - n 300 1 qmgr
tlsmgr unix - - n 1000? 1 tlsmgr
rewrite unix - - n - - trivial-rewrite
bounce unix - - n - 0 bounce
defer unix - - n - 0 bounce
trace unix - - n - 0 bounce
verify unix - - n - 1 verify
flush unix n - n 1000? 0 flush
proxymap unix - - n - - proxymap
proxywrite unix - - n - 1 proxymap
smtp unix - - n - - smtp
relay unix - - n - - smtp
showq unix n - n - - showq
error unix - - n - - error
retry unix - - n - - error
discard unix - - n - - discard
local unix - n n - - local
#virtual unix - n n - - virtual
lmtp unix - - n - - lmtp
anvil unix - - n - 1 anvil
scache unix - - n - 1 scache
注意: -oオプションで始まる行のインデントは重要です。そうでないと、postfixチェックはエラーを返します。
変更を保存する前に、ファイルの下部に次の行を追加してください:
dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}
この時点で、Postfixが第1部で作成したデータベーステーブル、ドメイン、アカウント、およびエイリアスにアクセスできるかどうかを確認することが重要です。
そのために、私たちは postmap コマンドを使用します。これは、Postfixが操作中に参照するテーブルとの通信をテストするためのユーティリティですが、まず第一にPostfixを再起動する必要があります。
systemctl postfix restart
postmap -q linuxnewz.com mysql:/etc/postfix/mariadb-vdomains.cf
postmap -q someotherdomain.com mysql:/etc/postfix/mariadb-vdomains.cf
postmap -q [email mysql:/etc/postfix/mariadb-vusers.cf
postmap -q [email mysql:/etc/postfix/mariadb-vusers.cf
postmap -q [email mysql:/etc/postfix/mariadb-vusers.cf
postmap -q [email mysql:/etc/postfix/mariadb-valias.cf
以下の画像では、データベースに既存のレコードがある場合は1が返されることがわかります。それ以外の場合は、画面に何も表示されません。エイリアスチェックの場合、エイリアスがマッピングされている実際のメールアカウントが返される点に注意してください:
なお、私たちは各メールアカウントの資格情報に対して認証を行っていないことに注意してください。私たちはPostfixがデータベース内のそれらのレコードを検出できる能力のみをテストしています。
したがって、上記とは異なる出力が得られた場合は、mariadb-vdomains.cf、mariadb-vusers.cf、およびmariadb-valias.cf(またはそれらのファイルに付けた名前)に有効なユーザー/パスワードの組み合わせを使用していることを確認してください。
Dovecotの設定
IMAP/POP3サーバーとして、Dovecotは、ThunderbirdやOutlookなどのメールユーザーエージェント(MUAまたはクライアントとも呼ばれます)を通じて、ユーザーがメールにアクセスできる方法を提供します。
まず、メールを管理するためのユーザーとグループを作成しましょう(私たちのメールアカウントはシステムユーザーに関連付けられていないため、これが必要です)。使用中でなく、高い番号であれば、下記の5000以外の別のUIDとGIDを使用しても構いません。
groupadd -g 5000 vmail
useradd -g vmail -u 5000 vmail -d /home/vmail -m
Dovecotの設定は、いくつかの設定ファイルに分かれています(以下に示す設定と一致するように、次の行のコメントを外すか、または編集してください)。
/etc/dovecot/dovecot.confにおいて:
!include_try /usr/share/dovecot/protocols.d/*.protocol
protocols = imap pop3 lmtp
!include conf.d/*.conf
!include_try local.conf
/etc/dovecot/conf.d/10-auth.conf(SQLを通じた認証のみを有効にし、他の認証方法はコメントアウトしておく):
disable_plaintext_auth = yes
auth_mechanisms = plain login
!include auth-sql.conf.ext
/etc/dovecot/conf.d/auth-sql.conf.ext にて(メールは /home/vmail 内に yourdomain.com という名前のディレクトリに保存します。このディレクトリが存在しない場合は作成する必要があります。我々のケースでは、そのドメインのメールを管理するために mkdir /home/vmail/linuxnewz.com を実行しました):
passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
driver = static
args = uid=vmail gid=vmail home=/home/vmail/%d/%n/Maildir
}
ユーザーアカウント用の個別の受信箱は、そのアカウントへのメールが初めて受信されたときに作成されます。
/etc/dovecot/conf.d/10-mail.confで:
mail_location = maildir:/home/vmail/%d/%n/Maildir
namespace inbox {
inbox = yes
}
mail_privileged_group = mail
mbox_write_locks = fcntl
/etc/dovecot/conf.d/10-master.confで:
service imap-login {
inet_listener imap {
port = 143
}
inet_listener imaps {
}
}
service pop3-login {
inet_listener pop3 {
port = 110
}
inet_listener pop3s {
}
}
service lmtp {
unix_listener /var/spool/postfix/private/dovecot-lmtp {
mode = 0600
user = postfix
group = postfix
}
}
service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
unix_listener auth-userdb {
mode = 0600
user = vmail
}
user = dovecot
}
service auth-worker {
user = vmail
}
service dict {
unix_listener dict {
}
}
/etc/dovecot/conf.d/10-ssl.conf (CAに署名された証明書を使用する予定がある場合は、証明書と鍵のパスを置き換えてください):
ssl = required
ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_key = </etc/pki/dovecot/private/dovecot.pem
/etc/dovecot/dovecot-sql.conf.ext にデータベース情報とパート1で作成した管理者ユーザーの認証情報を入力します。
重要:パスワードにアスタリスク (#) が含まれている場合は、以下の例に示されたように接続文字列を括弧で囲む必要があります。
driver = mysql
connect = "host=127.0.0.1 dbname=EmailServer_db user=dba password=PassWith#Here"
default_pass_scheme = SHA512-CRYPT
password_query = SELECT Email as User, password FROM Users_tbl WHERE Email='%u';
さらに、DovecotのロギングをPostfixとは別に設定することができます。/etc/dovecot/conf.d/10-logging.confで設定してください。
log_path = /var/log/dovecot.log
最後に、Dovecotのログがユーザーdovecotにアクセス可能であることを確認してください。
chown vmail:dovecot /var/log/dovecot.log
chmod 660 /var/log/dovecot.log
Postfixの設定を確認して修正し、ファイアウォールでSMTP、POP3、およびIMAPを有効にしてください。
PostfixやDovecotの設定中に問題が発生した場合、すべての設定ファイルを提出して助けを求めるのではなく、次のコマンドで設定の概要(コメントされていない行のみ)を取得できます:
postconf –n # Summary for /etc/postfix/main.cf
postconf –M # Summary for /etc/postfix/master.cf
doveconf –n # Summary of all configuration files for Dovecot
さらに、メールの受信トレイがvmailのみに読み取り可能であることを確認してください。
chown –R vmail:vmail /home/vmail
vmailおよびdovecotユーザーが読み取れるように設定ファイルも設定する必要があります。
chown -R vmail:dovecot /etc/dovecot
chmod -R o-rwx /etc/dovecot
最後に、ファイアウォールを通じてSMTP、POP3、およびIMAPを有効にしていることを確認してください。
firewall-cmd --add-port=143/tcp
firewall-cmd --add-port=143/tcp --permanent
firewall-cmd --add-port=110/tcp
firewall-cmd --add-port=110/tcp --permanent
firewall-cmd --add-port=587/tcp
firewall-cmd --add-port=587/tcp --permanent
PostfixのためにThunderbirdをメールクライアントとして設定する
ファイアウォールを通じてメール通信に使用されるポートへのアクセスが確保されたので、メールクライアントの設定を行う時が来ました。[email とその対応するパスワード、さらにmail.linuxnewz.comをIMAP(またはPOP3)およびSMTPサーバーとして使用することで、そのアカウントへのメールの送受信の準備が整いました。
信頼できる第三者CAによって署名されていない証明書を使用しているため、表示される警告メッセージは無視しても安全です:
簡単なテストメールを作成して、「送信」をクリックしましょう:
外部サーバーの自己署名証明書を受け入れるように促された場合は、以前と同様に確認してください。
最後に、宛先のメールを開いて、送信されたばかりのメールが届いているか確認します。もし届いていれば、そのメールに返信し、それが送信元のメールボックスに配信されるか確認してください(そうでない場合は、トラブルシューティング情報のために、/var/log/maillog のPostfixログまたは/var/log/dovecot.log のDovecotログを参照してください)。
あなたは今、動作するPostfixとDovecotのメールサーバーを持っており、メールの送受信を始めることができます。
要約
この記事では、Linuxサーバーでメールトラフィックを処理するために、PostfixとDovecotの設定方法を説明しました。この文章で指示されている通りに動作しない場合は、PostfixとDovecotのドキュメントを確認する時間を取るようにしてください。
Postfixメールサーバーの設定は簡単な作業ではありませんが、すべてのシステム管理者にとってやりがいのある経験であることに注意してください。
ドキュメントを読み終えた後も Postfix や/または Dovecot に苦労している場合は、下のコメントフォームを使用してご連絡いただければ、喜んでお手伝いします(この記事に記載されているように postconf および doveconf を使用して取得した Postfix と Dovecot の設定をオンラインストレージサービスにアップロードするのをお忘れなく)。







