ウェブサイト検索

Linuxでの仮想ドメインユーザーを使用したPostfixおよびDovecotの設定方法 - パート2


このシリーズの前の記事では、phpMyAdminを使ってメールサーバーのデータベースを安全に設定し、管理する方法を説明しました。

要件:

  1. PostfixメールサーバーとDovecotをMariaDBでインストールする - パート1

さて、メールの送受信を実現するために、内部プログラムの設定を行う時が来ました:Postfix(送信メールを処理するため)とDovecot(受信メールを処理するため)です。

Postfixメールサーバーの設定

Postfixの設定を始める前に、ここにあるマニュアルページを見てみる価値があり、特に「新しいPostfixユーザーのための情報」というタイトルのセクションに特別な注意を払うと良いでしょう。そうすれば、このチュートリアルに沿って進むのが容易になります。

簡単に言えば、Postfixには2つの設定ファイルがあることを知っておくべきです。

  1. /etc/postfix/main.cf (Postfixの設定パラメータ、詳細については man 5 postconf を参照してください)。
  2. /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 の設定をオンラインストレージサービスにアップロードするのをお忘れなく)。

関連記事: