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