Implementação de Postfix.

O postfix é um MTA(Mail transfer Agent), utilizado para encaminhamento SMTP(Simple Mail transfer protocol) entre servidores, em algumas distribuições é utilizado no servidor para encaminhamento de email entre usuários. CentOS é uma distribuição que utiliza o postfix default, não me recordo bem porém o Debian acredito que usa o sendmail, todos eles são MTA’s.

Nesse paper será abordado a instalação do postfix com virtual domains, configuração do procmailrc e dovecot.

Instalação:

$ sudo yum install postfix
Configuração:

O arquivo principla de configuração do postfix é /etc/postfix/main.cf. Abaixo segue as principais opções do arquivo:

  • myorigin: Dominio que apareça nos emails enviados desse servidor.
  • mydestination: Especifica para quais domínios as mensagens recebidas devem ser entregues localmente e não encaminhadas para outro servidor. Se este servidor for o servidor de email para todo o domínio, o valor para esta opção deve ser:
    
    mydestination = $myhostname localhost.$mydomain localhost $mydomain
    
  • mynetworks: O Servidor aceitará emails enviados a partir de clientes dentro da sub-rede aqui especificada. O valor padrão são todas as sub-redes às quais o servidor pertence.
  • mynetworks_style: Usado no lugar de mynetworks, esta opção define se o padrão é aceitar emails de todas as máquinas na sub-rede local(mynetworks_style = subnet), apenas da máquina local(mynetworks_style=host), ou para clientes dentro da classe IP do servidor (mynetworks_style = class).
  • relay_domains: Define quais destinatários será realizado o relay(direcionamento) dos emails com base em regras de endereços confiáveis e não confiáveis(Fora das redes autorizadas). O padrão é aceitar todos emails cujos destinos estejam definidos em mydestination
  • relayhost: Especifica um host default para encaminhar um email quando nenhum match ocorreu na tabela de transport
  • mailbox_size_limit -> Tamanho máximo de mailbox
  • message_size_limit -> Tamanho máximo de mensagem
  • inet_interfaces-> Interfaces que irá dar bind:
    
    inet_interfaces = $myhostname, localhost
    
Dominios Virtuais

Defina os dominios virtuais no arquivo /etc/postfix/virtual:


vim /etc/postfix/virtual

E polule com as seguintes informações:


cat /etc/postfix/virtual
joao@linuxdomain.net joao
joao@linuxlocal.net  quorra

Altere o /etc/mailname e configure os dominios:


cat /etc/mailname
linuxdomain.net
linuxlocal.net

No arquivo /etc/postfix/main.cf você pode definir os dominios virtuais da seguinte forma:


virtual_alias_maps = hash:/etc/postfix/virtual

Note que existe um hash antes de definir o arquivo de configuração, isso significa que é um binário, para gerar o arquivo no formato certo, utilize o comando postmap.


postmap /etc/postfix/virtual

O comando acima vai gerar o arquivo /etc/postfix/virtual.db

Por ultimo, configure o arquivo /etc/hosts apontado para o seu endereço IPv4 os dominios definidos em /etc/mailname:


10.10.10.50 linuxdomain.net linuxlocal.net
Alias/Forward

Definindo um alias, altere o arquivo /etc/aliases


#O formado é: destinatario: usuario_local
postfix:	root
netdump:	root
ldap:		root
squid:		root
ntp:		root
mysql:		root
desktop:	root
rpcuser:	root
rpc:		root
nfsnobody:	root

Então execute newaliases para atualizar. Esse comando invoca o comando sendmail -bi, que atualiza a tabela de aliases.

A configuração do .forward não é muito diferente, basta criar no seu diretório local o arquivo ~/.forward com o nome do usuário que receberá o email, a difenreça é basicamente que o próprio usuário pode configurar o redirecionamento.


cat ~/.forward
quorra@linuxlocal.net

Realizado a configuração é necessário dar o restart no serviço:


$ sudo systemctl restart postfix
Testando o Serviço

Utilizando o comando sendmail.postfix para encaminhar um email. Lembro que quando eu estudei isso a primeira vez era atráves do comando mail que era mantido como comando legado, agora não sei porquẽ no centOS está como sendmail.postfix, mas ok:


[root@cobaia-one /]# echo " teste" | sendmail.postfix  root

