私は、メールがローカルホストから送信され、かつ特定のドメインに送信される場合にのみメールを中継するように Postfix を設定しようとしています。しかし、中継サーバーを指定するとすぐに、すべて (ローカル配信を除く) がそこに送信されます。制限が間違っていると思っていたので、最終的に「すべてを拒否」に設定しましたが、それでも通過します。mynetworks
すべてをバイパスするかどうか疑問に思い、 undefined を実行しましたmynetworks
。それでもすべてが中継されます。
この時点で、postconf -n
次のようになります。
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
inet_interfaces = loopback-only
inet_protocols = all
mailbox_size_limit = 0
mydestination = host.domain.com, localhost.domain.com, localhost
myhostname = host.domain.com
mynetworks =
myorigin = /etc/mailname
readme_directory = no
recipient_delimiter = +
relay_domains = domain.com
relayhost = [mailserver.domain.com]:587
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
smtpd_client_restrictions = reject
smtpd_recipient_restrictions = reject
smtpd_relay_restrictions = reject
smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes
最初は次のようなことを試していました (何が違うのかを示す):
mydestination = host.domain.com, localhost.domain.com, localhost
myhostname = host.domain.com
mynetworks = 127.0.0.1 [::1]/128
smtpd_client_restrictions = permit_mynetworks reject
smtpd_recipient_restrictions = permit_auth_destination reject
smtpd_relay_restrictions = permit_auth_destination reject
困惑しています。トランスポート テーブルがありません。Postfix 2.11.0 (Ubuntu 14.04)。
答え1
リレーサーバーとは、Postfixの用語では、Postfixがすべての非ローカルメールを配信するサーバーです(たとえば、社内ネットワークのPostfixは、会社のメインメールサーバーをリレーとして定義し、宛先サーバーにまったく接続しないようにします)。これはメールを送信するためのもので、relayhost
指令。
Postfixは、設定によってどのドメインが自分のドメインであるかを知っています。mydestination
ディレクティブ。このリスト内のドメインはローカルに配信されます (正しい MX レコードがある場合)。
ホストmynetworks
どこからでもどこにでもメールを送信できます。したがって、ここでは信頼するネットワークのみ (ローカルホストのみ、または内部ネットワーク) を設定する必要があります。postfix はこれらのホストからインターネットにメールを中継すると言われています。これは、値を持つsmtpd_relay_restrictions
(またはsmtpd_recipient_restrictions
v2.10 以前)で設定されているデフォルト設定です。postfix構成から完全にpermit_mynetworks
削除すると、パラメータは何も行いません。permit_mynetworks
mynetworks
指令relay_domains
ローカル以外のドメインの Postfix が全世界からのメールを受け入れるかどうかを制御します。これは通常、Postfix が何らかのドメインのバックアップ MX である場合に使用されます。
したがって、あなたの場合、設定はmynetworks
空である必要があります(空にできない場合は、10.10.10.10 などのネットワークで使用されていない内部 IP を使用します)。またはpermit_mynetworks
から削除smtpd_client_restrictions
。
relay_domains = domain.com
mydestination = host.domain.com localhost
relayhost = [mailserver.domain.com]:587
答え2
最終的に動作させたものがこれです。鍵は でdefault_transport = error
、リレーに一致しないものはすべてバウンスされるようになりました。@Marki555 さん、smtpd 設定以外のことを考えさせてくれてありがとう。
default_transport = error
inet_interfaces = loopback-only
mydestination = host.domain.com, localhost.domain.com, localhost
myhostname = host.domain.com
mynetworks = 127.0.0.1 [::1]/128
relay_domains = domain.com
relay_transport = smtp
relayhost = [mailserver.domain.com]:587
smtpd_client_restrictions = permit_mynetworks reject
smtpd_recipient_restrictions = permit_auth_destination reject
smtpd_relay_restrictions = permit_auth_destination reject
もう 1 つの良い postfix デバッグのヒント: リレー ホストが変更されていないにもかかわらず、ローカル バウンス メッセージ (つまり、リレーがすぐに拒否された) にはリレー ホストの名前がまだ含まれています。
も調べてみましたmaster_service_disable = inet
が、localhost:25 に接続してローカルメールの送信を処理するものが十分にあるため、あまり実用的ではありませんでした。