[リストへもどる]
一括表示
タイトルpostfix + dovecot をドメインつきで
記事No8450
投稿日: 2012/07/17(Tue) 18:38
投稿者乙さん
初めて投稿します。
現在、CentOS 5.7 で postfix-2.2.3 と dovecot-1.0.7 を使ってメールサーバを構築しようとしています。

やりたいことですが、
(1) 現在、動いているドメイン(hogehoge.comとします)のサブドメイン(newmail.hogehoge.com とします)でメールサーバを動かします。
(2) メールユーザはサーバにログインさせません。つまり、/etc/passwd ファイルに登録しません。
(3) メールユーザの認証はドメイン付きでさせます。つまり、Outlook Express 等において、sample01@hogehoge.com の受信メールサーバのユーザ名の欄は sample01@hogehoge.com とします。
(4) メールボックス形式でメールスプールを構成します。
(5) 認証を dovecot 認証とします。パスワードは PLAIN テキストにしています。

これを実現するために設定を行っていますがどうやってもエラーになります。以下、/var/log/maillog ですが、
---- ここから ----
Jul 17 17:15:08 newmail postfix/smtpd[5687]: connect from unknown[***.***.***.***]
Jul 17 17:15:08 newmail postfix/smtpd[5687]: NOQUEUE: reject: RCPT from unknown[***.***.***.***]: 550 5.1.1 <sample01@newmail.hogehoge.com>: Recipient address rejected: User unknown in local recipient table; from=<********@********.**.jp> to=<sample01@newmail.hogehoge.com> proto=ESMTP helo=<***.********.**.jp>
Jul 17 17:15:09 newmail postfix/smtpd[5687]: disconnect from unknown[***.***.***.***]
---- ここまで ----
という具合です。

設定関係ですが、

shell> postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
broken_sasl_auth_clients = yes
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
debug_peer_level = 2
delay_warning_time = 1h
html_directory = no
inet_interfaces = all
mail_owner = postfix
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
message_size_limit = 102400000
mydestination = $myhostname, localhost.$mydomain, localhost, hogehoge.com
mydomain = hogehoge.com
myhostname = newmail.hogehoge.com
newaliases_path = /usr/bin/newaliases.postfix
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.3.3/README_FILES
sample_directory = /usr/share/doc/postfix-2.3.3/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
smtpd_banner = $myhostname ESMTP unknown
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
unknown_local_recipient_reject_code = 550
virtual_alias_maps = hash:/etc/postfix/virtual
virtual_gid_maps = static:5000
virtual_mailbox_base = /var/spool/mail/vhosts
virtual_mailbox_domains = $myhostname, localhost.$mydomain $mydomain, hogehoge.com
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_minimum_uid = 100
virtual_uid_maps = static:5000

shell> cat dovecot.conf | grep -v ^" "*\#
protocols = imap imaps pop3 pop3s
ssl_disable = yes
login_greeting = POP3 ready.
mail_location = mbox:/var/spool/mail/vhosts/hogehoge.com/%n
protocol imap {
}
protocol pop3 {
}
protocol lda {
postmaster_address = postmaster@example.com
}
auth default {
mechanisms = plain apop
passdb passwd-file {
args = /etc/dovecot/dovecot-passwd
}
passdb pam {
}
passdb passwd {
args = /etc/dovecot/dovecot-passwd
}
userdb passwd {
}
user = root
}
dict {
}
plugin {
}

/var/spool/mail/vhosts/hogehoge.com のパーミッションは 775、オーナーは root.mail

shell> cat /etc/dovecot/dovecot-passwd
sample01:{PLAIN}1234567890:5000:5000::/home/mails::userdb_mail=maildir:/var/spool/mail/vhosts/hogehoge.com/sample01
sample02:{PLAIN}1234567890:5000:5000::/home/mails::userdb_mail=maildir:/var/spool/mail/vhosts/hogehoge.com/sample02

shell> cat /etc/postfix/vmailbox
sample01@newmail.hogehoge.com hogehoge.com/sample01/
sample02@newmail.hogehoge.com hogehoge.com/sample02/

このファイルは postmap /etc/postfix/vmailbox の実行済み

shell> cat /etc/postfix/master.cf
submission inet n - n - - smtpd
-o smtpd_enforce_tls=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject

