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 2821Isso 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:60000As 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
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.