instituto superior de engenharia do portopaf/proj/set2003/postfix.pdf · 2003. 9. 9. · instituto...

142
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

Upload: others

Post on 19-Aug-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

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

i

Í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 Protocolos MUA..................................................................................... 14

1.7.2.1 POP – Post Office Protocol ................................................................ 14

1.7.2.2 IMAP – Interactive Mail Access Protocol.......................................... 15

2 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

ii

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

3 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 Executar Postfix pela primeira vez......................................................... 38

3.4 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

iii

4 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

5 Ficheiro Main.cf ..................................................................................................... 65

5.1 Ficheiro main.cf.............................................................................................. 65

6 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 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

7 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

iv

7.1.4 Como verificar o conteúdo da queue ...................................................... 94

7.1.5 Como criar Alias ..................................................................................... 95

7.1.5.1 Base de dados de Alias ....................................................................... 95

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 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

8 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 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

9 Sistemas Externos vs Postfix................................................................................ 115

9.1 MySQL ......................................................................................................... 115

v

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

vi

Í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

vii

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

viii

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

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

1

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.

3

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.

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 e-

Mainframe

Software de troca mensagem

Utilizador A Utilizador B

Breve história dos sistemas de correio electrónico

4

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.

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

Mainframe

Software de troca mensagem

Utilizador A Utilizador B

Base Dados das mensagens

Breve história dos sistemas de correio electrónico

5

mensagens conhecer o nome do utilizador destino da mensagem. Num sistema multi-

mainframe 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.

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

Mainframe 1

Utilizador A

e-mail BD e-mail

Mainframe 2

e-mail BD e-mail

Utilizador B

Breve história dos sistemas de correio electrónico

6

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.

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

MTA Remotos

Mail Delivery Agent (MDA)

Mail Transfer Agent (MTA)

Mail User Agent (MUA)

Base Dados email

Servidor Unix

Breve história dos sistemas de correio electrónico

7

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.

Breve história dos sistemas de correio electrónico

8

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

Breve história dos sistemas de correio electrónico

9

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).

Breve história dos sistemas de correio electrónico

10

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

Breve história dos sistemas de correio electrónico

11

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.

Breve história dos sistemas de correio electrónico

12

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.

Breve história dos sistemas de correio electrónico

13

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.

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.

MUA User B

MUA User A

Utilizador A

MTA Ex: Postfix

Sistema X

Utilizador B

MTA Ex: Postfix

Sistema Y

SMTP

LAN

Breve história dos sistemas de correio electrónico

14

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

Breve história dos sistemas de correio electrónico

15

enviadas do servidor para o cliente. Opcionalmente, o MUA poderá ou não, remover as

mensagens no servidor.

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.

Cliente POP3 Utilizador A

Utilizador A

Serviço POP3

Sistema X

LAN

Breve história dos sistemas de correio electrónico

16

Figura 1.7 - Exemplo de uma ligação IMAP

Cliente IMAP Utilizador A

Utilizador A

Serviço IMAP

Sistema X

LAN

17

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

Introdução ao Postfix

18

“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 Descrição bounce Cria mensagens de log de mensagens que não podem ser entregues

e reenvia-as para o emissor. cleanup Processa os cabeçalhos das mensagens de entrada e coloca as

mensagens na incomming queue. error Processa pedidos vindo do qmgr local Faz a entrega das mensagens destinadas a utilizadores locais pickup Aguarda a chegada de mensagens á maildrop queue e envia-as

para o programa cleanup. pipe Faz o reenvio de mensagens do qmgr para programas externos.

Introdução ao Postfix

19

postdrop Move as mensagens de chegada para a maildrop queue quando essa queue não tem permissões de escrita para um utilizador normal.

qmgr 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.

showq Mostra o estado actual das queue’s. smtp Cliente SMTP que faz o reenvio de mensagens para servidores de

mail externos, utilizando o protocolo SMTP. smtpd Servidor SMTP que recebe mensagens provenientes de servidores

de mail externos, utilizando o protocolo SMTP. trivial-rewrite 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

(yes) private (yes)

unpriv (yes)

chroot (never)

wakeup (50)

maxproc command+args

# ============================================================ 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.

Introdução ao Postfix

20

Queue Descrição maildrop Contém as novas mensagens a serem processadas vindas de

utilizadores locais. incoming Contém as novas mensagens recebidas de servidores remotos,

bem como mensagens já processadas de utilizadores locais. active Contém as mensagens que estão prontas para entrega. deferred Contém as mensagens cuja primeira tentativa de entrega

falhou. Novas tentativas de entrega serão feitas. mail Mensagens entregues a utilizadores locais.

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 Descrição mailq Pesquisa mensagens nas queues e mostra o resultado. postalias Este comando permite criar, alterar ou fazer pesquisas à base de

dados de alias. postcat Mostra o conteúdo das queues. postconf Permite visualizar e alterar o conteúdo do ficheiro de configuração

main.cf. postfix Permite iniciar, parar ou reiniciar o servidor de correio. postkick Permite enviar pedidos para executar determinados serviços do

Postfix. postlock Permite bloquear determinado ficheiro do Postfix, e executa

determinado comando. postlog Envia mensagens de log (traçagem) para o sistema. postmap Este comando permite criar bem como fazer pesquisas a tabelas

lock up. postsuper Permite fazer manutenção a determinado directório de queue’s. sendmail Fornece uma interface compativel com o Sendmail a programas

para enviar mensagens para a maildrop. Tabela 2.4 - Utilitários do Postfix

Introdução ao Postfix

21

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 Descrição

install.cf Contém os parâmetros utilizados aquando da instalação do Postfix.

main.cf Contém parâmetros de controlo de operações, utilizado pelo Postfix durante o processamento de mensagens.

master.cf 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 Descrição

access Faz o mapeamento de SMTP’s remotos numa perspectiva de controlo de acesso, para efeitos de segurança.

aliases Faz o mapeamento de caixas alternativas para as caixas de correio locais (mailbox’s).

canonical Faz o mapeamento de nomes alternativos de caixas de correio para as caixas de correio reais (devido ao cabeçalho das mensagens)

relocated Permite renomear uma caixa de correio antiga para uma nova.

Introdução ao Postfix

22

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.

virtual Faz o mapeamento entre recipientes e domínios para as caixas de correio locais, para entrega

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

Introdução ao Postfix

23

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.

Introdução ao Postfix

24

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 round-

robin. 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

Introdução ao Postfix

25

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

Introdução ao Postfix

26

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

Introdução ao Postfix

27

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.

29

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.18-

3). 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.7-

2.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

Instalação e Configuração do Postfix

30

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

Instalação e Configuração do Postfix

31

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.

Instalação e Configuração do Postfix

32

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

Instalação e Configuração do Postfix

33

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).

Instalação e Configuração do Postfix

34

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

Instalação e Configuração do Postfix

35

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

Instalação e Configuração do Postfix

36

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.

Instalação e Configuração do Postfix

37

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

Instalação e Configuração do Postfix

38

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 Descrição /etc/postfix 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)

Instalação e Configuração do Postfix

39

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

Instalação e Configuração do Postfix

40

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 00:00:00 grep send

root 998 1 0 10:28 ? 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

Instalação e Configuração do Postfix

41

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 4096 Jul 14 11:03 lib

drwx-wx--- 2 postfix postdrop 4096 Apr 15 2002 maildrop

drwxr-xr-x 2 root root 4096 Jul 14 11:08 pid

drwx------ 2 postfix root 4096 Jul 14 11:52 private

drwx--x--- 2 postfix postdrop 4096 Jul 14 11:52 public

drwx------ 2 postfix root 4096 Apr 15 2002 saved

drwxr-xr-x 3 root root 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

Instalação e Configuração do Postfix

42

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.

Instalação e Configuração do Postfix

43

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

Instalação e Configuração do Postfix

44

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.

Instalação e Configuração do Postfix

45

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 Descrição

abort Para imediatamente a execução do Postfix. check 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.

flush Tenta enviar todas as mensagens existentes na queue deferred reload 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.

start Este comando verifica a configuração de sistema e inicia o processo master do Postfix.

stop 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

Instalação e Configuração do Postfix

46

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 Descrição -N Inclui caracter null para terminar as chaves (key). -i Lê do standard input e adiciona-o no final do ficheiro. -n Não inclui caracter null para terminar as chaves (key). -r Não imprime avisos caso exista duplicação de nomes. -w Imprime avisos caso exista duplicação de nomes. -c config_dir Utiliza o ficheiro main.cf existente no directório config_dir -d key Remove determinado alias com o nome key. -q key Permite efectuar pesquisas à base de dados sobre a existência

