postfix / smtpd DNS検索が失敗するのはなぜですか?

postfix / smtpd DNS検索が失敗するのはなぜですか?

私は2年間のメールサーバー(DebianのPostfix)を交換する準備をしています。変更は次のとおりです。

  • amd64 → ARM64
  • Debian 10.2 → 11.2
  • サフィックス 3.4.7 → 3.5.6

構成は変更されません。

電子メールを新しいサーバーに手動で転送しようとすると、telnet送信者のホスト名を検索できません。

postfix/smtpd[146]: lookup gmail.com type A flags 
postfix/smtpd[146]: dns_query: gmail.com (A): Host not found, try again
postfix/smtpd[146]: lookup gmail.com type AAAA flags 
postfix/smtpd[146]: dns_query: gmail.com (AAAA): Host not found, try again
postfix/smtpd[146]: lookup gmail.com type MX flags 
postfix/smtpd[146]: dns_query: gmail.com (MX): Host not found, try again

以前のサーバーはうまくいきました。

postfix/smtpd[5554]: lookup gmail.com type A flags 
postfix/smtpd[5554]: dns_query: gmail.com (A): OK
postfix/smtpd[5554]: dns_query: reply len=43 ancount=1 nscount=0
postfix/smtpd[5554]: dns_get_answer: type A for gmail.com

sudo -s -u postfix dig +short mx gmail.com両方のサーバーでうまく機能します。

出力は両方のサーバーで同じですpostconf | grep dns。同じだ/etc/resolv.conf

新しいものにはどんな問題がありますか?それを見つけるためにまた何をデバッグできますか?

/etc/resolv.conf:

options timeout:2 attempts:5
; generated by /usr/sbin/dhclient-script
search us-west-2.compute.internal
nameserver 172.31.0.2

postconf | grep dns:

disable_dns_lookups = no
dns_ncache_ttl_fix_enable = no
dnsblog_reply_delay = 0s
dnsblog_service_name = dnsblog
lmtp_dns_reply_filter =
lmtp_dns_resolver_options =
lmtp_dns_support_level =
lmtp_host_lookup = dns
postscreen_dnsbl_action = ignore
postscreen_dnsbl_max_ttl = ${postscreen_dnsbl_ttl?{$postscreen_dnsbl_ttl}:{1}}h
postscreen_dnsbl_min_ttl = 60s
postscreen_dnsbl_reply_map =
postscreen_dnsbl_sites =
postscreen_dnsbl_threshold = 1
postscreen_dnsbl_timeout = 10s
postscreen_dnsbl_whitelist_threshold = 0
smtp_dns_reply_filter =
smtp_dns_resolver_options =
smtp_dns_support_level =
smtp_host_lookup = dns
smtpd_dns_reply_filter =

これが関係する場合、「サーバー」は実際にはsupervisor基本コマンドで実行されるドッカーコンテナであり、これは/usr/sbin/postfix -c /etc/postfix start-fg管理されたプロセスの1つとして実行されます。

答え1

Postfixはデフォルトでchrootとして実行されます。それを/etc/resolv.conf探す以外には何も知りません/var/spool/postfix/etc/resolv.conf。それを作成する何かがなければ、そこにはないでしょう。

直面した問題をすばやく解決するには:

cp /etc/resolv.conf /var/spool/postfix/etc/

Debian では、Postfix サービスの起動/停止時に - から順に/usr/lib/postfix/configure-instance.sh実行して自動的に実行されます。/etc/init.d/postfix

Dockerコンテナで明示的に実行されない限り、何も実行されません。単にそのコマンドを実行するだけでは/usr/sbin/postfix -c /etc/postfix start-fg問題は解決されません。ただPostfixが起動しますが、表示されませんresolv.conf

正確に言えば、Postfixは次のように実行できます。

/bin/bash -c "/usr/lib/postfix/configure-instance.sh - && /usr/sbin/postfix -c /etc/postfix start-fg"

あるいは、Postfixが正常に実行されるように、つまりchrootではなく実行されるように設定できます。これはセキュリティの考慮事項です。これは、Dockerコンテナ内でも、メールストアなどの悪意のあるSMTP攻撃を防ぐために隠す必要があるものがある場合です。

関連:https://serverfault.com/questions/661621/why-do-i-have-to-manually-copy-etc-services-and-etc-resolv-conf-into-var-spoo

関連情報