postfixにTLSが必要なときに自動的に通知を送信しますか?

postfixにTLSが必要なときに自動的に通知を送信しますか?

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_levelmayれていないメッセージを拒否する必要がありますRCPT TO。これを達成するには、reject_plaintext_sessionintosmtpd_recipient_restrictionsplaintext_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ローカルメッセージが以下を介して送信されるのを防ぎます。これが発生した場合は、コマンドを実行して許可モードで実行するように構成します。sendmailmailxrsyslogsemanage permissive -a syslogd_t

おすすめ記事