Verificando a caixa de entrada do usuário root. As caixas de entrada se encontram no diretório /var/mail/


[root@cobaia-one /]# cat /var/mail/root 
From root@cobaia-one.novalocal  Sat Jan 20 19:14:58 2018
Return-Path: 
X-Original-To: root
Delivered-To: root@cobaia-one.novalocal
Received: by cobaia-one.novalocal (Postfix, from userid 0)
	id 1024DC43442; Sat, 20 Jan 2018 19:14:54 -0200 (-02)
From: "(Cron Daemon)" 
To: root@cobaia-one.novalocal
Subject: Cron  /usr/lib64/sa/sa1 1 1
Content-Type: text/plain; charset=UTF-8
Auto-Submitted: auto-generated
Precedence: bulk
X-Cron-Env: 
X-Cron-Env: 
X-Cron-Env: 
X-Cron-Env: 
X-Cron-Env: 
X-Cron-Env: 
X-Cron-Env: 
X-Cron-Env: 
Message-Id: 
Date: Sat, 20 Jan 2018 19:10:03 -0200 (-02)

Cannot write data to system activity file: No space left on device

From root@cobaia-one.novalocal  Sat Jan 20 23:53:02 2018
Return-Path: 
X-Original-To: root
Delivered-To: root@cobaia-one.novalocal
Received: by cobaia-one.novalocal (Postfix, from userid 0)
	id CE9A513C7B10; Sat, 20 Jan 2018 23:53:01 -0200 (-02)
From: "(Cron Daemon)" 
To: root@cobaia-one.novalocal
Subject: Cron  /usr/lib64/sa/sa2 -A
Content-Type: text/plain; charset=UTF-8
Auto-Submitted: auto-generated
Precedence: bulk
X-Cron-Env: 
X-Cron-Env: 
X-Cron-Env: 
X-Cron-Env: 
X-Cron-Env: 
X-Cron-Env: 
X-Cron-Env: 
X-Cron-Env: 
Message-Id: 
Date: Sat, 20 Jan 2018 23:53:01 -0200 (-02)

End of system activity file unexpected

From root@cobaia-one.novalocal  Sat Jan 27 22:39:52 2018
Return-Path: 
X-Original-To: root
Delivered-To: root@cobaia-one.novalocal
Received: by cobaia-one.novalocal (Postfix, from userid 0)
	id 2F732C37A42; Sat, 27 Jan 2018 22:39:52 -0200 (-02)
Message-Id: 
Date: Sat, 27 Jan 2018 22:39:52 -0200 (-02)
From: root@cobaia-one.novalocal (root)

 teste

From root@cobaia-one.novalocal  Sat Jan 27 22:42:13 2018
Return-Path: 
X-Original-To: root
Delivered-To: root@cobaia-one.novalocal
Received: by cobaia-one.novalocal (Postfix, from userid 0)
	id 0D11AC37A43; Sat, 27 Jan 2018 22:42:13 -0200 (-02)
Message-Id: 
Date: Sat, 27 Jan 2018 22:42:13 -0200 (-02)
From: root@cobaia-one.novalocal (root)

 teste
Alterando de mailbox para maildir:

No arquivo /etc/postfix/main.cf


home_mailbox = Maildir/

É necessário criar o diretório e definir as permissões para que o daemon possa escrever nele:


mkdir Maildir
chown postfix.postfix Maildir -R 

Para ler os e-mails configurados no maildir é necessário o client mutt


~$ mutt -f Maildir
Ferramentas do Postfix:

postconf -> Traz uma lista das features. tudo que está configurado.

Alterando configurações no arquivo main.cf utilizando postconf


postconf -e "virtual_maps = hash:/etc/postfix/virtual"
Monitorando e controlando o postfix:

Fila de mensagem: /var/spool/mail/[diretorio pessoal]
Visualizando a fila de emails:


postqueue -p
mailq -p 
sendmail -dp ou bp

Os comandos acima exibem a fila de emails.

As mensagens podem estar com os seguintes status:

  • incoming -> Fila de emails que estão entrando a partir da rede;
  • active -> Fila de email que foram abertas pelo gerenciador de entrega.
  • deferred -> Fila de mensagens que não conseguiram ser entregues na primeira tentativa. ( Entrada chamada de bouncing)
  • corrupt -> Os arquivos da fila não conseguem ser lidos ou estão danificados.
  • hold -> Mensagems colocadas em espera pelo administrador.