この行のコメントを外した他は変更なし

shell> cat /etc/passwd | grep mails
mails:x:5000:5000::/home/mails:/sbin/nologin

shell> cat /etc/group | grep mails
mails:x:5000:


以上です。情報に不足があれば御指摘願います。
メールの送信はこのサーバ(newmail.hogehoge.com)上から SMTP コマンドを使って他のサーバに送信ができます。受信側からメールの返信を行うと、ログを見る限りはサーバに到達しているようですが、reject されて戻ってしまいます。また、このサーバ上から SMTP コマンドを使って root を送信者として sample01 宛にメールを送信するとやはり user unknown で戻ってきてしまいます。

shell> telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 newmail.hogehoge.com ESMTP unknown
HELO newmail.hogehoge.com
250 newmail.hogehoge.com
MAIL FROM: root@newmail.hogehoge.com
250 2.1.0 Ok
RCPT TO: sample01@newmail.hogehoge.com
550 5.1.1 <sample01@newmail.hogehoge.com>: Recipient address rejected: User unknown in local recipient table

どうかお力添えを願う次第です。

タイトルどこかを参考にしたのでしょうか?
記事No8451
投稿日: 2012/07/18(Wed) 19:47
投稿者おやじ
本件は、Postfixに関する問題であり、これが片付いてもdovecotで問題がでる可能性が残ります。
インラインで気が付いたことを示します。
なお、下記を参照すると良いと思います。

http://www.postfix-jp.info/trans-2.3/jhtml/VIRTUAL_README.html#virtual_mailbox

> 現在、CentOS 5.7 で postfix-2.2.3 と dovecot-1.0.7 を使ってメールサーバを構築しようとしています。
>
> やりたいことですが、
> (1) 現在、動いているドメイン(hogehoge.comとします)のサブドメイン(newmail.hogehoge.com とします)でメールサーバを動かします。
> (2) メールユーザはサーバにログインさせません。つまり、/etc/passwd ファイルに登録しません。
> (3) メールユーザの認証はドメイン付きでさせます。つまり、Outlook Express 等において、sample01@hogehoge.com の受信メールサーバのユーザ名の欄は sample01@hogehoge.com とします。
> (4) メールボックス形式でメールスプールを構成します。
> (5) 認証を dovecot 認証とします。パスワードは PLAIN テキストにしています。
>
> これを実現するために設定を行っていますがどうやってもエラーになります。以下、/var/log/maillog ですが、
> ---- ここから ----
> Jul 17 17:15:08 newmail postfix/smtpd[5687]: connect from unknown[***.***.***.***]
> Jul 17 17:15:08 newmail postfix/smtpd[5687]: NOQUEUE: reject: RCPT from unknown[***.***.***.***]: 550 5.1.1 <sample01@newmail.hogehoge.com>: Recipient address rejected: User unknown in local recipient table; from=<********@********.**.jp> to=<sample01@newmail.hogehoge.com> proto=ESMTP helo=<***.********.**.jp>
> Jul 17 17:15:09 newmail postfix/smtpd[5687]: disconnect from unknown[***.***.***.***]
> ---- ここまで ----
> という具合です。
>
> 設定関係ですが、
>
> shell> postconf -n
> alias_database = hash:/etc/aliases
> alias_maps = hash:/etc/aliases
> broken_sasl_auth_clients = yes
> command_directory = /usr/sbin
> config_directory = /etc/postfix
> daemon_directory = /usr/libexec/postfix
> debug_peer_level = 2
> delay_warning_time = 1h
> html_directory = no
> inet_interfaces = all
> mail_owner = postfix
> mailq_path = /usr/bin/mailq.postfix
> manpage_directory = /usr/share/man
> message_size_limit = 102400000
> mydestination = $myhostname, localhost.$mydomain, localhost, hogehoge.com

上記マニュアルにいろいろ書かれていますが、virtual_mailbox_domainsとvirtual_alias_mapsとmydestinationはダブリ禁止です。
従って、おやじもやっていますが、mydestinationは下記のように = の右側を記述しないように記述してください。コメントアウトは駄目です。デフォルト値が設定されてエラーがでます。

mydestination =

> myhostname = newmail.hogehoge.com