de determinada key (imprime a primeira ocorrência de key). -v Modifica o nível de log. file_type Tipo de base de dados onde será efectuada a pesquisa (ver

tabela 3.4). nome_ficheiro 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 Descrição Btree Este tipo de base de dados, com o nome nome_ficheiro.db utiliza o

sistema de base de dados DB. Dbm Este tipo de base de dados cria dois ficheiros : nome_ficheiro.pag e

nome_ficheiro.dir. Hash 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

Instalação e Configuração do Postfix

47

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 ...]

Instalação e Configuração do Postfix

48

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 Descrição

-d Mostra o valor por defeito atribuído aquele parâmetro em vez do actual valor existente no ficheiro de configuração.

-h Mostra o valor do parâmento sem descrição. -m Lista o conjunto de tipos de tabelas de lookup suportadas. -n Mostra apenas os parâmetros cujo conteúdo é diferente do valor

padrão. -v Permite colocar determinadas mensagens de log no sistema. -c 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 Descrição -e Edita o ficheiro main.cf. -v Permite o envio de determinadas mensagens para o sistema de

log. -c Utiliza o ficheiro main.cf existente no directório config_dir.

Tabela 3.6 - Opções de edição do postconf

Instalação e Configuração do Postfix

49

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.

Instalação e Configuração do Postfix

50

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 Descrição

-c Permite informar qual o master.cf a ler -i Permite incluir o ID do processo no sistema de log -p 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.

-t Permite especificar uma palavra para identificar o registo -v Activa o verbose no sistema de log

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.

Instalação e Configuração do Postfix

51

Opção Descrição -N Inclui caracter null para terminar as chaves (key). -i Lê do standard input e adiciona-o no final do ficheiro. -n Não inclui caracter null para terminar as chaves (key). -r Não imprime avisos caso exista duplicação de nomes. -v Permite enviar mensagens de log para o sistema de log. -w Imprime avisos caso exista duplicação de nomes. -c config_dir Permite informar o comando para utilizar o ficheiro main.cf

existente em config_dir. -d key Remove determinado alias com o nome key. -q 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)

Instalação e Configuração do Postfix

52

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

Instalação e Configuração do Postfix

53

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 Relocations: (not relocateable)

Version : 1.1.7 Vendor: Red Hat, Inc.

Release : 2 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 Source RPM: postfix-1.1.7-

2.src.rpm

Instalação e Configuração do Postfix

54

Size : 6588751 License: IBM Public License

Packager : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>

URL : http://www.postfix.org

Summary : 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

Instalação e Configuração do Postfix

55

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

Instalação e Configuração do Postfix

56

[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

57

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 wakeup maxprocess command

O Ficheiro Master.cf

58

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 Significado service Especifica o nome do serviço a ser configurado type Tipo de transporte utilizado para comunicação do

serviço private Tipo de restrição aplicável ao serviço para

motivos de segurança unprivileged Privilégios de utilizador permitido a esse

processo chroot Permite definir se esse processo é executado

numa estrutura de directórios definida wakeup Número de segundos entre os quais são enviados

sinais de wakeup para mantê-lo em execução maxprocess Número máximo de processos que pode utilizar

este serviço simultaneamente Command 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

O Ficheiro Master.cf

59

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 Significado bounce Permite reenviar o correio impossível de entregar

localmente ao emissor. bsmtp Entrega mensagens utilizando o protocolo

BSMTP cleanup Processa correio que entra, corrigindo eventuais

problemas no endereço. cyrus Entrega correio utilizando o sistema cyrus defer Coloca as mensagens de correio que falharam a

entrega no queue deferred error Força as mensagens a serem tratadas pelo bounce flush Mantém os registos das mensagens colocadas na

queue deferred ifmail Entrega mensagens utilizando o sistema ifmail lmtp Entrega mensagens utilizando o protocolo LMTP local Faz a entrega do correio a utilizadores locais pickup Verifica se existem novas mensagens a serem

processadas na queue incoming

O Ficheiro Master.cf

60

qmgr Processa as mensagens existentes na queue incoming e determina qual o método de entrega requerido

rewrite Redefine os endereços para o formato FQDN – Full Qualified Domain Name

showq Mostra o estado das queues smtp Recebe e faz a entrega do correio utilizando o

protocolo SMTP uucp Recebe e procede à entrega de correio utilizando

o protocolo UUCP virtual Utilizado para serviços virtual hosting

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.

O Ficheiro Master.cf

61

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.

O Ficheiro Master.cf

62

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

O Ficheiro Master.cf

63

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.

65

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 Significado queue_directory = /var/spool/postfix Identifica o local onde serão criadas as

queues utilizadas pelo postfix program_directory = /dirx/postfix/bin 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

Ficheiro Main.cf

66

lançados (daemons). Este parâmetro pode ser ignorado pelo postfix se forem utilizados os parâmetros daemon_directory e command_directory

daemon_directory = /usr/libexec/postfix 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)

command_directory = /usr/sbin Define a localização de todos os programas postXXX do postfix, por exemplo o postconf.

Tabela 5.1- Estrutura de directórios

Parâmetro = valor Significado

mail_owner = postfix 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.

default_privs = nobody 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.

Tabela 5.2 - Owner do processo e das queues

Parâmetro = valor Significado

myhostname = host.domain.name 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

Ficheiro Main.cf

67

comando uname –n mydomain = domain.name Permite definir o nome do domínio onde

a máquina está inserida. Normalmente igual ao anterior exceptuando o nome host.

Tabela 5.3 - Nome do Servidor na Internet e Nome de Domínio

Parâmetro = valor Significado

myorigin = $mydomain 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 Significado

inet_interfaces = all 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, localhost.$mydomain

Define nomes alternativos aos quais o 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,

Ficheiro Main.cf

68

255.255.255.0 , neste último utilizar-se-ia 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 Significado

relayhost = $mydomain 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 unix:password.byname

Por defeito o Postfix aceita todas as 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

Ficheiro Main.cf

69

Parâmetro = valor Significado

allow_percent_hack = yes 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-DAEMON

Especifica o nome do utilizador que 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

Ficheiro Main.cf

70

Parâmetro = valor Significado virtual_maps = hash:/etc/postfix/virtual 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, nis:mail.aliases

Especifica os locais onde o Postfix 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, hash:/etc/majordomo/aliases,

Este parâmetro difere do alias_maps, 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.

Ficheiro Main.cf

71

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.

allow_mail_to_files = alias, forward Ver parâmetro allow_mail_to_commands

Tabela 5.11 - Base de Dados de Alias

Parâmetro = valor Significado

recipient_delimiter = + 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 Significado

home_mailbox = Mailbox 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

Ficheiro Main.cf

72

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 "$EXTENSION"

O trabalho de entrega de mensagens 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 Significado

header_checks = regexp:/etc/postfix/fich 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

Ficheiro Main.cf

73

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 Significado

fast_flush_policy = all 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 Significado

smtp_banner = $myhostname ESMTP $mail_name ($mail_version)

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 Significado

initial_destination_concurrency = 3 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

Ficheiro Main.cf

74

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 Significado

debug_peer_list = outro.dominio 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 = PATH=/usr/bin:/usr/X11R6/bin xxgdb $daemon_directory/$process_name $process_id & sleep 5

Possibilita especificar o commando que deverá ser executado para fazer o debug e quando o Postfix foi iniciado com a 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 Significado

message_size_limit = 600000 A necessidade de controlar o tamanho máximo das mensagens é bastante grande, pois muitas mensagens contém

Ficheiro Main.cf

75

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.

line_length_limit = 1000 Define o tamanho máximo de uma resposta SMTP. Este parâmetro permite evitar a técnica de overflow nos ataques dos hackers.

header_size_limit = 1000 Estabelece o valor máximo em bytes que o assunto de uma mensagem pode ter.

Tabela 5.19 - Estabelecer Limites nas Mensagens

77

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

access Tabela utilizada para aceitar ou rejeitar mensagens a partir do nome do emissor; nome do servidor; rede entre outros.

aliases 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].

canonical Permite estabelecer correspondência (adress mapping) entre endereços locais e não locais.

relocated 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.

transport Permite estabelecer correspondência entre nome de sistemas remotos e a forma como o Postfix deverá comunicar

