Instituto Superior de Engenharia do Porto
Departamento de Engenharia Informática
Disciplina: Projecto
Coordenador: Dr. António Cardoso Costa
930501 Marcolino Alberto Sousa e Sá
Setembro 2003
Índice
Agradecimentos
Lista de Abreviaturas
Introdução......................................................................................................................... 1
1
Breve história dos sistemas de correio electrónico................................................... 3
1.1
Troca de mensagens numa mainframe ............................................................. 3
1.2
Sistema de mensagens multi-mainframe .......................................................... 4
1.3
Sistema de mensagens em ambiente UNIX...................................................... 5
1.4
Programas MTA para ambientes UNIX ........................................................... 6
1.4.1
Sendmail ................................................................................................... 6
1.4.2
Postfix....................................................................................................... 7
1.4.3
Qmail ........................................................................................................ 8
1.4.4
Smail......................................................................................................... 8
1.4.5
Exim ......................................................................................................... 8
1.5
Programas MUA............................................................................................... 9
1.5.1
O programa mail....................................................................................... 9
1.5.2
O programa pine ..................................................................................... 10
1.5.3
Programas para X Windows ................................................................... 10
1.6
Sistemas de correio em Redes Locais............................................................. 10
1.7
Protocolos utilizados pelos sistemas de mail.................................................. 12
1.7.1
MTA’s - Mail Transfer Agent Protocols ............................................... 12
1.7.1.1
SMTP – Simple Mail Transfer Protocol............................................. 12
1.7.1.2
ESMTP – Extended Simple Mail Transfer Protocol .......................... 13
1.7.1.3
LMTP – Local Mail Transport Protocol............................................. 14
1.7.2
2
Protocolos MUA..................................................................................... 14
1.7.2.1
POP – Post Office Protocol ................................................................ 14
1.7.2.2
IMAP – Interactive Mail Access Protocol.......................................... 15
Introdução ao Postfix.............................................................................................. 17
2.1
Arquitectura do Postfix................................................................................... 17
2.1.1
Programas de processamento de mensagens .......................................... 18
2.1.2
Queues utilizadas pelo Postfix................................................................ 19
i
3
2.1.3
Utilitários ................................................................................................ 20
2.1.4
Ficheiros de configuração....................................................................... 21
2.1.5
Lookup Tables ........................................................................................ 21
2.1.6
Compatibilidade com o Sendmail .......................................................... 22
2.2
Comunicação entre processos......................................................................... 22
2.3
Gestão de filas (queues).................................................................................. 23
2.4
Segurança........................................................................................................ 25
Instalação e Configuração do Postfix ..................................................................... 29
3.1
Sistemas compatíveis...................................................................................... 29
3.2
Requisitos ....................................................................................................... 30
3.2.1
Packages necessários.............................................................................. 30
3.2.2
Configurações Adicionais ...................................................................... 31
3.2.2.1
Importância do DNS no Postfix.......................................................... 32
3.2.2.2
Configuração de um cliente DNS....................................................... 33
3.3
Instalação a partir de um ficheiro RPM.......................................................... 34
3.3.1
3.4
Executar Postfix pela primeira vez......................................................... 38
Instalação a partir de código fonte.................................................................. 41
3.4.1
Instalação dos executáveis...................................................................... 43
3.5
Instalando o Postfix num ambiente chroot ..................................................... 43
3.6
Programas utilitários do Postfix ..................................................................... 44
3.6.1
Verificar as queues - mailq..................................................................... 45
3.6.2
Iniciar e finalizar o Postfix – postfix ...................................................... 45
3.6.3
Gestão de Alias - postalias...................................................................... 46
3.6.4
Visualizar mensagens - postcat............................................................... 47
3.6.5
Gestão dos ficheiros de configuração - postconf.................................... 47
3.6.6
Envio de mensagens para os programas do Postfix - postkick............... 49
3.6.7
Bloquear ficheiros - postlock.................................................................. 50
3.6.8
Tratamento de mensagens de log - postlog ............................................ 50
3.6.9
Gestão das tabela de lookup - postmap................................................... 50
3.6.10
Gestão das queues - postsuper ................................................................ 51
3.7
Iniciar o Postfix como Serviço ....................................................................... 51
3.8
Comandos úteis .............................................................................................. 52
ii
4
5
O Ficheiro Master.cf............................................................................................... 57
4.1
O programa master ......................................................................................... 57
4.2
Sintaxe do ficheiro master.cf .......................................................................... 57
4.2.1
Tipos de serviço...................................................................................... 59
4.2.2
Tipos de transporte ................................................................................. 60
4.2.3
Private..................................................................................................... 60
4.2.4
Unprivileged ........................................................................................... 61
4.2.5
Chroot ..................................................................................................... 62
4.2.6
Wakeup................................................................................................... 62
4.2.7
Maxprocess............................................................................................. 62
4.2.8
Commands .............................................................................................. 62
Ficheiro Main.cf ..................................................................................................... 65
5.1
6
Ficheiro main.cf.............................................................................................. 65
Lookup Tables ........................................................................................................ 77
6.1
Base de Dados Indexadas ............................................................................... 79
6.2
Ficheiros texto de expressões regulares.......................................................... 80
6.3
Base de dados externas ................................................................................... 80
6.3.1
Utilizando NIS........................................................................................ 81
6.3.2
Utilizando MySQL ................................................................................. 81
6.3.3
Utilizando LDAP.................................................................................... 82
6.4
7
Tabelas utilizadas pelo Postfix ....................................................................... 84
6.4.1
Tabela access .......................................................................................... 84
6.4.2
Tabela aliases.......................................................................................... 86
6.4.3
Tabela canonical ..................................................................................... 87
6.4.4
Tabela relocated...................................................................................... 87
6.4.5
Tabela transport ...................................................................................... 88
6.4.6
Tabela virtual.......................................................................................... 89
Migrando Sendmail para o Postfix ......................................................................... 93
7.1
Ficheiros e Directórios utilizados pelo Sendmail ........................................... 93
7.1.1
O programa executável Sendmail........................................................... 93
7.1.2
O ficheiro de configuração sendmail.cf.................................................. 94
7.1.3
O sistema de queues no Sendmail .......................................................... 94
iii
7.1.4
Como verificar o conteúdo da queue...................................................... 94
7.1.5
Como criar Alias..................................................................................... 95
7.1.5.1
7.1.6
Como calcular estatísticas ...................................................................... 96
7.1.6.1
Como reiniciar as estatísticas ............................................................. 96
7.1.6.2
Armazenando as estatísticas ............................................................... 96
7.1.6.3
Configurar o Sendmail para guardar estatísticas ................................ 96
7.1.7
Ficheiro de Ajuda no Sendmail .............................................................. 96
7.1.8
Reenvio de correio – forwarding ............................................................ 96
7.2
8
Configurar Postfix para utilizar ficheiros do Sendmail .................................. 97
7.2.1
Utilização das caixas de correio existentes............................................. 98
7.2.2
O Formato Maildir ................................................................................. 99
7.2.3
Utilização dos Aliases do Sendmail ....................................................... 99
7.2.4
Utilização de ficheiros .forward no Postfix .......................................... 100
7.2.5
Utilização do ficheiro sendmail.cw e de virtusertable ......................... 101
7.2.6
Processar Mensagens a Enviar ............................................................. 102
Postfix num ISP .................................................................................................... 103
8.1
Características de um Servidor de correio de um ISP .................................. 103
8.1.1
Domínios Virtuais ................................................................................ 104
8.1.2
Selective Relaying ................................................................................ 105
8.2
Configuração de domínios virtuais............................................................... 107
8.3
Configuração do DNS para Dominios Virtuais............................................ 107
8.4
Configuração do Postfix para suporte a Domínios Virtuais ......................... 108
8.4.1
Configuração para receber correio de um domínio completo .............. 108
8.4.2
Configuração para receber correio de utilizadores individualmente .... 109
8.4.3
Configuração para receber correio utilizando o ficheiro transport....... 110
8.5
9
Base de dados de Alias ....................................................................... 95
Selective Relaying no Postfix ....................................................................... 111
8.5.1
Valores de rejeição ............................................................................... 112
8.5.2
Valores de permissão............................................................................ 113
8.5.3
Utilizando loockup tables para controlar o acesso de clientes ............. 113
Sistemas Externos vs Postfix................................................................................ 115
9.1
MySQL ......................................................................................................... 115
iv
9.2
OpenLDAP ................................................................................................... 115
9.3
Majordomo ................................................................................................... 116
9.4
SqWebMail................................................................................................... 116
Futuro do Correio Electrónico...................................................................................... 119
Postfix – uma visão pessoal.......................................................................................... 123
Bibliografia................................................................................................................... 125
Onde encontrar mais informação ?........................................................................... 126
v
Índice de Figuras
Figura 1.1 - Troca de mensagens numa mainframe.......................................................... 3
Figura 1.2 - Sistema de armazenamento de mensagens numa mainframe ....................... 4
Figura 1.3 - Sistema de mensagens multi-mainframe ...................................................... 5
Figura 1.4 - Sistema de mail em ambiente UNIX ............................................................ 6
Figura 1.5 - Exemplo de uma comunicação SMTP........................................................ 13
Figura 1.6 - Exemplo de uma comunicação POP3......................................................... 15
Figura 1.7 - Exemplo de uma ligação IMAP.................................................................. 16
Figura 2.1 - Gestão de correio no Postfix....................................................................... 23
Figura 3.1 - Exemplo da aplicação Gnome RPM........................................................... 34
Figura 3.2 - Instalar programas utilizando o Gnome RPM ............................................ 35
Figura 3.3 - Pesquisa de um programa utilizando o kpackage ....................................... 35
Figura 3.4 - Listagem dos ficheiros instalados utilizando o kpackage........................... 36
Figura 3.5 - Listagem dos ficheiros instalados do Postfix............................................. 37
Figura 3.6 - Controlo do inicio de serviços em Lina Recheai ........................................ 52
Figura 6.1- Procedimento para criar lookup tables......................................................... 79
Figura 6.2 - Fluxo de informação entre o Postfix e um servidor MySQL...................... 82
Figura 6.3 - Fluxo de informação entre o Postfix e um servidor LDAP ........................ 83
Figura 6.4 - Restrição de acesso ao correio electrónico ................................................. 84
Figura 6.5 - Protocolos de comunicação utilizados no transporte.................................. 88
Figura 6.6 - Exemplo de domínios virtuais .................................................................... 90
Figura 8.1- Exemplo de Domínios Virtuais.................................................................. 105
Figura 8.2 - Exemplo de Open Relaying ...................................................................... 105
Figura 8.3 - Exemplo da aplicação de selective relaying ............................................. 106
Figura 8.4 - Exemplo da interacção de um domínio na Internet .................................. 108
Índice de Listagens
Listagem 4.1 - Exemplo de um ficheiro master.cf ......................................................... 59
Listagem 4.2 - Exemplo dos directórios private e public ............................................... 61
Listagem 7.1- Exemplo de um ficheiro sendmail.hf ...................................................... 96
Listagem 7.2 - Exemplo de um ficheiro virtusertable.................................................. 101
vi
Listagem 7.3 - Exemplo de um ficherio virtual no Postfix .......................................... 101
Índice de Tabelas
Tabela 2.1 - Programas de processamento de mensagens .............................................. 19
Tabela 2.2 - Exemplo de um ficheiro master.cf ............................................................. 19
Tabela 2.3 - Queues utilizadas pelo Postfix .................................................................. 20
Tabela 2.4 - Utilitários do Postfix ................................................................................. 20
Tabela 2.5 - Ficheiros de configuração .......................................................................... 21
Tabela 2.6 - Ficheiros utilizados palo Postfix (Loockup Tables) ................................... 22
Tabela 3.1 - Directórios onde o Postfix instala ficheiros ............................................... 38
Tabela 3.2 - Comandos do Postfix ................................................................................. 46
Tabela 3.3 - Parâmetros do postalias .............................................................................. 46
Tabela 3.4 - Tipos de base de dados utilizadas nos Alias............................................... 46
Tabela 3.5 - Opções de pesquisa do postconf................................................................. 48
Tabela 3.6 - Opções de edição do postconf .................................................................... 48
Tabela 3.7 - Opções de edição do postlog ...................................................................... 50
Tabela 3.8 - Opções de edição do postmap .................................................................... 51
Tabela 4.1 - Parâmetros do ficheiro master.cf............................................................... 58
Tabela 4.2 - Tipos de serviço ......................................................................................... 60
Tabela 5.1- Estrutura de directórios ............................................................................... 66
Tabela 5.2 - Owner do processo e das queues............................................................... 66
Tabela 5.3 - Nome do Servidor na Internet e Nome de Domínio................................... 67
Tabela 5.4 - Envio de Correio ........................................................................................ 67
Tabela 5.5 - Recepção de Correio .................................................................................. 68
Tabela 5.6 - Ligação á Internet ou a Intranets ................................................................ 68
Tabela 5.7 - Controlo das caixas de correio locais ......................................................... 68
Tabela 5.8 - Redefinição dos Endereços de Correio ...................................................... 69
Tabela 5.9 - Trabalhar com Virtual Domains................................................................. 70
Tabela 5.10 - Protocolo de Transporte ........................................................................... 70
Tabela 5.11 - Base de Dados de Alias ............................................................................ 71
Tabela 5.12 - Extensões aos Endereços de Correio........................................................ 71
Tabela 5.13 - Entrega de Mensagens.............................................................................. 72
vii
Tabela 5.14 - Tratamento de SPAM............................................................................... 73
Tabela 5.15 - Serviço ETRN .......................................................................................... 73
Tabela 5.16 - Criação de Banner .................................................................................... 73
Tabela 5.17 - Entrega de Múltiplas Mensagens ............................................................. 74
Tabela 5.18 - Controlo do Debug ................................................................................... 74
Tabela 5.19 - Estabelecer Limites nas Mensagens ......................................................... 75
Tabela 6.1 - Lookup Tables no Postfix .......................................................................... 78
Tabela 6.2 - Tabela vs Programa .................................................................................... 78
Tabela 6.3 - Parâmetros LDAP....................................................................................... 84
Tabela 6.4- Tipos de formatos no ficheiro Access ......................................................... 85
Tabela 6.5 - Resultados a devolver ao servidor SMTP remoto ...................................... 85
Tabela 6.6 - Parâmetros smtpd que utilizam tabelas access ........................................... 86
Tabela 6.7- Tipos de domínios virtuais .......................................................................... 90
Tabela 7.1 -Exemplo de um ficheiro alias ..................................................................... 95
Tabela 7.2- Exemplo de um ficheiro .forward................................................................ 97
Tabela 8.1- Valores de rejeição .................................................................................... 113
viii
Agradecimentos
Queria deixar aqui o meu agradecimento, em particular ao meu coordenador de
projecto, Dr. António Cardoso Costa, pela paciência que sempre demonstrou na leitura
de sucessivos capítulos e suas revisões, bem como importantes macro comentários que
definiram decisivamente as linhas de orientação deste trabalho. Não queria deixar de
agradecer também a todos aqueles que, anonimamente ou não de alguma forma me
ajudaram em ideias, dúvidas ou comentários. A todos eles o meu muito obrigado.
Lista de Abreviaturas
AMTP - Authenticated Mail Transfer Protocol
DNS - Domain Name System
BSMTP – Batched Simple Mail Transfer Protocol
ESMTP - Extended Simple Mail Transfer Protocol
FCCN – Fundação de Cálculo Cientifico Nacional
FQDN – Full Qualified Domain Name
GCC – Compilador C da GNU
IANA - Internet Assigned Numbers Authority
IMAP - Interactive Mail Access Protocol
IMSP - Internet Message Support Protocol
IP - Internet Protocol
ISP - Internet Service Provider
LDAP - Lightweight Directory Access Protocol
LMTP - Local Mail Transport Protocol
MDA - Mail Delivery Agent
MIME - Multipurpose Internet Mail Extensions
MPC - Mail Policy Code
MTA - Mail Transfer Agent
MUA - Mail User Agent
NDS - Netware Directory Services
NIS – Network Information System
PC - Personal Computer
PCRE - Perl Compatible Regular Expression
PME – Pequenas e Médias Empresas
POP - Post Office Protocol
SASL – Simple Authentication and Security Layer
SMTP - Simple Mail Transporte Protocol
SSL – Secure Sockets Layer
TCP – Transmission Control Protocol
TLS - Transport Layer Security
UCE – Unsolicited Commercial E-mail
UUCP – Unix to Unix Copy Protocol
VPN – Virtual Private Network
Introdução
O uso do e-mail cresceu significativamente nos últimos anos. O que foi antes
considerado um luxo, é agora uma necessidade, sobretudo num ambiente corporativo.
Actualmente, a importância do e-mail tem vindo também a crescer nos ambientes
domésticos, levando os ISP's a criar serviços de e-mail para os utilizadores domésticos.
O crescimento exponencial da utilização do e-mail, quer no domínio empresarial
quer no domínio doméstico, fez com que as necessidades de hardware para suporte do
serviço de mail, também crescessem vertiginosamente, sendo banal em empresas de
dimensão considerável ver servidores de grande capacidade de processamento e
armazenamento exclusivamente dedicados ao serviço de mail. À medida que o número
de utilizadores cresce, para além do hardware, há necessidade da existência de software
servidor e cliente que responda a esse incremento de número de utilizadores.
A crescente existência e complexidade dos sistemas de correio electrónico,
contribuiu decisivamente para o desenvolvimento dos protocolos de mail. O Simple
Mail Transporte Protocol desenhou-se para transferir de forma eficiente, correio
electrónico entre computadores remotos. O Post Office Protocol e o Interactive Mail
Access Protocol criaram-se para permitir que utilizadores remotos, relativamente ao seu
servidor de correio, podessem aceder à sua caixa de correio.
Este trabalho tem como objectivo dar a conhecer um dos sistemas de correio, que
nos últimos anos tem ganho grande popularidade no mundo UNIX e que pretende ser
um dos softwares mais utilizados, sendo por isso, uma forte alternativa ao tão conhecido
Sendmail. É o Postfix.
1
1
Breve história dos sistemas de correio electrónico
Este trabalho, não tem como objectivo dar a conhecer a história, a forma como os
servidores de correio electrónico cresceram mas, o conhecimento da sua evolução
histórica permite uma melhor compreensão relativamente ao servidor Postfix, como
software de mail.
1.1
Troca de mensagens numa mainframe
No início, os serviços de e-mail não eram nada comparados com os actuais. Eram
bastante mais simples. Este serviço foi inicialmente disponibilizado nas mainframes e
tentava-se responder à conveniência de termos uma forma simples de trocar mensagens
entre os utilizadores da mainframe. A figura 1.1 mostra a forma como era processada
esta troca de mensagens numa mainframe através dos terminais dos utilizadores.
Mainframe
Software de troca mensagem
Utilizador B
Utilizador A
Figura 1.1 - Troca de mensagens numa mainframe
Os sistemas UNIX, à medida que foram sendo utilizados cada vez mais em
detrimento das mainframes, levou a que os sistemas de e-mail também se tornassem
mais populares. Um dos principais contributos do UNIX no mundo dos softwares de e3
Breve história dos sistemas de correio electrónico
mail, foi o facto destes programas surgirem em módulos, ao contrário de apenas um
único programa que executava todas as tarefas no sistema de e-mail. Cada módulo ou
programa, efectuava pequenas funcionalidades do sistema. A figura 1.2 mostra esta
filosofia, inicialmente implementada nos ambientes UNIX.
Mainframe
Base Dados das
mensagens
Software de troca mensagem
Utilizador B
Utilizador A
Figura 1.2 - Sistema de armazenamento de mensagens numa mainframe
A grande vantagem dos sistemas de armazenamento era a possibilidade das
mensagens serem armazenadas quando os utilizadores não tinham sessão iniciada
(login) podendo posteriormente e após iniciarem sessão, ser enviada para o respectivo
utilizador. A grande desvantagem deste sistema refere-se ao facto de apenas
possibilitarem o armazenamento de mensagens de texto. Nesta altura, ainda não se
podia anexar ficheiros.
1.2
Sistema de mensagens multi-mainframe
À medida que as mainframes evoluíam, também evoluíam os sistemas de
transferência de mensagens. Inicialmente a transferência de mensagens era feita através
de protocolos proprietários, mas para possibilitar a comunicação entre plataformas de
fabricantes, levou à necessidade de estabelecer um padrão nos protocolos a utilizar.
Como já vimos, num sistema com uma única mainframe só era necessário o sistema de
4
Breve história dos sistemas de correio electrónico
mensagens conhecer o nome do utilizador destino da mensagem. Num sistema multimainframe passou a ser necessário, para além do nome do utilizador, utilizar o nome da
máquina destino até porque, em máquinas diferentes podem existir nomes de
utilizadores iguais. A figura 1.3 mostra esta interacção.
Mainframe 1
BD e-mail
Mainframe 2
BD e-mail
e-mail
Utilizador A
e-mail
Utilizador B
Figura 1.3 - Sistema de mensagens multi-mainframe
1.3
Sistema de mensagens em ambiente UNIX
O aparecimento dos sistemas UNIX’s promoveu profundas alterações, quer ao
nível de infra-estrutura e recursos, quer ao nível dos sistemas de e-mail. O UNIX trouxe
uma nova filosofia no desenvolvimento dos sistemas de mail. Em vez de centralizar
todas as funcionalidades num único programa, passou-se a ter vários programas, cada
qual responsável por uma parte de toda a funcionalidade do sistema. A figura 1.4 mostra
o carácter modular nos ambientes UNIX.
A maior parte das funcionalidades deste sistema reside no MDA. É sua
responsabilidade entregar o correio aos utilizadores locais no sistema. Caso a mensagem
seja para um utilizador numa outra máquina, então o MDA passa a mensagem para o
modulo MTA. Por seu lado, compete ao MTA determinar como se irá conectar à
máquina remota bem como o envio da mensagem. É também responsável por receber
correio de outros sistemas. Nalguns sistemas, não existe esta separação entre estes dois
módulos. Caso a mensagem seja para um utilizador local, então a mensagem é
processada no MDA, caso contrário passa para o MTA, mas sempre num único
programa – isto é, estes dois módulos estão integrados num único programa. Outra das
partes envolvidas neste sistema de mail é o MUA, sendo responsável por possibilitar a
5
Breve história dos sistemas de correio electrónico
utilizadores remotos lerem o seu correio. Os “clientes” MUA desenvolveram-se
bastante com o passar do tempo, passando por exemplo de simples interface texto, para
um amigável ambiente gráfico, permitindo ainda aos utilizadores organizarem o seu
correio.
Servidor Unix
Mail Delivery Agent (MDA)
Mail Transfer Agent (MTA)
Base Dados email
MTA
Remotos
Mail User Agent (MUA)
Figura 1.4 - Sistema de mail em ambiente UNIX
1.4
Programas MTA para ambientes UNIX
Neste ponto, apresenta-se os MTA’s mais conhecidos actualmente e para
ambientes UNIX.
1.4.1
Sendmail
O Sendmail é um dos mais populares MTA’s no mundo UNIX. A grande
popularidade do Sendmail teve origem essencialmente na sua grande versatilidade.
Muitas das características introduzidas pelo Sendmail, tornaram-se padrão nos sistemas
de mail: virtual domains, message forwarding, user alias, mailing lists, e
masquerading. Os novos sistemas de mail incluindo o Postfix, são comparados com as
do Sendmail. Veremos mais adiante que o Postfix foi desenvolvido também para ser
cem porcento compatível com o Sendmail, sendo o impacto da migração mínimo quanto
possível.
O sistema de mail pode ser implementado para diversas finalidades: grandes redes
corporativas; interligação com ISP’s, ou mesmo apenas como gateway para outros
6
Breve história dos sistemas de correio electrónico
sistema de mail. Alterando apenas algumas linhas de configuração pode-se alterar as
características bem como o comportamento do Sendmail. Para além desta versatilidade
na alteração do comportamento do Sendmail, pode-se ainda incluir regras que actuam
como filtros. Estes filtros poderão ser utilizados, por exemplo, para evitar a entrada de
determinadas mensagens ou cuja proveniência é indesejada.
Contudo, versatilidade não é sinónimo de facilidade, pelo contrário. À medida que
o Sendmail se tornava mais versátil, mais complicada se tornava a gestão do mesmo,
acima de tudo para administradores sem experiência ou na implementação deste tipo de
sistemas.
1.4.2
Postfix
O Postfix foi desenvolvido com o objectivo de ser uma alternativa aos MTA’s
existentes, ser mais seguro e facilmente implementável num sistema já existente, por
exemplo Sendmail. A sua grande diferença comparado ao Sendmail, é a sua
modularidade. O Postfix é composto por pequenos programas que implementam
determinadas funcionalidades e no conjunto formando um todo. O objectivo desta
modularidade é tornar as tarefas (implementadas por cada pequeno programa) mais
rápidas do que são num único programa monolítico. A modularidade, para além da
eficiência, também permite aumentar a segurança. De facto este é um dos grandes
objectivos e factor diferenciador relativamente aos outros MTA’s existentes no
mercado. Devido à arquitectura do Postfix, permite que, mesmo que um intruso consiga
penetrar num determinado modulo, a segurança não fica contudo comprometida. Estes
aspectos de segurança, serão desenvolvidos adiante mais em detalhe.
Simetricamente, e uma vez mais comparando com o Sendmail, o Postfix
apresenta-se como um programa bastante simples de implementar e utilizar. Em vez de
um único ficheiro compilado, o Postfix utiliza vários ficheiros texto, cujos parâmetros e
respectivos valores descrevem facilmente a funcionalidade que implementam. Por outro
lado, o administrador só terá que configurar um número mínimo de parâmetros para que
rapidamente tenha o sistema a funcionar.
7
Breve história dos sistemas de correio electrónico
1.4.3
Qmail
Este servidor assemelha-se ao Postfix na sua modularidade. Esta modularidade e
juntamente com o facto de cada modulo (pequeno programa que implementa
determinada funcionalidade do servidor) ser executado com diferente userid (tal como o
Postfix) garantem-lhe também a fama de um dos mais seguros programas de mail, tal
como o Postfix. À medida que as mensagens vão entrando, são armazenadas numa
queue. O Qmail implementa um conjunto de subdirectórios e estados, garantindo que
não existe perda de nenhuma mensagem caso, por exemplo, determinado subprograma
deixe de responder. Adicionalmente, o Qmail pode ser configurado para utilizar uma
queue especial que minimiza a possibilidade da caixa de correio do utilizador ficar
corrompida.
1.4.4
Smail
O Smail é mais um dos populares programas MTA’s existentes para plataformas
UNIX. Este é mais um dos muitos projectos da GNU (<http://www.gnu.org>). O Smail
implementa muitas das funcionalidades do Sendmail, sendo a sua principal
característica a facilidade de configuração - pouco mais de vinte linhas numa
configuração standard.
Uma das características do Smail, é a capacidade de fazer reencaminhamento
(forward) de mensagens sem utilizar nenhuma queue. O Sendmail, Postfix e o Qmail,
todos utilizam uma queue para armazenar as mensagens a serem entregues. Num
ambiente com pouco tráfego de correio esta é uma característica importante, uma vez
que o Smail tenta enviar o correio imediatamente, caso não consiga então irá ser
armazenado numa queue temporariamente até ser entregue. Contudo, num ambiente
com muito tráfego de correio, esta vantagem rapidamente se converte numa grande
desvantagem, levando a um crescente “overhead” na entrega de mensagens. No entanto,
o Smail também pode ser configurado para colocar primeiramente as mensagens numa
queue antes de as enviar.
1.4.5
Exim
Este programa é mantido pela Universidade de Cambridge. A sua popularidade
alcançada nos anos recentes, deve-se à capacidade de na sua configuração se poder
8
Breve história dos sistemas de correio electrónico
restringir facilmente a acção dos hackers e spammers. Os hackers são aqueles que
tentam furar um sistema, utilizando muitas vezes bugs existentes nas muitas linhas de
código dos programas. Os spammers são aqueles que “bombardeiam” os servidores de
correio com mensagens que não tem outra finalidade senão encher as caixas de correio.
Á medida que os sites indesejados são detectados, facilmente se configura o sistema
para restringir a entrada, por exemplo de correio vindo desses locais.
1.5
Programas MUA
Nos sistemas UNIX, o modelo de caixas de correio assenta na premissa uma caixa
de correio local para cada utilizador. Os programas MUA permitem aceder e visualizar
as mensagens contidas nessas caixas de correio. Seguidamente apresentam-se alguns
exemplos de MUA’s mais populares em ambientes UNIX.
1.5.1
O programa mail
Este é o mais popular MUA existente e também o mais simples. Permite aos
utilizadores ler e enviar mensagens para utilizadores locais e remotos. A sua interface é
texto e a invocação do programa é feito com o comando mail, e a sua utilização é feita
com um conjunto de comandos (sistema de prompt) que são interpretados pelo
programa e que corresponde à próxima acção que ele deve executar.
A localização das caixas de correio dos utilizadores pode variar de sistema para
sistema. Nos ambientes Linux, localizam-se em /var/spool/mail e o nome dessas caixas,
são normalmente o nome do respectivo utilizador nessa máquina. Por exemplo, para o
utilizador user_a a sua caixa de correio seria /var/spool/mail/user_a. À medida que
chegam mensagens para o utilizador, elas vão sendo adicionadas no fim do ficheiro. As
mensagem que não são removidas da caixa de correio são automaticamente movidas
para um ficheiro especial existente na home dir do utilizador, e poderão ser
posteriormente consultadas, invocando o paramentro –f na execução do comando mail.
Para uma completa informação acerca da utilização deste programa, pode-se fazer man
mail em qualquer sistema UNIX, onde se encontram os manuais completos (supondo
que estejam instalados).
9
Breve história dos sistemas de correio electrónico
1.5.2
O programa pine
À medida que os sistemas operativos evoluíam, e no caso particular os UNIX’s,
os programas de consulta de mail também se tornavam mais agradáveis de utilizar. O
pine, aliado á possibilidade de posicionar caracteres no ecrã, permitia a criação de
menus. Desta forma a acção a executar pelo mail, não era feita com a invocação de
comandos, como no programa mail mas com o recurso a menus ou ainda teclas de
atalho (shortcuts). Todas as mensagens são colocadas num ficheiro com o nome INBOX
no homedir do utilizador. Permite a criação de pastas para melhor organizar o correio,
por exemplo armazena correio lido. Permite ainda, criar e manter um livro de endereços
de correio electrónico, facilitando bastante o utilizador.
1.5.3
Programas para X Windows
A inclusão de um ambiente gráfico nas plataformas UNIX permitiu, tal com o
posicionamento de caracteres num terminal ascii, um grande desenvolvimento das
aplicações. A este desenvolvimento não ficou alheio aos programas de mail. O Linux
utiliza o software Xfree86 para suporte de programas X Windows, executados numa
sessão local ou mesmo remotamente. Desta forma, programas como o kmail (para
interfaces gráficas KDE) permitem ao utilizador ler e enviar mensagens utilizando para
o efeito um ambiente amigável e fácil de utilizar.
1.6
Sistemas de correio em Redes Locais
Na década de 80, assistiu-se a uma revolução sem paralelo com a introdução dos
computadores pessoais, alterando completamente em muitos casos a filosofia de
tratamento da informação. Rapidamente os terminais que se ligavam a mainframes
foram dando lugar a PC’s. Surgiu então uma nova forma de gerir a informação, e
consequentemente as novas soluções de correio adoptaram novas formas de organizar e
gerir o correio.
Programas tais como Microsoft Exchange, Novell GroupWise e o Lotus Notes da
IBM, utilizam uma área comum de disco para armazenar as caixas de correio dos
utilizadores. Em alguns casos, essas caixas de correio estão agrupadas num único
ficheiro. Para aceder ás mensagens os MUA’s utilizam muitas das vezes protocolos
proprietários, como no caso do Lotus Domino em que tem um programa MUA
10
Breve história dos sistemas de correio electrónico
especifico (Lotus Notes) para aceder ás caixas de correio. É fundamental referir também
que, cada vez mais os programas de correio estão integrados com outras
funcionalidades, como por exemplo tratamento de bases de dados (ex: Lotus Notes) ou
ainda no caso da Microsoft, o Exchange está integrado com o Active Directory. Esta
integração, independentemente de novas facilidades incorporadas, trazem também
novos problemas, por exemplo ao nível de disponibilidade do serviço uma vez que, um
MTA passa a estar dependente de outros programas. Por outro lado, muitas das vezes
requerem máquinas dedicadas, aumentando consideravelmente os custos de
implementação bem como de administração.
A existência de protocolos proprietários, condiciona o trabalho dos servidores de
correio. Tem que verificar se o servidor destino implementa o mesmo protocolo
proprietário, e caso não se verifique, “traduzir” as mensagens num formato standard
para poder ser utilizado um protocolo standard.
A existência de uma única base de dados para armazenar todo o correio de todos
utilizadores, leva a existência de ficheiros bastante grandes cuja manipulação se torna
complicada – a facilidade de manipular 100 MB não é a mesma que 1 GB. Por outro
lado, caso a base de dados fique corrompida, a sua recuperação requer muitas das vezes
a desactivação do serviço para poder restaurar a base de dados com o respectivo
utilitário facultado pelo fornecedor do software, e nas situações em que não é possível
recuperar, novos problemas surgem. Nestas situações, os programas que utilizam
ficheiros isolados para cada utilizador tem grande vantagem, caso uma base de dados
fique corrompida, apenas essa poderá ficar temporariamente inacessível, evitando que
todos os utilizadores fiquem sem acesso. Os sistemas de correio proprietários apesar de
serem bastante populares, são também muito caros. Em alternativa, o administrador
pode utilizar sistemas operativos Linux ou FreeBSD com programas “open source”
como o Postfix, que oferecem as mesmas funcionalidades que esses sistemas
proprietários.
Em suma, estas e outras questões serão levantadas ao longo deste documento que,
de alguma forma poderão ajudar o administrador de sistema a escolher o sistema de
correio ideal.
11
Breve história dos sistemas de correio electrónico
1.7
Protocolos utilizados pelos sistemas de mail
Neste ponto, e não pretendendo centrar o assunto tratado neste trabalho com este
tema, é também conveniente compreender os diversos protocolos utilizados pelos
sistemas de mail, até porque serão muitas vezes referidos ao longo das próximas
páginas.
Diversos protocolos foram concebidos para permitir a troca de mensagens entre
servidores e para permitir que os clientes possam ler as mensagens que estão no
servidor.
1.7.1
MTA’s - Mail Transfer Agent Protocols
Os MTA’s servem para transferir as mensagens para servidores de mail remotos.
Para que isto seja possível, um MTA deverá ser capaz de comunicar com outro MTA
para transferir a mensagem de correio bem como a informação necessária para
identificar o utilizador remoto. Os MTA’s utilizam os seguintes protocolos para
transferir mensagens e informações entre clientes remotos.
1.7.1.1
SMTP – Simple Mail Transfer Protocol
Foi o primeiro mecanismo utilizado para transferir mensagens, via Internet, entre
servidores MTA. Qualquer máquina conectada à Internet pode utilizar SMTP para
enviar mensagens de correio para qualquer outra máquina.
O SMTP utiliza um conjunto de comandos simples que permitem estabelecer a
ligação entre duas máquinas, a transferência de informação bem como das respectivas
mensagens. Um comando consiste numa palavra reservada (comando SMTP) seguido
de informação adicional, como por exemplo MAIL FROM: [email protected],
permitindo ao servidor que recebe o comando saber a máquina origem bem como qual o
utilizador responsável pela mensagem. Cada comando é enviado através da rede (por
exemplo a Internet) em clear text, ou seja sem qualquer encriptação. Após cada
comando, o servidor receptor envia um replay informando desta forma o servidor
emissor da boa recepção do último comando. A figura 1.5 exemplifica este mecanismo.
Compete ao servidor receptor, decidir o que fazer com a mensagem recebida.
12
Breve história dos sistemas de correio electrónico
Para identificar as máquinas remotas, o SMTP utiliza o DNS. O DNS é, na sua
forma básica, uma base de dados distribuída na Internet que permite relacionar nomes
de maquinas com o respectivo endereço IP.
Sistema X
Sistema Y
Utilizador A
Utilizador B
SMTP
MTA
Ex: Postfix
MTA
Ex: Postfix
LAN
MUA
User B
MUA
User A
Figura 1.5 - Exemplo de uma comunicação SMTP
1.7.1.2
ESMTP – Extended Simple Mail Transfer Protocol
Á medida que o SMTP ganhava popularidade, também se detectava lacunas na
sua implementação. Era necessário um outro protocolo com outras capacidades.
Em vez de se criar um novo protocolo, decidiu-se melhorar as funcionalidades do
já existente SMTP. Foi assim que surgiu o ESMTP, que não é mais que o seu antecessor
SMTP, depois de adicionado novos comandos para permitir novas funcionalidades.
Uma importante funcionalidade acrescentada foi o facto de permitir aos MTA’s
reverterem a ligação SMTP. O SMTP foi concebido para permitir apenas uma ligação
entre MTA’s. Isto significa que, se o MTA X tiver mensagens para enviar para o MTA
Y, inicia a sessão SMTP, transfere as mensagens e fecha a sessão. Caso o servidor Y
também tenha mensagens para enviar para o MTA X, terá que iniciar uma sessão, não
podendo por isso aproveitar a sessão já iniciada pelo MTA X. A nova funcionalidade
permite durante uma sessão a um MTA receptor, mudar a sua função para emissor, e
naturalmente o inverso no caso do outro MTA. Esta filosofia permite ainda, ajudar a
evitar que um MTA se ligue a uma máquina falsa.
13
Breve história dos sistemas de correio electrónico
1.7.1.3
LMTP – Local Mail Transport Protocol
Como referido no ponto anterior, a evolução dos sistemas de correio necessitava
de novos protocolos ou novas funcionalidades nos já existentes. Outra limitação do
SMTP, é relativo ao envio de uma mensagem para vários destinatários. Por exemplo,
enviando uma mensagem para vários utilizadores de uma máquina apenas uma
confirmação é enviada de volta para o SMTP cliente por parte do servidor SMTP.
Assim o SMTP cliente não tem qualquer garantia no sucesso da entrega a todos os
utilizadores. Assim nasce o LMTP, permitindo uma confirmação para cada destinatário.
Em caso de insucesso da entrega de uma mensagem, o servidor LMTP informa o cliente
LMTP e com isso, pode fazer outra tentativa de entrega posterior.
O LMTP foi inicialmente concebido para redes locais (daí a palavra local), no
entanto foi adaptado para suportar redes remotas. O Postfix implementa este protocolo,
quer servidor quer cliente.
1.7.2
Protocolos MUA
Estes protocolos permitem aos utilizadores acederem ás suas mensagens. Num
sistema UNIX com apenas um utilizador, não existe problema. O utilizador faz login na
máquina e consulta as mensagens. Contudo, num sistema multi-utilizador várias pessoas
poderão querer consultar o correio em simultâneo, daí a necessidade da existência de
um mecanismo que permita dar resposta a este problema. É desta forma que surgem
protocolos que são incorporados nos MUA existentes na máquina local do utilizador e
que comunicam com o servidor de correio, possibilitando ao utilizador identificar-se no
sistema e manipular as suas mensagens. Seguidamente são abordados sumariamente
estes protocolos.
1.7.2.1
POP – Post Office Protocol
O POP é o mais simples de todos os MUA’s. Actualmente disponível até à versão
3, daí conhecido por POP3. Os programas MUA’s utilizam este protocolo para aceder à
caixa de correio do utilizador. A figura 1.6 ilustra esta comunicação.
Quando um MUA utiliza o POP3 para se ligar a
um servidor de correio
(obviamente terá que implementar também este protocolo), todas as mensagens são
14
Breve história dos sistemas de correio electrónico
enviadas do servidor para o cliente. Opcionalmente, o MUA poderá ou não, remover as
mensagens no servidor.
Sistema X
Utilizador A
Serviço
POP3
LAN
Cliente POP3
Utilizador A
Figura 1.6 - Exemplo de uma comunicação POP3
1.7.2.2
IMAP – Interactive Mail Access Protocol
Outro protocolo também utilizado pelos MUA’s é o IMAP, presentemente na
versão 4 revisão 1. Este protocolo permite aos MUA’s manipular remotamente
mensagens de correio que se localizam em pastas no servidor de correio. Ao contrário
do POP, este protocolo não transfere as mensagens para a máquina onde o utilizador se
encontra (conectado ao servidor de correio via MUA). A transferência efectuada é
apenas temporária e para efeito de visualização. Todas as mensagens residem por isso
no servidor, e não são removidas até que sejam apagadas pelo utilizador. A figura 1.7
mostra um exemplo de funcionamento. Ao contrário o POP3 pode à medida que
transfere as mensagens, removê-las no servidor. Como referido, com o IMAP a gestão
do correio é centralizada, evitando por isso a proliferação de múltiplas copias de caixas
de correio em várias máquinas. No entanto, a falta de espaço no servidor poderá ser uma
realidade, embora actualmente existam mecanismos para contornar esta situação,
através de políticas de controlo do limite de espaço gasto.
15
Breve história dos sistemas de correio electrónico
Sistema X
Utilizador A
Serviço
IMAP
LAN
Cliente IMAP
Utilizador A
Figura 1.7 - Exemplo de uma ligação IMAP
16
2
Introdução ao Postfix
Agora que conhecemos um pouco da história dos servidores de e-mail, bem como
os protocolos utilizados, focar-se-à nas próximas páginas o tema central deste livro – o
Postfix.
Inicialmente foi desenvolvido na IBM com o nome de Vmailer. No entanto,
devido ao facto de se ter verificado que existia no mercado uma marca registada com
um nome parecido, passou-se a designar Postfix. O Postfix foi desenvolvido por Wietse
Venema nos finais da década de 90, para ser uma alternativa aos sistemas de mail
existentes para ambientes UNIX, sobre tudo o Sendmail.
O Postfix rapidamente tornou-se num dos mais populares softwares de mail
disponíveis para ambientes UNIX. É mais um entre um leque enorme de projectos
freeware.
O Postfix tem como objectivo ser rápido, de fácil administração e seguro e,
simultaneamente, ser compatível com o Sendmail devido à grande implantação deste
servidor de mail. Tal como referido na sua página principal, <http://www.postfix.org>,
pretende competir directamente com o Qmail.
2.1
Arquitectura do Postfix
Alguns servidores de mail, tal como o Sendmail, são implementados num único
programa que executa todas as tarefas de um servidor deste tipo. Certamente que um
único programa facilita a troca de dados entre as diferentes partes do sistema. No
entanto, um único programa permite mais facilmente a existência de erros graves.
Outros servidores tais como o Qmail utiliza uma hierarquia de programas que
executam outros programas numa ordem preestabelecida e que depois de utilizados, são
descarregados da memória. Esta filosofia permite um melhor isolamento, apesar de
aumentar o overhead na execução desses programas (processos) bem como na
comunicação entre esses processos. Este overhead pode contudo ser atenuado se as
tarefas inerentes num servidor de mail, forem devidamente organizadas e repartidas.
O Postfix é baseado num conjunto de processos, semi-residentes e cooperantes
entre si, que executam tarefas específicas uns para os outros sem nenhuma relação
hierárquica. Para além do desejado isolamento, permite que certos serviços possam ser
17
Introdução ao Postfix
“reutilizados” por módulos (processos) diferentes no sistema. Esta filosofia de
funcionamento não é exclusiva do Postfix, no entanto é pouco comum.
Este sistema de mail é implementado através de um programa principal que por
sua vez executa outros processos para executarem determinadas tarefas, tais como
enviar ou receber correio. Estes processos são criados até um determinado limite
configurável, bem como reutilizável determinado número de vezes e por determinado
tempo. Este processo, reduz drasticamente o overhead na criação de processos ao
mesmo tempo que promove a separação entre os diferentes processos.
O Postfix pretende ser alternativa ao Sendmail. Devido a este objectivo
implícito, o seu desenvolvimento teve em atenção a infraestrutura existente. De facto, o
Sendmail é dos mais populares servidores de mail, quer pela sua antiguidade quer pelos
múltiplos sistemas UNIX onde pode operar. Contudo muitas partes do Postfix, tais
como o local delivery program são facilmente trocadas editando determinado ficheiro
de sistema operativo (normalmente conhecido por /etc/inetd.conf). A ideia é facilmente
substituir o local delivery program por um outro programa que possa ser executado com
direitos mínimos em processos cujo dono, possa ser um utilizador que não faça login
nessa máquina e até que nem sequer conta de login tenha. Com esta filosofia de
funcionamento, facilmente se pode configurar numa máquina quais os serviços
disponíveis ela terá.
2.1.1
Programas de processamento de mensagens
O Postfix utiliza um programa, chamado master que controla toda a actividade de
um servidor de mail, mas não executa todas as tarefas. Para determinadas tarefas,
existem outros pequenos programas, estes sim invocados então pelo master. A tabela
2.1 apresenta os vários programas que compõem o Postfix e sua funcionalidade.
Programa
bounce
cleanup
error
local
pickup
pipe
Descrição
Cria mensagens de log de mensagens que não podem ser entregues
e reenvia-as para o emissor.
Processa os cabeçalhos das mensagens de entrada e coloca as
mensagens na incomming queue.
Processa pedidos vindo do qmgr
Faz a entrega das mensagens destinadas a utilizadores locais
Aguarda a chegada de mensagens á maildrop queue e envia-as
para o programa cleanup.
Faz o reenvio de mensagens do qmgr para programas externos.
18
Introdução ao Postfix
postdrop
qmgr
showq
smtp
smtpd
trivial-rewrite
Move as mensagens de chegada para a maildrop queue quando
essa queue não tem permissões de escrita para um utilizador
normal.
Processa as mensagens que estão no incoming queue. Determina
onde e como as mensagens deverão ser entregues. Executa os
respectivos programas para procederem a essa entrega.
Mostra o estado actual das queue’s.
Cliente SMTP que faz o reenvio de mensagens para servidores de
mail externos, utilizando o protocolo SMTP.
Servidor SMTP que recebe mensagens provenientes de servidores
de mail externos, utilizando o protocolo SMTP.
Este programa recebe pedidos do cleanup para verificar se os
endereços de email estão no formato standard. É também utilizado
pelo qmgr para “resolver” endereços de máquinas remotas.
Tabela 2.1 - Programas de processamento de mensagens
A utilização destes programas podem ser controlados no ficheiro de configuração do
Postfix master.cf . A tabela 2.2, ilustra um exemplo desta configuração.
# ============================================================
# service type private unpriv chroot wakeup maxproc command+args
(yes) (never)
(50)
(yes) (yes)
# ============================================================
smtp
inet
n
n
smtpd
pickup fifo
n
n
n
60
1
pickup
cleanup unix
n
0
cleanup
qmgr
fifo
n
n
300
1
qmgr
rewrite unix
n
trivial-rewrite
bounce unix
n
0
bounce
defer
unix
n
0
bounce
smtp
unix
n
smtp
showq unix
n
n
showq
error
unix
n
error
local
unix
n
n
local
Tabela 2.2 - Exemplo de um ficheiro master.cf
2.1.2
Queues utilizadas pelo Postfix
Ao contrário de outros MTA’s, o Postfix utiliza vários ficheiros (queues) para
tratamento das mensagens à medida que estas vão sendo processadas pelos vários
programas que compõem o Postfix. A tabela 2.3 descreve essas queues.
19
Introdução ao Postfix
Queue
maildrop
Descrição
Contém as novas mensagens a serem processadas vindas de
utilizadores locais.
Contém as novas mensagens recebidas de servidores remotos,
bem como mensagens já processadas de utilizadores locais.
Contém as mensagens que estão prontas para entrega.
Contém as mensagens cuja primeira tentativa de entrega
falhou. Novas tentativas de entrega serão feitas.
Mensagens entregues a utilizadores locais.
incoming
active
deferred
mail
Tabela 2.3 - Queues utilizadas pelo Postfix
Caso o servidor de mail deixe de se executar, por exemplo quando se desliga o
servidor (shutdown), quando este for reiniciado o Postfix retomará o processamento da
mensagem na queue onde foi deixada na última movimentação que essa mensagem
sofreu.
2.1.3
Utilitários
O Postfix contempla um conjunto de programas utilitários que são utilizados por
outros programas do Postfix, além de poderem ser utilizados por utilizadores locais. A
tabela 2.4 contém estes utilitários.
Programa
mailq
postalias
postcat
postconf
postfix
postkick
postlock
postlog
postmap
postsuper
sendmail
Descrição
Pesquisa mensagens nas queues e mostra o resultado.
Este comando permite criar, alterar ou fazer pesquisas à base de
dados de alias.
Mostra o conteúdo das queues.
Permite visualizar e alterar o conteúdo do ficheiro de configuração
main.cf.
Permite iniciar, parar ou reiniciar o servidor de correio.
Permite enviar pedidos para executar determinados serviços do
Postfix.
Permite bloquear determinado ficheiro do Postfix, e executa
determinado comando.
Envia mensagens de log (traçagem) para o sistema.
Este comando permite criar bem como fazer pesquisas a tabelas
lock up.
Permite fazer manutenção a determinado directório de queue’s.
Fornece uma interface compativel com o Sendmail a programas
para enviar mensagens para a maildrop.
Tabela 2.4 - Utilitários do Postfix
20
Introdução ao Postfix
2.1.4
Ficheiros de configuração
Os ficheiros de configuração permitem definir regras e procedimentos que o
Postfix deverá ter em conta quando processa as mensagens. Ao contrário de alguns
servidores de correio, o Postfix permite reconfigurar-se sem que se tenha que reiniciar o
serviço. O Postfix é composto por três ficheiros de configuração e normalmente
encontram-se em /etc/postfix. A tabela 2.5 mostra os ficheiros de configuração
utilizados pelo Postfix.
Ficheiro
install.cf
main.cf
master.cf
Descrição
Contém os parâmetros utilizados aquando da instalação do
Postfix.
Contém parâmetros de controlo de operações, utilizado pelo
Postfix durante o processamento de mensagens.
Contém parâmetros utilizados pelo programa master do Postfix,
utilizados para controlo da execução de outros programas.
Tabela 2.5 - Ficheiros de configuração
Todos os parâmetros especificados ou especificáveis no main.cf tem um valor
“por defeito”. Caso determinado parâmetro não seja especificado, ele terá esse valor por
defeito, caso contrário assumirá esse novo valor. Estes valores “por defeito” estão
definidos no próprio programa do Postfix.
2.1.5
Lookup Tables
Para além dos ficheiros de configuração, o Postfix utiliza um conjunto de tabelas
que podem ser criadas pelo administrador do sistema. Cada tabela, contém parâmetros
que controlam a entrega do correio no sistema. A tabela 2.6 contém estas tabelas que
podem ser utilizadas pelo Postfix.
Ficheiro
access
aliases
canonical
relocated
Descrição
Faz o mapeamento de SMTP’s remotos numa perspectiva de
controlo de acesso, para efeitos de segurança.
Faz o mapeamento de caixas alternativas para as caixas de correio
locais (mailbox’s).
Faz o mapeamento de nomes alternativos de caixas de correio para
as caixas de correio reais (devido ao cabeçalho das mensagens)
Permite renomear uma caixa de correio antiga para uma nova.
21
Introdução ao Postfix
transport
Faz o mapeamento entre máquinas remotas e os métodos que
poderão ser utilizados pelo servidor para processar o envio e
recepção de mensagens.
Faz o mapeamento entre recipientes e domínios para as caixas de
correio locais, para entrega
virtual
Tabela 2.6 - Ficheiros utilizados palo Postfix (Loockup Tables)
Estes ficheiros são editados e alterados utilizando para o efeito qualquer editor de
texto (por exemplo o “vi”). Depois de criados, invoca-se o comando postmap para
converter estes ficheiros de texto noutros de formato binário. Estes últimos sim,
utilizados pelo Postfix. O formato binário permite uma pesquisa mais rápida que em
formato texto.
2.1.6
Compatibilidade com o Sendmail
Uma das chaves para o sucesso do Postfix, é o facto de permitir uma fácil
transição do Sendmail, até porque é na actualidade e de longe o MTA mais utilizado.
Para que esta “migração” tenha o menor impacto possível, o Postfix implementa as
funcionalidades do Sendmail, nomeadamente:
• Utiliza também o ficheiro .forward existente na $HOME do utilizador
• Utiliza as mesmas tabelas de aliases
• Utiliza os directórios /var/spool/mail ou /var/mail
• Domínios virtuais e suporte de e-mail para várias máquinas
• Mail relay bem como mail relay blocking
• Suporte para todos os MUA’s standards para UNIX
2.2
Comunicação entre processos
Como já foi referido, o Postfix é constituído por vários programas. Por motivos
de privacidade, estes processos comunicam através de sockets ou FIFO’s do UNIX, os
quais estão num directório protegido. Independentemente desta segurança, o Postfix não
coloca nestes sockets as mensagens recebidas, mas sim por exemplo ficheiros de
queues, lista de recipientes ou informação de estado. Portanto, a informação passada é
bastante limitada. Uma vez que uma mensagem é gravada para o ficheiro, ela fica aí até
ser lida pelo mail delivery program. Paralelamente, antes de enviar qualquer recibo, o
Postfix executa o flush e fsync() de toda a informação bem como verifica os system call
22
Introdução ao Postfix
para verificar a ocorrência de erros. Esta última metodologia não é nova no Postfix,
sendo utilizada noutras situações.
2.3
Gestão de filas (queues)
Como acima referido, o Postfix é modular. Este conceito não se aplica apenas aos
binários que constituem o programa, mas também à própria arquitectura de gestão de
correio – as queues. O Postfix tem quatro queues principais: maildrop, incoming, active
e deferred. O correio local é colocado no maildrop, posteriormente sendo colocado na
queue incoming após algumas modificações. Esta queue é utilizada para o correio que
está a chegar ou para as mensagens que ainda não foram processadas pelo gestor de
queues. A queue active é utilizada para colocar as mensagens cuja entrega está a ser
processada. Esta queue é limitada em termos de tamanho. Caso determinada mensagem
não possa ser entregue ao destinatário, vai para a queue deferred. Para melhor
compreendermos esta filosofia de funcionamento, podemos consultar a figura 2.1.
Figura 2.1 - Gestão de correio no Postfix
Legenda:
Elipses amarelas – programas de mail
Rectângulos amarelos – queues ou ficheiros
Rectângulos azuis – ficheiros de configuração
Rectângulo picotado – estes processos são controlados pelo master daemon
(processo principal do Postfx). Os dados aqui transaccionados são também
administrados exclusivamente pelo Postfx.
23
Introdução ao Postfix
Esta figura mostra os principais componentes do Postfix bem como a forma como
eles interagem uns com os outros. O queue manager apenas retêm em memória
informação acerca da queue active. Sempre que a active queue tenha espaço disponível,
o queue manager permite a entrada de uma mensagem proveniente da incoming queue e
outra da deferred queue, permitindo desta forma que o novo correio também entre no
circuito de distribuição mesmo que exista muito correio no deferred queue. Para além
destas queues o Postfix reserva ainda duas outras queues especiais: a hold queue e a
corrupt queue. A primeira destina-se ás mensagens que não foi possível entregar.
Permanecem aqui até à intervenção do administrador com o comando postsuper. A
corrupt queue destina-se aos ficheiros de mensagens danificados e, em vez de os
eliminar, o Postfix coloca-os aqui para que possam ser administrados manualmente pelo
administrador.
Como referido anteriormente, um dos objectivos do Postfix é a rapidez na
entrega de mensagens. No entanto, seria bastante desagradável, quando num servidor
destino por qualquer razão o servidor de correio não responda, o servidor emissor ficar
continuamente a tentar enviar mensagens. Isto poderia dificultar outras comunicações
com outros serviços existentes nesse servidor destino. Para evitar esta situação, o
Postfix implementa algumas restrições quando estabelece comunicação com o
destinatário, efectuando no máximo duas tentativas de ligação simultâneas. À medida
que o emissor (Postfix) vai tendo sucesso nas entregas, vai aumentando o número de
entregas simultâneas (limite configurável) até o servidor destino não ser capaz de
processar todas as entregas – posteriormente o emissor poderá diminuir o número de
entregas. Este processo é baseado no TCP Slow Start Algorithm. Aparte deste
estratagema, a estratégia de entrega de correio no Postfix é baseada no algoritmo roundrobin. O queue manager ordena as mensagens por destino existente na queue active e
posteriormente implementa o round-robin sobre todas as queues destino. Quando a
quantidade de mensagens que entram é superior à capacidade do Postfix processar a sua
entrega, o Postfix passa a favorecer a entrega de mensagens para servidores mais
rápidos em detrimento de servidores mais lentos. Isto permite que não se amontoe
correio para entrega devido a problemas com determinados servidores destino. Este tipo
de mensagens poderão ser processados, assim que o tempo de inactividade do Postfix
aumente. Quando uma mensagem não é entregue, o Postfix cria um time stamp o qual
24
Introdução ao Postfix
corresponderá uma data futura para uma nova tentativa de entrega (este valor é
configurável). Estas mensagens são normalmente ignoradas pelo queue manager. À
medida que estas mensagens falham repetidamente a sua entrega, o time stamp vai
aumentando para o dobro da idade da mensagem, isto é, duplica a data para a próxima
tentativa de entrega. Este método é conhecido como exponential backoff.
Na estratégia de entrega, seria escusado o emissor tentar fazer novas entregas a
servidores destino que não estejam a “responder”. O Postfix prevê esta situação, criando
uma lista com servidores com os quais a comunicação esteja interrompida, através das
mensagens que tem para entrega a esses destinos. Isto permite que o servidor não “perca
tempo” de processamento com servidores que à partida não conseguirá enviar
mensagens.
2.4
Segurança
Este ponto focará um outro objectivo do Postfix - a segurança. Por definição, os
programas de correio processam mensagens de emissores potencialmente perigosos.
Sendo assim, os programas de correio deverão ser desenvolvidos com bastante cuidado,
mesmo que sejam executados com direitos mínimos (privilégios de utilizador) ou
mesmo que não comunique directamente com a rede onde está inserido.
Como referido na sua página principal (<http://www.postfix.org>), inicialmente
o Postfix tinha 30.000 linhas de código após remoção dos comentários. Não é muito,
considerando a modularidade do produto, ao contrário de servidores como o Sendmail.
No entanto, isto não significa que a segurança seja boa apenas recorrendo à
“modularidade”. É necessário implementar vários mecanismos de segurança e não
apenas um, uma vez que caso esse mecanismo falhe ou seja ultrapassado, toda a
segurança está comprometida. Por esta razão, o Postfix implementa vários níveis de
segurança, permitindo minimizar os estragos com eventuais problemas com o programa
(bugs) ou com tentativas de acesso não autorizadas. Estes são os níveis implementados:
v Privilégios mínimos
Alguns processos do Postfix podem ser executados com direitos de utilizador.
Isto aplica-se sobretudo nos processos que estão “em contacto” com a rede,
como o SMTP Server e o SMTP Client. Por outro lado, utiliza o mecanismo do
UNIX chroot por forma a criar espaços isolados de trabalho, permitindo a
25
Introdução ao Postfix
execução de aplicações num ambiente isolado relativamente ao sistema de
ficheiros principal do UNIX ( / ). Isto permite que, em caso de execução
arbitraria de código involuntário (ver caso do codred nos servidores
Microsoft), este seja executado num determinado directório sem possibilidade
de subir até à raiz principal do sistema. Apesar destes dois mecanismos, não
significa que a segurança esteja assegurada.
v Isolamento
Como já referido, o Postfix foi implementado a pensar no conceito de
modularidade isto é, programas independentes que executam determinadas
tarefas. Os processos expostos, são executados independentes uns dos outros –
single-threaded. Processos separados (single-threaded) permitem maior
segurança do que os processos multi-thread executados num mesmo ambiente.
v Ambiente restrito
Nenhum processo no Postfix é executado sob o controlo de um utilizador
normal, mas sim sob o controlo do master daemon e é por sua vez executado
num ambiente restrito sem qualquer relação de parentesco (processos pai e
processos filho, lançados pelo primeiro). Este mecanismo evita tentativas de
violação do sistema utilizando signals do sistema operativo, ficheiros abertos,
variáveis de ambiente ou outros atributos de processos processados pelo UNIX
de um processo pai malicioso para um processo filho.
v Set-uid
No Postfix, nenhum processo é setuid. O setuid permite a um utilizador sem
direitos
executar
determinado
programa/processo
com
direitos
de
administrador (root). Segundo o site oficial do Postfix, este (tal como o setgid)
é o maior erro de segurança jamais implementado pelo UNIX.
v Confiança
Os processos do Postfix não trocam entre si as mensagens (por exemplo do
maildrop queue para a incoming queue) ou mesmo o conteúdo das mensagens
26
Introdução ao Postfix
IPC trocadas internamente. Os ficheiros de queue não tem em disco nenhum
registo de entregas para destinatários sensíveis tal como ficheiros ou
comandos. Para além disso, o Postfix filtra toda a informação vinda do exterior
antes de a processar.
v Grandes inputs
§ A memória para buffers e strings são alocados dinamicamente, por forma a
evitar buffer overrun.
§ Linhas de texto que excedam determinado valor são convertidas em várias
linhas de tamanho também determinado, e posteriormente reconvertidas
aquando da entrega.
§ O Postfix não implementa nenhum mecanismo de segurança para controlo
de comandos longos, uma vez que este procedimento é garantido pela shell
do sistema.
§ Os diagnósticos são truncados antes de serem enviados para o syslog por
forma a evitar buffer overrun em plataformas mais antigas.
v Outras defesas
§ O número de instâncias em memória de cada objecto é limitado por forma a
evitar sobrecarregar o sistema (causando os óbvios problemas de
performance).
§ Em caso de problemas, o Postfix faz uma pausa antes de enviar a mensagem
de erro para o cliente, antes de terminar com “fatal error” ou antes de
reiniciar determinado processo que tivesse “crachado”.
§ Não é adicionada nenhum parâmetro com informação remota em variáveis
ou comandos.
§ Não são criados ficheiros com informação pertinente no directório /tmp.
27
3
Instalação e Configuração do Postfix
Depois de conhecer o Postfix e as suas potencialidades relativamente aos demais
MTA’s disponíveis bem como a filosofia de funcionamento de um servidor de correio
no geral, passar-se-á à sua instalação. Não descorando os cuidados a ter num ambiente
produtivo, como por exemplo a garantia que não se perderão nenhumas mensagens de
correio no caso de uma migração, este capítulo debruça-se acima de tudo na instalação
propriamente dita e das formas que esta pode ser feita. No capítulo 7, cobrem-se outros
temas também importantes numa instalação.
Embora existam várias versões de Postfix disponíveis, aquela que será utilizada
como referência à instalação será a versão 1.1.7-2 em linux Redhat 7.3 (kernel 2.4.183).
Este
pacote
de
instalação
pode
ser
obtido
em
<http://ftp.redhat.com/pub/redhat/linux/7.3/en/os/i386/RedHat/RPMS/postfix-1.1.72.i386.rpm>.
3.1
Sistemas compatíveis
Muitas distribuições disponibilizam uma versão já compilada no seu site, donde
poderá ser obtida. A versão 1.1.7-2 pode ser instalada nas seguintes plataformas e
versão de sistemas:
AIX 3.2.5, 4.1.x, 4.2.0
BSD/OS 2.x, 3.x, 4.x
Darwin 1.x
FreeBSD 2.x, 3.x, 4.x, 5.x
HP-UX 9.x, 10.x, 11.x
IRIX 5.x, 6.x
Linux Debian 1.3.1, 2.x
Linux RedHat 4.x, 5.x, 6.x, 7.x
Linux Slackware 3.x, 4.x, 7.x
Linux SuSE 5.x, 6.x, 7.x
Mac OS X
NEXTSTEP 3.x
29
Instalação e Configuração do Postfix
NetBSD 1.x
OPENSTEP 4.x
OSF1.V3 (Digital UNIX)
OSF1.V4 aka Digital UNIX V4
OSF1.V5 aka Digital UNIX V5
OpenBSD 2.x
Reliant UNIX 5.x
Rhapsody 5.x
SunOS 4.1.x (with Postfix 1.1.0)
SunOS 5.4..5.8 (Solaris 2.4..8)
Ultrix 4.x (well, that was long ago)
3.2
Requisitos
3.2.1
Packages necessários
Estes são os requisitos em termos de packages pré-instalados requeridos pela
versão acima referida. Os requisitos de cada versão são normalmente referidos no sitio
de cada distribuição, por exemplo do Redhat. No caso do Redhat 7.1 todos os requisitos
já estão pré-instalados.
/sbin/chkconfig
/sbin/service
sh-utils
fileutils
textutils
/usr/sbin/alternatives
/usr/sbin/groupadd
/usr/sbin/useradd
pcre
openssl
/bin/sh
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(CompressedFileNames) <= 3.0.4-1
ld-linux.so.2
30
Instalação e Configuração do Postfix
libcrypto.so.2
libc.so.6
libdb-3.3.so
libdl.so.2
libgdbm.so.2
libnsl.so.1
libresolv.so.2
libssl.so.2
/bin/sh
libc.so.6(GLIBC_2.0)
libc.so.6(GLIBC_2.1)
libc.so.6(GLIBC_2.2)
libnsl.so.1(GLIBC_2.0)
libresolv.so.2(GLIBC_2.2)
3.2.2
Configurações Adicionais
O Postfix foi concebido para funcionar em ambientes UNIX. Existem diversas
versões de UNIX no mercado, por exemplo: AIX da IBM, Solaris da SUN, HP-UX da
HP, IRIX da SGI, etc., para além das versões UNIX para processadores Intel tais como
o próprio Solaris da SUN e as diversas distribuições de Linux (RedHat, SuSE,
Mandrake, etc.). Existem várias distribuições de Linux que já trazem incorporado o
Postfix. Qualquer das formas existe binários para download em vários locais, tanto para
Linux como para UNIX, por exemplo para AIX. Qualquer das formas, pode-se efectuar
o download do código fonte e compilar no nosso sistema – recomenda-se contudo a
utilização das versões disponibilizadas pelas respectivas distribuições UNIX’s.
Para além deste importante requisito (o facto do sistema ser UNIX), necessita
ainda de:
•
Uma placa de rede instalada e configurada
•
Servidor DNS instalado e a funcionar
Se optar por manipular o código fonte, então necessita ainda de um compilador C, por
exemplo o GCC da GNU, bem como o GNU make.
31
Instalação e Configuração do Postfix
3.2.2.1
Importância do DNS no Postfix
Um dos requisitos para poder funcionar o Postfix é, como acima foi descrito, o
DNS. Os computadores têm que efectuar um conjunto de operações para poder, por
exemplo, fazer uma entrega de correio. Conhecer este processo é importante pois
permite fazer o diagnóstico quando as coisas não funcionam. Quando um cliente remoto
tenta enviar uma mensagem para o endereço [email protected] são efectuadas várias
operações antes da mensagem ser efectivamente enviada, nomeadamente:
1. O DNS local determina qual o computador na rede remote.net para onde deverá
enviar o correio, através da pesquisa de um registo MX no domínio remote.net.
2. Caso o DNS local não contenha esta informação, irá pesquisar na Internet
(noutros DNS) à procura de uma resposta válida. Terminará quando atingir o
topo da hierarquia DNS (root DNS). Provavelmente este DNS não terá a
informação MX pretendida, mas indicará qual o DNS responsável pelo domínio.
net.
3. Este DNS por seu turno poderá não ter a informação requerida, mas deverá
conhecer a rede remote.net, e por isso resolve o respectivo endereço IP. Este
DNS irá agora perguntar ao DNS responsável pelo domínio remote.net por
registos MX. Caso exista um ou mais registos MX, este irá ser enviado pelo
cliente que iniciou a pesquisa, com o primeiro registo MX.
4. Logo que o cliente obtenha o endereço IP, irá tentar efectuar uma ligação SMTP
para o primeiro endereço obtido no ponto 3.
5. Caso esta tentativa falhe, irá tentar sucessivamente os outros endereços IP’s
obtidos no ponto 3 (o DNS pode ter vários registos MX), até que consiga
efectuar uma ligação com sucesso com um desses IP’s ou então que finde os
IP’s disponíveis. Se todas as tentativas falharem, cabe ao cliente decidir o que
fazer. Normalmente tentará mais tarde (este tempo deverá ser configurável), e
após determinado número de tentativas poderá então desistir.
Como se pode constatar, o DNS deverá estar instalado e bem configurado, até
porque só após atingir o passo 5 e com sucesso, poderá efectivamente enviar o correio.
Existem várias formas para termos um servidor de correio. Podemos ter um
servidor directamente ligado à Internet, e cuja máquina tem um registo MX no DNS do
32
Instalação e Configuração do Postfix
ISP. Neste caso, sempre que o DNS do ISP detecta pedidos para aquele domínio, irá
responder com o IP associado ao seu registo MX. Posteriormente o emissor tentará
efectuar uma ligação SMTP com esse endereço. Obviamente que este tipo de
configuração obriga a que o nosso servidor de correio esteja permanentemente ligado à
Internet. Nos nossos dias isso poderá não ser um problema, em grande parte devido aos
preços praticados pelo ISP para o acesso à Internet. No entanto, podemos ter um
servidor de correio que actua como um cliente. Isto é, o ISP receberá todo o correio
proveniente para aquele domínio, e assim que o nosso servidor (cliente) iniciar uma
ligação SMTP com o ISP, todo esse correio será então transferido. Este tipo de ligação
permite efectuar ligações esporádicas à Internet, ao contrário de ter uma ligação
permanente, bem como suportar determinados custos para com o ISP.
Se não tivermos uma ligação permanente à Internet então não é necessário
dispormos de um DNS dedicado. No ponto seguinte, veremos como podemos
configurar a nossa máquina para resolver nomes.
3.2.2.2
Configuração de um cliente DNS
Para dispormos de uma máquina a traduzir nomes por IP’s e sem termos de
configurar um servidor DNS, teremos que alterar três ficheiros: hosts, resolv.conf e
nsswitch.conf (em alguns sistemas operativos hosts.conf).
O ficheiro hosts, contém endereços IP’s e nomes de máquinas. Normalmente
utilizado para resolver IP’s de máquinas locais na rede. Neste ficheiro existe um IP
especial, conhecido como loopback que é o 127.0.0.1 que permite que processos locais
comuniquem entre si, mesmo que a máquina não disponha de uma interface de rede
com o respectivo endereço IP.
O ficheiro resolv.conf, permite indicar ao sistema qual ou quais os endereços IP’s
dos DNS que poderá perguntar para resolver nomes de máquinas.
Por último, o nsswitch.conf (ou hosts.conf) permite definir qual o método e a
ordem que o sistema operativo deverá respeitar na tentativa de resolução de nomes. Por
exemplo poderemos querer que o sistema primeiro tente procurar pela máquina no
ficheiro /etc/hosts, só depois no(s) DNS e eventualmente num servidor NIS se tivermos
(NIS é utilizado em redes com muitas máquinas UNIX. Contém por exemplo nomes de
utilizadores para autenticação e nomes de máquinas bem como os respectivos IP’s).
33
Instalação e Configuração do Postfix
Para testar a resolução de nomes, podemos utilizar os comandos hosts, nslookup
ou o dig. Para informações de como utilizar estes comandos, pode fazer ‘man
nome_comando’ em qualquer distribuição UNIX (se tiver os respectivos manuais
instalados).
3.3
Instalação a partir de um ficheiro RPM
Normalmente as distribuições de Linux já incluem uma versão do Postfix em
formato de instalação RPM, ficheiro este que satisfaz os requisitos particulares dessa
distribuição. Adicionalmente e com esta versão pré-compilada é disponibilizada
também a respectiva documentação bem como ficheiros exemplos que ajudam o
administrador do sistema a instalar e configurar o servidor de correio. A instalação de
um RPM pode ser feita utilizando interface gráfica ou via linha de comando. A
instalação via interface gráfica, pode ser feita a partir do comando kpackage, e via linha
de comando, utilizando o comando rpm -i nome_pacote.rpm .
1. Gráficamente:
Depois de invocar o comando kpackage ou através do gestor de programas,
seleccionamos o Gnome RPM, aparece um ecrã similar à figura 3.1.
Figura 3.1 - Exemplo da aplicação Gnome RPM
34
Instalação e Configuração do Postfix
Figura 3.2 - Instalar programas utilizando o Gnome RPM
Utilizando o Gnome RPM, bastava seleccionar o botão Add e em seguida
seleccionar o ficheiro rpm a instalar.
Figura 3.3 - Pesquisa de um programa utilizando o kpackage
35
Instalação e Configuração do Postfix
Figura 3.4 - Listagem dos ficheiros instalados utilizando o kpackage
Todas as opções disponíveis gráficamente, estão também via linha de comando
utilizando o comando rpm. Alguns comandos mais importantes serão também descritos
neste capítulo.
36
Instalação e Configuração do Postfix
Figura 3.5 - Listagem dos ficheiros instalados do Postfix
A figura 3.5 apresenta os directórios criados durante a instalação. Note-se que
caso não seja detectado determinado ficheiro, este é apresentado com um X. Se
fizermos duplo click, o respectivo ficheiro será editado.
2. Linha de comando:
Invoca-se o comando:
rpm -i postfix-1.1.7-2.i386.rpm
ou
rpm -Uvh postfix-1.1.7-2.i386.rpm , caso queiramos fazer um upgrade ou
reinstalar uma versão já instalada.
Em qualquer destas formas de instalação, são efectuadas as seguintes acções:
a) Criação de um novo utilizador com o nome postfix
b) Criação de um novo grupo com o nome postfix
c) Criação dos directórios /etc/postfix e /var/spool/postfix
d) Criação de todos os directórios de queues necessárias
37
Instalação e Configuração do Postfix
e) Configuração padrão do postfix
f) Criação de uma base de dados de alias por defeito
A instalação cria um ficheiro main.cf , no entanto deverá ser verificado antes de se
iniciar o postfix, de forma a certificar que obedece aos requisitos do servidor de correio
pretendido. O capítulo 5 explica os parâmetros e sua sintaxe.
Directório
/etc/postfix
Descrição
Directório onde se encontram os ficheiros de
configuração do Postfix, tais como master.cf, main.cf,
bem como ficheiros de alias.
/etc/postfix/README_FILES Contém ficheiros que explicam a integração com outros
serviços, tais como base de dados MySql, serviços de
autenticação SASL, entre outros.
/usr/share/doc/postfix-1.1.7
Contém documentação em formato html
/usr/share/man
Contém os típicos manuais dos comandos em sistemas
unix (ver comando man nos sistemas unix)
/etc/rc.d/init.d
Contém o script de controlo do Postfix (processo
master). Por exemplo para iniciar o postfix, executa-se o
comando /etc/rc.d/init.d/postfix start .
/usr/libexec/postfix
Directório onde se encontram os sub-processos
executados pelo processo principal - master
/var/spool/postfix
Contém os vários directórios queues utilizados em cada
fase do processo de envio de uma mensagem.
/usr/bin
Programas de administração
/usr/sbin
Programas utilitários
Tabela 3.1 - Directórios onde o Postfix instala ficheiros
3.3.1
Executar Postfix pela primeira vez
O Postfix, depois de instalado e configurado com as opções mínimas, poderá ser
iniciado.
Exemplo a:
[root@ myhost postfix]# postfix
postfix: warning: My hostname myhost is not a fully qualified name - set myhostname
or mydomain in /etc/postfix/main.cf
postfix/postfix-script: warning: My hostname myhost is not a fully qualified name - set
myhostname or mydomain in /etc/postfix/main.cf
postfix/postfix-script: fatal: usage: postfix start (or stop, reload, abort, flush, or check)
38
Instalação e Configuração do Postfix
Esta mensagem indica que é necessario proceder á alteração de determinados
parâmetros no ficheiro master.cf, para identificar o FQDN - Full Qualified Domain
Name.
Edita-se o ficheiro in /etc/postfix/main.cf e altera-se o seguinte parâmetro:
myhostname = mymta.mydomain.net
Exemplo b:
[root@ myhost postfix]# postfix
postfix/postfix-script: fatal: usage: postfix start (or stop, reload, abort, flush, or check)
Neste caso, deve-se fornecer uma das opções apresentadas, neste exemplo queremos
iniciar o Postfix, daí o parâmetro start ter de ser invocado.
[root@ myhost postfix]# postfix start
postfix/postfix-script: starting the Postfix mail system
Agora embora não tenha sido mostrada alguma mensagem de erro, devemos certificar
que de facto o processo foi iniciado. Para isso podemos utilizar o comando de sistema
ps.
Exemplo:
[root@ myhost /]# ps -ef | grep post
Não aparece nada porque não iniciou o Postfix. Uma das formas mais sensatas e
imediatas de verificar a eventual existencia de erros, é consultando o ficheiro de log
criado pelo Postfix /var/log/maillog.
Exemplo: Utilizando o comando tail, que dá as últimas linhas do ficheiro.
tail /var/log/maillog
.............
Jul 14 11:49:26 myhost postfix/postfix-script: starting the Postfix mail system
Jul 14 11:49:26 myhost postfix/master[11506]: fatal: bind 127.0.0.1 port 25: Address
already in use
39
Instalação e Configuração do Postfix
O endereço IP 127.0.0.1 (loopback ou localhost) já está em uso. Provavelmente porque
temos outro serviço a correr! O caso mais provável é não se ter parado o serviço
Sendmail.
Exemplo:
[root@ myhost log]# ps -ef | grep send
root
11519 1463 0 11:52 pts/0
root
998 1 0 10:28 ?
00:00:00 grep send
00:00:00 sendmail:accepting connections
Poderá ser apresentado uma listagem similar à apresentada, significando que existe um
processo Sendmail a ser executado.
Pode-se utilizar o comando kill do sistema para este processo.
Tentando mais uma vez:
[root@ myhost log]# postfix start
Verificando uma vez mais:
a) Utilizando o comando ps
[root@ myhost log]# ps -ef | grep post
root
11584
1 0 11:52 ?
00:00:00 /usr/libexec/postfix/master
postfix 11585 11584 0 11:52 ?
00:00:00 pickup -l -t fifo -u -c
postfix 11586 11584 0 11:52 ?
00:00:00 nqmgr -l -n qmgr -t fifo -u -c
b) Utilizando o ficheiro de log /var/log/maillog
.......
Jul 14 11:52:57 myhost postfix/postfix-script: starting the Postfix mail system
Jul 14 11:52:57 myhost postfix/master[11584]: daemon started
Na instalação do Postfix não são criados os directórios de queue, mas sim depois de se
iniciar o processo master (lançado pelo comando postfix start).
Exemplo:
[root@ myhost postfix]# ls -la /var/spool/postfix
total 68
40
Instalação e Configuração do Postfix
drwxr-xr-x 17 root
root
4096 Jul 14 11:03 .
drwxr-xr-x 14 root
root
4096 Jul 14 11:03 ..
drwx------
2 postfix root
4096 Apr 15 2002 active
drwx------
2 postfix root
4096 Apr 15 2002 bounce
drwx------
2 postfix root
4096 Apr 15 2002 corrupt
drwx------
2 postfix root
4096 Apr 15 2002 defer
drwx------
2 postfix root
4096 Apr 15 2002 deferred
drwxr-xr-x
2 root
root
4096 Jul 14 11:03 etc
drwx------
2 postfix root
4096 Apr 15 2002 flush
drwx------
2 postfix root
4096 Apr 15 2002 incoming
drwxr-xr-x
2 root
root
drwx-wx---
2 postfix postdrop
drwxr-xr-x
2 root
root
drwx------
2 postfix root
drwx--x---
2 postfix postdrop
drwx------
2 postfix root
drwxr-xr-x
3 root
root
4096 Jul 14 11:03 lib
4096 Apr 15 2002 maildrop
4096 Jul 14 11:08 pid
4096 Jul 14 11:52 private
4096 Jul 14 11:52 public
4096 Apr 15 2002 saved
4096 Jul 14 11:03 usr
Note-se as permissões, o dono e o grupo com que estes directórios foram criados.
3.4
Instalação a partir de código fonte
O Postfix é um software da GNU, isto é, a sua utilização, compilação e
distribuição é livre. Uma das formas de instalar o Postfix, é recorrendo ao código fonte.
Claro que o mais fácil é utilizar uma versão já compilada, mas dependendo das
necessidades do administrador, poderá compensar a sua instalação a partir do código
fonte (source), por exemplo se não existir uma compilação da versão mais recente. O
código fonte pode ser encontrado no sitio principal em <http://www.postfix.org>.
Vulgarmente estas versões tem o nome de snapshot. Depois de ser feito o download do
ficheiro – normalmente é um ficheiro tar comprimido com o gzip – podemos proceder à
sua compilação. É necessário ter direitos de administração similar ao utilizador root.
Seguem-se os passos:
a) Descomprime-se e extraem-se os ficheiros, por exemplo para /usr/local/src
41
Instalação e Configuração do Postfix
tar -zxvf snapshot-20010228.tar.gz -C /usr/local/src
Este comando, cria o directório /usr/local/src/snapshot-20010228 e extrai para aí
os ficheiros.
b) Criação do utilizador postfix
Para que o Postfix funcione correctamente, é necessário criar um utilizador e um
grupo com o nome postfix. O id criado não é importante, apenas o nome.
Em linux pode ser criado da seguinte forma:
/usr/sbin/useradd -M postfix
Como não é necessário a criação de uma HOME ou shell de inicio, invoca-se o
comando com a opção -M.
c) Criação de um grupo para o postfix
Se não for criado nenhum grupo, a instalação do postfix criará um directório
maildrop com direitos de escrita para todos os utilizadores locais no sistema. Se
se pretender aumentar a segurança, então dever-se-á criar um grupo específico
no sistema. Uma vez mais em linux, o grupo pode ser criado da seguinte forma:
/usr/sbin/groupadd maildrop
d) Compilar o código fonte
É necessário ter disponível no sistema o compilador GNU C. Pode-se verificar
invocando o comando: gcc --version
Retornará a versão do compilador.
Junto com a distribuição do código fonte, são incorporados vários scripts de
ajuda para a instalação.
Para compilar, posiciona-se no directório onde extraímos os ficheiros, no
exemplo /usr/local/src/snapshot-20010228 e invocamos o seguinte comando:
make
Este comando de sistema, processa o ficheiro Makefile e criará ficheiros executáveis
para cada programa do Postfix. Á medida que a compilação avança, são mostradas
algumas mensagens que indicam o progresso da instalação ou mesmo alguns avisos.
No final, retornará para linha de comando.
42
Instalação e Configuração do Postfix
3.4.1
Instalação dos executáveis
Antes de se proceder à instalação dos executáveis é necessário executar algumas
operações, sobretudo se tivermos outro servidor de correio instalado e a funcionar no
sistema, como por exemplo o Sendmail – ver capitulo 7, o Postfix utiliza nomes de
subprogramas com o mesmo nome que no Sendmail, tais como sendmail, mailq e
newaliases. Para o caso de se pretender, por qualquer razão, voltar à situação inicial
antes da instalação, dever-se-á renomear estes ficheiros. Como root, efectuar os
seguintes comandos:
mv /usr/sbin/sendmail /usr/sbin/sendmail.antigo
mv /usr/sbin/qmail /usr/sbin/ qmail.antigo
mv /usr/sbin/newaliases /usr/sbin/ newaliases.antigo
Não esquecer que o sendmail utiliza o mecanismo setuid já referido, e por motivos de
segurança dever-se-á mudar as permissões. Por exemplo:
chmod 744 /usr/sbin/sendmail.antigo
chmod 744 /usr/sbin/ qmail.antigo
chmod 744 /usr/sbin/ newaliases.antigo
Algumas distribuições de Sendmail podem criar alguns links tais como mailq e
newaliases. Deve-se por isso remover estes links – ver comando de sistema unlink.
Depois de salvaguardar alguns ficheiro importantes, pode-se instalar o Postfix. Para isso
basta executar o script INSTALL.sh. Este script irá fazer algumas perguntas como por
exemplo onde colocar ficheiros de configuração, dono entre outros caminhos. Pode-se
assumir os valores sugeridos pela instalação, premindo a tecla Enter. Note-se que os
directórios das queues não serão criados durante a instalação, mas sim depois de se
iniciar o processo master do Postfix, responsável pela gestão destas queues.
3.5
Instalando o Postfix num ambiente chroot
Uma das formas de tornar a execução de qualquer processo mais segura é permitir
somente que este seja executado num ambiente chroot, isto significa que mesmo que
um utilizador malicioso consiga quebrar a segurança, neste caso do Postfix, não tenha
43
Instalação e Configuração do Postfix
acesso a nenhum directório de sistema. Este assunto já foi desenvolvido aquando da
referencia ás características do Postfix. Na prática, o Postfix utiliza o comando de
sistema chroot, cabendo a este último forçar qualquer programa (no nosso exemplo o
Postfix) a tratar determinado directório como sendo o directório raiz do sistema ( / ).
Após a execução do chroot, nenhum programa pode aceder ficheiros ou directorios para
além do seu directório raiz.
Todos os programas executados pelo Postfix podem ser executados num ambiente
chroot excepto o local e o pipe. Por defeito, o script para configuração do Postfix num
ambiente chroot, utiliza o directório /var/spool/postfix como sendo a raiz neste
ambiente. A sua configuração depende das suas configurações, por um lado o directório
/var/spool/postfix terá que sofrer algumas alterações, por outro o ficheiro master.cf terá
que ser modificado para informar ao Postfix quais os programas terão que ser
executados neste tipo de ambiente.
A execução de alguns programas do Postfix, requerem algumas bibliotecas ou
outros ficheiros de sistema, normalmente encontrados em /usr/lib no caso das
bibliotecas. Num ambiente chroot esta estrutura tem de ser mantida.
O script que permite configurar este ambiente, encontra-se no directório
examples/chroot-setup e no directório de código fonte com o nome LINUX2 –
normalmente nas distribuições de linux por defeito não vem este script, no entanto pode
ser muito facilmente obtido. Depois de executar o script LINUX2 ( posicionar no
directório onde se encontra o script e executar ./LINUX2 ), resta alterar o ficheiro
master.cf. No capitulo 4 este e outras configurações serão discutidas mais em pormenor.
Os programas que estarão expostos ao exterior, e por isso mais susceptíveis de ataque
tais como smtpd e o smtp são os que deverão ser configurados num ambiente chroot.
3.6
Programas utilitários do Postfix
Qualquer que seja a opção seguida para a instalação do Postfix e após a execução
do programa master, diversos programas utilitários estão ao dispor do administrador de
sistema para controlar o funcionamento do mesmo.
44
Instalação e Configuração do Postfix
3.6.1
Verificar as queues - mailq
O programa mailq mostra as mensagens correntemente presentes nos vários
directórios queues do sistema. Utiliza também o programa showq para visualizar o
estado de cada mensagem.
Este programa emula a execução do Sendmail com a opção -bp. O administrador
pode pois utilizar esta ferramenta para determinar se existe algum problema na entrega
de mensagens.
3.6.2
Iniciar e finalizar o Postfix – postfix
O comando postfix é responsável pelo inicio do processo master que controla toda
a execução do serviço de correio electrónico. A sintaxe é :
postfix [-c config_dir] [-D] [-v] comando
onde :
config_dir – permite fornecer um caminho para um ficheiro master.cf
alternativo.
-D – permite executar o postfix com a opção de debug (traçagem do programa)
no nivel indicado no ficheiro master.cf.
-v – esta opção permite fazer o verbose, isto é as mensagens serão enviadas para
o sistema syslog (processo de sistema que controla as mensagens de eventos e as
armazena em ficheiros texto normalmente em /var/log). A tabela 3.2 mostra os vários
“comandos” que podem ser invocados juntamente com o postfix.
Comando
abort
check
flush
reload
start
stop
Descrição
Para imediatamente a execução do Postfix.
Verifica a configuração do postfix, por forma a detectar a estrutura
de directório inválida bem como permissões e directórios de
queues inexistentes.
Tenta enviar todas as mensagens existentes na queue deferred
Este comando permite voltar a ler os ficheiros de configuração,
por exemplo quando se efectuar alguma alteração no master.cf e
queremos que essas alterações sejam efectivadas mas sem parar o
processo, pode-se invocar o comando postfix com reload como
parâmetro.
Este comando verifica a configuração de sistema e inicia o
processo master do Postfix.
Permite parar a execução do Postfix, deixando que os processos
dependentes terminem após terminarem as tarefas que estão no
momento em execução, por exemplo se estiver nesse momento a
45
Instalação e Configuração do Postfix
ser enviada uma mensagem, o programa responsável terminará o
envio antes de terminar a execução.
Tabela 3.2 - Comandos do Postfix
Recomenda-se a utilização destes comandos para a manutenção dos processos Postfix.
3.6.3
Gestão de Alias - postalias
O comando postalias possibilita ao administrador de sistema manipular os alias
existentes na base de dados binária.
A sintaxe deste comando é:
postalias [-Ninrvw] [-c config_dir] [-d key] [-q key] [file_type:] nome_ficheiro
As base de dados binárias utilizadas pelo Postfix serão descritas mas em
pormenor no capitulo 6. Os parâmetros do postalias estão descritos na tabela 3.3.
Comando
-N
-i
-n
-r
-w
-c config_dir
-d key
-q key
-v
file_type
nome_ficheiro
Descrição
Inclui caracter null para terminar as chaves (key).
Lê do standard input e adiciona-o no final do ficheiro.
Não inclui caracter null para terminar as chaves (key).
Não imprime avisos caso exista duplicação de nomes.
Imprime avisos caso exista duplicação de nomes.
Utiliza o ficheiro main.cf existente no directório config_dir
Remove determinado alias com o nome key.
Permite efectuar pesquisas à base de dados sobre a existência
de determinada key (imprime a primeira ocorrência de key).
Modifica o nível de log.
Tipo de base de dados onde será efectuada a pesquisa (ver
tabela 3.4).
Nome da base de dados que será utilizada.
Tabela 3.3 - Parâmetros do postalias
Se não for fornecido nenhum file_type o postalias irá utilizar o valor do parâmetro
database_type existente no ficheiro main.cf.
Tipo
Btree
Dbm
Hash
Descrição
Este tipo de base de dados, com o nome nome_ficheiro.db utiliza o
sistema de base de dados DB.
Este tipo de base de dados cria dois ficheiros : nome_ficheiro.pag e
nome_ficheiro.dir.
Similar à opção btree só que a base de dados utiliza o método hash.
Tabela 3.4 - Tipos de base de dados utilizadas nos Alias
46
Instalação e Configuração do Postfix
Exemplo de utilização do comando postalias:
Este exemplo, mostra os alias existente para o utilizador root.
[root@ myhost /]# postalias -q root /etc/postfix/aliases
rjoao
O seguinte exemplo, permite inserir um alias para determinado utilizador no ficheiro
/etc/postfix/aliases.
[root@ myhost /]# echo paulo: rjoao | postalias -i /etc/postfix/aliases
Este comando, remove um alias.
[root@ myhost /]# postalias -d paulo /etc/postfix/aliases
Todos estes comandos deverão ser executados com direitos de root.
3.6.4
Visualizar mensagens - postcat
O comando postcat pode ser utilizado para visualizar mensagens existentes no
sistema de queues do Postfix. Cada mensagem é armazenada num ficheiro com formato
especial, onde figuram o endereço do emissor, receptor o cabeçalho e o corpo da
mensagem propriamente dita.
A sintaxe deste comando é:
postcat [-v] nome_ficheiro
nome_ficheiro é o nome do ficheiro (mensagem de correio) existente na queue. A opção
-v é utilizada para enviar mensagem de log para o sistema.
3.6.5
Gestão dos ficheiros de configuração - postconf
A administração do sistema de correio do Postfix engloba um conjunto de
parâmetros relativamente extenso, nomeadamente no ficheiro main.cf. Para ajudar o
administrador do sistema, foi desenvolvido um utilitário que permite simplificar a sua
administração – comando postconf.
A sintaxe do comando postconf é:
postconf [-dhmnv] [-c config_dir] [parametro ...]
47
Instalação e Configuração do Postfix
ou
postconf [-ev] [-c config_dir] [parametro=valor ...]
A primeira sintaxe é utilizada para efectuar pesquisas no ficheiro de configuração – ver
tabela 3.5. A segunda, permite editar o ficheiro main.cf – ver tabela 3.6.
Opção
-d
-h
-m
-n
-v
-c
Descrição
Mostra o valor por defeito atribuído aquele parâmetro em vez do
actual valor existente no ficheiro de configuração.
Mostra o valor do parâmento sem descrição.
Lista o conjunto de tipos de tabelas de lookup suportadas.
Mostra apenas os parâmetros cujo conteúdo é diferente do valor
padrão.
Permite colocar determinadas mensagens de log no sistema.
Permite informar o comando para utilizar o ficheiro main.cf
existente em config_dir.
Tabela 3.5 - Opções de pesquisa do postconf
Exemplo de utilização:
[root@ myhost /]# postconf -n
alias_database = hash:/etc/postfix/aliases
alias_maps = hash:/etc/postfix/aliases
command_directory = /usr/bin
daemon_directory = /usr/libexec/postfix
debug_peer_level = 2
default_destination_concurrency_limit = 10
home_mailbox = Maildir/
local_destination_concurrency_limit = 2
mail_owner = postfix
queue_directory = /var/spool/postfix
Opção
-e
-v
-c
Descrição
Edita o ficheiro main.cf.
Permite o envio de determinadas mensagens para o sistema de
log.
Utiliza o ficheiro main.cf existente no directório config_dir.
Tabela 3.6 - Opções de edição do postconf
48
Instalação e Configuração do Postfix
Não esquecer que este comando deverá ser invocado com direitos de administração.
Não deverá existir espaço entre o nome do parâmetro e o valor a inserir no ficheiro de
configuração.
Exemplo de utilização:
[root@ myhost /]# postconf -e command_directory=/usr/teste_cmd
[root@ myhost /]# postconf -n
alias_database = hash:/etc/postfix/aliases
alias_maps = hash:/etc/postfix/aliases
command_directory = /usr/teste_cmd
daemon_directory = /usr/libexec/postfix
debug_peer_level = 2
default_destination_concurrency_limit = 10
home_mailbox = Maildir/
local_destination_concurrency_limit = 2
mail_owner = postfix
queue_directory = /var/spool/postfix
[root@ myhost /]# postconf -e command_directory=/usr/bin
O primeiro comando, altera o valor do parâmetro command_directory, o segundo
mostra os parâmetros cujo valor difere do padrão. O terceiro, repõe o valor que existia
antes.
3.6.6
Envio de mensagens para os programas do Postfix - postkick
O postkick é um utilitário que permite enviar mensagens para processos Postfix
que estejam em execução. A sintaxe do postkick é:
postkick [-c config_dir] [-v] class service request
As opções -c e -v tem o mesmo significado que os comandos anteriores. Class
corresponde ao tipo de canal a utilizar, podendo ser private ou public. Service é o nome
do programa com o qual se pretende comunicar e request a mensagem a enviar.
Os processos do Postfix comunicam entre si utilizando o método standard do
UNIX – pipe – é um protocolo proprietário do Postfix. As mensagens trocadas tem
apenas um byte.
49
Instalação e Configuração do Postfix
3.6.7
Bloquear ficheiros - postlock
O utilitário postlock permite bloquear o acesso a caixas de correio, para poder ter
acesso exclusivo. A sintaxe é:
postlock postkick [-c config_dir] [-v] mailbox command
Uma vez mais, as opções -c e -v são comuns nos comandos do Postfix. Este comando
efectua N tentativas de bloqueio da mailbox até conseguir ou atingir o limite
estabelecido no ficheiro de configuração main.cf. Após bloqueado, é executado o
comando command, utilizando fork().
3.6.8
Tratamento de mensagens de log - postlog
O comando postlog permite redireccionar determinadas mensagens para o sistema
de log do sistema operativo. Sintaxe deste comando:
postlog [-iv] [-c config_dir] [-p priority] [-t tag] [text …]
A tabela 3.7 descreve cada opção deste comando.
Opção
-c
-i
-p
Descrição
Permite informar qual o master.cf a ler
Permite incluir o ID do processo no sistema de log
Especifica a prioridade no registo da mensagem. Pode ser info,
warn, error, fatal, ou panic. Caso não seja indicado nenhum, é
utilizado a prioridade info.
Permite especificar uma palavra para identificar o registo
Activa o verbose no sistema de log
-t
-v
Tabela 3.7 - Opções de edição do postlog
O ficheiro de log do sistema encontra-se normalmente, em linux, em /var/log/message.
3.6.9
Gestão das tabela de lookup - postmap
O postmap pode ser utilizado para pesquisar, alterar ou criar as várias tabelas
utilizadas pelo Postfix. Cada tabela é convertida para um formato binário a partir de um
ficheiro ASCII. A sintaxe do comando é:
postmap [-Ninrvw] [-c config_dir] [-d key] [-q key] [-file_type:] nome_ficheiro
A tabela 3.8 especifica cada opção que se pode utilizar.
50
Instalação e Configuração do Postfix
Opção
-N
-i
-n
-r
-v
-w
-c config_dir
-d key
-q key
Descrição
Inclui caracter null para terminar as chaves (key).
Lê do standard input e adiciona-o no final do ficheiro.
Não inclui caracter null para terminar as chaves (key).
Não imprime avisos caso exista duplicação de nomes.
Permite enviar mensagens de log para o sistema de log.
Imprime avisos caso exista duplicação de nomes.
Permite informar o comando para utilizar o ficheiro main.cf
existente em config_dir.
Remove determinado alias com o nome key.
Permite efectuar pesquisas à base de dados sobre a existência de
determinada key (imprime a primeira ocorrência de key).
Tabela 3.8 - Opções de edição do postmap
3.6.10 Gestão das queues - postsuper
Este comando ajuda os administradores de sistema a administrar os directórios
queues utilizados pelo Postfix. Apenas pode ser utilizado pelo utilizadorr de sistema
root. Sintaxe do comando:
postsuper [-p] [-a] [-v] [directório ….]
Por defeito este comando tenta organizar os directórios que definem as queues do
sistema, movendo determinadas mensagens de um sistema de queue, para outro caso a
sua localização esteja errada (-p); removendo directórios desnecessários (-s) ;
removendo mensagens danificadas, por exemplo após algum crash do sistema, mas
apenas aquelas que estejam corrompidas, uma vez que uma das bandeiras do Postfix é
esta mesmo, isto é não perder nenhuma mensagem graças ao seu sistema de queues.
3.7
Iniciar o Postfix como Serviço
Não existe nenhum serviço postfix que se possa configurar para iniciar
automaticamente quando o sistema inicializa, pelo menos na versão utilizada na
instalação, tal como outros serviços tipo sendmail, wine, nfs, etc. Para iniciar o serviço
automaticamnte a máquina, pode-se proceder da seguinte maneira:
- colocar o link para o script de inicio, nos respectivos "run levels" ex:
/etc/rc0.d/K30postfix ( link para ../init.d/postfix)
51
Instalação e Configuração do Postfix
Da mesma forma, tem-se que eliminar o início automático do sendmail quando a
máquina reinicia. Para isso, utilizar o /usr/bin/serviceconf – ver figura 3.6 – para retirar
o inicio automático, ou remover os links em /etc/rc0.d, /etc/rc1.d...
Figura 3.6 - Controlo do inicio de serviços em Lina Recheai
3.8
Comandos úteis
O comando rpm tem inumeras opções. Aqui serão focadas algumas que, pela sua
importância na instalação e administração do Postfix, facilitam as tarefas de
administração do sistema.
§ Verificar se determinado package (ficheiro de instalação em formato RPM)
está ou não assinado:
rpm --checksig -v filename
exemplo:
[root@myhost postfix]# rpm --checksig -v compat-db-3.3.11-4.i386.rpm
compat-db-3.3.11-4.i386.rpm:
MD5 sum OK: 56a0775b1356791050777ce1d2d54a4b
gpg: /root/.gnupg: directory created
52
Instalação e Configuração do Postfix
gpg: /root/.gnupg/options: new options file created
gpg: you have to start GnuPG again, so it can read the new options file
§ Para verificar apenas se determinado package não está corrompido (por
exemplo resultantes do download) executar:
md5sum filename
§ Para verificar a que package pertence determinado ficheiro:
rpm -q -f ficheiro
exemplo:
[root@myhost postfix]# rpm -q -f /usr/sbin/postfix
postfix-1.1.7-2
§ Para listar todos os ficheiros instalados por determinado package mostrando
informações tais como directório, ficheiro, data, dono, grupo,... :
rpm -q --dump nome_package
exemplo:
rpm -q --dump postfix
/etc/postfix 4096 1018870255 040755 root root 0 0 0 X
.........
§ Para imprimir dados relativos ao produto (pakage) instalado, fazer:
rpm -q -i nome_pacote
exemplo:
rpm -q -i postfix
Name
: postfix
Version
: 1.1.7
Release
:2
Relocations: (not relocateable)
Vendor: Red Hat, Inc.
Build Date: Mon 15 Apr 2002 12:31:01 PM
WEST
Install date: Mon 14 Jul 2003 11:03:01 AM WEST
Build Host:
stripples.devel.redhat.com
Group
: System Environment/Daemons
2.src.rpm
53
Source RPM: postfix-1.1.7-
Instalação e Configuração do Postfix
Size
: 6588751
Packager
URL
Summary
License: IBM Public License
: Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
: http://www.postfix.org
: Postfix Mail Transport Agent
Description :
Postfix is a Mail Transport Agent (MTA), supporting LDAP, SMTP AUTH
(SASL),
TLS and running in a chroot environment.
§ Listar todos ficheiros detidos por determinado package
rpm -q -l nome_package
exemplo:
rpm -q -l postfix
............
/etc/postfix/access
/etc/postfix/aliases
/etc/postfix/aliases.db
/etc/postfix/canonical
/etc/postfix/main.cf
/etc/postfix/main.cf.default
/etc/postfix/master.cf
/etc/postfix/pcre_table
/etc/postfix/post-install
/etc/postfix/postfix-files
............
§ Listar as capacidades de determinada aplicação
rpm -q --provides nome_package
exemplo:
rpm -q --provides postfix
§ Listar os requisitos de uma aplicação
rpm -q --requires nome_package
54
Instalação e Configuração do Postfix
exemplo:
rpm -q --requires postfix
/sbin/chkconfig
/sbin/service
sh-utils
fileutils
textutils
/usr/sbin/alternatives
/usr/sbin/groupadd
…………
§ Verificar o estado de um package. Pode ser: normal, not installed ou replaced
rpm -q --state nome_package
exemplo:
rpm -q --state postfix
…………………..
normal
/etc/postfix/access
normal
/etc/postfix/aliases
normal
/etc/postfix/aliases.db
normal
/etc/postfix/canonical
normal
/etc/postfix/main.cf
normal
/etc/postfix/main.cf.default
normal
/etc/postfix/master.cf
normal
/etc/postfix/pcre_table
normal
/etc/postfix/post-install
…………………….
§ Verificar instalação de determinado package. Esta verificação tem em conta o
tamanho, permissões, tipo, dono e grupo de cada ficheiro relativamente ao
instalado inicialmente.
rpm -V nome_package
exemplo:
rpm -V postfix
55
Instalação e Configuração do Postfix
[root@ myhost postfix]# rpm -V postfix
missing
/etc/postfix/aliases.db
missing
/usr/share/man/man1/sendmail.1.gz
[root@ myhost postfix]#
§ Criar um package de instalação em formato RPM a partir de um source
rpm --rebuild <packagename>.src.rpm
ou utilizando um ficheiro tar comprimido com gzip
rpm -ta <packagename>.tgz
56
4
O Ficheiro Master.cf
Uma vez instalado o Postfix, cabe agora ao Administrador de sistema configura-lo
de acordo com a especificidade do ambiente onde foi instalado. Os ficheiros de
configuração, tal como o master.cf, são ficheiros de texto cujos parâmetros podem ser
facilmente alterados.
O ficheiro de configuração master.cf controla quando e como os processos do
Postfix são iniciados. Neste capítulo será apresentado de que forma se pode alterar este
ficheiro.
4.1
O programa master
Este programa, como já referido oportunamente noutros capítulos, está
permanentemente em execução, e é responsável pela execução de processos – outros
programas que compõem o Postfix – que respondem a determinados eventos, como por
exemplo a chegada de novas mensagens de correio a serem processadas.
A sintaxe deste comando é :
master [-C config_dir] [-D] [-t] [-v]
A opção –C, permite iniciar o programa utilizando ficheiros de configuração em
determinado directório (referenciado como config_dir). A opção –D, permite que mais
informação de log seja enviada para os ficheiros de log. O –t é particularmente útil,
quando se executa este programa em ficheiros script, uma vez que permite verificar se
existe algum processo master em execução – apenas um único master é permitido num
servidor. Este controlo, verifica se existe algum ficheiro master.pid que contém o
process id (PID) do processo master em execução. Por defeito, a sua localização é
/var/spool/postfix/pid. Por último, a opção –v permite controlar o nível de pormenor da
informação que é enviada para o sistema de log do Postfix.
4.2
Sintaxe do ficheiro master.cf
O ficheiro master.cf pode ser encontrado em /etc/postfix e define a forma como os
programas do Postfix são iniciados. Cada linha deste ficheiro, especifica um programa.
A sua sintaxe é :
service
type
private
unprivileged
chroot
57
wakeup
maxprocess
command
O Ficheiro Master.cf
Por defeito, o dono deste ficheiro é o utilizador root e por isso apenas alterável por ele.
Não esquecer que o master.cf é o ficheiro que controla a forma como outros programas
do Postfix são iniciados. Qualquer erro de configuração, poderá impedir o normal
funcionamento desses programas ou mesmo do programa principal mater. A tabela 4.1
descreve cada um destes parâmetros.
Parâmetro
service
type
private
unprivileged
chroot
wakeup
maxprocess
Command
Significado
Especifica o nome do serviço a ser configurado
Tipo de transporte utilizado para comunicação do
serviço
Tipo de restrição aplicável ao serviço para
motivos de segurança
Privilégios de utilizador permitido a esse
processo
Permite definir se esse processo é executado
numa estrutura de directórios definida
Número de segundos entre os quais são enviados
sinais de wakeup para mantê-lo em execução
Número máximo de processos que pode utilizar
este serviço simultaneamente
Comando a ser executado para fornecer
determinado serviço
Tabela 4.1 - Parâmetros do ficheiro master.cf
A listagem 4.1. é um exemplo de um ficheiro master.cf obtido após a instalação.
# service type private unpriv chroot wakeup
maxproc
command + args
#
(yes) (yes) (yes) (never) (50)
#
==============================================================
smtp
inet n
y
smtpd
#smtps
inet n
n
smtpd
# -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes
#submission inet n
n
smtpd
# -o smtpd_enforce_tls=yes -o smtpd_sasl_auth_enable=yes
#628 inet n
n
qmqpd
pickup
fifo
n
y
60
1
pickup
cleanup
unix n
y
0
cleanup
#qmgr
fifo
n
n
300 1
qmgr
qmgr
fifo
n
y
300 1
nqmgr
#tlsmgr
fifo
n
300 1
tlsmgr
rewrite
unix y
trivial-rewrite
58
O Ficheiro Master.cf
bounce
unix y
0
bounce
defer
unix y
0
bounce
flush
unix n
y
1000? 0
flush
smtp
unix y
smtp
showq
unix n
y
showq
error
unix y
error
local
unix n
n
local
virtual
unix n
y
virtual
lmtp
unix y
lmtp
cyrus unix n
n
pipe
flags=R user=cyrus argv=/cyrus/bin/deliver -e -m ${extension} ${user}
uucp
unix n
n
pipe
flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail.postfix
($recipient)
ifmail unix n
n
pipe
flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp unix n
n
pipe
flags=Fq. user=foo argv=/usr/local/sbin/bsmtp -f $sender $nexthop $recipient
Listagem 4.1 - Exemplo de um ficheiro master.cf
A seguir, serão explicados cada componente de configuração existente neste ficheiro.
4.2.1
Tipos de serviço
A tabela seguinte explica cada tipo de serviço que pode ser configurado no
ficheiro master.cf.
Parâmetro
bounce
bsmtp
cleanup
cyrus
defer
error
flush
ifmail
lmtp
local
pickup
Significado
Permite reenviar o correio impossível de entregar
localmente ao emissor.
Entrega mensagens utilizando o protocolo
BSMTP
Processa correio que entra, corrigindo eventuais
problemas no endereço.
Entrega correio utilizando o sistema cyrus
Coloca as mensagens de correio que falharam a
entrega no queue deferred
Força as mensagens a serem tratadas pelo bounce
Mantém os registos das mensagens colocadas na
queue deferred
Entrega mensagens utilizando o sistema ifmail
Entrega mensagens utilizando o protocolo LMTP
Faz a entrega do correio a utilizadores locais
Verifica se existem novas mensagens a serem
processadas na queue incoming
59
O Ficheiro Master.cf
qmgr
Processa as mensagens existentes na queue
incoming e determina qual o método de entrega
requerido
Redefine os endereços para o formato FQDN –
Full Qualified Domain Name
Mostra o estado das queues
Recebe e faz a entrega do correio utilizando o
protocolo SMTP
Recebe e procede à entrega de correio utilizando
o protocolo UUCP
Utilizado para serviços virtual hosting
rewrite
showq
smtp
uucp
virtual
Tabela 4.2 - Tipos de serviço
Como se pode constatar, o nome do serviço pode não corresponder ao nome do
comando, podendo também ter mais que um serviço com comandos diferentes, como no
caso do smtp. O comando man do UNIX explica mais em pormenor cada um dos
serviços.
4.2.2
Tipos de transporte
O Postfix é um sistema modular, constituído por vários programas que forma um
todo, no fundo o sistema de correio. Para que este sistema modular – cuja importância já
foi discutida – possa funcionar, é necessário que os processos comuniquem entre si. O
Postfix suporta três tipos de transporte :
§ Internet sockets (inet)
§ Unix sockets (unix)
§ Unix named pipes (fifo)
Cada tipo de transporte tem sistemas próprios de iniciação e fim de conexão, tendo os
sub programas do Postfix implementado os respectivos mecanismos para utilizar cada
tipo de transporte.
4.2.3
Private
Este parâmetro define se determinado processo poderá ou não comunicar com
outros processos externos ao Postfix que esteja em execução no servidor. Os valores
possiveis são um traço (-) ou o caracter n. O traço torna a execução do processo privada,
enquanto que o caracter n permite que o processo interaja com outros processos.
60
O Ficheiro Master.cf
O Postfix utiliza dois directórios public e private que contém respectivamente os
serviços marcados como publicos e como privados. A listagem 4.2 mostra a estrutura
destes directórios numa instalação padrão e que se encontram em /var/spool/postfix.
[root@ myhost postfix]# ls -la private
total 8
drwx------ 2 postfix root
4096 Jul 14 11:52 .
drwxr-xr-x 17 root root
4096 Jul 14 11:03 ..
srw-rw-rw- 1 postfix postfix
0 Jul 14 11:52 bounce
srw-rw-rw- 1 postfix postfix
0 Jul 14 11:52 bsmtp
srw-rw-rw- 1 postfix postfix
0 Jul 14 11:52 cyrus
srw-rw-rw- 1 postfix postfix
0 Jul 14 11:52 defer
srw-rw-rw- 1 postfix postfix
0 Jul 14 11:52 error
srw-rw-rw- 1 postfix postfix
0 Jul 14 11:52 ifmail
srw-rw-rw- 1 postfix postfix
0 Jul 14 11:52 lmtp
srw-rw-rw- 1 postfix postfix
0 Jul 14 11:52 local
srw-rw-rw- 1 postfix postfix
0 Jul 14 11:52 rewrite
srw-rw-rw- 1 postfix postfix
0 Jul 14 11:52 smtp
srw-rw-rw- 1 postfix postfix
0 Jul 14 11:52 uucp
srw-rw-rw- 1 postfix postfix
0 Jul 14 11:52 virtual
[root@ myhost postfix]# ls -la public
total 8
drwx--x--- 2 postfix postdrop 4096 Jul 14 11:52 .
drwxr-xr-x 17 root root
4096 Jul 14 11:03 ..
srw-rw-rw- 1 postfix postfix
0 Jul 14 11:52 cleanup
srw-rw-rw- 1 postfix postfix
0 Jul 14 11:52 flush
prw--w--w- 1 postfix postfix
0 Jul 14 12:41 pickup
prw--w--w- 1 postfix postfix
0 Jul 14 12:37 qmgr
srw-rw-rw- 1 postfix postfix
0 Jul 14 11:52 showq
Listagem 4.2 - Exemplo dos directórios private e public
4.2.4
Unprivileged
Este campo determina qual o nível de privilégios que determinado processo irá
ter, isto é definindo o dono do processo com o qual será iniciado esse mesmo processo.
Se este campo tiver o caracter y, o serviço será iniciado com o utilizador definido no
parâmetro main_owner no ficheiro main.cf, e por defeito é o utilizador postfix criado no
sistema aquando da instalação. O caracter n permite que o processo seja executado
como utilizador root. Este procedimento deverá ser evitado uma vez que torna o sistema
mais vulnerável a ataques de hackers.
61
O Ficheiro Master.cf
4.2.5
Chroot
O campo chroot define quando determinado processo será executado num
ambiente restrito (vulgarmente conhecido como chrooted jail e referido no capítulo 3).
Obviamente, executar um processo nestas condições, aumenta a segurança de todo o
sistema, impedindo que após um ataque com sucesso, o acesso ao sistema seja limitado
a determinados directórios. Idealmente todos os processos que interagem com outros
sistema externos, deverão ser executados neste tipo de configuração, excepto os
programas pipe e local. O directório utilizado pelos processos que são executados num
ambiente chroot é por defeito /var/spool/postfix.
Para configurar o serviço neste tipo de ambiente, basta colocar o caracter y no
respectivo campo.
4.2.6
Wakeup
Este campo, define quando e como o programa principal master deverá contactar
os serviços que estão em execução. O valor neste campo significa o tempo em segundos
entre cada sinal wakeup enviado pelo master ao respectivo processo. O valor 0 significa
que não será enviado nenhum sinal. Adicionando o caracter interrogação (?) no valor
dado, significa que o master só deverá enviar o sinal se o processo correspondente
estiver activo.
4.2.7
Maxprocess
O maxprocess especifica o numero máximo de processos que poderão executar
aquele serviço. Este parâmetro deverá ser utilizado com especial cuidado pois está
directamente relacionado com a performance global do sistema. Existe uma forma de
definir o valor por defeito deste campo, através do parâmetro default_process_limit no
ficheiro main.cf. Caso não seja definido nenhum valor neste parâmetro por defeito é
assumido 50.
4.2.8
Commands
Este campo corresponde ao programa a ser executado para fornecer determinado
serviço. O caminho destes comandos, são relativos ao parâmetro program_directory no
62
O Ficheiro Master.cf
ficheiro main.cf. Opcionalmente pode ser incluído duas opções juntamente com o
comando:
§ -v
- permite fazer o log dos eventos
§ -D[debugger] - permite activar o debug
Estas opções podem ser bastante importantes para determinar eventuais problemas no
sistema de correio.
63
5
Ficheiro Main.cf
O Postfix á semelhança do Sendmail, utiliza um ficheiro de configuração que
determina a forma como este irá operar. Contudo, este ficheiro, não diferindo no seu
objectivo, difere no conteúdo. O Postfix não tem necessidade, ao contrário do Sendmail,
de compilar as declarações deste ficheiro. Utiliza pois, um ficheiro texto cujos
parâmetros são perceptíveis quanto à sua finalidade, para além de ter no seu ficheiro
padrão, um breve resumo entre cada parâmetro.
5.1
Ficheiro main.cf
O ficheiro main.cf, é o ficheiro principal no Postfix, e numa instalação padrão,
encontra-se em /etc/postfix. Quanto à sintaxe, é um parâmetro por linha e tem o seguinte
formato:
parametro = valor
Os comentários são definidos com o tradicional #. Portanto, as linhas que iniciem
por um cardinal ou espaços são ignoradas. A referência a parâmetros definidos em
linhas superiores, isto é, a utilização do conteúdo de um parâmetro como valor para
outro parâmetro é efectuado colocando o símbolo $, ex:
myorigin = $mydomain
ou
myorigin = ${mydomain}
Após qualquer alteração, o Postfix não assume imediatamente as alterações. Elas
só serão efectivas após reiniciar o servidor, reiniciar o serviço ou ainda fazer o reload da
configuração utilizando para o efeito o parâmetro reload no comando postfix, tal como
descrito anteriormente.
Neste capitulo, serão apresentadas os parâmetros que se pode encontrar num
ficheiro main.cf, pela mesma ordem que aparecem e agrupados em tabelas.
Parâmetro = valor
queue_directory = /var/spool/postfix
Significado
Identifica o local onde serão criadas as
queues utilizadas pelo postfix
Com este parâmetro, pode-se definir
uma localização alternativa para definir
os programas utilizados pelo postfix
bem como os processos que são por este
program_directory = /dirx/postfix/bin
65
Ficheiro Main.cf
lançados (daemons). Este parâmetro
pode ser ignorado pelo postfix se forem
utilizados
os
parâmetros
daemon_directory e command_directory
Este parâmetro especifica a localização
dos daemons lançados pelo postfix.
Normalmente são os referênciados pelo
ficheiro master.cf (ver capitulo 4)
Define a localização de todos os
programas postXXX do postfix, por
exemplo o postconf.
daemon_directory = /usr/libexec/postfix
command_directory = /usr/sbin
Tabela 5.1- Estrutura de directórios
Parâmetro = valor
mail_owner = postfix
Significado
Especifica o dono de alguns processos
bem como de diversos ficheiros
utilizados pelo Postfix. Tal como
alertado no próprio ficheiro de
configuração, este utilizador não deverá
ser utilizado para outros processos que
não
sejam
do
Postfix.
Este
procedimento foi descrito no capitulo 3.
Este parâmetro define os privilégios por
defeito que são utilizados na entrega de
correio. O utilizador nobody define um
utilizador no sistema que não tem
qualquer privilegio especial, daí a sua
utilização ser altamente recomendável.
Obviamente que os dois últimos
parâmetros
são
extremamente
importantes na segurança do sistema de
correio em particular e do sistema em
geral.
default_privs = nobody
Tabela 5.2 - Owner do processo e das queues
Parâmetro = valor
myhostname = host.domain.name
Significado
Define o FQDN do sistema na Internet,
isto é, o nome único na Internet com o
qual se poderá identificar o servidor
destino onde entregar determinada
mensagem. Se este parâmetro não for
especificado, o postfix utiliza a função
de sistema gethostname() para definir o
seu valor.
Para verificar qual o nome do sistema,
pode-se invocar numa shell de sistema o
66
Ficheiro Main.cf
comando uname –n
Permite definir o nome do domínio onde
a máquina está inserida. Normalmente
igual ao anterior exceptuando o nome
host.
mydomain = domain.name
Tabela 5.3 - Nome do Servidor na Internet e Nome de Domínio
Parâmetro = valor
myorigin = $mydomain
Significado
Este parâmetro permite especificar o
endereço de origem de onde foram
enviadas as mensagens. É importante
por exemplo para as mensagens de
retorno, isto é os recibos de recepção –
confirmação da entrega
Tabela 5.4 - Envio de Correio
Parâmetro = valor
inet_interfaces = all
Significado
Permite definir quais as interfaces de
rede onde o Postfix estará à espera de
mensagens. Por defeito é configurado
para receber correio de todas as
interfaces rede disponíveis no sistema.
Contudo podemos restringir. Para
verificar as interfaces existentes,
podemos utilizar o comando de sistema
ifconfig.
mydestination = $myhostname,
Define nomes alternativos aos quais o
localhost.$mydomain
postfix deverá aceitar mensagens
recebidas. Ex:
webmaster
[email protected]
[email protected]
mynetworks = 192.168.10.0/28, 127.0.0.1/8 Define as redes lógicas onde os clientes
SMTP poderão fazer pedidos ao
servidor de correio (servidor SMTP).
Este parâmetro pode assumir várias
formas como por exemplo:
$config_directory/mynetworks
que define um ficheiro onde se pode
colocar os IP’s e as mascaras de rede.
Outra forma é utilizando tabelas lookup:
hash:/etc/postfix/network_table
mynetworks_style = subnet
Define a forma como se utiliza o
parâmetro mynetworks, nomeadamente
quanto à identificação da mascara de
rede, na forma 127.0.0.1/8 ou 127.0.0.1,
67
Ficheiro Main.cf
255.255.255.0 , neste último utilizar-seia o parâmetro mynetworks_style =
class. No caso de se especificar host,
significa que apenas se dá confiança à
máquina local.
Tabela 5.5 - Recepção de Correio
Parâmetro = valor
relayhost = $mydomain
Significado
Este parâmetro permite especificar um
servidor para relay. Pode assumir três
valores:
relay_host = gateway.do.dominio
relay_host = numero_ip
relayhost = uucphost
O primeiro identifica o servidor de relay
utilizando o FQDN. No segundo
utilizando directamente o seu IP,
solução esta recomendavel, pois além de
tornar as ligações mais rápidas, evita
problemas com DNS. Por último, para
ligações UUCP (UNIX to UNIX Copy
Protocol) uucphost especifica o nome da
máquina .
Tabela 5.6 - Ligação á Internet ou a Intranets
Parâmetro = valor
Significado
local_recipient_maps
=
$alias_maps Por defeito o Postfix aceita todas as
unix:password.byname
mensagens que chegam para o dominio
correspondente, mesmo que o endereço
da pessoa não exista. Isto significa que,
posteriormente quando o programa
tentar efectuar a entrega à caixa de
correio respectiva, verifica que não
existe e irá retornar a mensagem para o
emissor. Este processo pode ser
simplificado, se aquando da recepção o
Postfix verificar se existe ou não o
endereço destino. É para este controlo
que existe este parâmetro. Se estiver
definido, o Postfix irá procurar nos
locais definidos pelo respectivo
utilizador destino da mensagem. Entre
os vários valores, pode-se utilizar o
caracter “,“ ou espaço.
Tabela 5.7 - Controlo das caixas de correio locais
68
Ficheiro Main.cf
Parâmetro = valor
allow_percent_hack = yes
Significado
Permite ao programa trivial-rewrite do
Postfix, responsável pela redefinição
dos endereços de correio, trocar o
simbolo % pela @, ex:
utilizador%dominio
Em:
utilizador@dominio
append_at_myorigin = yes
Converte a forma:
utilizador
Em:
utilizador@dominio
append_dot_mydomain = yes
Converte a forma:
utilizador@host
Em:
utilizador@host.$dominio
empty_address_recipient
=
MAIL- Especifica o nome do utilizador que
DAEMON
receberá mensagens de retorno (por
exemplo quando falha a entrega) quando
não existe nenhum endereço de emissor
– isto é quando a mensagem vem sem
emissor definido. Não esquecer que o
nome MAIL-DAEMON deverá ter um
mapeamento criado (alias) para um
utilizador real.
masquerade_domains = $meu_dominio
Esta opção, permite colocar o servidor
de correio a fazer masquerading isto é a
fazer-se passar por um outro servidor de
correio. O endereço de envio será
convertido
da
forma
host.meu_dominio.net
para
meu_dominio.net .
masquerade_exceptions = root
Esta opção define as excepções ao
parâmetro masquerade_domains.
swap_bangpath = yes
Utilizado
para
ligações
UUCP.
Normalmente o nome dos endereços
neste
protocolo
tem
a
forma
utilizador!hostname e utilizando este
parâmetro, permite redefinir o endereço
para a forma perceptível pelos DNS utilizador@hostname .
Tabela 5.8 - Redefinição dos Endereços de Correio
69
Ficheiro Main.cf
Parâmetro = valor
virtual_maps = hash:/etc/postfix/virtual
Significado
Uma das capacidades dos MTA’s é o de
permitir a um servidor receber correio
destinado a outro servidor. Esta
caracteristica
designa-se
Virtual
Domains. O Postfix como MTA,
implementa esta capacidade recorrendo
a tabelas (lookup tables) que contém
uma listagem dos servidores para os
quais deverá receber mensagens. Assim
que o servidor destino das mensagens
recebidas efectue uma comunicação
com o servidor Postfix, este enviará as
mensagens que tem para entrega.
Tabela 5.9 - Trabalhar com Virtual Domains
Parâmetro = valor
Significado
transport_maps = hash:/etc/postfix/transport Por defeito, o Postfix utiliza o SMTP
para transferir mensagens para outros
servidores.
Contudo,
graças
à
modularidade do Postfix, o protocolo a
utilizar poderá ser configurado para
determinado servidor destino. Isto é
feito no ficheiro especificado por este
parâmetro.
Tabela 5.10 - Protocolo de Transporte
Parâmetro = valor
Significado
alias_maps = hash:/etc/postfix/aliases, Especifica os locais onde o Postfix
nis:mail.aliases
poderá procurar por
alias de
utilizadores. No exemplo, o Postfix
tentará no ficheiro de aliases e só depois
no servidor NIS (Network Information
System)
alias_database = hash:/etc/postfix/aliases, Este parâmetro difere do alias_maps,
hash:/etc/majordomo/aliases,
pois identifica as base de dados de alias
sobre as quais o Postfix tem controlo
directo, ao contrário do alias_maps que
possibilita ao Postfix aceder não
querendo no entanto dizer que tenha
controlo sobre esses ficheiros. No
exemplo, existe a referência ao
Majordomo. Trata-se de um programa
que gere mailing lists. O Postfix pode
interagir com este programa.
70
Ficheiro Main.cf
allow_mail_to_commands = alias, forward
Uma das caracteristicas do Sendmail é a
capacidade de redireccionar mensagens
para outros utilizadores. Por defeito o
Postfix não permite esta funcionalidade
e para que ela seja implementada, é
necessário incluir as declarações
allow_mail_to_commands
e
allow_mail_to_files no ficheiro main.cf.
Ver parâmetro
allow_mail_to_commands
allow_mail_to_files = alias, forward
Tabela 5.11 - Base de Dados de Alias
Parâmetro = valor
recipient_delimiter = +
Significado
Possibilita aos utilizadores criarem as
suas próprias mailing lists sem a
intervenção directa do administrador de
sistema.
Por exemplo o utilizador jpaulo pode
criar um ficheiro .forward+futebol na
sua homedir e adicionar endereços de
correio electrónico a este ficheiro.
Posteriormente para enviar uma
mensagem para todos esses endereços,
poderia utilizar a seguinte sintaxe:
prompt>
echo
teste
|
mail
jpaulo+futebol
Neste exemplo, a palavra teste seria
enviada para todos os endereços
existente no ficheiro .forward+futebol.
Tabela 5.12 - Extensões aos Endereços de Correio
Parâmetro = valor
home_mailbox = Mailbox
Significado
O Postfix suporte três tipos de entrega
na máquina local. Adicionalmente
poderá ser configurado para utilizar
outros
MDA’s.
O
parâmetro
home_mailbox informa o Postfix onde
deverá colocar as mensagens a entregar
para os utilizadores locais. Tal como
referido, pode ser feito de três formas:
a) tipo Sendmail - /var/spool/mail
b) individual
–
ficheiro
$HOME/Mailbox
c) tipo Qmail – estrutura de
directórios $HOME/Maildir
No exemplo, home_mailbox = Mailbox
71
Ficheiro Main.cf
significa que as mensagens serão
colocadas num ficheiro Mailbox na
homedir do utilizador – note-se que se
omite a variável de sistema ou o
caminho do utilizador. O nome do
ficheiro já é relativo à sua homedir. O
nome do ficheiro pode ser um qualquer.
Pode ainda ser utilizado o formato
home_mailbox = Maildir/
com / no fim, e significa que o Postfix
deverá implementar o "estilo Maildir".
mail_spool_directory = /var/spool/mail
Por defeito o Postfix utiliza a
localização padrão das caixas de correio
do sistema, vulgarmente /var/spool/mail.
Contudo, caso não seja reconhecido,
pode-se
utilizar
o
parâmetro
mail_spool_directory para especificar
este directório ou outro qualquer.
mailbox_command = /caminho/procmail -a O trabalho de entrega de mensagens
"$EXTENSION"
locais pode ser feito pelo Postfix ou por
outro MDA externo. Este parâmetro
permite informar o Postfix do programa
a utilizar.
mailbox_transport = cyrus
Permite especificar opcionalmente um
outro MTA. Este parâmetro tem
precedência
relativamente
aos
parâmetros
mailbox_command,
fallback_transport, luser_relay.
fallback_transport = uucp
Define o MTA a utilizar nos casos em
que não são encontrados os endereços
dos utilizadores no sistema. Este
parâmetro
tem
precedência
relativamente a luser_relay.
luser_relay = [email protected]
Permite reenviar uma mensagem para
outro sistema quando não é encontrado
o respectivo utilizador - endereço – no
sistema local.
Tabela 5.13 - Entrega de Mensagens
Parâmetro = valor
header_checks = regexp:/etc/postfix/fich
Significado
SPAM
ou
UCE
(Unsolicited
Commercial E-mail) corresponde ás
muitas mensagens que recebemos
diariamente com o simples propósito de
efectuar markting não solicitado (ou
outras situações ainda mais graves) e
que enche por vezes a caixa de correio
72
Ficheiro Main.cf
dos utilizadores e faz disparar o volume
de mensagens transaccionadas todos os
dias na Intenet. O Postfix ajuda a
controlar este problema. O parâmetro
header_checks permite controlar este
tipo de mensagens analizando para o
efeito o endereço do emissor e
verificando num ficheiro se este
endereço foi marcado como spammer.
Tabela 5.14 - Tratamento de SPAM
Parâmetro = valor
fast_flush_policy = all
Significado
Este parâmetro permite especificar quais
os servidores remotos que poderão
utilizar esta característica do Postfix –
Fast Flush ETRN. As opções validas são
all, para todos os sistemas remotos,
relay para os sistemas identificados
como sendo relays e none, para
desactivar esta funcionalidade.
Tabela 5.15 - Serviço ETRN
Parâmetro = valor
smtp_banner = $myhostname
$mail_name ($mail_version)
Significado
ESMTP Este parâmetro permite criar um banner
que é mostrado sempre que um cliente
estableça
uma
ligação
SMTP.
Recomenda-se utilizar banner com
pouca informação por motivos de
segurança.
Tabela 5.16 - Criação de Banner
Parâmetro = valor
initial_destination_concurrency = 3
Significado
Uma das caracteristicas importantes do
Postfix é a sua rapidez na entrega de
mensagens. A técnica utilizada para
aumentar a rapidez na entrega de
mensagens para sistemas remotos é o de
efectuar mais que uma ligação em
simultâneo com esse servidor remoto,
isto quanto existam também várias
mensagens para o mesmo servidor. O
parâmetro
initial_destination_concurrency permite
definir o valor inicial do numero de
ligações que o Postfix irá tentar
73
Ficheiro Main.cf
estabelecer com o servidor remoto.
Colocar um valor baixo, significa que o
Postfix irá negociar melhor com as
capacidades do servidor remoto. O valor
por defeito é 2.
default_destination_concurrency_limit = 10 Estabelece o limite superior do número
de ligações em simultâneo que podem
ser feitas com um servidor remoto.
local_destination_concurrency_limit = 2
Controla o número de mensagens em
paralelo enviadas para o mesmo
destinatário no sistema local.
default_destination_recipient_limit = 10
Permite controlar o número de
destinatarios por cada mensagem. É
particularmente útil para criar várias
mensagens em vez de uma mensagem
apenas com uma lista de endereço
relativamente grande.
Tabela 5.17 - Entrega de Múltiplas Mensagens
Parâmetro = valor
debug_peer_list = outro.dominio
Significado
Este parâmetro permite ao Postfix
aumentar o nivel de debug quando
comunica com determinados sistemas
remotos. Esses sistemas remotos são
referidos neste parâmetro e pode ser o
IP ou o nome desses sistemas. O nivel a
aumentar é controlado pelo parâmetro
debug_peer_level.
debug_peer_level = 2
Permite definir para qual nivel deverá
ser aumentado o debug sempre que é
estabelecida uma comunicação com
determinado
sistema
remoto
–
controlado
pelo
parâmetro
debug_peer_list.
debug_command =
Possibilita especificar o commando que
PATH=/usr/bin:/usr/X11R6/bin
deverá ser executado para fazer o debug
xxgdb $daemon_directory/$process_name e quando o Postfix foi iniciado com a
$process_id & sleep 5
opção –D, isto é como daemon. No
exemplo, o xxgdb é dos mais divulgados
programas de debug.
Tabela 5.18 - Controlo do Debug
Parâmetro = valor
message_size_limit = 600000
Significado
A necessidade de controlar o tamanho
máximo das mensagens é bastante
grande, pois muitas mensagens contém
74
Ficheiro Main.cf
anexos que não são de interesse, por
exemplo para a organização. Quanto
maior for a mensagem em termos de
bytes, maior terá que ser o tempo
despendido da ligação à Internet, bem
como largura de banda disponibilizada.
O Postix permite afixar um tamanho
máximo de cada mensagem. O valor no
parâmetro
message_size_limit
é
expresso em bytes. O valor por defeito
utilizado pelo Postfix é 10.240.000
bytes.
Define o tamanho máximo de uma
resposta SMTP. Este parâmetro permite
evitar a técnica de overflow nos ataques
dos hackers.
Estabelece o valor máximo em bytes
que o assunto de uma mensagem pode
ter.
line_length_limit = 1000
header_size_limit = 1000
Tabela 5.19 - Estabelecer Limites nas Mensagens
75
6
Lookup Tables
Ao longo dos capítulos anteriores, e em particular no que descreve o ficheiro
main.cf, referiu-se muitas vezes a ficheiros designados como lookup tables. O Postfix
pode utilizar ficheiros estruturados que podem aumentar a rapidez de processamento de
determinadas informações. Este tema será aqui apresentado mais em detalhe.
O Postfix é composto por um conjunto de programas, cada qual desempenhando
um papel diferente, perfazendo no seu conjunto um todo – modularidade. Estes
programas partilham entre si informações, como por exemplo, quais os utilizadores
configurados no sistema, servidores virtuais, entre outras informações. Existem vários
ficheiros (lookup tables) que permitem esta partilha de informação ou simplesmente
organizar. O formato destes ficheiros também pode variar, podendo ser mais rápido a
sua consulta de um formato para outro. A tabela 6.1 mostra as várias tabelas utilizadas
pelo Postfix.
Tabela
Descrição
Tabela utilizada para aceitar ou rejeitar
mensagens a partir do nome do emissor;
nome do servidor; rede entre outros.
Permite configurar o Postfix para
redireccionar mensagens provenientes
para um utilizador, para um ou vários
utilizadores.
Por
exemplo,
uma
mensagem que seja enviada para o
utilizador [email protected] pode
ser redireccionado para o utilizador
[email protected].
Permite estabelecer correspondência
(adress mapping) entre endereços locais
e não locais.
Permite
configurar
acções
para
determinadas situações em que por
exemplo, o nome do utilizador a que se
destina a mensagem foi renomeado ou
transferido para outro domínio. Estas
acções são no fundo, mensagens de
aviso.
Permite estabelecer correspondência
entre nome de sistemas remotos e a
forma como o Postfix deverá comunicar
access
aliases
canonical
relocated
transport
77
Lookup Tables
com eles, ou ainda para efeitos de relay.
Possibilita efectuar redireccionamentos
para endereços locais ou não, ou mesmo
para outros domínios.
virtual
Tabela 6.1 - Lookup Tables no Postfix
Cada tabela tem a sua função e destina-se a fornecer determinadas informações aos
vários programas do Postifx. A tabela 6.2, relaciona cada tabela com o programa que a
utiliza.
Tabela
Programa
access
aliases
canonical
relocated
transport
virtual
Smtp
Local
Cleanup
Qmgr
trivial-rewrite
Cleanup
Tabela 6.2 - Tabela vs Programa
Estas tabelas, podem ter algumas linhas para ambientes limitados, por exemplo
com poucos endereços de correio, mas podem atingir centenas ou milhares. O acesso a
estes ficheiros pode desta forma, ser rápido ou lento, conforme o seu tamanho. O
Postfix implementa várias formatos que estas tabelas podem ter, por forma a minimizar
os tempos de acesso. Os formatos podem ser:
§ Base de dados indexadas – por exemplo btree, hash, dbm
§ Ficheiros texto de expressões regulares – por exemplo regexp
§ Base de dados externas – por exemplo NIS, Ldap e MySQL
Para verificar quais os formatos que podem ser utilizados, pode-se invocar o comando
postconf -m , exemplo:
[root@ myhost / ]# postconf –m
nis
regexp
environ
btree
unix
hash
78
Lookup Tables
Os pontos seguintes, descrevem de que forma se pode utilizar cada tipo de formato.
6.1
Base de Dados Indexadas
Por forma a tornar o acesso mais rápido à informação contida nestes ficheiros,
recomenda-se que se utilize este tipo de formato. Contudo, o processo é efectuado em
dois passos: primeiro cria-se a tabela em formato ascii e depois converte-se utilizando
determinado comando. A figura 6.1 ilustra este procedimento.
ficheiro
texto
postmap
Base Dados
indexada
Utilizador
Figura 6.1- Procedimento para criar lookup tables
Não esquecer que sempre que se altere o ficheiro texto, tem-se que repetir o
processo de conversão, caso contrário as alterações não sortirão efeito.
1. Criação do ficheiro texto
O primeiro passo, corresponde à criação de um ficheiro texto com o conteúdo
pretendido. A utilização de um ficheiro texto facilita a manipulação da
informação, comparativamente com a utilização de qualquer outra ferramenta.
Estas tabelas são na sua essência o estabelecimento de uma relação entre uma
palavra (designada de pattern) com outra, conhecida por result. Cada registo
uma linha, sendo os comentarios iniciados pelo caracter #.
O formato é geralmente o apresentado:
pattern result
Contudo, no caso a tabela de aliases tem um outro formato:
pattern: result
Este formato, torna compatível com o Sendmail.
Exemplo de uma tabela canonical:
79
Lookup Tables
# Departamento comercial
Antonio antonio.gomes
Ana
ana.filipa
Joao
joao.antunes
# Departamento financeiro
Olga
Olga.santos
2. Criação da base dados indexada
O Postfix suporta três tipos de base de dados: btree, hash e dbm. Nem todos os
sistemas UNIX suportam estes formatos, contudo pelo menos um destes deverá
estar implementado. Existem dois comandos, o postmap e o postalias para
converter os ficheiros ascii em binário. Estes comandos já foram apresentados
no capítulo 3.
6.2
Ficheiros texto de expressões regulares
A utilização de expressões regulares é outra forma que as tabelas podem assumir.
O Postfix suporta dois tipos de expressões regulares: POSIX (regexp) e PCRE e a sua
sintaxe é semelhante ao comando sed. A sua forma pode ser:
pattern result
pattern1!pattern2 result
Exemplo:
/[%!@].*[%!@]/ 550 Sender – specified routing rejected
/^postmaster@.*$/ OK
6.3
Base de dados externas
Outra das formas de armazenar alias é o recurso a base de dados externas. O
Postfix possibilita a interligação com :
§ Network Information System (NIS)
§ Lightweight Directory Access Protocol (LDAP)
§ MySQL
80
Lookup Tables
6.3.1
Utilizando NIS
O NIS no mundo UNIX possibilita centralizar a gestão de logins e passwords, isto
é um utilizador jpaulo que faça login numa máquina com determinada password, poderá
faze-lo numa outra máquina, desde que também esteja configurado como cliente NIS (é
necessário existir pelo menos um servidor NIS na rede). Utiliza-se sobretudo em redes
com muitas máquinas UNIX, por forma a facilitar a sua gestão.
O Postfix, necessita de validar os endereços de correio, verificando se
determinado endereço contém o nome de um utilizador no sistema. Supondo uma rede
com 400 máquinas UNIX, e por conseguinte 400 utilizadores com correio electrónico, a
sua gestão seria bastante difícil se o administrador tivesse que criar alias para todos
eles, admitindo ainda a grande volatilidade de pessoas nas grandes organizações. É aqui
que o NIS assume particular importância. Bastará interligar o Postfix com o servidor
NIS para obter as informações necessárias, recorrendo ao ficheiro main.cf, bastava
incluir a seguinte linha:
alias_maps = hash:/etc/postfix/alias, nis:srvnis.meudominio.org
No exemplo apresentado, o Postfix primeiro irá em primeiro lugar procurar na
base de dados local pelo respectivo utilizador, e só depois irá contactar o servidor NIS
srvnis.meudominio.org.
6.3.2
Utilizando MySQL
O MySQL é uma das base de dados mais populares no mundo UNIX. O Postfix
pode interagir com este tipo de base de dados para validar utilizadores (no caso,
endereços de correio electrónico). A figura 6.2 mostra o fluxo de informação entre o
Postfix e um servidor MySQL.
Para que o Postfix possa interagir com o MySQL, é necessário fornecer
determinadas informações ao servidor de base de dados, nomeadamente autenticação.
No ficheiro main.cf era necessário incluir a seguinte linha:
alias_maps = mysql:/etc/postfix/mysql-conf.cf
O ficheiro /etc/postfix/mysql-conf.cf deverá conter as seguinte linhas, como exemplo:
user = admpost
password = ISEP
81
Lookup Tables
dbname = aliases
table = aliases_do_postfix
select_field = nome_utilizador
where_field = nome_alias
additional_conditions = and status = ‘activo’
hosts = srvmysql.meudominio.org
Servidor MySQL
Servidor Postfix
result
MySQL
Postfix
pattern
Rede Local
Figura 6.2 - Fluxo de informação entre o Postfix e um servidor MySQL
6.3.3
Utilizando LDAP
O LDAP é no mundo do UNIX um standard para a partilha de informação em
redes de grande dimensão. A sua correspondente na Novell é o NDS ou o Active
Directory nos Windows. Um software que implementa este protocolo no mundo do
UNIX é o OpenLDAP. Uma vez mais, o Postfix pode interagir com um servidor LDAP
para obter as informações necessárias. A figura 6.3 ilustra o fluxo de informação.
82
Lookup Tables
Servidor LDAP
Servidor Postfix
result
Postfix
LDAP
pattern
Rede Local
Figura 6.3 - Fluxo de informação entre o Postfix e um servidor LDAP
Á semelhança da comunicação com um servidor MySQL, o Postfix deverá ser
configurado para poder comunicar com um servidor LDAP. Neste caso, toda a
configuração é feita no ficheiro main.cf :
alias_maps = hash:/etc/postfix/aliases, ldap:ldaptag
No exemplo, teremos que fornecer uma tag. Este sistema de tags permite ao Postfix
utilizar mais que um servidor LDAP, fornecendo para o efeito uma tag diferente.
Existem ainda outras configurações a fornecer por forma a possibilitar a comunicação
com o servidor LDAP, a tabela 6.3 apresenta os vários parâmetros. Note que esses
parâmetros começam pelo nome da tag dada no parâmetro alias_maps.
Parâmetro
ldaptag_server_host
Significado
Permite especificar o endereço do
servidor LDAP
A porta TCP por onde deverá ser
estabelecida a comunicação (por defeito
é a porta 389)
Base LDAP onde deverá ser iniciada a
pesquisa
Permite definir o tempo máximo que o
Postfix deverá aguardar por uma
resposta. Por defeito é 10.
Valor da base de dados a pesquisar. Por
defeito é mailacceptinggeneralid
Define o atributo LDAP a ser retornado.
ldaptag_server_port
ldaptag_search_base
ldaptag_timeout
ldaptag_query_filter
ldaptag_result_attribute
83
Lookup Tables
Por defeito é maildrop.
Alguns servidores mais antigos,
requerem que o cliente estabeleça uma
ligação bind.
ldaptag_bind
Tabela 6.3 - Parâmetros LDAP
Exemplo:
alias_maps = hash:/etc/postfix/aliases, ldap:ldaptag
ldaptag_server_host = srvldap.meudominio.org
ldaptag_search_base = dc = meudominio, dc = org
ldaptag_result_attribute = mailbox
6.4
Tabelas utilizadas pelo Postfix
O Postfix utiliza várias tabelas (lookup tables) para diferentes situações e ainda
por processos diferentes. É sobre os processos que este ponto irá debruçar.
6.4.1
Tabela access
Esta tabela é utilizada pelo programa smtpd. O smtpd é responsável pelas
conexões com as máquinas remotas e em receber correio de utilizadores locais. Com o
aumento de SPAM, esta tabela assume grande importância por forma a negar acesso a
determinados domínios predefinidos como sendo de SPAM. Pode-se utilizar a tabela
para restringir por endereço de correio, máquinas, ou domínios. O smtpd pode ser
configurado para negar o acesso de todos exceptuando de máquinas conhecidas. A
figura 6.4 mostra este processo.
Endereço electrónico
Servidor Postfix
Postfix
smtpd
Endereço electrónico
Figura 6.4 - Restrição de acesso ao correio electrónico
84
access
Lookup Tables
A permissão ou não, é feita através do endereço de correio do emissor e pode ser
feita de várias formas. A tabela 6.4 mostra os vários tipos de validação que podem ser
utilizados.
Tipo
utilizador@dominio
Significado
Identifica
um
utilizador
num
determinado domínio.
Identifica determinada máquina de um
domínio.
Identifica
um
domínio,
e
consequentemente todos os seus
utilizadores.
Identifica um nome de utilizador de
qualquer domínio.
Todos os utilizadores de determinado
endereço IP.
Todos utilizadores provenientes de
máquinas cujo IP inicie por aaa.bbb.ccc.
Todos utilizadores provenientes de
máquinas cujo IP inicie por aaa.bbb.
Todos utilizadores provenientes de
máquinas cujo IP inicie por aaa.
maquina.dominio
Domínio
utilizador@
aaa.bbb.ccc.ddd
aaa.bbb.ccc
aaa.bbb
aaa
Tabela 6.4- Tipos de formatos no ficheiro Access
Conhecidas as regras de filtragem, utilizando os tipos definidos na tabela 9.4,
resta ao administrador identificar qual o resultado a devolver ao servidor SMTP remoto.
A tabela 6.5 identifica os resultados possíveis.
Tipo
Significado
Permite a ligação SMTP
Nega a ligação SMTP
Nega a ligação SMTP e devolve o
código XXX bem como o texto YYY
Permite a ligação SMTP e devolve o
texto YYY
OK
REJECT
XXX YYY
YYY
Tabela 6.5 - Resultados a devolver ao servidor SMTP remoto
Contudo, a implementação de restrições através de tabelas access pode complicar
a administração do sistema, uma vez que no ficheiro main.cf existem vários parâmetros
para o smtpd. Estes parâmetros são apresentados na tabela 6.6.
85
Lookup Tables
Tipo
smtpd_client_restrictions
Significado
Define quais os clientes que podem
enviar correio.
Define quais as máquinas que podem
invocar comandos HELO (shell SMTP)
Define quem pode enviar mensagens
utilizando o comando MAIL FROM, na
shell do SMTP.
Define quem pode receber correio
utilizando o comando RCPT na shell
SMTP.
smtpd_helo_restrictions
smtpd_sender_restrictions
smtpd_recipient_restrictions
Tabela 6.6 - Parâmetros smtpd que utilizam tabelas access
6.4.2
Tabela aliases
Esta tabela permite ao administrador fazer a correspondência entre um endereço
de correio personalizado e um utilizador local. Esta tabela pode ser utilizada para vários
tipos de reencaminhamento:
§ Para determinado endereço de correio
§ Para determinado comando
§ Anexar a um ficheiro
§ Para uma lista de endereços especificados num ficheiro externo
A sintaxe deste ficheiro é :
pattern: result
a) No caso, de redireccionar correio para um conjunto de endereços é:
nome_alias: endereco1, endereco2, endereco3, ...
b) Reenvio para um programa (piping)
nome_alias: |nome_programa
Não esquecer, inclui no main.cf a declaração allow_mail_to_commands = yes
c) Reenvio para um ficheiro
nome_alias: nome_ficheiro
Não esquecer, inclui no main.cf a declaração allow_mail_to_files = yes
d) Reenvio para uma mailing list:
nome_alias: :include:nome_ficheiro
86
Lookup Tables
6.4.3
Tabela canonical
A tabela canonical é utilizada pelo programa cleanup, que permite rescrever os
endereços de correio, que se encontram no cabeçalho da mensagem. Pode-se configurar
o servidor para utilizar o mesmo ficheiro canonical para as mensagens recebidas e para
as que se envia. Contudo pode também ser ficheiros diferentes. Por exemplo, pode-se
pretender que, para o utilizador jpaulo, o seu endereço de correio seja rescrito para
joao.paulo . A sintaxe do ficheiro seria:
jpaulo joao.paulo
ana ana.matos
Para que estas configurações surtam efeito, é necessário alterar o ficheiro main.cf.
Se pretendemos que seja utilizado o mesmo ficheiro canonical, podemos utilizar o
parâmetro canonical_maps. Caso se pretenda um ficheiro diferente para o correio de
entrada e de saída então, utiliza-se os seguintes parâmetros:
sender_canonical_maps = hash:/etc/postfix/canonical.out
recipient_canonical_maps = hash:/etc/postfix/canonical.in
6.4.4
Tabela relocated
Esta tabela, permite fornecer informações aos servidores remotos, nas situações
em que aquele endereço de correio já não está disponível. Desta forma, a mensagem
será retornada para o emissor, anexando o texto definido no ficheiro relocated.
Exemplo de um ficheiro relocated:
jpaulo [email protected]. Deverá alterar o seu livro de endereços para
este no endereço.
Não esquecer que, após a criação ou alteração do ficheiro relocated, é necessário
compilar as novas declarações. Para isso utiliza-se o comando:
postmap hash:/etc/postfix/relocated
Por ultimo, verificar se no ficheiro main.cf, existe a declaração :
relocated_maps = hash:/etc/postfix/relocated
Uma vez mais, as alterações só terão efeito após reiniciar o serviço do Postfix ou
executado o comando postfix com a opção reload.
87
Lookup Tables
6.4.5
Tabela transport
É neste ficheiro que se define qual o protocolo que o Postfix deverá utilizar para
envio das mensagens para os respectivos sistemas destino ou domínios. Este mecanismo
é importante, pois graças a ele, pode-se ter um servidor de correio que opera com
sistemas que implementam protocolos de comunicação diferentes. A figura 6.5 mostra
os vários protocolos utilizados pelo Postfix.
Unix Server
Postfix
TCP/IP
UUCP
Rede Local
Figura 6.5 - Protocolos de comunicação utilizados no transporte
Embora o protocolo mais utilizado seja o SMTP, ainda existem entidades que
utilizam o protocolo UUCP. Este protocolo, foi inicialmente utilizado para transferência
de ficheiros e correio, nas ligações dial-up por modem, quando a velocidade destes
equipamentos rondava os 1200 baud rate. Possivelmente ainda seja uma forma mais
segura do que o acesso permanente à Internet. O protocolo utilizado por defeito pelo
Postfix, é o SMTP. Contudo, pode-se alterar esta definição, utilizando para o efeito o
parâmetro :
default_transport = uucp
Se for necessário configurar o sistema para comunicar com servidores UUCP e
outros SMTP, então é requerido o ficheiro transport (mais conhecido como lookup table
transport). A sintaxe geral deste ficheiro é :
maquina_destino protocolo_transporte
88
Lookup Tables
Contudo, e para ligações UUCP, em grandes redes, é possível existir situações em
uma máquina que pretenda enviar correio para uma hipotética maquina3 envie-o para
uma maquina2. É para resolver situações de loop que existe uma extensão à sintaxe,
nomeadamente:
maquina_destino protocolo_transporte:[nexthop]
Exemplos de utilização:
foo.org
uucp:foo
.foo.org
uucp:foo
test.com
smtp:meu_isp.net
outroteste.org smtp:outroisp.net:8025
As duas primeiras linhas, especifica que o Postfix deverá utilizar o protocolo
UUCP para entregar correio para todas as máquinas no domínio foo.org bem como subdomínios. A última linha, é um exemplo de especificação de uma porta de comunicação
que deverá ser utilizada para estabelecer comunicação.
O ficheiro transport só terá efeito se o Postfix tiver conhecimento da sua
existência. Basta pois, acrescentar a seguinte linha ao ficheiro main.cf :
transport_maps = hash:/etc/postfix/transport
Note-se que o termo hash define o tipo de base de dados, sobre o qual foi criado o
ficheiro transport. Não esquecer que para cada transporte é necessário associar um
serviço, e isto é feito no ficheiro master.cf.
6.4.6
Tabela virtual
Este ficheiro é utilizado por forma a tornar possível que um servidor (de um
domínio AA.net) possa armazenar correio de outros domínios, ficando no servidor até
que seja transferido para o servidor de correio do domínio ao qual se destina esse
correio. A figura 6.6 exemplifica este processo.
89
Lookup Tables
[email protected]
Servidor Unix
Sistema de queues
Postfix
[email protected]
virtual
@host1.com
@host2.com
@host3.com
@host4.com
[email protected]
Figura 6.6 - Exemplo de domínios virtuais
Existem vários tipos de definição de domínio virtual que podem ser definidos no
ficheiro virtual. A tabela 6.7 faz referência aos vários tipos.
Tipo
nome.dominio <qualquer_coisa>
Significado
Permite ao Postfix receber mensagens
para o dominio nome.dominio e colocalas no sistema de queues.
Recebe mensagens para o utilizador
utilizador@dominio e reenvia-as para os
utilizadores endereço1 e endereço2. Esta
declaração tem prioridade mais alta
relativamente ás outras.
Recebe mensagens do utilizador do
servidor local e reenvia-as para os
endereços especificados.
Recebe mensagens de todos os
utilizadores do dominio especificado e
reenvia-as
para
os
endereços
especificados.
utilizador@dominio endereço1, endereço2
utilizador endereço1, endereço2
@dominio endereço1, endereço2
Tabela 6.7- Tipos de domínios virtuais
90
Lookup Tables
Após a criação do ficheiro virtual, é necessário criar o ficheiro indexado
respectivo, por exemplo:
postmap hash:/etc/postfix/virtual
Por ultimo, declarar no ficheiro main.cf:
virtual_maps = hash:/etc/postfix/virtual
91
7
Migrando Sendmail para o Postfix
Este capitulo focará um dos aspectos mais pertinentes para qualquer administrador
de sistemas: Como migrar de um servidor de correio para outro. O Sendmail é um MTA
bastante mais antigo que o Postfix, por essa razão é natural que o número de servidores
que tem instalados o Sendmail seja bastante grande. Isto coloca um grave problema,
uma vez que, numa migração é fundamental preservar os dados existentes e cujo
processo seja além de transparente para os utilizadores, não traga transtornos
indesejáveis. Obviamente que o processo de migração trás maiores cuidados que uma
instalação de raiz de um servidor de correio (neste caso servidor de correio, no entanto é
uma preocupação presente em qualquer migração de aplicações). É necessário garantir
que não se perderá nenhuma mensagem.
Como já referido no capítulo 1, o Sendmail é um dos mais versáteis e robustos
MTA’s disponíveis. Graças á sua versatilidade é também um dos mais complicados de
administrar uma vez que a quase totalidade dos parâmetros de configuração encontra-se
num único ficheiro – sendmail.cf. Neste ficheiro existem parâmetros que controlam
tanto as mensagens recebidas bem como a forma como irá efectuar a entrega de correio.
7.1
Ficheiros e Directórios utilizados pelo Sendmail
O Sendmail não funciona isoladamente. Necessita de outros ficheiro e directórios
para executar as suas tarefas. Torna-se pois necessário conhecer a forma como funciona
antes de se efectuar uma migração para outro servidor de correio. Será focado estas
partes integrantes numa instalação padrão do Sendmail.
7.1.1
O programa executável Sendmail
Ao contrário do Postfix, o Sendmail utiliza um único programa para executar as
tarefas de recepção e entrega de correio. Normalmente é executado sob a forma de
“daemon” que aguarda pedidos de recepção e verifica a queue regularmente (intervalos
definidos) para fazer a entrega de correio que eventualmente exista. Pode-se contudo
utilizar TCP wrappers para executar o sendmail apenas quando necessário ao contrário
de estar sempre carregado em memória. No entanto degrada bastante a performance do
sistema, uma vez que terá que ler toda a configuração sempre que inicia (note-se que o
93
Migrando Sendmail para o Postfix
ficheiro de configuração poderá ser bastante extenso e por isso a sua interpretação pode
ser muito morosa). Este programa é executado como root. Os outros utilizadores podem
também executa-lo, no entanto não poderão aceder a locais tais como a mail queue do
sendmail.
7.1.2
O ficheiro de configuração sendmail.cf
O principal ficheiro de configuração no Sendmail é o sendmail.cf. É neste ficheiro
que de define a forma como serão processadas as mensagens. Estas definições
designam-se por rule sets. Estas regras são utilizadas pelo Sendmail para determinar o
emissor, receptor e domínio por forma a definir a forma como efectuar a entrega das
respectivas mensagens. Para além destas regras, inclui ainda definições que
caracterizam a forma como o sendmail processará as mensagens que recebe e envia. É
neste contexto que surgem as configurações que definem as lookup tables com
informação variada, tais como virtual domains e relaying hosts.
O Sendmail lê as configurações quando inicia. Qualquer alteração na configuração
implica que se pare e reinicie o programa. No Postfix não é necessário parar, apenas
“informa-lo” para voltar a ler as configurações.
7.1.3
O sistema de queues no Sendmail
O directório mqueue contém as mensagens que aguardam para ser processadas.
Ao contrário do Postfix, o Sendmail utiliza apenas este directório para colocar todas as
mensagens a processar. Como atrás referido, o Postfix utiliza um sistema de directórios
para processar as mensagens (maildrop, incoming, active e bounce). Quando o Sendmail
é executado, irá verificar as permissões dos ficheiros neste directório por forma a
impedir que os utilizadores possam ler o correio de outras pessoas. A localização por
defeito é em /var/spool/mqueue. No entanto poderá ser alterada, utilizando para o efeito
o ficheiro de configuração sendmail.cf ou durante a execução do programa.
7.1.4
Como verificar o conteúdo da queue
O programa mailq é um link para o programa sendmail. Quando invocado sob a
forma mailq, mostrará um sumário do conteúdo da queue (/var/spool/mqueue por
defeito). Como todas as mensagens são armazenadas numa única localização, o mailq
apenas terá que pesquisar um único directório.
94
Migrando Sendmail para o Postfix
7.1.5
Como criar Alias
O ficheiro newaliases também é um link para o programa sendmail. Quando
invocado com este nome (newaliases) o sendmail lê o conteúdo do ficheiro texto
/etc/aliases e permite criar uma base de dados de alias (utilizando para o efeito outro
programa previamente instalado no sistema).
7.1.5.1
Base de dados de Alias
Uma característica importante do Sendmail é a capacidade de se ter nomes
diferentes para a mesma “caixa de correio”. Isto significa que podemos ter o endereço
[email protected] cujas mensagens recebidas vão para a mesma caixa de correio
do utilizador [email protected].
Todos os alias utilizados pelo Sendmail encontram-se num único ficheiro,
normalmente /etc/aliases, podendo ser alterado se configurado no ficheiro sendmail.cf.
Este ficheiro de alias pode ser utilizado para definir alias para utilizadores, programas
ou ficheiros. A tabela 7.1 ilustra estas opções.
Sintaxe
Nomealias: nome1,nome2,...
Nomealias: | nome_programa
nomealias: ficheiro_out
nomealias: :include:fich_nomes
Significado
nomealias é o alias e nome1 e nome2 são os
nomes das caixas de correio para onde será
efectivamente enviado o correio recebido (via o
nomealias)
nome_programa é o caminho completo do
programa a ser executado para processar
determinada mensagem. Vulgarmente utilizado
para processar mailing lists tais como o programa
Majordomo.
Ficheiro_out é o ficheiro texto para onde irão
todas as mensagens recebidas pelo alias
nomealias. É necessário ter cuidado com as
permissões deste ficheiro_out.
Esta sintaxe tem o mesmo efeito que a primeira
(nomealias: nome1,nome2,...). No entanto poderá
ser mais fácil de utilizar em sistemas com muitos
nomes para um alias.
O ficheiro fich_nomes contém os endereços de
correio para onde deverão ser enviadas as
mensagens recebidas via nomealias.
Tabela 7.1 -Exemplo de um ficheiro alias
95
Migrando Sendmail para o Postfix
7.1.6
Como calcular estatísticas
O comando hoststat é um link para o sendmail e quando executado (como
hoststat) o sendmail pesquisará um determinado ficheiro e enviará para o ecrãn
informações relativas a todos os sistemas para onde o sendmail enviou mensagens.
7.1.6.1
Como reiniciar as estatísticas
O comando purgestat também é um link para o programa sendmail e quando
executado irá remover todas as estatísticas presentes no ficheiro respectivo.
7.1.6.2
Armazenando as estatísticas
Todas as estatísticas fornecidas pelo comando hoststat são retiradas do ficheiro
que se encontram no directório /var/spool/mqueue/.hoststat.
7.1.6.3
Configurar o Sendmail para guardar estatísticas
A existência do ficheiro sendmail.st significa para o sendmail que deverá registar
informações estatísticas relativas ao tráfego de saída de correio. Se não existir este
ficheiro, nenhumas estatísticas serão registadas. Este ficheiro poderá localizar-se em
/etc, no entanto poderá ser em /var/log como no caso de algumas distribuições de linux.
7.1.7
Ficheiro de Ajuda no Sendmail
O ficheiro sendmail.hf é utilizado para fornecer ajuda na utilização do comando
HELP na linha de comando SMTP. Este ficheiro normalmente encontra-se em /usr/lib.
Este ficheiro tem um formato especifico. O exemplo seguinte ilustra um excerto deste
ficheiro :
mail
mail
MAIL FROM: <emissor> [ <parametros> ]
Especifica o emissor. Os parâmetros são extensões do
ESMTP.
Consulte “HELP DSN” para obter mais informações.
QUIT
Sai do sendmail (SMTP).
mail
quit
quit
Listagem 7.1- Exemplo de um ficheiro sendmail.hf
7.1.8
Reenvio de correio – forwarding
Mail forwarding define um método que permite a um utilizador que o correio
enviado para determinada caixa de correio seja reencaminhado para uma outra caixa de
correio. Para que isto seja possível, cada utilizador poderá criar um ficheiro .forward na
96
Migrando Sendmail para o Postfix
sua $HOME. O sistema antes de armazenar a mensagem de correio na caixa de correio
do respectivo utilizador, consulta o ficheiro .forward, e caso exista algum endereço de
correio, remite a mensagem para esse destinatário.
O ficheiro .forward permite mais do que reenvio de correio. Pode ser utilizado para:
§ Reenvio da mensagem para outra caixa de correio
§ Colocar mensagem num outro ficheiro (diferente da caixa de correio no
sistema para o respectivo utilizador)
§ Reenvio para outro programa no sistema
§ Lista de endereços de correio
A tabela 6.2 demostra um exemplo de um ficheiro .forward.
Rjoao
Reenvia a mensagem para o utilizador rjoao na mesma
máquina
lmanuel
Reenvia a mensagem para o utilizador lmanuel na mesma
máquina
[email protected] Reenvia a mensagem para o utilizador lfilipe num outro
domínio (outrodominio.com)
/home/ana/mensagens
Reenvia a mensagem para o ficheiro mensagens
Tabela 7.2- Exemplo de um ficheiro .forward
7.2
Configurar Postfix para utilizar ficheiros do Sendmail
Como já foi referido anteriormente, o Postfix foi concebido para ser cem porcento
compatível com o Sendmail. Aquando da instalação, o Postfix irá sobrescrever alguns
ficheiros do Sendmail, tendo no entanto anteriormente efectuado uma cópia. Este
mecanismo possibilita reverter à situação inicial. Os ficheiros sobrescritos e sem cópia
durante a instalação são:
§ sendmail
§ mailq
§ newaliases
Desta forma, e no caso particular de se pretender preservar estes ficheiros, deverse-á mover para oura localização, por exemplo:
mv /usr/sbin/sendmail /usr/sbin/sendmail.original
mv /usr/sbin/mailq /usr/sbin/mailq.original
mv /usr/sbin/newaliases /usr/sbin/newaliases.original
97
Migrando Sendmail para o Postfix
Não esquecer alterar as permissões destes ficheiros, uma vez que o Sendmail é
instalado com a permissão “setuid” que permite executar o comando com direitos de
root (administrador principal). Exemplo :
chmod 744 /usr/sbin/sendmail.original
Nalgumas distribuições de UNIX, o comandos do Sendmail podem encontrar-se
noutra localização, relativamente à apresentada. Pode-se contudo utilizar o comando
type ou o comando find para localizar os programas supra mencionados. Exemplo:
type sendmail
find / -name sendmail
7.2.1
Utilização das caixas de correio existentes
Provavelmente já deverão existir caixas de correio no sistema que estamos a
migrar, devendo por isso serem também migradas por forma a que não se percam as
mensagens aí existentes. A localização destas caixas podem variar consoante o sistema,
por exemplo nas distribuições linux é comum encontrarem-se em /var/spool/mail. O
comando find acima referido pode ajudar a localizar.
Admitindo que existem caixas de correio e que elas encontram-se em
/var/spool/mail, a execução do comando ls –l /var/spool/mail poderá apresentar o
seguinte output:
total 4
drwxrwxr-x 2 root
mail 1024 Jun 19 23:02 .
drwxr-xr-x 6 root
mail 1024 Fev 11 02:14 ..
-rw-------
1 ana
mail
-rw-------
1 rjoao mail 463 Jun 24 12:20 rjoao
0 Jun 24 12:14 ana
[[email protected]]>
A caixa de correio de um utilizador tem o mesmo nome que esse mesmo
utilizador tem nesse sistema.
Não esquecer que quando se cria um utilizador no sistema, não é criada
automaticamente a sua caixa de correio. Esta será criada quando o sistema de correio
receber uma mensagem para esse utilizador.
98
Migrando Sendmail para o Postfix
Por defeito o Postfix utiliza estas caixas de correio sem ser necessário alterar
nenhuma configuração. Contudo caso estas caixas de correio encontrem-se numa outra
localização, definida pelo administrador de sistema, é necessário alterar a seguinte linha
no ficheiro master.cf :
mail_spool_directory = /dados/caixas_correio
Em que /dados/caixas_correio é a localização alternativa onde serão armazenadas as
mensagens recebidas.
Existem contudo outras possibilidades para armazenamento de mensagens de correio.
Por exemplo, e bastante comum em sistema UNIX é localizarem-se em $HOME.
Exemplo: /home/rjoao/Mailbox
Para que isto funcione deve-se proceder da seguinte maneira:
a) Mover a caixa de correio para /home/rjoao/
mv /var/spool/mail/rjoao /home/rjoao/Mailbox
b) Mudar as permissões para que o utilizador rjoao possa ler o ficheiro
chown rjoao /home/rjoao/Mailbox
c) Linkar o ficheiro Mailbox para o ficheiro original
ln -s /home/rjoao/Mailbox /var/spool/mail/rjoao
Desta maneira permitimos que determinados MUA (mais antigos) acederem ás
mensagens utilizando o formato descrito.
7.2.2
O Formato Maildir
Este formato difere bastante dos anteriores (/var/spool/mail /$HOME/Mailbox).
Por esta razão, a compatibilidade com outros programas, por exemplo MUA poderá
ficar comprometida. Contudo poderá existir um programa em background que faça a
tarefa de copiar as novas mensagens do formato Maildir para o formato padrão. Não
esquecer porém que, copiar as mensagens de 10 utilizadores não é o mesmo que copiar
mensagens de vários milhares. Este formato será adiante, descrito mais em pormenor.
7.2.3
Utilização dos Aliases do Sendmail
Uma das características importantes do Sendmail, é o facto de permitir redefinir
nomes de caixas de correio, para:
§ Outra caixa de correio
99
Migrando Sendmail para o Postfix
§ Um ficheiro no mesmo sistema
§ Uma lista de endereços existentes num ficheiro texto
O administrador cria um ficheiro texto com estes alias, e depois converte esses
alias para um ficheiro binário, utilizando para o efeito o comando newaliases. O formato
binário permite a sua pesquisa bastante mais rápida.
O Postfix suporta integralmente as base de dados de alias do Sendmail. Existem
dois parâmetros no ficheiro main.cf que permitem definir essas base de dados de alias:
§ alias_maps – define a lista de base de dados de alias utilizadas pelo MDA local
(pode não ser necessariamente controlado pelo Postfix)
§ alias_database – define a base de dados criada pelo comando newaliases do
Postfix e é controlada pelo próprio Postfix
A existência deste dois parâmetros que especificam base de dados de alias poderá
parecer confusa, no entanto bastante útil em ambientes UNIX de grande escala,
nomeadamente aqueles que utilizam serviços de NIS para melhor administração dos
logins e passwords (estão centralizada). É aqui que o parâmetro alias_maps torna-se
importante. Podemos assim referenciar um servidor NIS que detém os nomes de
utilizadores existentes no sistema. Exemplo:
alias_maps = hash:/etc/postfix/aliases, nis:maq_nis.meudominio.net
alias_database = hash:/etc/postfix/aliases
O parâmetro alias_maps especifica todos os possíveis ficheiros onde poderá
verificar a existência de determinado utilizador. O parâmetro alias_database define o
ficheiro que será utilizado pelo comando newaliases na criação de novos alias.
7.2.4
Utilização de ficheiros .forward no Postfix
Como acima referido, a utilização de ficheiros .forward para reenvio de
mensagens para outros utilizadores é uma característica do Sendmail. O Postfix
implementa também esta funcionalidade. Isto só é possível se estiver configurado para o
efeito (por defeito fica configurado). Os parâmetros que controla a utilização do
.forward é o allow_mail_to_commands e o allow_mail_to_files no ficheiro master.cf.
Exemplo:
100
Migrando Sendmail para o Postfix
allow_mail_to_commands = alias, forward, include
allow_mail_to_files = alias, forward, include
Para impossibilitar esta funcionalidade, basta remover a palavra “forward” nos
parâmetros referidos.
7.2.5
Utilização do ficheiro sendmail.cw e de virtusertable
Se o Sendmail estiver configurado por forma a implementar domínios virtuais
(virtual domains) estes deverão estar definidos no ficheiro virtusertable, normalmente
no directório /etc. A listagem 7.2 mostra um exemplo deste ficheiro.
[email protected]
@outrodominio.net
@xptodominio.com
[email protected]
João
Outrodominio
Xptodominio
Mega
Listagem 7.2 - Exemplo de um ficheiro virtusertable
A primeira linha “mapeia“ um endereço de correio para um utilizador local. As
linhas 2 e 3 são exemplos do mapeamento de domínios para utilizadores locais no
sistema.
O conteúdo deste ficheiro deverá estar duplicado nas tabelas de lookup do Postfix.
A listagem 7.3 exemplifica um ficheiro virtual lookup table no Postfix.
@outrodominio.net
@xptodominio.com
@dom2.pt
[email protected]
@outrodominio.net
@xptodominio.com
[email protected]
Virtual
Virtual
Virtual
João
Outrodominio
Xptodominio
Mega
Listagem 7.3 - Exemplo de um ficherio virtual no Postfix
As primeiras três linhas definem os domínios para os quais serão aceites
mensagens. As linhas restantes fazem o mapeamento individual de utilizadores para
domínios.
Para além do virtusertable, o Sendmail também utiliza o ficheiro /etc/sendmail.cw
que especifica os domínios e sistemas dos quais aceitará correio. Este ficheiro difere do
101
Migrando Sendmail para o Postfix
virtusertable pois apenas tem os nomes dos domínios ou sistemas (hosts) enquanto que
o virtusertable mapeia directamente domínios a utilizadores.
O Postfix implementa esta função através do parâmetro mydestination. Todas as
referências existentes no ficheiro sendmail.cw devem ser aqui incorporadas. Exemplo:
mydestination = $myhostname, localhost.$mydomain, xptodominio.com
7.2.6
Processar Mensagens a Enviar
Aquando da instalação do Postfix, é possível e natural que algumas mensagens
não tenham sido enviadas. Se existirem, estas mensagens encontram-se no directório
/var/spool/mqueue, a não ser que a sua localização tenha sido redefinida no ficheiro
sendmail.cf. Para processar o correio em espera, pode-se executar o sendmail original,
nomeadamente utilizando o comando renomeado :
/usr/bin/sendmail.original -q
Neste comando, o sendmail irá processar as mensagens e depois terminará a sua
execução.
102
8
Postfix num ISP
Dada a crescente popularidade da Internet, as contas de e-mail aumentaram em
larga escala, quer a nível empresarial quer a nível doméstico. Concomitante a este
fenómeno vários fornecedores de serviços Internet (ISP’s) surgiram, possibilitando o
fornecimento de um simples serviço de e-mail assim como o acesso directo à Internet.
Este capítulo descreve a utilização do Postfix como um servidor de correio num
ISP com qualidade comercial numa plataforma UNIX. Este servidor pode servir tanto os
clientes individuais que se ligam unicamente a contas e-mail - via http ou utilizando um
client POP - assim como as PME’s cuja a ligação ao ISP é feita através dos seus
próprios servidores de correio.
8.1
Características de um Servidor de correio de um ISP
Os servidores de correio num ISP tem responsabilidades que, na maioria dos
casos (empresas de pequena, média e eventualmente de grande dimensão) não existem
ou não são necessárias. Segurança, capacidade de armazenamento, manutenção e
capacidade de processamento são alguns dos factores que justificam uma maior
exigência neste tipo de servidor. Num mercado de grande exigência é necessário
responder com argumentos tecnológicos, ou corre-se o risco de ser rapidamente
ultrapassado pela concorrência cada vez maior.
Uma grande parte das empresas (pequenas e médias) não têm ligações dedicadas à
Internet levando a que um host remoto aceite e armazene as mensagens dos seus
domínios. O servidor de correio local estabelece uma ligação a esse host através de uma
ligação dial-up em intervalos de tempo regular e verifica se há alguma mensagem para
transferir. Contudo, com os custos de acesso à Internet a baixarem cada vez mais, as
ligações Dial-Up vão dando lugar a ligações dedicadas à Internet, e por isso fazendo uso
dessa conexão para transferir correio do ISP, muitas das vezes com suporte VPN para
maior segurança.
O servidor de correio num ISP deve estar apto para aceitar correio de outros
domínios (que posteriormente se ligam a este por exemplo via dial-up). Se o ISP estiver
a servir mais do que um cliente, tem de encontrar alguma forma de separar o correio,
permitindo que servidores de correio de domínios individuais possam ligar-se ao
103
Postfix num ISP
servidor de correio do ISP para transferir o correio correcto. Aos múltiplos domínios
que servem um único servidor de correio é chamado de domínios virtuais - Virtual
Domains.
Outro requisito nos servidores de correio de um ISP é o mail relaying. Muitos
clientes que se ligam ao ISP não podem enviar mensagens directamente para o
destinatário, confiando-as num servidor de correio que por sua vez se encarregará de
entregar esse correio aos destinatários. Existem outros conceitos associados a serviços
que os ISP fornecem na área de correio electrónico, nomeadamente open relaying e
selective relaying. O primeiro é quando o servidor aceita mensagens de qualquer
emissor para posterior entrega, o segundo veio corrigir as lacunas do primeiro,
nomeadamente no que diz respeito ao envio de correio não solicitado (UCE), quase
sempre de forma abusiva por parte de quem pratica tais actos.
8.1.1
Domínios Virtuais
A utilização de domínios virtuais em servidores de correios tem vindo a tornar-se
uma prática comum dos ISP’s. A figura 8.1 mostra um diagrama de um domínio virtual
num ISP relativo a uma mensagem do utilizador Paulo. O servidor de correio local da
organização pode recuperar a mensagem armazenada na caixa de correio do Paulo. Uma
vez armazenado, o utilizador Paulo pode consultar a mensagem utilizando para o efeito
qualquer MUA.
A capacidade para armazenar mensagens de correio localmente para outro
servidor de correio no servidor de ISP é a ideia fundamental dos domínios virtuais. Para
que este sistema funcione, é necessário em primeiro lugar que os servidores de correio
dos ISP’s estejam capacitados para o efeito, isto é, aceitar o correio de determinado
domínio, coloca-lo num determinado local que posteriormente será utilizado para
efectuar a entrega do mesmo ao domínio correspondente. Posteriormente, e já no
servidor da organização (por exemplo uma empresa), o servidor de correio deverá ter a
capacidade de distribuir o correio recebido do ISP, pelos utilizadores a quem se
destinam as mensagens – é o mínimo exigido de um servidor de correio.
104
Postfix num ISP
Internet
Mensagem para
[email protected]
Servidor de
correio do ISP
Postfix
Caixa de correio do
utilizador em
mydomain.
Domínio mydomain.pt mapeado
para o utilizador mydomain
Caixa de correio
da organização
Paulo
Postfix
Caixa de correio
do Paulo
Figura 8.1- Exemplo de Domínios Virtuais
8.1.2
Selective Relaying
O selective relaying surgiu para ajudar a combater o chamado SPAM ou UCE,
uma vez que o método tradicional de relaying não validava o emissor da mensagem. A
figura 8.2 ajuda a compreender a forma como uma máquina na Internet pode enviar
mensagens sem que seja conhecida a sua identidade.
Internet
Mensagem para
[email protected]
Servidor
de Correio
do ISP
mailsrv.isp2.net
Servidor
de Correio
do ISP
srvmail.isp1.net
Figura 8.2 - Exemplo de Open Relaying
105
Postfix num ISP
Pelo exemplo pode-se verificar que, uma máquina clandestina envia uma
mensagem ao servidor do ISP srvmail.isp1.net, cujo destino é o utilizador Marco
existente no servidor mailsrv.isp2.net sem que o primeiro crie qualquer entrave – não
esquecer que a mensagem é proveniente de uma máquina não registada na Internet. O
resultado é que o correio que chega ao ISP2 tem como endereço original, o servidor de
correio ISP1. Para corrigir este problema, foram adicionadas extensões ao protocolo
SMTP, contudo nem todos os ISP’s estarão a tirar proveito do mesmo ou os seus
servidores não estarão configurados correctamente – a prova é que continuamos a
receber correio não solicitado, sobretudo aqueles que utilizaram os seus endereços em
newsgroups ou em sites de origem duvidosa. Como forma de atenuar este problema,
alguns servidores de correio implementam as suas próprias defesas. Basicamente duas:
§ apenas aceitar correio que se destina a utilizadores locais. Contudo, muitos ISP
permitem o acesso a contas de correio, por exemplo via http a utilizadores que
por sua vez podem enviar mensagens para a Internet.
§ implementando o selective relaying. A figura 8.3 mostra um exemplo dessa
implementação, em que o servidor poderá verificar quando recusa ou permite o
relaying de mensagens, bastando para o efeito consultar uma base de dados
com os IP’s dos clientes do ISP.
Servidor
de Correio
do ISP
Internet
Mensagem para
[email protected]
bloqueado
Servidor de
Correio do
ISP
mailsrv.isp2.net
Postfix
Servidor Correio
da Organização
Postfix
Mensagem para
[email protected]
Figura 8.3 - Exemplo da aplicação de selective relaying
106
Postfix num ISP
8.2
Configuração de domínios virtuais
O Postfix foi desenvolvido por forma a permitir múltiplos domínios virtuais.
Existem basicamente três formas para a sua implementação:
1. colocando todas as mensagens numa conta especial de correio, sendo
posteriormente responsabilidade do servidor de correio do respectivo domínio
fazer a ligação ao servidor do ISP e efectuar o download das mensagens.
2. fazer corresponder uma conta de correio de cada utilizador do domínio virtual
em questão, a uma conta no servidor local de correio do ISP.
3. utilizando o ficheiro transport em vez do ficheiro virtual (ver lookup tables). O
ficheiro transport pode ser configurado para aceitar correio de diferentes
domínios e envia-lo para o servidor local.
8.3
Configuração do DNS para Dominios Virtuais
Para que seja possível enviar correio para um domínio qualquer na Internet, é
necessário que alguém conheça a localização dos servidores intervenientes por forma a
efectuar a comunicação entre eles, isto é para que as mensagens possam ser entregues. É
desta forma que o DNS assume especial importância. Antes disto, é necessário à
organização pedir ás autoridades competentes o registo de um domínio (em Portugal, a
FCCN ). A figura 8.4 mostra um exemplo da interacção de um domínio com a Internet.
Após o registo, é necessário especificar dois DNS que irão suportar o domínio criado.
Normalmente os ISP’s também fornecem serviços de DNS, daí que o ISP que ficará
com o domínio virtual (para fazer hosting) poderá ser utilizado os DNS do mesmo. Uma
vez configurado os DNS, nomeadamente os registos MX, que apontam para o servidor
que receberá o correio – neste caso o servidor do ISP – já é possível enviar correio para
esse domínio criado.
107
Postfix num ISP
Internet
Servidor
de Correio
do ISP
mail.dominioxpto.com
Servidor de
Correio da
Organização
www.dominioxpto.com
ftp.dominioxpto.com
Domínio de dominioxpto.com
Figura 8.4 - Exemplo da interacção de um domínio na Internet
8.4
Configuração do Postfix para suporte a Domínios Virtuais
Como já referido, o Postfix permite três métodos para suporte de dominios
virtuais:
a) receber o correio de um domínio virtual completo
b) receber correio de utilizadores individualmente de um domínio virtual
c) utilizando o ficheiro transport
8.4.1
Configuração para receber correio de um domínio completo
Neste método, é necessário configurar o ficheiro virtual (normalmente mais
conhecido como virtual lookup table). Cada linha neste ficheiro corresponde a um
dominio virtual suportado pelo servidor de correio, por exemplo:
dominioxpto.com
virtual
outrodominio.pt
virtual
maisum.org
virtual
108
Postfix num ISP
O nome virtual neste ficheiro, não é importante, podendo ser qualquer texto. Cada
linha é um novo registo. Após a identificação dos dominios virtuais suportados, resta
identificar uma conta local no servidor que irá receber todo o correio de todos os
utilizadores de um domínio, por exemplo:
@dominioxpto.com utilizador_local_1
@outrodominio.pt
utilizador_local_2
@maisum.org
utilizador_local_3
Depois de modificado o ficheiro virtual (normalmente em /etc/postfix/virtual)
resta converte-lo para binário :
postmap hash:/etc/postfix/virtual
Não esquecer verificar se o parâmetro virtual_maps está correcto, no ficheiro
main.cf, nomeadamente:
virtual_maps = hash:/etc/postfix/virtual
Por ultimo, informar o Postfix que deve ler as novas configurações :
postfix reload
8.4.2
Configuração para receber correio de utilizadores individualmente
Existem situações em que os utilizadores de determinada organização em vez que
lerem o correio a partir de um servidor local, na organização, pretendem ligar-se
directamente ao servidor do ISP. Nesta situação, o Postfix permite que se crie
utilizadores localmente no servidor e fazer corresponder a cada um, um utilizador de um
domínio virtual. No ponto anterior foi necessário especificar uma conta local para fazer
corresponder um domínio virtual por completo, ou seja:
dominioxpto.com virtual.
De igual forma, na situação apresentada, também é necessário fazer corresponder
cada conta local a cada utilizador do domínio virtual, por exemplo:
[email protected]
jpaulo
[email protected]
ana
[email protected] tmiguel
109
Postfix num ISP
[email protected] vendas
[email protected]
vendas
Obviamente, os nomes dos utilizadores locais não tem que ter o mesmo nome que
o utilizador do domínio virtual. Apresenta-se desta maneira, por questões de clareza. Os
dois últimos exemplos são o reflexo disso mesmo, ao fazer corresponder dois
utilizadores do domínio virtual a uma mesma conta local. Outro ponto a referir, o
servidor de correio apenas irá aceitar mensagens para os utilizadores definidos,
rejeitando portanto todo o outro correio.
8.4.3
Configuração para receber correio utilizando o ficheiro transport
Nos dois exemplos anteriores, e em particular no segundo, a tarefa do
administrador de sistema exigia dois passos importantes:
§ a criação de cada utilizador no sistema, para cada utilizador de domínio virtual
– se o domínio virtual tivesse duzentos utilizadores, era necessário criar os
mesmo utilizadores localmente, sem erros e omissões
§ por último, fazer corresponder a cada utilizador virtual a uma conta física, ou
no mínimo uma conta local a um domínio virtual, no ficheiro virtual
Evidentemente, que este processo poderá ser bastante moroso, consumindo muito
tempo e desgaste ao administrador. É neste contexto, e para solucionar este problema
que surge uma terceira forma de configurar domínio virtuais no Postfix. O processo é
simples, em vez de utilizar o ficheiro virtual, utiliza-se o ficheiro transport. Este último,
permite definir no Postfix, como é que este deverá proceder para fazer a entrega de
correio para determinado host ou domínio. Especificando o método local, é possível
automaticamente fazer corresponder um domínio virtual a um determinado host. Por
exemplo, pode-se definir as seguintes linhas no ficheiro transport:
empresa_a.pt local:
empresa_b.pt local:
empresa_c.pt local:
Não esquecer, converter para binário:
postmap hash:/etc/postfix/transport
110
Postfix num ISP
Por último, identificar este ficheiro no Postfix, isto é adicionado a seguinte linha no
ficheiro main.cf:
transport_maps = hash:/etc/postfix/transport
Para que as configurações sejam assumidas, executar :
postfix reload
Neste exemplo, todas as mensagens recebidas para os respectivos domínio virtuais
definidos, são aceites e guardadas no sistema com o mesmo nome de utilizador.
Posteriormente, os utilizadores podem ligar-se ao servidor, utilizando qualquer MUA,
para consultar o seu correio. Evidentemente, que corre-se o risco de podermos ter
nomes iguais em domínios diferentes. É um problema que se coloca, daí que nem
sempre se pode utilizar este método.
8.5
Selective Relaying no Postfix
Uma das características básicas num ISP, é o de possibilitar aos seus clientes, a
entrega de correio na Internet. Regra geral, a maioria das empresas não tem servidores
de correio dedicados, directamente conectados á Internet, e que por si só, sejam capazes
de efectuar a entrega de correio na Internet. A forma clássica de funcionamento é a
existência de um servidor de correio na organização que recebe todo o correio, e que
posteriormente com intervalos de tempo definidos, liga-se ao um servidor de correio no
ISP, e transfere todo o correio. Cabe ao servidor do ISP a responsabilidade de efectuar a
entrega do correio na Internet. A este processo, designa-se relay.
Contudo, o ISP deverá ter outra responsabilidade, a de controlar quem se liga para
fazer relaying. Esta forma de controlo designa-se de selective relaying.
Para efectuar este tipo de controlo, o Postfix permite vários parâmetros, por
exemplo :
smtpd_recipient_restrictions = valor
Em que valor pode ser basicamente :
§ check_relay_domains – verifica se a mensagem se destina a alguém definido
em $mydestination, $inet_interfaces, $virtual_maps ou $relay_domains
§ reject – rejeita todas as mensagens, mesmo as de utilizadores locais
111
Postfix num ISP
§ reject_unauth_destination – rejeita todas as mensagens, a não ser que
obedeçam ao parâmetro check_relay_domains.
Valor pode assumir uma ou várias opções, separadas por virgula ou espaço. Existem
contudo, outros valores que podem ser definidos.
Por defeito, e caso não se especifique nada, o Postfix assume os valores
permit_mynetworks e check_relay_domains. O parâmetro permit_mynetworks permite
especificar que o Postfix aceitará correio proveniente de qualquer IP definido em
$mynetworks, no ficheiro main.cf. Normalmente utilizado em redes com várias
subredes. Se este valor for utilizado para rede de clientes, outras configurações serão
necessárias, descritas mais adiante.
8.5.1
Valores de rejeição
Como acima referido, existem muitos outros valores que podem ser utilizados no
parâmetro smtpd_recipient_restrictions. A tabela 8.1 mostra os valores que permitem
definir a acção de rejeição na aceitação de correio.
Valor
reject
reject_invalid_hostname
reject_maps_rbl
reject_mon_fqdn_hostname
reject_mon_fqdn_recipient
reject_non_fqdn_sender
reject_unauth_destination
reject_unauth_pipelining
reject_unknown_client
reject_unknown_hostname
Significado
Todos os pedidos, mesmo os locais.
Nome de maquinas inválidas fornecidos
ao comando HELO (comando SMTP).
Se o cliente estiver definido em
$maps_rbl_domains.
Quando não se trata de um nome de
máquina FQDN definido no comando
HELO.
Quando não se trata de um nome de
máquina FQDN no endereço destino.
Quando não se trata de um nome de
máquina FQDN no caso do emissor.
Caso a máquina destino não esteja
definida
em
$mydestination,
$inet_interfaces, $virtual_maps ou
$relay_domains.
Correio enviado através de um
programa SMTP pipelining.
Quando não é conhecido o nome da
máquina cliente.
Nome da máquina definida no comando
HELO, não tem registo DNS A ou MX.
112
Postfix num ISP
reject_unknown_recipient_domain
Correio enviado para domínios sem
registo DNS A ou MX.
Correio enviado por domínios sem
registo DNS A ou MX.
reject_unknown_sender_domain
Tabela 8.1- Valores de rejeição
Não esquecer que cada valor no parâmetro smtpd_recipient_restrictions deverá ser
separado por virgula ou espaço.
8.5.2
Valores de permissão
Existem também formas de permitir explicitamente a utilizadores remotos
efectuarem relaying num servidor Postfix, utilizando para o efeito os valores :
§ permit – permite qualquer cliente.
§ permit_auth_destination
–
permite
relaying
a
clients
definidos
em
$mydestination, $inet_interfaces, $virtual_maps e $relay_domains.
§ permit_mx_backup – quando o servidor Postfix actua como um sistema de
backup.
8.5.3
Utilizando loockup tables para controlar o acesso de clientes
A utilização de ficheiros auxiliares (neste caso lookup tables) para controlar o
acesso de clientes a efectuarem relaying no servidor, é outro dos pontos fortes do
Postfix e que caracteriza bem a sua grande versatilidade. Existem quatro possibilidades:
§ check_client_access
§ check_helo_access
§ check_recipient_access
§ check_sender_access
A sua utilização é feita acrescentando, por exemplo, o parâmetro :
check_client_access hash:/etc/postfix/meus_clientes
A sintaxe do ficheiro meus_clientes é:
Endereço valor
Em que Endereço pode ser um IP, nome de uma máquina, nome de domínio ou
uma gama de IP’s de uma rede. O campo valor terá a acção a ser executada pelo Postfix,
113
Postfix num ISP
por exemplo REJECTC ou códigos de erros de SMTP, por exemplo 4xx, 5xx. Qualquer
outro conteúdo no campo valor, permitirá ao cliente efectuar relaying.
Exemplo da utilização no parâmetro smtpd_recipient_restrictions :
smtpd_recipient_restrictions = check_client_access
reject
114
hash:/etc/postfix/meus_clients,
9
Sistemas Externos vs Postfix
Nos capítulos anteriores, surgiram exemplos de funcionalidades do Postfix, que
recorriam a programas externos, como por exemplo o gestor de base de dados MySQL.
Este capítulo visará a apresentação, de forma muito genérica, de alguns programas que
podem interagir com o Postfix, de forma a maximizar ainda mais as suas
potencialidades.
9.1
MySQL
O MySQL é um gestor de base de dados disponível para sistemas UNIX. As suas
capacidades englobam:
§ Suporte a base de dados relacionais
§ Suporte a base de dados indexadas
§ Linha de comando
§ Suporte a clientes remotos
§ Possibilidade de importar/exportar base de dados
§ Acesso controlado por nível utilizador
§ Suporte ODBC e JDBC
O Postfix tem necessidade de consultar várias tabelas (por exemplo, virtual,
transport, canonical,...) e, se o seu conteúdo for extenso, o tempo de acesso poderá ser
relativamente grande, no caso de se utilizar ficheiros texto. É neste contexto que a
utilização de um gestor de base de dados poderá ser bastante importante. Um exemplo
de utilização, é no caso da criação de uma tabela de endereços suspeitos de spem, que
obviamente, poderá crescer bastante. O MySQL pode ou não estar instalado no mesmo
servidor que o Postfix, podendo por exemplo ser utilizada uma instalação já existente na
organização, bastando criar novas tabelas na base de dados, e configurar o Postfix para a
sua utilização.
9.2
OpenLDAP
O OpenLDAP é um programa que implementa o protocolo LDAP e para
ambientes UNIX. O LDAP é um protocolo que fornece serviços de directório, isto é, de
uma forma centralizada pode-se ter informação sobre aplicações, recursos, utilizadores,
115
Sistemas Externos vs Postfix
etc. A NetWare da Novell e o Active Directory da Microsoft são dois exemplos de
implementações deste conceito, no entanto utilizando protocolos proprietários. As bases
de dados de LDAP funcionam similarmente de forma hierárquica ao DNS,
relativamente à forma como armazena nomes de domínios.
O Postfix pode utilizar implementações deste serviço para, por exemplo, validar o
correio que entra no sistema, verificando se determinado endereço de correio existe
internamente. Não esquecer que, o Postfix deverá ser compilado com determinadas
opções, de forma a poder suportar LDAP.
9.3
Majordomo
O Majordomo é mais um dos exemplos de programas externos referenciados ao
longo deste trabalho. Possibilita a criação de várias mailing lists quer do administrador
quer do utilizador. Este tipo de serviço permite por exemplo, receber por correio as
últimas novidades do Postfix, caso se tenha subscrito essa mailing list. Existem muitas
aplicações que implementam este serviço (ex: Mailman), contudo o Majordomo será
eventualmente o mais conhecido.
9.4
SqWebMail
O acesso ao correio via WWW tornou-se uma prática corrente e necessária.
Existem vários programas que permitem a leitura de correio via web e que podem
interagir com o Postfix. No caso do Postfix estar configurado para funcionar com o
esquema de queues Maildir, pode-se utilizar o SqWebMail. Este programa faz parte do
servidor de correio Courier, contudo pode ser instalado separadamente para operar com
o Postfix. Funciona à base de CGI e requer que se tenha a funcionar um servidor Web,
por exemplo Apache. Quanto à autenticação, este programa permite vários métodos:
§ Via ficheiro standard do UNIX, /etc./passwd ou /etc./shadow
§ Pluggable Authentication Modules (PAM)
§ Base de dados MySQL
§ LDAP
§ Base de dados própria
§ SASL
Após a instalação deste programa, e respectiva configuração bem como do
servidor Web, pode-se utilizar um cliente Web qualquer para consultar o correio.
116
Sistemas Externos vs Postfix
Permite também, o acesso autenticado, criação de novas pastas, bem como o envio de
correio.
117
Futuro do Correio Electrónico
Desde a antiguidade que o Homem tenta superar amanha, o que conseguiu hoje.
Nos últimos séculos, assistimos a várias revoluções: mecânica, eléctrica, electrónica e
por fim a informática. No primeiro capítulo, apresentou-se uma breve história ao
desenvolvimento do correio electrónico. Em apenas vinte anos a transformação foi tal,
que seria impensável utilizar as ferramentas de correio que nessa época existiram. Como
será daqui a outros vinte anos?
Não sei, e provavelmente ninguém sabe. Contudo, neste capítulo tentar-se-á, na
medida do possível, fazer uma antevisão, para as evoluções num futuro próximo,
utilizando naturalmente, temas "quentes" da actualidade.
Apresentou-se de forma sucinta, a evolução dos protocolos utilizados pelos
programas de correio: SMTP, POP, LMTP, IMAP, etc. Constatou-se que houve
evolução dos protocolos, para responder a novos desafios, ou mesmo lacunas dos seus
antecessores, bem como, a crescente necessidade da integração de serviços até então
alheios ao e-mail. Surgiram várias aplicações já enumeradas, Microsoft Exchange,
Domino da IBM, Novell GroupWise, entre outras, que integram outros serviços,
podendo noutros casos a própria funcionalidade de correio estar integrada noutros
serviços, como é o caso do Exchange e o Active Directory. Naturalmente que esta
integração exigia novos protocolos standars, por exemplo o LDAP ou mesmo
protocolos proprietários, utilizados pelas respectivas softwarehouses.
Este raciocínio, conduz naturalmente a uma proliferação de protocolos mais ou
menos padronizados. Por que não integrar várias funcionalidades num único protocolo ?
É neste contexto que surge a ideia de criar um único protocolo que agrupe as
funcionalidades MIME, IMAP4, LDAP e SMTP. Esse protocolo é o IMSP - Internet
Message Support Protocol (Project Cyrus , Carnegie Mellon University). Os objectivos
deste protocolo são:
§ Escalabilidade
§ Mobilidade - transparente para o utilizador em ambientes heterogéneos e em
locais diferentes, isto é, o utilizador não deverá sentir diferença quando se
desloca de um "cliente" para outro. Em termos comparativos, seria um
"profile" do windows igual em qualquer máquina, independentemente onde
faça login.
119
Postfix – uma visão pessoal
§ Flexibilidade na Administração
A necessidade de segurança é tanto maior, quanto maior for o valor da
informação. Todos sabemos o quanto é fácil enviar uma mensagem de correio, com o
endereço electrónico de outra pessoa, mesmo sem ter acesso físico ou lógico ao sistema.
De facto, o SMTP, tem graves deficiências nesta matéria. Por forma a superar esta
limitação, existe a necessidade de implementar alternativas a este protocolo. É o caso do
AMTP - Authenticated Mail Transfer Protocol, tendo como base o SMTP. Este
protocolo, em fase de discussão, utiliza o TLS - Transport Layer Security [RFC2246] para criar uma ligação segura e autenticada (tal como o SSL no http) e o X.509
[RFC2459] para certificar os MTA's, emitidos por uma entidade certificadora
reconhecida por ambos os MTA's e que são utilizados na autenticação. Utiliza ainda um
conjunto de MPC - Mail Policy Code que permite ao servidor decidir em aceitar ou não
mensagens, de acordo com um conjunto de regras. O documento apresentado pela IETF
- Internet Engineering Task Force, considera ainda que, no futuro, a entidade IANA Internet Assigned Numbers Authority, seria responsável pela gestão das MPC's, de
acordo com as suas próprias regras. Pensemos nestas regras como as "Policies" no
Windows da Microsoft, e numa arquitectura Active Directory, onde um cliente pode
herdar "Policies" de um servidor, que por sua vez herda do servidor acima, em termos
de hierarquia. O AMTP é a formula encontrada para atacar forte e eficazmente o tão
proliferado SPAM, sendo naturalmente de esperar uma gradual substituição do actual
SMTP.
A partilha de informação é também um requisito fundamental de qualquer
organização. Daí que as ferramentas de groupware (por exemplo Domino) proliferem
no mercado, à medida que o World Wide Web toma conta do dia a dia das pessoas.
Contudo, na maioria dos casos, essas ferramentas de groupware, requerem software
cliente especifico, tal como o Lotus Notes. O acesso à informação tenderá cada vez mais
a ser padronizado e independente da aplicação servidora onde reside a informação,
utilizando ferramentas tais como o http e protocolos afins. A sua utilização, não só
permite heterogeneidade de sistemas, como a própria mobilidade, mas também melhorar
as funcionalidades do próprio correio electrónico, permitindo, por exemplo a
incorporação de objectos, como se de uma pagina web se tratasse no próprio correio. A
funcionalidade já existe, não está é uniformizada.
120
Futuro do Correio Electrónico
À medida que a utilização do correio electrónico prolifera, crescem também cada
vez mais as caixas de correio. É vulgar o utilizador fazer uso da sua caixa de correio,
como fonte de conhecimento, em que a sua consulta será tanto melhor quanto melhores
forem as ferramentas oferecidas para a organização e mesmo consulta da mesma. As
caixas de correio, tendem naturalmente a passar de simples repositório de mensagens,
para complexas bases de dados indexadas.
Muitas das vezes temos vontade de acrescentar ou alterar a informação na
mensagem que acabamos de enviar. Mas se o acesso embora que controlado às caixas
de correio dos outros utilizadores fosse possivel para, por exemplo, remover essa
mensagem, poderia ser o descalabro da segurança. A existência de uma forma de tornar
uma mensagem com capacidade de sobrescrita de uma outra já enviada, poderia
responder
à
ideia,
sem
comprometer
121
a
tão
apregoada
segurança.
Postfix – uma visão pessoal
Quando se fala de funcionalidades de servidores de correio, pensamos
sistematicamente por exemplo, em aplicações MUA’s, tipo Microsoft Outlook. O
Postfix é um MTA, não uma ferramenta de groupware.
Uma das características do Postfix, é a integração com outros programas, por
exemplo, o MySQL que poderá ser utilizado para manter uma base de dados de
endereços de correio de proveniência considerada spamming. Na actualidade existem
vários softwares que, de forma mais ou menos eficaz conseguem controlar as
mensagens não solicitadas (SPAM). Contudo, a sua eficácia depende do empenho do
utilizador ou mesmo do próprio administrador. Admitindo que ainda vivemos a era dos
"Agentes Inteligentes", porque não adicionar esta funcionalidade aos servidores de
correio?
Neste caso, o agente seria uma entidade autónoma e, possivelmente, inteligente.
Podia ser vantajoso ser pró-activo, isto é, tomar a iniciativa de realizar tarefas . O que o
agente traz de bom é que substitui o utilizador no trabalho de filtragem, sendo desejável
que o utilizador não tenha que ensinar o agente explicitamente cada vez que uma
mensagem indesejada chegue. O objectivo principal seria não existir configuração, isto
é, construção de regras de filtragem pelo utilizador. As tarefas do agente
compreenderiam:
§ analise das mensagens
§ extração das palavras mais relevantes (características)
§ ponderação do peso das palavras para efeitos de classificação
§ atribuição de uma nota às mensagens
§ com base na nota, decisão se a mensagem é boa ou indesejada
§ actuação, isto é, marcação ou eliminação das mensagens indesejadas
De facto, o seu potencial é bastante grande, na medida que, poderíamos ter um
agente que aprendesse com o tempo, e à medida que a sua base de conhecimento
aumentava, tornar-se-ia ainda mais eficaz.
Naturalmente que as inovações a nível protocolar apresentadas no ponto anterior,
não deverão ser minimamente descoradas, até porque um dos grandes pontos fortes do
Postfix, é precisamente a segurança. A utilização de certificados não é novo no Postfix.
123
Bibliografia
A sua inclusão já existe, aquando da realização deste trabalho, utilizando para o efeito o
TLS e autenticação SASL, no entanto, este último não é recomendado por Wietse
Venema.
É mais que evidente, que o Postfix è uma importante opção no seio dos MTA’s,
quer pela caracterização aqui referida, quer pelos inúmeros comentários em sites da
especialidade.
124
Bibliografia
§ ftp://ftp.inescn.pt/pub/net/mail/postfix/index.html
§ ftp://ftp.porcupine.org/pub/security/index.html
§ ftp://koobera.math.uic.edu/www/surveys/smtpsoftware3.txt
§ http://amtp.bw.org/
§ http://andrew2.andrew.cmu.edu/cyrus/
§ http://kirb.insanegenius.net/postfix.html
§ http://msgs.securepoint.com/postfix/
§ http://rpmfind.net
§ http://starbase.neosoft.com/~claird/comp.lang.python/python.html
§ http://www. openldap.org
§ http://www.advosys.ca/papers/postfix-filtering.html
§ http://www.aet.tu-cottbus.de/personen/jaenicke/postfix_tls/
§ http://www.alphaworks.ibm.com
§ http://www.deadly.org/article.php3?sid=20030712074538
§ http://www.direct-to-linux.com/TUTORIALS/LinuxTutorialLDAP.html
§ http://www.exim.org
§ http://www.fivesight.com/downloads/openldap.asp
§ http://www.freebsddiary.org/postfix-virtual-domains.php
§ http://www.gnu.org
§ http://www.greatcircle.com/majordomo/FAQ.html
§ http://www.high5.net/howto/
§ http://www.hispalinux.es/~data/postfix/
§ http://www.inter7.com/sqwebmail.html
§ http://www.kagekaze.org/postfix/
§ http://www.linuxsecurity.com/feature_stories/feature_story-91.html
§ http://www.linuxworld.com/linuxworld/expo/lw-email.html
§ http://www.list.org/
§ http://www.majordomo.com
§ http://www.mandrakesecure.net/en/docs/ldap-auth.php
§ http://www.mysql.com
§ http://www.opensource.org/
125
Bibliografia
§ http://www.oxixares.com
§ http://www.postfix.org
§ http://www.qmail.org
§ http://www.redhat.com/support/resources/faqs/RH-postfix-FAQ/book1.html
§ http://www.sendmail.com
§ http://www.sendmail.org
§ http://www.sunworld.com/swol-07-1998/swol-07-security.html
§ http://www.wilsonweb.com/articles/majordomo.htm
§ http://www-1.ibm.com/servers/aix/products/aixos/linux/date.html
§ Monteiro E., Boavida F., Engenharia de Redes Informáticas, FCA
§ Loureiro P., TCP/IP em Redes Microsoft, FCA
§ [CCITT.X509.1988]
International Telephone and Telegraph Consultative
Committee, "Information Technology - Open Systems
Interconnection - The Directory: Authentication
Framework", CCITT Recommendation X.509, November 1988.
§ [RFC2234] Crocker, D. and P. Overell, "Augmented BNF for Syntax
Specifications: ABNF", RFC 2234, November 1997.
§ [RFC2693] Ellison, C., Frantz, B., Lampson, B., Rivest, R., Thomas,
B. and T. Ylonen, "SPKI Certificate Theory", RFC 2693, September 1999.
§ [RFC3232] Reynolds, J., "Assigned Numbers: RFC 1700 is Replaced by
an On-line Database", RFC 3232, January 2002.
Onde encontrar mais informação ?
Foram referidos aqui apenas alguns elementos bibliográficos utilizados neste
trabalho, nomeadamente sites de referência, no entanto os sites que abordam o
tema são bastante mais do que os apresentados. Basta utilizar um motor de busca,
como <http://www.google.com> e colocar a palavra postfix. Contudo a
informação disponivel é variada e vasta. Outras fontes importantes de informação
são a utilização de mailing lists normalmente existentes em sites oficiais como em
<http://www.postfix.org> bem como de newsgroups.
126
Download

Instituto Superior de Engenharia do Porto