Postfix: Contornando comandos incorretos de conexões SMTP

Olá !

Anteriormente, eu publiquei um artigo (https://respirandolinux.wordpress.com/2013/09/20/postfix-contornando-501-syntax-helo-hostname/) sobre como contornar o erro de sintaxe quando clientes remotos enviam o comando HELO/EHLO de forma incorreta, principalmente sem inserir o hostname após o comando. Utilizando o procedimento do meu artigo anterior, não será mais possível aplicar restrições na etapa HELO/EHLO, uma vez que independentemente da entrada, o resultado sempre será “OK”.

É muito comum quando temos um servidor SMTP que será utilizado por aplicações, muitos comandos serem enviados com a sintaxe incorreta ou até mesmo estas aplicações enviarem comandos inválidos. Para contornar este problema, podemos utilizar o parâmetro “smtpd_command_filter” no Postfix.

A diretiva “smtpd_command_filter” (disponível a partir da versão 2.7) é descrita na documentação do Postfix como um último recurso para contornar clientes que enviam comandos incorretos ou inválidos de fato. Apesar das modificações que serão aplicadas, é possível aplicar restrições HELO após utilizar esse parâmetro.

Vejamos um exemplo que pode ser utilizado para contornar clientes que enviam o HELO/EHLO sem estar seguido do FQDN:

smtpd_command_filter = pcre:/etc/postfic/command_filters

Conteúdo do arquivo:

/^HELO\s*$/ HELO nome.desejado
/^EHLO\s*$/ EHLO nome.desejado

Desta forma, quando um cliente remoto enviar o HELO/EHLO sem estar seguindo do hostname, este comando será substituído por “HELO/EHLO nome.desejado”.

No log será exibida uma entrada conforme abaixo sempre que um comando por modificado pelo Postfix.:

replacing client command “HELO” with “HELO domain.invalid”

Anúncios

Postfix: contornando 501 Syntax: HELO hostname

Antes de aplicar essa orientação, leia: https://respirandolinux.wordpress.com/2014/08/25/postfix-contornando-comandos-incorretos-de-conexoes-smtp/

Olá ! Compartilho com vocês como configurar o Postfix para não recusar o HELO  e EHLO com a sintaxe incorreta. As RFCs 821 e 2821 especificam claramente que o HELO e EHLO deve ser seguidos do hostname ou domínio que deseja ser informado. porém é muito comum implementar o SMTP para que diversas aplicações enviem e-mails, e certamente muitas destas não seguirão os padrões.

Em uma dessas implementações, foi observado que diversas aplicações estavam enviando o HELO ou EHLO sem nenhum parâmetro, sendo rejeitado pelo servidor:

220 SMTP
HELO
501 Syntax: HELO hostname

220 SMTP
EHLO
501 Syntax: EHLO hostname

O Postfix já estava configurado para não exigir o HELO/EHLO (smtpd_helo_required = no) e as restrições da etapa HELO (smtpd_helo_restrictions) estavam liberando as aplicações, porém a sintaxe continuava sendo testada e como o HELO/EHLO estava sendo enviado sem nenhum parâmetro, o servidor rejeitava.

Para contornar essa configuração, podemos usar o parâmetro smtpd_noop_commands que permite informar ao Postfix quais comandos passarão a ser aceitos com o código 250 – OK, sobrescrevendo qualquer outra implementação.

Edite o main.cf incluindo a seguinte linha:

smtpd_noop_commands = HELO EHLO

Feito isso, efetue um reload no serviço  do Postfix e os comandos HELO/EHLO sem parâmetro serão aceitos:

220 SMTP
HELO
250 2.0.0 Ok

220 SMTP
EHLO
250 2.0.0 Ok