Comandos para gerenciar a própria fila de mensagens:

  • postqueue -f -> reenvia as mensagens que estão em bounced. F de flush
  • postqueue -i -> Força e entrega da mensagem.
  • postqueue -s domain -> Força mensagens para um dominio especifico.
  • postsuper -r message_id -> reenvia a mensagem da ID especificada.
  • postsuper -h message_id -> tira do hold;

Ao inves de usar message_id, pode-se utilizar ALL

Configuração de TLS no Postfix

Altere as configurações para as diretivas abaixo:


smtpd_use_tls = yes
smtpd_tls_auth_only = yes
smtpd_tls_cert_file = /etc/ssl/cert/mail.pem
smtpd_tls_key_file = /etc/ssl/private/mail.key

Configuração de log do TLS:


smtpd_tls_loglevel = 0

Onde os possíveis valores para a diretiva anterior são:

  • 0 -> Desabilita os logs.
  • 1 -> Loga apenas o sumario da mensagem na conclusão do handshake TLS, sem logs para client.
  • 2 -> Habilita os logs na negociação do TLS
  • 3 -> habilita dumps hexadecimais e ASCII do processo de negociação do TLS
  • 4 -> Habiltia dumps hexademais e ASCII de uma transmissão completa depois do STARTTLS
Segurança Postfix

Desabilitando disable_vrfy_command:


[root@dns-slave postfix]# postconf  | grep vrfy
disable_vrfy_command = no
postscreen_disable_vrfy_command = $disable_vrfy_command

Para desabilitar, troque de no para yes:


postconf -e "disable_vrfy_command = yes"

Restarte o serviço.

Logs:

/var/log/mail.info

Configuração do Procmail

Procmail contém muitas features de linguagens de proposito geral, contudo não existem loops “while” ou “for”.

O Procmail funciona no recebimento de uma unica mensagem de email de um MTA(sendmail/postfix/exim) e para cada mensagem que chegar terá um processo do procmail executando caso existam muitas mensagens chegando mais rápido que o procmail pode processar.

O processo inicia com o procmail abrindo o arquivo ~/.procmailrc e então passa as propriedades da mensagem até que a mensagem seja “delivered” ou “disposed of”. Uma vez que isso ocorra, o procmail fecha o arquivo, remove o lock e dá exit.

Caso o procmail chegue ao final do arquivo sem conseguir um statuus de “disposed”, então a mensagem é colocada no arquivo de spool.

Um arquivo do procmail geralmente consiste em três partes:

  • Tipo -> inicia com a string :0 talvez com algumas flags
  • Condições -> Geralmente utiliza expressẽos regurales.
  • Action -> o que fazer caso a condição seja alcançada.

Algumas possíveis flags são:

  • H -> Processa o Header
  • c -> Faz uma cópia carbono.
  • B -> Processa o body
  • D -> Utiliza-se de case sensitive, o default é não usar casesensitive

Ações que podem ser tomadas:

  • ! Encaminha a mensagem para um endereço específico
  • | Encaminha a saída padrão para um programa.
  • { } Inicia o próximo bloco de processamento.

Um exemplo:


:0
* ^From.*someone.i.dont.like@somewhere.org
/dev/null

Outro exemplo:


:0:  # forward jokes to my wossamatta u. account
* ^From.*bob
* ^Subject:.*(joke|funny)
{
  :0 c
  ! rocky@wossamatta.edu

  :0
  | lpr -Pacsps
}

Exemplo com flags:


:0H ^Subject:.*Todos{
  :0 c
  ! user@linuxlocal.net
}

Criando um filtro que verifica o corpo da mensagem. Uma vez no corpo da mensagem, procurará pela palavra filename= seguida de extensões como vbs,exe ou bat


:0 B:
*.filename=.*.(exe|vbs|bat)
! andre
Fontes:

https://pt.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol
https://pt.wikipedia.org/wiki/MTA
https://www.digitalocean.com/community/tutorials/how-to-install-postfix-on-centos-6
https://tecadmin.net/install-and-configure-postfix-on-centos-redhat/

http://www.postfix.org/BASIC_CONFIGURATION_README.html
http://www.tldp.org/LDP/LG/issue14/procmail.html

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.