Lookup Tables

78

com eles, ou ainda para efeitos de relay. virtual Possibilita efectuar redireccionamentos

para endereços locais ou não, ou mesmo para outros domínios.

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 Smtp aliases Local canonical Cleanup relocated Qmgr transport trivial-rewrite virtual 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

Lookup Tables

79

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.

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:

Utilizador

postmap ficheiro texto

Base Dados indexada

Lookup Tables

80

# 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

Lookup Tables

81

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

Lookup Tables

82

dbname = aliases

table = aliases_do_postfix

select_field = nome_utilizador

where_field = nome_alias

additional_conditions = and status = ‘activo’

hosts = srvmysql.meudominio.org

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.

Servidor Postfix Servidor MySQL

MySQL Postfix

Rede Local

pattern

result

Lookup Tables

83

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 Significado

ldaptag_server_host Permite especificar o endereço do servidor LDAP

ldaptag_server_port A porta TCP por onde deverá ser estabelecida a comunicação (por defeito é a porta 389)

ldaptag_search_base Base LDAP onde deverá ser iniciada a pesquisa

ldaptag_timeout Permite definir o tempo máximo que o Postfix deverá aguardar por uma resposta. Por defeito é 10.

ldaptag_query_filter Valor da base de dados a pesquisar. Por defeito é mailacceptinggeneralid

ldaptag_result_attribute Define o atributo LDAP a ser retornado.

pattern

result

Servidor Postfix Servidor LDAP

LDAP Postfix

Rede Local

Lookup Tables

84

Por defeito é maildrop. ldaptag_bind Alguns servidores mais antigos,

requerem que o cliente estabeleça uma ligação 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.

Figura 6.4 - Restrição de acesso ao correio electrónico

Endereço electrónico

Servidor Postfix

smtpd Postfix

access

Endereço electrónico

Lookup Tables

85

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 Significado utilizador@dominio Identifica um utilizador num

determinado domínio. maquina.dominio Identifica determinada máquina de um

domínio. Domínio Identifica um domínio, e

consequentemente todos os seus utilizadores.

utilizador@ Identifica um nome de utilizador de qualquer domínio.

aaa.bbb.ccc.ddd Todos os utilizadores de determinado endereço IP.

aaa.bbb.ccc Todos utilizadores provenientes de máquinas cujo IP inicie por aaa.bbb.ccc.

aaa.bbb Todos utilizadores provenientes de máquinas cujo IP inicie por aaa.bbb.

aaa Todos utilizadores provenientes de máquinas cujo IP inicie por 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

OK Permite a ligação SMTP REJECT Nega a ligação SMTP XXX YYY Nega a ligação SMTP e devolve o

código XXX bem como o texto YYY YYY Permite a ligação SMTP e devolve o

texto 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.

Lookup Tables

86

Tipo Significado smtpd_client_restrictions Define quais os clientes que podem

enviar correio. smtpd_helo_restrictions Define quais as máquinas que podem

invocar comandos HELO (shell SMTP) smtpd_sender_restrictions Define quem pode enviar mensagens

utilizando o comando MAIL FROM, na shell do SMTP.

smtpd_recipient_restrictions Define quem pode receber correio utilizando o comando RCPT na shell SMTP.

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

Lookup Tables

87

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.

Lookup Tables

88

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.

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

Unix Server

Postfix

TCP/IP UUCP

Rede Local

Lookup Tables

89

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 sub-

domí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.

Lookup Tables

90

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 Significado

nome.dominio <qualquer_coisa> Permite ao Postfix receber mensagens para o dominio nome.dominio e coloca-las no sistema de queues.

utilizador@dominio endereço1, endereço2 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.

utilizador endereço1, endereço2 Recebe mensagens do utilizador do servidor local e reenvia-as para os endereços especificados.

@dominio endereço1, endereço2 Recebe mensagens de todos os utilizadores do dominio especificado e reenvia-as para os endereços especificados.

Tabela 6.7- Tipos de domínios virtuais

[email protected]

[email protected]

[email protected]

Servidor Unix

Postfix

virtual

Sistema de queues

@host1.com @host2.com @host3.com @host4.com

Lookup Tables

91

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

93

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

Migrando Sendmail para o Postfix

94

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.

Migrando Sendmail para o Postfix

