ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

postfixコミュのsmtp認証、starttls 適用時に外部から送信不可

  • mixiチェック
  • このエントリーをはてなブックマークに追加
こんにちは、レンタルサーバを利用して、postfixを運用している者です。
今回、smtp認証とstarttlsをしようとしていますがうまくいきませんので、トピックを立てさせて
頂きました。

クライアントからの送信は、smtp認証とstarttlsで問題なくできておりますが、
外部のドメインからメールを送信すると送信できない状況で、リターンメールが返っています。

リターンメール
Recipient address rejected: Access denied (in reply to RCPT TO command)・・・・・

postfixサーバのログには下記があります。
NOQUEUE: reject: RCPT from・・・Recipient address rejected: Access denied

RCPTのリターンなので、受信拒否系かと思って設定見直しましたが、思い当たるふしはないです。

図としては下記のような感じです。

          --------------------------->smtpとstarttls送信可 
クライアント--------postfix-------インターネット---------外部ドメイン
           送信不可<------------------       
                       -------->リターンメール

ネットで調べると、クライアントから送信ができないという件はみかけますが、
逆に外部から送信できず、受信できない状況の件は見かけなかったので
質問させていただきました。

master.cf は下記のように smtpの部分は saslはnoにしましたが改善しません。
smtp inet n - n - - smtpd
-o smtpd_sasl_auth_enable=no


凡ミスしている可能性があるかと思いますが、先週よりかなりはまっており手がかりがないので
皆さんのご意見を頂ければと思います。

よろしくお願いしますm(__)m

コメント(10)

SMTP-auth での承認に対してリレーを許可していないだけだと思います
一般的に行われる、内部アドレスからのリレーは許可されているので、内部アドレスを持つクライアントからの送信は SMTP-auth とは無関係に実施されるのでしょう
そもそも smtpd_auth_enable=no にしていたら SMTP-auth は使われません

Postfix の設定が分からないので推測でしか述べられません
個人や組織が特定できる部分を隠してでも、postconf -n の結果を開示する方が回答は付き易いと思います

ついでにいうと STARTTLS コマンドや smtps には認証機構は含まれていないので、これを以てリレーを許可するなどという愚策を採ってはいけません

たっつぁんさん
コメントありがとうございます。自宅で再度試しましたが、送信がうまくいきませんでした。
会社ではうまくいったのですが、、、

> そもそも smtpd_auth_enable=no にしていたら SMTP-auth は使われません
こちらはWebの情報にて25番ポートを受信にするのであれば、no にしてもいいというのを見て設定しました。あまり関係なさそうなので、今はコメントアウトしました。ちなみに、587番ポートでSMTP認証をしようと思っております。

postconf はこちらです。
------------------------------------------------------------------
# /usr/sbin/postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
allow_min_user = yes
always_bcc = aaa@hoge.com
broken_sasl_auth_clients = yes
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
debug_peer_level = 2
home_mailbox = Maildir/
html_directory = no
inet_interfaces = all
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
mydestination = $mydomain, $myhostname, mail.$mydomain
mydomain = hoge.com
myhostname = hoge.com
mynetworks = 168.100.189.0/28, 127.0.0.0/32
myorigin = $mydomain
newaliases_path = /usr/bin/newaliases.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_delay_reject = no
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated,reject_unauth_destination, reject
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $mydomain
smtpd_sasl_security_options = noanonymous
unknown_local_recipient_reject_code = 550
------------------------------------------------------------------

ちなみに、postfixはレンタルサーバで運用しており、クライアントは複数の拠点になります。クライアント側のグローバルIPも可変になります。

telnet も再度しましたが問題なさそうです。
# telnet localhost 587
Trying 127.0.0.1...
Connected to hoge.com (127.0.0.1).
Escape character is '^]'.
220 hoge.com ESMTP Postfix
EHLO localhost
250-hoge.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH CRAM-MD5 LOGIN DIGEST-MD5 PLAIN
250-AUTH=CRAM-MD5 LOGIN DIGEST-MD5 PLAIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
------------------------------------------------------------------------

送信できなかった時に、tail -f /var/log/maillog をしてみました。
便宜上IPアドレスは111〜にしています。
---------------------------------------------------------------------------
localhost postfix/smtpd[15243]: connect from 111.111.111.111.eo.eaccess.ne.jp[111.111.111.111]
localhost postfix/smtpd[15243]: lost connection after EHLO from 111.111.111.111.eo.eaccess.ne.jp[111.111.111.111]
localhost postfix/smtpd[15243]: disconnect from 111.111.111.111.eo.eaccess.ne.jp[111.111.111.111]


私のSMTP認証に対する認識不足が多々あるかと思いますが、現状何が足りないか手がかり無しです。。。よろしくお願いしますm(__)m
master.cfはどうなっていますか?
うちは、自鯖ですが
---
smtp inet n - n - - smtpd
smtps inet n - n - - smtpd
-o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes
submission inet n - n - - smtpd
-o smtpd_enforce_tls=yes -o smtpd_sasl_auth_enable=yes -o smtpd_etrn_restrictions=reject
---
こんな感じにして、ssl(465)とtls(587)の両方に対応させています。
「もじら」a-chan さん
コメントありがとうございます。

