
Postfix、Roundcube、Dovecot を使用してメール サーバーをセットアップしました。ほぼすべて正常に動作しています。
私の国には、inbox.lv という人気の無料メール サービスがあります。このサービスにはスパム対策ルールが設定されており、新しいサーバーがメールを送信しようとすると、まず 10 分間グレーリストに登録し、サーバーにメールの再送信を要求します。まあ、仕方ありません。
ただし、Postfix を使用して送信メールを送信する場合 (Roundcube または Thunderbird から)、メッセージはキューに入れられません。代わりに、すぐにエラーが返されます。ログ エントリもあります (読みやすくするために改行/スペースを追加しています。IP とメール アドレスはプライバシー保護のため編集されています)。
May 31 23:17:18 21 postfix/smtpd[24814]: NOQUEUE: reject: RCPT from unknown[MY.IP.ADDRESS.HERE]:
450 4.1.1 <[email protected]>: Recipient address rejected: unverified address:
host mx1.inbox.lv[194.152.32.74] said: 450 4.7.1 <unknown[SERVER.IP.ADDRESS.HERE]>:
Client host rejected: greylisted, please retry in 597 seconds (in reply to RCPT TO command);
from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<[192.168.1.216]>
すべてのキュー設定はデフォルトのままです。Postfix バージョンは 2.10.1 です。
なぜこのようなことが起こるのでしょうか。また、Postfix でメッセージをキューに入れて 10 分後に再試行するにはどうすればよいでしょうか。
追加した:Postfix 設定 (匿名):
[root@myserver etc]# postconf mail_version
mail_version = 2.10.1
[root@myserver etc]# postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
command_directory = /usr/sbin
config_directory = /etc/postfix
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
debug_peer_level = 2
debugger_command = PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin ddd $daemon_directory/$process_name $process_id & sleep 5
html_directory = no
inet_interfaces = all
inet_protocols = all
mail_owner = postfix
mailq_path = /usr/bin/mailq.postfix
manpage_directory = /usr/share/man
message_size_limit = 100000000
milter_default_action = accept
mydestination = localhost
mydomain = mydomain.lv
myhostname = mydomain.lv
mynetworks_style = host
myorigin = $mydomain
newaliases_path = /usr/bin/newaliases.postfix
non_smtpd_milters = $smtpd_milters
queue_directory = /var/spool/postfix
readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES
sample_directory = /usr/share/doc/postfix-2.10.1/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
smtpd_milters = inet:127.0.0.1:8891
smtpd_recipient_restrictions = reject_unverified_recipient
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = private/auth
smtpd_sasl_type = dovecot
smtpd_tls_auth_only = yes
smtpd_tls_cert_file = /etc/letsencrypt/live/mydomain.lv/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/mydomain.lv/privkey.pem
smtpd_tls_security_level = may
unknown_local_recipient_reject_code = 550
virtual_mailbox_domains = d1.lv d2.lv d3.lv d4.lv
virtual_mailbox_limit = 0
virtual_transport = lmtp:unix:/var/run/dovecot/lmtp
[root@myserver etc]# postconf -M
smtp inet n - n - - smtpd
submission inet n - n - - smtpd
smtps inet n - n - - smtpd
pickup unix n - n 60 1 pickup
cleanup unix n - n - 0 cleanup
qmgr unix n - n 300 1 qmgr
tlsmgr unix - - n 1000? 1 tlsmgr
rewrite unix - - n - - trivial-rewrite
bounce unix - - n - 0 bounce
defer unix - - n - 0 bounce
trace unix - - n - 0 bounce
verify unix - - n - 1 verify
flush unix n - n 1000? 0 flush
proxymap unix - - n - - proxymap
proxywrite unix - - n - 1 proxymap
smtp unix - - n - - smtp
relay unix - - n - - smtp
showq unix n - n - - showq
error unix - - n - - error
retry unix - - n - - error
discard unix - - n - - discard
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - n - - lmtp
anvil unix - - n - 1 anvil
scache unix - - n - 1 scache
[root@myserver etc]#
答え1
リモートの宛先に接続して受信者について問い合わせるようにPostfixを設定しました。前にローカル キューに何でも受け入れます。
smtpd_recipient_restrictions =
reject_unverified_recipient
汎用メールサーバーでは、これは何にも不適切ですしかしお客様が管理しているドメイン、またはお客様が契約を結んでいる運営者のドメイン。
リモート サーバーに、メールを配信せずに特定のユーザーが存在するかどうかを問い合わせると、多くのサーバーがあなたとのやり取りを希望しなくなります。送信内容がわかるまでは、次の被害者のリストを流そうとしているスパマーなのか、メールを配信しようとしている人なのかを簡単に判別することはできません。
その懸念に対処し、元の問題を解決するための最も簡単な変更は次のとおりです。
smtpd_recipient_restrictions =
permit_sasl_authenticated
,
reject_unauth_destination
, reject_unverified_recipient
制限は指定された順序で処理されるため、認証されたユーザーと無関係なリレー要求 (いずれにせよ拒否されます) は除外されます。この方法では、reject_unverified_recipient
受信メッセージ (dovecot がおそらく遅延なくアドレスを確認する) に引き続き適用できます。ただし、まだメールを受け取っていない受信者についてリモート サーバーに問い合わせる必要はありません。ただし、ユーザーが互いにメッセージを書き込む場合にもこの機能を有効にする場合は、これよりも複雑にする必要があります。Postfix ドキュメントの ADDRESS_VERIFICATION_README ファイルは、少し古いものですが、それでも概要はわかるはずです。
私は通常、master.cf (少なくとも最近では適切なテンプレートが付属しています) を使用して、部分的に分離された smtpd インスタンス (一般的なインターネット使用用にポート 25 に 1 つ、必須の認証済みユーザー送信用にポート 465 に 1 つ) を設定することをお勧めします。こうすることで、合理的に保守可能な方法でサービスごとに異なるルールを適用でき、リレー トラフィックを着信トラフィックと区別して処理するタスクがさらに容易になります。