因みに、 myhostname(newmail.hogehoge.com)のみバーチャルとするなら、mydestinationから除き、virtual_mailbox_domains = $myhostname のみとすればいいのでは?

> mydomain = hogehoge.com
> newaliases_path = /usr/bin/newaliases.postfix
> queue_directory = /var/spool/postfix
> readme_directory = /usr/share/doc/postfix-2.3.3/README_FILES
> sample_directory = /usr/share/doc/postfix-2.3.3/samples
> sendmail_path = /usr/sbin/sendmail.postfix
> setgid_group = postdrop
> smtpd_banner = $myhostname ESMTP unknown
> smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
> smtpd_sasl_auth_enable = yes
> smtpd_sasl_local_domain = $myhostname
> unknown_local_recipient_reject_code = 550
> virtual_alias_maps = hash:/etc/postfix/virtual
> virtual_gid_maps = static:5000
> virtual_mailbox_base = /var/spool/mail/vhosts
> virtual_mailbox_domains = $myhostname, localhost.$mydomain $mydomain, hogehoge.com

カンマ区切りで書けていないですし、$mydomainとhogehoge.comはダブリです。

virtual_mailbox_domains = $myhostname, localhost.$mydomain, $mydomain

あと、virtual_mailbox_domainss宛てのメール配送の指定として下記を追加。(デフォルトなのでなくても可)

virtual_transport = virtual

> virtual_mailbox_maps = hash:/etc/postfix/vmailbox
> virtual_minimum_uid = 100
> virtual_uid_maps = static:5000

(snip)

> shell> cat /etc/postfix/vmailbox
> sample01@newmail.hogehoge.com hogehoge.com/sample01/
> sample02@newmail.hogehoge.com hogehoge.com/sample02/

mailbox形式は停電などで全て飛んでしまう危険があるので、Maildir形式のほうがよいと思いますが、どうしてもmailbox形式とするなら、最後のスラッシュを削除しないとだめです。
最後がスラッシュで終わっているとMaildir形式扱いになります。言い換えると、バーチャルの場合はここの書き方でメールボックス形式が決まるので両形式の混在ができます。

> shell> cat /etc/passwd | grep mails
> mails:x:5000:5000::/home/mails:/sbin/nologin
>
> shell> cat /etc/group | grep mails
> mails:x:5000:

これは、dovecotのためのものですよね? postfixで指定しているvirtual_gid/uidは登録する必要はなく、メールボックスのオーナとしてだけしか利用されないのでpostfixとしては敢えて登録は必要なく、/var/spool/mail/vhosts/hogehoge.comを5000:5000としておくだけの話です。

>
> メールの送信はこのサーバ(newmail.hogehoge.com)上から SMTP コマンドを使って他のサーバに送信ができます。受信側からメールの返信を行うと、ログを見る限りはサーバに到達しているようですが、reject されて戻ってしまいます。また、このサーバ上から SMTP コマンドを使って root を送信者として sample01 宛にメールを送信するとやはり user unknown で戻ってきてしまいます。
>
> shell> telnet localhost 25
> Trying 127.0.0.1...
> Connected to localhost.localdomain (127.0.0.1).
> Escape character is '^]'.
> 220 newmail.hogehoge.com ESMTP unknown
> HELO newmail.hogehoge.com
> 250 newmail.hogehoge.com
> MAIL FROM: root@newmail.hogehoge.com
> 250 2.1.0 Ok
> RCPT TO: sample01@newmail.hogehoge.com
> 550 5.1.1 <sample01@newmail.hogehoge.com>: Recipient address rejected: User unknown in local recipient table

まさに。このエラーはユーザがいないからなので、/var/spool/mail/vhosts/hogehoge.comのオーナが原因と思います。(mydistnation関係も)

タイトルRe: どこかを参考にしたのでしょうか?
記事No8455
投稿日: 2012/07/25(Wed) 09:02
投稿者乙さん
反応が遅れて申し訳ございません。
丁寧な御回答ありがとうございました。
結論としては、当初の目的を達成することができました。

