Postfix Config · 13 min read · Nov 14, 2025
Filtro de Spam Postfix usando Ubuntu Dapper, MailScanner, SpamAssassin, Razor, Pyzor, DCC e ClamAV - Página 2
2 Configurando o Postfix
Precisamos de alguns arquivos de exemplo do código-fonte do Postfix, note que o código-fonte que pegamos aqui é o código-fonte original, antes de ser modificado pelos mantenedores do pacote Ubuntu/Debian:
cd /usr/local/src
wget http://us.archive.ubuntu.com/ubuntu/pool/main/p/postfix/postfix_2.3.3.orig.tar.gz
tar xzvf postfix_2.3.3.orig.tar.gzPare o Postfix:
postfix stopCERTIFIQUE-SE de responder “n” para “sobrescrever?” Faça cada seção separadamente:
cp -i /usr/share/postfix/main.cf.debian /etc/postfix/main.cf
cp -i /usr/local/src/postfix-2.3.3/conf/* /etc/postfix
cp -i /etc/postfix/header_checks /etc/postfix/body_checks
cp -i /etc/postfix/access /etc/postfix/sender_access2.1 Editar master.cf
A propósito, fique atento aos dois arquivos de configuração do Postfix, ambos localizados na pasta /etc/postfix. Mais de um administrador já se confundiu entre master.cf e main.cf!
Primeiro, faça um backup do master.cf atual:
cp /etc/postfix/master.cf /etc/postfix/master.cf-origEdite o master.cf:
vi /etc/postfix/master.cfPrecisamos adicionar dois itens abaixo do tipo de serviço pickup. O serviço pickup “pega” e entrega o correio local (local significando “nesta máquina”). Mais tarde, criaremos um relatório diário/semanal que esta caixa nos enviará e, como o relatório conterá conteúdos que classificarão o próprio relatório como spam, esta é uma maneira de contornar a filtragem de conteúdo para correios gerados por esta máquina.
Adicione isso logo abaixo do tipo de serviço ‘pickup’:
-o content_filter=
-o receive_override_options=no_header_body_checksDeve ficar assim quando você terminar:
pickup fifo n - - 60 1 pickup
-o content_filter=
-o receive_override_options=no_header_body_checks2.2 Editar main.cf
Este é o arquivo de configuração principal do Postfix. Para mais informações, leia os comentários no arquivo main.cf, a documentação em /usr/local/src/postfix-2.3.3/README_FILES, ou o site do Postfix http://www.postfix.org/documentation.html.
Primeiro, precisamos fazer um backup do arquivo main.cf.
cp /etc/postfix/main.cf /etc/postfix/main.cf-origComo estamos configurando nosso filtro de spam para retransmitir todo o seu correio para outro servidor, usaremos o que o Postfix considera uma “classe de endereço de domínio de retransmissão”, que essencialmente significa que usaremos, dentre os mais de 300 parâmetros configuráveis no Postfix, um pequeno grupo de parâmetros que melhor atende ao nosso propósito. Esta classe de endereço é descrita aqui: http://www.postfix.org/ADDRESS_CLASS_README.html#relay_domain_class. Também estamos atuando como um MX primário para outro servidor, então, por favor, leia esta seção apropriada: http://www.postfix.org/STANDARD_CONFIGURATION_README.html#backup.
É comum no Postfix armazenar itens em tabelas de pesquisa. Vamos usar várias tabelas hash para armazenar dados que o Postfix usará. Uma vez que temos dados em texto simples nessas tabelas, usamos o comando postmap para criar arquivos binários (formato Berkeley DB) que o Postfix usará para recuperar os dados. Por exemplo, se você tiver um arquivo chamado “sampletext” e você postmap sampletext, um novo arquivo é criado “sampletext.db”. O Postfix recuperará dados de “sampletext.db”, não de “sampletext”. Existem mais de uma dúzia de outros tipos de arquivos de dados que o Postfix pode usar para armazenar dados. Tabelas hash são uma escolha apropriada para várias tabelas que usaremos, e pcre (Expressões Regulares Compatíveis com Perl) é apropriado para algumas tabelas que usaremos para armazenar dados de filtragem de conteúdo. Em sua forma mais simples, uma tabela hash é composta por 2 peças de dados, uma chave e um valor; tipicamente referidos como o par chave/valor. A chave e o valor são separados por espaço em branco (tipicamente um espaço ou tabulação). Os dados em uma tabela típica que usamos no Postfix teriam uma aparência semelhante a isto:
[[email protected]] OK
[[email protected]] OK
[[email protected]] OKLeitura sugerida: http://www.postfix.org/DATABASE_README.html.
Usaremos postconf para editar main.cf em vez de digitar os parâmetros no arquivo com vi. As aspas “” são necessárias como aparecem nas caixas de comando.
2.2.1 alias_maps
Precisamos apenas fazer uma correção na configuração padrão aqui:
postconf -e "alias_maps = hash:/etc/aliases"Crie o arquivo de aliases:
newaliasesVocê verá que agora há um arquivo aliases.db no diretório /etc/. É isso que o Postfix geralmente lê. Agora que você tem um arquivo de aliases adequado e porque vamos configurar nosso sistema para retransmitir todo o correio (nenhum correio será entregue localmente), o arquivo de aliases será ignorado pelo Postfix. Em vez disso, configuraremos virtual_alias_maps para redirecionamento de endereços. Outros programas podem não funcionar corretamente se o arquivo /etc/aliases estiver ausente, então não o remova.
2.2.2 myorigin
O nome de domínio que o correio criado nesta máquina parece vir. Por exemplo, se o cron enviar correio para “[[email protected]]”, parecerá vir de “[[email protected]]”.
postconf -e "myorigin = example.com"Obviamente, nos comandos acima e em todos os seguintes, substitua meus parâmetros de exemplo, como “example.com”, pelos seus próprios valores específicos.
2.2.3 myhostname
O nome de domínio totalmente qualificado (FQDN) da máquina que executa o sistema Postfix.
postconf -e "myhostname = sfa.example.com"2.2.4 mynetworks
Estas são as máquinas em que confio e que retransmitirão correio para qualquer destino. Geralmente, isso é definido para minha LAN, ou apenas uma, ou algumas servidores de correio internos confiáveis. Juntamente com relay_domains, este é um importante a ser configurado corretamente, caso contrário, você corre o risco de se tornar um “retransmissor aberto”. Em outras palavras, sua máquina poderia aceitar e encaminhar correio para domínios para os quais não tem negócios fazendo isso. Ser um retransmissor aberto é um problema sério e pode fazer com que você seja colocado em listas negras por várias listas anti-spam da Internet, entre outros problemas. Você pode especificar um único computador, vários computadores individuais ou qualquer computador em uma rede especificada. Você também pode excluir certos hosts em sua rede precedendo o endereço IP com um ponto de exclamação. Se você estiver lidando com vários servidores de correio internos e/ou quiser permitir que várias máquinas e/ou sub-redes retransmitam através deste servidor (cuidado!), basta adicioná-los a este parâmetro em formato CIDR e separar as redes assim:
postconf -e "mynetworks = 127.0.0.0/8, 222.222.222.222/24, 10.10.10.10/24"O acima permitirá que as máquinas nas redes 222.222.222.222/24 e 10.10.10.10/24 retransmitam correio smtp através desta máquina. O 127.0.0.0/8 está lá para permitir que o servidor local envie, você precisa pelo menos colocar este. Você também pode especificar o endereço IP de um único computador. Se você só conhece sua máscara de rede decimal pontuada (ou seja, 255.255.255.240) e precisa convertê-la para o formato CIDR, tente o http://www.wildpackets.com/products/free_utilities/ipsubnetcalc/overview. (Insira um endereço IP em sua rede, selecione a guia de informações da sub-rede, selecione sua máscara de sub-rede, sua rede é ID da Sub-rede/Bits da Máscara.) Ou simplesmente dê uma olhada em http://www.belchfire.net/webtools/cidr_conversion_table.html.
Se você não tiver redes ou computadores que retransmitam através deste servidor, execute este comando apenas com o endereço 127.0.0.0/8.
2.2.5 message_size_limit
Tamanho máximo de e-mail que o Postfix permitirá na “porta da frente”.
postconf -e "message_size_limit = 10485760"O acima permite e-mails de até 10MB, o valor está em bytes (1010241024). E-mails maiores que isso podem ser possivelmente ignorados pelo scanner antivírus (ClamAV). Você poderia aumentar isso se também configurar o ClamAV para escanear arquivos maiores que 10MB. Se você permitir mensagens maiores que 10MB, fique de olho na RAM.
2.2.6 local_transport
Retornar uma mensagem de erro para tentativas de entrega local.
postconf -e "local_transport = error:No local mail delivery"2.2.7 mydestination
Um mydestination vazio informa ao Postfix que esta máquina não é o destino final.
postconf -e "mydestination = "2.2.8 local_recipient_maps
Um local_recipient_maps vazio informa ao Postfix que não há caixas de correio locais.
postconf -e "local_recipient_maps = "2.2.9 virtual_alias_maps
Nosso filtro de spam deve ser capaz de receber correio para postmaster@seuIP. Relatos indicam que algumas coisas realmente esperam que essa capacidade exista. Também permitiremos correio para abuse@seuIP. Como não permitimos entrega de correio local, o correio endereçado ao endereço IP do nosso filtro de spam será rejeitado com uma mensagem de erro. Configurar virtual_alias_maps permite que e-mails para essas duas contas sejam encaminhados para um endereço interno. Certifique-se de que seu servidor Exchange esteja configurado para receber mensagens endereçadas a “root”, “postmaster” e “abuse”.
Configure uma referência para o arquivo virtual:
postconf -e "virtual_alias_maps = hash:/etc/postfix/virtual"Em seguida, edite o arquivo virtual:
vi /etc/postfix/virtualAdicione estas duas linhas ao topo do arquivo virtual:
postmaster [[email protected]]
abuse [[email protected]]Salve e saia do arquivo, em seguida, crie o arquivo binário que o Postfix usará:
postmap /etc/postfix/virtual2.2.10 relayhost
/etc/postfix/relayhost informa ao nosso filtro de spam como o e-mail de saída deve ser enviado. relayhost conterá o IP ou FQDN do servidor de e-mail que você deseja usar para enviar e-mails de saída. Em outras palavras, correio não local, correio destinado a domínios que não são os nossos. Não deve ser confundido com o arquivo /etc/postfix/transport, que é usado para rotear correio de entrada destinado a um de nossos domínios locais. Chegaremos ao transporte em um momento.
Se relayhost estiver em branco ou não configurado, então nosso filtro de spam será usado para esse propósito.
Nota: Os colchetes [] são necessários neste comando.postconf -e "relayhost = [mymailserver.example.com]"Opcionalmente, você pode configurar seu filtro de spam como seu servidor SMTP de saída, mas primeiro deve ter seu registro DNS reverso em vigor e, claro, seu registro “A” e “MX” para que outros servidores na Internet aceitem seu correio. Quando você reconfigurar seus clientes e outros servidores SMTP para usar nosso filtro de spam para seu correio de saída, esse correio passará pelo mesmo processo de escaneamento que seu correio de entrada (a menos que você encontre algumas alterações sofisticadas para evitar isso). Se esses ainda não estiverem em vigor, é muito útil configurar temporariamente relayhost com seu servidor de e-mail de saída atual e funcional.
Além disso, certifique-se de que o relayhost que você designar esteja configurado para aceitar e-mails desta máquina e QUE essa máquina não esteja usando ESTA máquina para SEU correio de saída (você pode dizer “loop”?).
2.2.11 relay_recipient_maps
Vamos construir uma tabela de cada usuário em cada domínio que aceitamos correio. Esta tabela será usada para rejeitar correio que é endereçado a usuários inexistentes em nossos domínios. NÃO ENTRE EM PÂNICO AINDA… Neste momento, vamos apenas configurar a estrutura da tabela. Se você estiver usando Exchange, existem HOWTOs disponíveis que descrevem a automação do processo de construção da tabela relay_recipients. Tem sido muito comum recentemente que spammers lancem ataques de dicionário; enviando milhares de mensagens para um domínio usando nomes de usuários fabricados. Nosso filtro de spam teria que processar cada uma dessas mensagens, a menos que você coloque usuários válidos na tabela relay_recipients. Não subestime a importância disso e certifique-se de que você não é o único em sua organização que sabe como fazer alterações neste arquivo. Voltaremos a automatizar isso depois que seu filtro de spam estiver funcional. Se você tiver um número gerenciável de usuários, insira-os manualmente.
Configure uma referência para um arquivo que criaremos para armazenar os dados:
postconf -e "relay_recipient_maps = hash:/etc/postfix/relay_recipients"Em seguida, edite relay_recipients:
vi /etc/postfix/relay_recipientsPor enquanto, vamos aceitar correio para todos os usuários em nossos domínios, então insira cada domínio que você aceita correio no seguinte formato:
@example.com OK
@example2.com OK
@example3.com OKEm seguida, crie o arquivo binário que o Postfix usará:
postmap /etc/postfix/relay_recipientsAs entradas acima são temporárias. Elas são curingas que permitem correio para seus domínios. Você DEVE remover as entradas acima em algum momento no futuro próximo e substituí-las por cada um dos endereços de e-mail válidos de seus destinatários. Quando você estiver pronto para inserir cada usuário individualmente no arquivo relay_recipients, primeiro removerá (ou comentará) os dados acima que permitem correio para todos os usuários no domínio e, em seguida, listará cada usuário individualmente na forma:
[[email protected]] OK
[[email protected]] OK
[[email protected]] OKNa verdade, neste arquivo específico, o valor “OK” listado após cada usuário não é usado para nada, mas algo deve estar lá porque uma tabela hash requer um valor após a chave. Note que, ao eliminar [[email protected]] deste arquivo, você pode impedir que usuários da Internet enviem correio para [[email protected]], mas não faça isso se alguns de seus próprios servidores precisarem usar esta máquina para enviar correio para root. Se você usar Exchange, aqui estão os HOWTOs. Mesmo que você não use Exchange, achei as informações sobre transferências de arquivos úteis. http://www2.origogeneris.com:4000/relay_recipients.html - http://www-personal.umich.edu/~malth/gaptuning/postfix/ - http://www.unixwiz.net/techtips/postfix-exchange-users.html - http://postfix.state-of-mind.de/patrick.koetter/mailrelay/ - http://doc.nettools.ru/Unix/Postfix&intserver/
2.2.12 transport_maps
Informa ao Postfix onde procurar um arquivo de transporte. Usamos o arquivo de transporte para informar ao Postfix onde encaminhar correio válido para nossos domínios. Configurar transporte é semelhante a configurar relay_recipients.
Crie uma referência a ele em main.cf:
postconf -e "transport_maps = hash:/etc/postfix/transport"Em seguida, edite o transporte:
vi /etc/postfix/transportAdicione 1 nova linha para cada domínio para o qual você lidará com correio, semelhante ao exemplo abaixo. O endereço IP é o de qualquer servidor que seja o destino final das mensagens endereçadas aos nossos domínios (nosso servidor Exchange). Não importa onde você coloque esses itens no arquivo, mas eu gosto de colocá-los no topo.
example1.com smtp:[10.10.10.100]
example2.com smtp:[10.10.10.101]
example3.com smtp:[10.10.10.102]INCLUA os colchetes nessas linhas!). Você também pode usar o nome do host FQDN em vez de um endereço IP (ou seja, smtp:[exchange1.example.com]).
Agora, para criar o arquivo binário que o Postfix usará:
postmap /etc/postfix/transport2.2.13 relay_domains
Quais domínios de destino (e subdomínios deles) este sistema retransmitirá correio. Você deve listar aqui APENAS domínios pelos quais você é responsável por aceitar correio. Além de permitir que o correio seja retransmitido para esses domínios, essa configuração também implica que não retransmitimos correio para domínios não listados aqui e, portanto, este é um componente crítico para evitar que o filtro de spam se torne um retransmissor aberto.
postconf -e "relay_domains = hash:/etc/postfix/relay_domains"Edite relay_domains:
vi /etc/postfix/relay_domainsAdicione 1 nova linha para cada domínio para o qual você lidará com correio, semelhante ao exemplo abaixo:
example1.com OK
example2.com OK
example3.com OKEste arquivo atualmente tem um formato muito semelhante ao relay_recipients, não confunda os dois. Este arquivo não pode ter ‘@’ na frente do nome do domínio. Apenas pensei em mencionar, algumas pessoas muito inteligentes já fizeram isso…
Em seguida, crie o arquivo binário que o Postfix usará:
postmap /etc/postfix/relay_domainsNOTA: relay_recipients, relay_domains e transport são arquivos com os quais você se tornará muito íntimo. Cada vez que precisar adicionar usuários a um domínio, adicionar um domínio ou remover um domínio da sua lista, precisará ir a todos esses três arquivos e editá-los. Após a edição, execute um postmap em cada um e reinicie o Postfix com 'postfix reload'. Na última página, há uma parte de 'Manutenção' que contém um README que pode ser copiado para o seu filtro de spam como uma referência rápida para algumas tarefas comuns.2.2.14 recipient_delimiter
Se seu servidor SMTP/POP3/IMAP atual estiver configurado para usar extensões de endereço (por exemplo, [[email protected]]), então recipient_delimiter deve ser definido para corresponder ao delimitador que você está usando atualmente para separar o nome do usuário da extensão do endereço. Isso não tem nada a ver com a vírgula que você está usando para separar várias pessoas para quem você envia e-mail ([[email protected]], [[email protected]], [[email protected]]) usando seu cliente de e-mail (MUA). Você pode estar familiarizado com isso se usar o GMail. Se você tiver uma conta do GMail, pode enviar e-mail para ela neste formato, por exemplo, [[email protected]] e configurar um Filtro no GMail para marcar tudo com a ‘testtag’ no endereço para e pular a caixa de entrada. Recentemente, um uso comum para esse recurso é usar essas tags ao se inscrever em qualquer serviço da web e, em seguida, filtrar de acordo com a tag. De qualquer forma, se você tiver, saberá que a tem; se não souber do que estou falando, siga as instruções “Eu não uso delimitadores de destinatário”.
3 Configurações típicas - Escolha uma.
- Eu não uso delimitadores de destinatário:
postconf -e "recipient_delimiter = "- Eu atualmente uso o sinal de mais:
postconf -e "recipient_delimiter = +"- Eu atualmente uso o sinal de menos:
postconf -e "recipient_delimiter = -"2.2.15 Configurações de NAT/Proxy (Opcional)
Se (e somente se) o endereço IP que você apresenta ao mundo não é o endereço IP do seu filtro de spam (você está configurado para rodar atrás de um firewall NAT ou um servidor proxy), vá em frente e adicione as seguintes duas linhas ao main.cf, depois descomente e configure proxy_interfaces (60.50.40.30 representa o endereço IP público):
# Especifique seu endereço EXTERNO NAT/proxy aqui.
#proxy_interfaces = 60.50.40.30Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.