貴重な情報をご掲示くださり、大変お世話になっております。
本日はアドバイスを承りたく投稿させて頂きます。
postfix上でsasl_authを用いたsubmissionポートでのSSL/TLS環境を構築しようと試みております。
smtpd_client_restrictionsでのリレー設定について質問させてください。
> master.cf
submission inet n - n - - smtpd
-o smtpd_enforce_tls=yes
-o smtpd_sasl_local_domain=mydomain.com
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
> main.cf
myhostname = mail.mydomain.com
mydomain = mydomain.com
myorigin = $mydomain
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
relay_domains = $mydestination
この状態でローカルからsubmissionポートに問い合わせるとid,passwordを要求されます。
ここで外部ドメイン宛のメールをリレーさせたいのですが、
問題はmain.cfファイルのmynetworksの設定でして
> main.cf
mynetworks = 127.0.0.0/8
・sasldbに登録されてないid,passwordで送信
554 5.7.1 <me@mydomain.com>: Client host rejected: Access denied
・sasldbに登録済みのid,passwordで送信
554 5.7.1 <me@mydomain.com>: Relay access denied
> main.cf
mynetworks = 127.0.0.0/8, [メール送信元IP]/32
・sasldbに登録されてないid,passwordで送信
554 5.7.1 <me@mydomain.com>: Client host rejected: Access denied
・sasldbに登録済みのid,passwordで送信
送信完了
-- 送信完了時のログ : /var/log/maillog --
postfix/smtpd[5291]: connect from gateway.example.com[送信元IP]
postfix/smtpd[5291]: setting up TLS connection from gateway.example.com[送信元IP]
postfix/smtpd[5291]: TLS connection established from gateway.example.com[送信元IP]: TLSv1 with cipher RC4-MD5 (128/128 bits)
postfix/smtpd[5291]: 4946A5FA7F: client=gateway.example.com[送信元IP], sasl_method=CRAM-MD5, sasl_username=me@mydomain.com
postfix/cleanup[5296]: 4946A5FA7F: message-id=<20080516220152.DAF3.44D859CF@mydomain.com>
postfix/qmgr[5290]: 4946A5FA7F: from=<me@mydomain.com>, size=540, nrcpt=1 (queue active)
postfix/smtpd[5291]: disconnect from gateway.example.com[送信元IP]
postfix/smtp[5297]: 4946A5FA7F: to=<you@targetdomain.com>, relay=mail.targetdomain.com[送信先IP]:25, delay=0.23, delays=0.11/0.01/0.06/0.04, dsn=2.0.0, status=sent (250 2.0.0 m4GD1hNb025658 Message accepted for delivery)
localhost postfix/qmgr[5290]: 4946A5FA7F: removed
上記ログよりsasldbに問い合わせは行われているのですが、sasl_authを経てリレーを
しようとした場合、mynetworksを0.0.0.0/0とすることになってしまいます。
smtpd_client_restrictionsの項目を見ている限り、リレー許可はmynetworksに
書き込まなくてもsasl_authで認証されればリレーされるとの認識だったのですが、
何か間違っておりますでしょうか?
なおpostfixのバージョンは2.3.3になります。
お忙しい中恐れ入りますが、よろしくお願い致します。
これくらい情報が整理されていると、おやじもほぼ完全に状況が把握できるのでアドバイスしやすいですね。的はずれな情報でもいいので、情報がないことにはどうにもなりませんから・・・。
> 上記ログよりsasldbに問い合わせは行われているのですが、sasl_authを経てリレーを
> しようとした場合、mynetworksを0.0.0.0/0とすることになってしまいます。
> smtpd_client_restrictionsの項目を見ている限り、リレー許可はmynetworksに
> 書き込まなくてもsasl_authで認証されればリレーされるとの認識だったのですが、
> 何か間違っておりますでしょうか?
>
> なおpostfixのバージョンは2.3.3になります。
> お忙しい中恐れ入りますが、よろしくお願い致します。
コンテンツに説明を書いてあるつもりですが、リレーを許可するものに関する設定をしていないからです。
コンフィグ(main.cf)に"smtpd_recipient_restrictions" がないのでデフォルトで動作しているはずです。このパラメータはRCPT TO コマンドの場面で適用するアクセス制限に関するもので、具体的にはリレーの許可/不許可をここで決定します。これのデフォルトは、
smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination
なので、以下のメールしか受け取り(リレーし)ません。
・IPアドレスが $mynetworks にマッチするクライアントからのメール、または:
・送信者指定のルーティング ((user@elsewhere@domain) を含むアドレス宛以外で $relay_domains にマッチするリモートの配送先へのメール、または:
・$inet_interfaces や $proxy_interfaces、$mydestination、$virtual_alias_domains、$virtual_mailbox_domains にマッチする、ローカル配送先へのメール。
従って、実質は一番上の条件、すなわちIPアドレスが $mynetworks にマッチするクライアントから以外は受け取らない(リレーしない)ことになります。
この問題を解消するには、認証を通過したものはリレーを許可する設定をしてあげる必要があります。それには、ここに"permit_sasl_authenticated"を追加してあげればSMTP認証を通過したものはリレーが許可されます。以下のように設定してください。
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
"smtpd_client_restrictions"でsubmissionポートの設定をされていますが、これはあくまでPostfixへのクライアントからの接続要求に関するアクセス制限であり、これを通過してもリレーはしてくれません。
おやじのコンテンツや下記をご覧になるとよいと思います。
http://www.postfix-jp.info/trans-2.3/jhtml/RESTRICTION_CLASS_README.html
ご回答下さり、ありがとうございました。
> main.cf
mynetworks=127.0.0.0/8
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
とすることで、期待通りの結果を得ることができました。
smtpd_recipient_restricitonsとsmtpd_client_restricitonsを同じものとして認識していたのが誤りでした。
postfixは明確なチェーンでルールが成り立っているというのが、今回のおやじ様のご指摘でわかりました。
この度は誠にありがとうございました。
今後もおやじ様のサイトで勉強させて頂きます。
失礼致しました。