95

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 Significado

Nomealias: nome1,nome2,... 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)

Nomealias: | nome_programa 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.

nomealias: ficheiro_out 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.

nomealias: :include:fich_nomes 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

Migrando Sendmail para o Postfix

96

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 FROM: <emissor> [ <parametros> ] mail Especifica o emissor. Os parâmetros são extensões do

ESMTP. mail Consulte “HELP DSN” para obter mais informações. quit QUIT quit Sai do sendmail (SMTP).

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

Migrando Sendmail para o Postfix

97

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, dever-

se-á 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

Migrando Sendmail para o Postfix

98

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 0 Jun 24 12:14 ana

-rw------- 1 rjoao mail 463 Jun 24 12:20 rjoao

[[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.

Migrando Sendmail para o Postfix

99

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

Migrando Sendmail para o Postfix

100

§ 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:

Migrando Sendmail para o Postfix

101

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] João @outrodominio.net Outrodominio @xptodominio.com Xptodominio [email protected] 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 Virtual @xptodominio.com Virtual @dom2.pt Virtual [email protected] João @outrodominio.net Outrodominio @xptodominio.com Xptodominio [email protected] 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

Migrando Sendmail para o Postfix

102

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.

103

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

Postfix num ISP

104

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.

Postfix num ISP

105

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.

Figura 8.2 - Exemplo de Open Relaying

Mensagem para [email protected]

Caixa de correio do utilizador em mydomain.

Caixa de correio do Paulo

Servidor de correio do ISP

Caixa de correio da organização

Postfix

Postfix Paulo

Internet

Domínio mydomain.pt mapeado para o utilizador mydomain

Internet

Mensagem para [email protected]

Servidor de Correio

do ISP

Servidor de Correio

do ISP

mailsrv.isp2.net

srvmail.isp1.net

Postfix num ISP

106

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.

Figura 8.3 - Exemplo da aplicação de selective relaying

Servidor de Correio

do ISP

Servidor de Correio do

ISP

Postfix

Servidor Correio da Organização

Postfix

Internet

Mensagem para [email protected]

mailsrv.isp2.net

Mensagem para [email protected]

bloqueado

Postfix num ISP

107

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.

Postfix num ISP

108

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

Internet

Servidor de Correio da

Organização

mail.dominioxpto.com

www.dominioxpto.com ftp.dominioxpto.com

Servidor de Correio

do ISP

Domínio de dominioxpto.com

Postfix num ISP

109

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

Postfix num ISP

110

[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

Postfix num ISP

111

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

Postfix num ISP

112

§ 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 Significado

reject Todos os pedidos, mesmo os locais. reject_invalid_hostname Nome de maquinas inválidas fornecidos

ao comando HELO (comando SMTP). reject_maps_rbl Se o cliente estiver definido em

$maps_rbl_domains. reject_mon_fqdn_hostname Quando não se trata de um nome de

máquina FQDN definido no comando HELO.

reject_mon_fqdn_recipient Quando não se trata de um nome de máquina FQDN no endereço destino.

reject_non_fqdn_sender Quando não se trata de um nome de máquina FQDN no caso do emissor.

reject_unauth_destination Caso a máquina destino não esteja definida em $mydestination, $inet_interfaces, $virtual_maps ou $relay_domains.

reject_unauth_pipelining Correio enviado através de um programa SMTP pipelining.

reject_unknown_client Quando não é conhecido o nome da máquina cliente.

reject_unknown_hostname Nome da máquina definida no comando HELO, não tem registo DNS A ou MX.

Postfix num ISP

113

reject_unknown_recipient_domain Correio enviado para domínios sem registo DNS A ou MX.

reject_unknown_sender_domain Correio enviado por domínios sem registo DNS A ou MX.

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,

Postfix num ISP

114

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 hash:/etc/postfix/meus_clients,

reject

115

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,

Sistemas Externos vs Postfix

116

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.

Sistemas Externos vs Postfix

117

Permite também, o acesso autenticado, criação de novas pastas, bem como o envio de

correio.

119

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.

Postfix – uma visão pessoal

120

§ 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.

Futuro do Correio Electrónico

121

À 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 a tão apregoada segurança.

123

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.

Bibliografia

124

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.

125

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/

Bibliografia

126

§ 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.