
私のメール サーバーは現在、mxtoolbox では Open Relay として表示されます。
目的: RCPT TO:
example.com の場合のみ SMTP 接続を許可する
RCPT TO:
がではないことがわかったときに、直ちに接続を拒否するようにするには、どのような変更を加える必要がありますかexample.com
。現在、スパムメールが送られてきており、 に基づいて電子メールを拒否していますcheck_recipient_access
。
テストメール:
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 <HOSTNAME> ESMTP Postfix (Debian/GNU)
ehlo test.com
250-<HOSTNAME>
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
現在の状況:
mail from: [email protected]
250 2.1.0 Ok
rcpt to: [email protected]
250 2.1.5 Ok
期待して:
mail from: [email protected]
250 2.1.0 Ok
rcpt to: [email protected]
REJECT
そして
mail from: [email protected]
250 2.1.0 Ok
rcpt to: [email protected]
250 2.1.5 Ok
の出力postconf -n
user@hostname:~$ sudo postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
header_checks = pcre:/etc/postfix/header_checks
inet_interfaces = loopback-only
mailbox_size_limit = 0
mydestination = <hostname>, localhost.<domain>, localhost
mydomain = example.com
myhostname = <hostname>
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 10.32.247.0/24
myorigin = <hostname>
readme_directory = no
recipient_delimiter = +
relay_domains = example.com
relayhost = [10.32.247.125]:10000
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
smtpd_helo_required = yes
smtpd_recipient_restrictions = reject_unauth_destination, reject_unknown_recipient_domain, permit
smtpd_sender_restrictions = check_recipient_access pcre:/etc/postfix/sender_access, reject_unauth_pipelining, reject_non_fqdn_recipient, reject_unknown_recipient_domain, permit_mynetworks, reject_unauth_destination, permit
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
詳細モードのメールログ ファイル:http://pastebin.com/9q7f5DFp
私の現在のシナリオ:
メール --> Postfix が受け入れる --> ヘッダーをチェックする --> example.com に属していない場合は破棄する
期待される:
メール --> Postfix は RCPT TO: == example.com をチェックします --> そうでない場合は拒否し、それ以上処理しません
答え1
mail.logからのキー行
NOQUEUE: 破棄: localhost[127.0.0.1]からのRCPT: : 受信者アドレスがDISCARDアクションをトリガーします。 from= to= proto=ESMTP helo=
postfix では、DISCARD
これは postfix が電子メールを受け入れるふりをしますが、実際には電子メールを /dev/null に送信します (つまり、電子メールを破棄します)。したがって、telnet で確認すると、postfix は「OK、受け入れます」と応答します。
答え2
オープンリレーの定義は、物理的にネットワークにバインドされていないすべての人がメールを送信できるようにする SMTP サーバーです。したがって、内部ネットワーク上のすべての人が、認証なしでサーバーを介して他の SMTP サーバーにメールを送信できる必要があります。ただし、その機能を世界に拡張することは望ましくありません。通常、すべての permit ステートメントが最初に実行され、次に deny_unauth_destination が実行されます。逆の順序で実行されるのを見たことがないので、機能するかどうかはわかりません。ただし、セットアップで間違ったものを拒否しています。reject_unknown_recipient_domain は、ここでは実際には適用されません。これは送信者の制限です。permit ステートメントですべてを許可しているため、reject_unauth_destination はここでは何もしません。そのため、通常、permit は deny ステートメントの前にあるため、拒否するものがわかります。少なくとも、私にはそれが理にかなっています。
smtpd_recipient_restrictions = permit_mynetworks、permit_sasl_authenticated、reject_unauth_destination
これは、mynetworks で定義されているすべてのネットワークを許可し、SSL/TLS 接続で適切に認証されたすべてのユーザーを許可し、その他すべてを拒否することを意味します。つまり、オープン リレーではありません。