> http://www.postfix-jp.info/trans-2.3/jhtml/VIRTUAL_README.html#virtual_mailbox
> > 現在、CentOS 5.7 で postfix-2.2.3 と dovecot-1.0.7 を使ってメールサーバを構築しようとしています。
> > やりたいことですが、
> > (1) 現在、動いているドメイン(hogehoge.comとします)のサブドメイン(newmail.hogehoge.com とします)でメールサーバを動かします。
> > (2) メールユーザはサーバにログインさせません。つまり、/etc/passwd ファイルに登録しません。
> > (3) メールユーザの認証はドメイン付きでさせます。つまり、Outlook Express 等において、sample01@hogehoge.com の受信メールサーバのユーザ名の欄は sample01@hogehoge.com とします。
> > (4) メールボックス形式でメールスプールを構成します。
> > (5) 認証を dovecot 認証とします。パスワードは PLAIN テキストにしています。
【中略】
> 上記マニュアルにいろいろ書かれていますが、virtual_mailbox_domainsとvirtual_alias_mapsとmydestinationはダブリ禁止です。
> 従って、おやじもやっていますが、mydestinationは下記のように = の右側を記述しないように記述してください。コメントアウトは駄目です。デフォルト値が設定されてエラーがでます。
> mydestination =
ここは localhost, localhost.$mydomain のみにしました。

> > myhostname = newmail.hogehoge.com
> 因みに、 myhostname(newmail.hogehoge.com)のみバーチャルとするなら、mydestinationから除き、virtual_mailbox_domains = $myhostname のみとすればいいのでは?
ここは仰られる通りです。このとおりの設定をしました。

> > virtual_mailbox_domains = $myhostname, localhost.$mydomain $mydomain, hogehoge.com
> カンマ区切りで書けていないですし、$mydomainとhogehoge.comはダブリです。
全くその通りでした。

> あと、virtual_mailbox_domainss宛てのメール配送の指定として下記を追加。(デフォルトなのでなくても可)
> virtual_transport = virtual
これは特に設定をしておりません。

> > shell> cat /etc/postfix/vmailbox
> > sample01@newmail.hogehoge.com hogehoge.com/sample01/
> > sample02@newmail.hogehoge.com hogehoge.com/sample02/
> mailbox形式は停電などで全て飛んでしまう危険があるので、Maildir形式のほうがよいと思いますが、どうしてもmailbox形式とするなら、最後のスラッシュを削除しないとだめです。
> 最後がスラッシュで終わっているとMaildir形式扱いになります。言い換えると、バーチャルの場合はここの書き方でメールボックス形式が決まるので両形式の混在ができます。
そうなんですよね。最後のスラッシュを削除してうまくいきました。設定変更途中のログにも Maildir の inbox がないぞ!…って出ていました。
今回は旧サーバが mailbox 形式のメールスプールで、まずはこれをそのまま引き継いだ形のサーバにしなければならなかったので mailbox 形式にしています。
仰られるように mailbox 形式はいろいろとよろしくないことがあるので、早期に Maildir 形式に変更しようと思っています。

> > shell> cat /etc/passwd | grep mails
> > mails:x:5000:5000::/home/mails:/sbin/nologin
> > shell> cat /etc/group | grep mails
> > mails:x:5000:
> これは、dovecotのためのものですよね? postfixで指定しているvirtual_gid/uidは登録する必要はなく、メールボックスのオーナとしてだけしか利用されないのでpostfixとしては敢えて登録は必要なく、/var/spool/mail/vhosts/hogehoge.comを5000:5000としておくだけの話です。
仰られる通りです。

> > shell> telnet localhost 25
> > Trying 127.0.0.1...
> > Connected to localhost.localdomain (127.0.0.1).
> > Escape character is '^]'.
> > 220 newmail.hogehoge.com ESMTP unknown
> > HELO newmail.hogehoge.com
> > 250 newmail.hogehoge.com
> > MAIL FROM: root@newmail.hogehoge.com
> > 250 2.1.0 Ok
> > RCPT TO: sample01@newmail.hogehoge.com
> > 550 5.1.1 <sample01@newmail.hogehoge.com>: Recipient address rejected: User unknown in local recipient table
> まさに。このエラーはユーザがいないからなので、/var/spool/mail/vhosts/hogehoge.comのオーナが原因と思います。(mydistnation関係も)
ここもそうでした。root.root になっていてオーナーを変更してメールの送受信が完了しました。


細かく御丁寧にありがとうございました。
より一層、勉強しなければならないですね。