CentOS 7にpostfixを設定し、STARTTLSが受信メールを受け入れるように要求するように設定しました。何らかの理由でサーバーがTLS暗号化をサポートしていない状況が発生し、STARTTLSが発行されず、電子メールが返送されます。そうしなければならないようです。しかし、発信者はメールサーバーから「配信できない」というメッセージを受け取ることが多く、どのような措置を取ることは苦労して何が起こったのかを知る方法もない場合が多いです。
送信サーバーは通常、応答をFROM
送信する前にメッセージをエクスポートするため、送信者のアドレスはどこかで利用可能になります。Must issue a STARTTLS command first
その情報を収集し、説明と代替住所または連絡先フォームリンクを含む自動返信を送信するユーティリティはありますか?
ベストアンサー1
@F.sbが言ったように、Postfixログを解析して、暗号化されていない電子メールを送信する送信者アドレスを見つけることができます。ただし、テスト環境でPostfixがsmtpd_tls_security_level
に設定されている場合encrypt
(または同じに設定smtpd_enforce_tls
されている場合yes
)、送信者アドレスを記録しないことがわかりました。したがって、ログから送信者アドレスを取得するには、この手順では暗号化smtpd_tls_security_level
さmay
れていないメッセージを拒否する必要がありますRCPT TO
。これを達成するには、reject_plaintext_session
intosmtpd_recipient_restrictions
とplaintext_reject_code
に設定します530
。たとえば、
# /etc/postfix/main.cf
smtpd_tls_security_level = may
smtpd_tls_cert_file = /etc/postfix/postfix.crt
smtpd_recipient_restrictions = reject_unauth_destination,reject_plaintext_session,permit
plaintext_reject_code = 530
rsyslog
その後、カスタム実行可能ファイルを実行して転送するように設定できますSTDIN
。たとえば、次のようになります。
# /etc/rsyslog.d/postfix-logs.conf
module(load="omprog")
template(name="PostfixLogs" type="string" string="%syslogtag% %msg%\n")
:syslogfacility-text, isequal, "mail" action(type="omprog"
binary="/usr/local/bin/postfix-tls-notify.sh"
template="PostfixLogs")
sed
このカスタム実行可能ファイル内で送信者アドレスをキャプチャし、自動返信を送信できます。
# /usr/local/bin/postfix-tls-notify.sh
/usr/bin/sed -run 's/^postfix\/smtpd(|\[[0-9]+\]):\s+noqueue:\s+reject:\s+rcpt\s+from\s+[^;]+session\s+encryption\s+is\s+required;\s+from=<([^>; ]+)>.*$/\2/ip' | while read sender; do
/usr/bin/mailx -s 'Automatic notification' "${sender}" <<'MESSAGE'
Please, send your inquiries by using https://www.example.com/contact.html
MESSAGE
done
注:SELinuxは、rsyslog
ローカルメッセージが以下を介して送信されるのを防ぎます。これが発生した場合は、コマンドを実行して許可モードで実行するように構成します。sendmail
mailx
rsyslog
semanage permissive -a syslogd_t