Notificação automática quando o postfix requer TLS?

2

Configurei o postfix no CentOS 7 e configurei-o para exigir que o STARTTLS aceite emails de entrada. Já me deparei com algumas instâncias em que um servidor, por algum motivo, não oferece suporte à criptografia TLS e, portanto, nunca emite STARTTLS e os retornos por e-mail. Como deveria. Mas o remetente normalmente recebe apenas uma mensagem "não entregue" do servidor de e-mail e, muitas vezes, não está em posição de saber o que aconteceu, muito menos fazer alguma coisa a respeito.

Como o servidor de envio emite normalmente FROM antes de receber a resposta Must issue a STARTTLS command first , o endereço do remetente está potencialmente disponível em algum lugar. Existe alguma utilidade para raspar essa informação e enviar uma resposta automática com uma explicação e um endereço alternativo ou um link para um formulário de contato?

    
por Chris 02.11.2018 / 03:07

2 respostas

2

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 .

    
por 10.11.2018 / 22:37
1

Você pode usar alguns analisadores de log do postfix e detectar esse erro e enviar um e-mail de resposta automática ao remetente.

Considere a criptografia como uma opção e melhor não aplicá-la, definindo smtpd_enforce_tls = yes

Apenas para o Aviso de que aplicá-lo em um servidor SMTP público viola RFC 3207

    
por 10.11.2018 / 10:41