Você pode descobrir endereços de remetentes que enviaram e-mails não criptografados analisando os logs do Postfix, como disse @ F.sb. No entanto, no meu ambiente de teste, vejo que o Postfix não registra o endereço do remetente se smtpd_tls_security_level
estiver definido como encrypt
(ou, de maneira equivalente, smtpd_enforce_tls
está definido como yes
). Portanto, para obter os endereços dos remetentes dos registros, smtpd_tls_security_level
deve ser definido como may
e as mensagens não criptografadas devem ser rejeitadas durante a etapa RCPT TO
. Para isso, inclua reject_plaintext_session
em smtpd_recipient_restrictions
e defina plaintext_reject_code
a 530
. Por exemplo:
# /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
Em seguida, você pode configurar o rsyslog
para executar um executável personalizado e fornecer logs do Postfix via STDIN
. Por exemplo:
# /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")
Nesse executável personalizado, você poderá capturar os endereços do remetente por meio de sed
e enviar as respostas automáticas:
# /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=<([^>; ]+)>.*$//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
Nota: o SELinux pode impedir que rsyslog
envie mensagens locais através de sendmail
(que é invocado por mailx
). Se isso acontecer, configure rsyslog
para executar no modo permissivo emitindo o comando semanage permissive -a syslogd_t
.