Configuração Postfix · 5 min read · Nov 12, 2025

Como Combater Spam Usando Sua Configuração Postfix

Como Combater Spam Usando Sua Configuração Postfix

Neste guia, você aprenderá como ajustar o guia de e-mail padrão Falko para Postfix (+Auth SMTP + Quota), https://www.howtoforge.com/virtual_postfix_mysql_quota_courier, configurado para combater melhor o SPAM e permitir um pouco de compatibilidade com os sistemas mais antigos do Qmail.

Então, vamos começar…

O guia do HowtoForge é ótimo para tudo, no entanto, se você tiver um servidor de e-mail muito ocupado executando o Spam Assasin em milhares de mensagens por minuto, isso é um assassino de CPU. A melhor resposta é parar o e-mail antes que ele chegue ao Spam Assasin com uma variedade de RBL (Realtime Blacklists) e RHBL (mesma coisa, mas diferente), Greylistings e Helo Checks.

Primeiro de tudo, queremos mudar as restrições smtpd existentes e adicionar uma série de novas verificações para ajudar a reduzir a quantidade de e-mails que o sistema aceita em /etc/postfix/main.cf

### Verificações para remover e-mails malformados  
smtpd_helo_required     = yes  
strict_rfc821_envelopes = yes  
disable_vrfy_command = yes  
  
unknown_address_reject_code  = 554  
  
unknown_hostname_reject_code = 554  
  
unknown_client_reject_code   = 554  
  
  
smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname, regexp:/etc/postfix/helo.regexp, permit  
  
  
  
### Ao alterar sender_checks, este arquivo deve ser regenerado usando postmap , para gerar um Berkeley DB  
  
smtpd_recipient_restrictions =   
   check_client_access hash:/etc/postfix/helo_client_exceptions  
   check_sender_access    hash:/etc/postfix/sender_checks,  
   reject_invalid_hostname,  
### Pode causar problemas com Auth SMTP, então tenha cuidado!  
   reject_non_fqdn_hostname,  
##################################  
   reject_non_fqdn_sender,  
  
   reject_non_fqdn_recipient,  
  
   reject_unknown_sender_domain,  
  
   reject_unknown_recipient_domain,  
  
   permit_mynetworks,  
  
   reject_unauth_destination,  
  
  
# Adicione exceções RBL aqui, ao alterar rbl_client_exceptions, este  
arquivo deve ser regenerado usando postmap , para gerar um  
Berkeley DB  
          check_client_access hash:/etc/postfix/rbl_client_exceptions,  
          reject_rbl_client cbl.abuseat.org,  
          reject_rbl_client sbl-xbl.spamhaus.org,  
          reject_rbl_client bl.spamcop.net,   
          reject_rhsbl_sender    dsn.rfc-ignorant.org,  
  
         check_policy_service inet:127.0.0.1:60000  
         permit 

Agora, para explicar, mas primeiro precisamos criar alguns arquivos:

O primeiro arquivo que queremos criar é /etc/postfix/helo.regexp e isso conterá:

/^subdomain\.host\.com$/           550 Não use meu próprio hostname  
/^xxx\.yyy\.zzz\.xxx$/             550 Não use meu próprio endereço IP  
/^\[xxx\.yyy\.zzz\.xxx\]$/       550 Não use meu próprio endereço IP  
/^[0-9.]+$/                          550 Seu software não está em conformidade com o RFC 2821  
/^[0-9]+(\.[0-9]+){3}$/              550 Seu software não está em conformidade com o RFC 2821

Isso por si só afastará spammers tentando enviar o comando helo e se passando pelo servidor que recebe o e-mail por IP ou por hostname, além de afastar alguns dos e-mails que não atendem à conformidade do RFC 2821.

Em seguida, precisamos criar /etc/postfix/helo_client_exceptions:

#Esses endereços IP de cliente estão autorizados a ignorar verificações fqdn  
# Algum comentário para identificar o endereço IP abaixo  
www.xxx.yyy.zzz OK  

Este arquivo é necessário caso um servidor de e-mail mal comportado não consiga enviar o helo correto e você precise permitir que o e-mail seja aceito dessa fonte. Em minha experiência, coisas como dispositivos autônomos, câmeras de CCTV são ruins em cumprir padrões, então você pode precisar fazer uma exceção para isso.

Antes que quaisquer alterações neste arquivo se tornem utilizáveis, você precisa executar

postmap /etc/postfix/helo_client_exceptions

Isso criará um arquivo chamado /etc/postfix/helo_client_exceptions.db

Movendo para baixo, temos /etc/postfix/sender_checks que permite que você ignore as várias verificações FQDN e permita que um remetente específico passe. Isso é particularmente útil se uma empresa executar uma rede de e-mail interna, como domain.com, mas o e-mail rodar em int.domain.com e não houver configuração de DNS para int.domain.com, isso é ótimo para segurança, mas não é bom porque o DNS externo não sabe sobre a estrutura interna e, portanto, o postfix rejeitará o int.domain.com.

[email protected]      REJECT   
[email protected]   OK 

Mais uma vez, este arquivo, uma vez modificado, deve ter um arquivo Berkely DB criado e, assim, o criamos usando:

postmap /etc/postfix/sender_checks

Em seguida, temos nossas verificações RBL. Existem muitos sites dedicados a RBLs, mas para encurtar o comprimento do artigo, simplesmente coloque que essas listas são atualizadas constantemente e fornecem IPs e hostnames que spammers estão usando para retransmitir e-mails. Cada IP que tenta enviar e-mail para o seu servidor de e-mail será verificado contra essas listas (4 usadas acima) e, se o IP não estiver listado nas RBLs, o servidor de e-mail aceitará o e-mail. Claro, os servidores se encontram nessas listas o tempo todo inadvertidamente ou as listas levam 24 horas para remover o IP da lista negra após um surto de spam, então é sempre melhor ter uma maneira de ignorar essas verificações.

Para fazer isso, criamos um arquivo chamado /etc/postfix/rbl_client_exceptions:

## Algum comentário aleatório  
www.xxx.yyy.zzz OK   

Mais uma vez, você deve executar postmap para gerar o arquivo Berkeley DB

postmap /etc/postfix/rbl_client_exceptions

A última linha das restrições smtpd é o filtro de greylisting. Não vou entrar em detalhes sobre isso, pois já existe um guia no howtoforge, https://www.howtoforge.com/greylisting_postfix_postgrey, mas se você não deseja usar Greylisting, simplesmente omita a linha

check_policy_service inet:127.0.0.1:60000

As restrições smtpd são muito fáceis de seguir, até que uma das verificações dê o sinal verde para a mensagem passar para a fila do Postfix, a maioria das respostas não tem certeza, a menos que um NÃO explícito seja dado, a mensagem seguirá para baixo na lista de verificações.

LEGADO QMAIL

DJB (Dan Bernstein) desenvolveu uma alternativa ao SMTP chamada QMQP. Diz-se que é mais rápido com menos sobrecargas. Portanto, se você estiver substituindo seus antigos MTAs Qmail pelo Postfix, pode ser necessário habilitar o suporte para QMQP.

Fazemos isso adicionando o seguinte em /etc/postfix/main.cf

qmqpd_authorized_clients = $mynetworks   
qmqpd_error_delay = 5s  
qmqpd_timeout = 300s   

Realisticamente, você pode autenticar contra qualquer coisa, mas decidi autenticar contra mynetworks. Depois de adicionar o acima em main.cf, você precisa modificar ainda mais /etc/postfix/master.cf e garantir que contenha o seguinte:

628      inet  n       -       -       -       100       qmqpd    

Agora tudo o que você precisa fazer é reiniciar o Postfix

/etc/init.d/postfix restart

Você pode verificar seu novo Postfix ciente de QMQP digitando:

telnet localhost 628

Autenticação Via IP (Ideal para retransmissão de Smarthost em Servidores MS Exchange)

Em seguida, vamos modificar o guia um pouco para facilitar a configuração de mynetworks do que através de arquivos planos, ou seja, /etc/postfix/main.cf

Crie o seguinte /etc/postfix/mysql-mynetworks.cf

user = mail_admin  
password = password  
dbname = mail  
table = allowed_hosts  
select_field = 'IP'  
where_field = IP  
hosts = 127.0.0.1  
additional_conditions = and active='yes'   

Você precisará do seguinte SQL neste ponto

CREATE TABLE allowed_hosts (
active enum(‘yes’,’no’) NOT NULL default ‘1’,
IP varchar(15) NOT NULL default ‘’,
Client varchar(128) NOT NULL default ‘’,
Comments text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Finalmente, vamos ativar isso mudando nossa linha mynetworks no main.cf do Postfix para:

mynetworks = 127.0.0.0/8, proxy:mysql:/etc/postfix/mysql-mynetworks.cf    

Finalmente, reinicie o Postfix para que as alterações tenham efeito:

chmod o= /etc/postfix/mysql-mynetworks.cf
chgrp postfix /etc/postfix/mysql-mynetworks.cf

/etc/init.d/postfix restart

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.