master.cf は下記のようにしています。今のとこ465は使う予定がなく、587で行う予定なのでsmtpsはコメントアウトしています。
---
smtp inet n - n - - smtpd
submission inet n - n - - smtpd
-o smtpd_sasl_auth_enable=yes
-o smtpd_etrn_restrictions=reject
-o smtpd_enforce_tls=yes
#smtps inet n - n - - smtpd
---
sasl,tls関連のmain.cfは下記のようにしています。
------
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $mydomain
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated,reject_unauth_destination, reject
smtpd_delay_reject = no
smtpd_tls_security_level = may
smtpd_tls_cert_file = /etc/postfix/tls_key/server.crt
smtpd_tls_key_file = /etc/postfix/tls_key/server.key.plain
smtpd_use_tls = yes
------

上記のようにすると、やはりsasl&starttls送信はできました。hotmailに送りました。
--------------
localhost postfix/smtpd[17154]: E83F72060035: client=111.111.111.11.eo.eaccess.ne.jp[111.111.111.11], sasl_method=CRAM-MD5, sasl_username=aaa@hoge.com
localhost postfix/cleanup[17156]: E83F72060035: message-id=<4EB6A68C.7050909@hoge.com>
localhost postfix/qmgr[17149]: E83F72060035: from=<aaa@hoge.com>, size=740, nrcpt=2 (queue active)
localhost postfix/smtpd[17154]: disconnect from 111.111.111.11.eo.eaccess.ne.jp[111.111.111.11]
localhost postfix/smtp[17158]: E83F72060035: to=<aaaaa@hotmail.com>, relay=mx2.hotmail.com[65.55.37.104]:25, delay=1.1, delays=0.19/0.01/0.42/0.47, dsn=2.0.0, status=sent (250 <4EB6A68C.7050909@hoge.com> Queued mail for delivery)
----------------


上記に対して、hotmail⇒hoge.comへ返信しましたが、やはり送信できません。
hotmailにはリターンメールがきて、hoge.comの/var/log/maillogには下記が出ます。
----------------------
localhost postfix/smtpd[17161]: NOQUEUE: reject: RCPT from bay0-omc3-s19.bay0.hotmail.com[65.54.190.157]: 554 5.7.1 <aaa@hoge.com>: Recipient address rejected: Access denied; from=<aaaaa@hotmail.com> to=<aaa@hoge.com> proto=ESMTP helo=<bay0-omc3-s19.bay0.hotmail.com>
localhost postfix/smtpd[17161]: disconnect from bay0-omc3-s19.bay0.hotmail.com[65.54.190.157]
----------------------

RCPTのメッセージで、サーバ間で拒否されている様子です。なんらか許可しないといけないかと思います。でも、sasl&starttlsはMTA同士だと特に必要なかったという認識でしたが、、、ちょっとどん詰まりですね・・・orz
>外部のドメインからメールを送信すると送信できない状況

申し訳ないです、ちょっと勘違いしてました。
外部MTAからターゲットPostfixに対して送信がはじかれるということでしたよね。
自分んとこでは、Postgrayを入れているので、smtpd_recipient_restrictionsの最後は
check_policy_service inet:127.0.0.1:10023
としています。
これが、イースラーさんの場合は、
reject
となっているのが気になります。
permit_mynetworks(自分はOK)
permit_sasl_authenticated(認証されたらOK)
reject_unauth_destination(指定外は拒否)
reject(拒否)
外部MTAが自分のLANに居るわけでもないですし、まして認証なんてしてこないでしょうから、自分と認証以外は拒否となるのは必然と思います。
モノの本には、最後はrejectで〆ると記載がありますが、ここでの目的が、リレー防止であるならば、
reject_unauth_destination
で事が足りるような気がします。
reject_unauth_destinationの前にpermit_が来ていますよね。
自分のエリアと、他からでも認証された場合はリレーしても問題なしということなのでしょう。
最後のrejectをとると、外部MTAからこのPostfixが管理しているドメイン宛は問題なく流入するようになると思います。
※リレーはreject_unauth_destinationではじかれる
で、自分の場合は、SPAMがあまりにもひどかったので、postgrayを入れたわけですが。

なお、554は、reject_unauth_destinationで引っかかった場合にも返すようです。
reject_unauth_destinationの項目である
inet_interfaces
mydestination
virtual_maps
とかは適切に設定されているでしょうか。
自分の場合は、複数ドメインをpostfixに収容していて、
virtual_alias_domainsにドメインを書き忘れていたりすると、外部MTAに554が返されていたと記憶しています。
>イースラーさん
3>smtpd_recipient_restrictions = permit_mynetworks,
3> permit_sasl_authenticated,reject_unauth_destination, reject

原因はここ

条件を順番に読めば分かります
1. permit_mynetworks
mynetworks に含まれる IP アドレスのクライアントから送信されたメールは許可
2. permit_sasl_authenticated
上記 (条件1) 以外のメールで、SMTP-auth で承認されたメールは許可
3. reject_unauth_destination
上記 (条件1と2) 以外のメールで、mydestination などに含まれるアドレス宛てのメール以外は拒否
4. reject
上記 (条件1と2と3) 以外のメールはすべて拒否
「もじら」a-chanさん

コメントありがとうございます。
reject を取ると解決しました!ありがとうございます!

私もWeb等で最後はrejectで〆るという記載がありましたので、当り前のように入れていました。
確かにリレー防止であれば、reject_unauth_destination で事足りると思います。

virtual_maps は次の段階で複数ドメインをpostfixに設定する予定なので、設定するかと思います。
一先ず、本件は解決しました。

本当にありがとうございますm(__)m
たっつぁんさん
ありがとうございます!
詳細な説明本当にありがとうございましたm(__)m

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

postfix 更新情報

postfixのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング