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
