Centro Universitário UNIBENNETT Curso de Ciência da Computação Monografia Trabalho de Conclusão de Curso Rio de Janeiro 2007.2 2 FELIPE MARTINS RÔLLA ORIENTADOR: WILLIAM AUGUSTO R. DE SOUZA DESENVOLVIMENTO, OTIMIZAÇÃO E IMPLEMENTAÇÃO DE SEGURANÇA EM SISTEMAS OPERACIONAIS LINUX PARA SERVIDORES DE E-MAIL CORPORATIVOS BASEADOS EM QMAIL Monografia apresentada ao Centro Universitário Bennett do Instituto Metodista Bennett, como parte dos requisitos para obtenção do título de Bacharel em Ciência da Computação. Centro Universitário Metodista Bennett 3 Rio de Janeiro 12/2007 4 TERMO DE APROVAÇÃO FELIPE MARTINS ROLLA DESENVOLVIMENTO, OTIMIZAÇÃO E IMPLEMENTAÇÃO DE SEGURANÇA EM SISTEMAS OPERACIONAIS LINUX PARA SERVIDORES DE E-MAIL CORPORATIVO BASEADOS EM QMAIL. ESTE TRABALHO FOI JULGADO ADEQUADO PARA A OBTENÇÃO DO GRAU DE BACHAREL EM CIÊNCIA DA COMPUTAÇÃO E APROVADO EM SUA FORMA FINAL PELA DISCIPLINA DE TRABALHO DE CONCLUSÃO DE CURSO BANCA EXAMINADORA: __________________________________ PROFESSOR WILLIAM AUGUSTO R. DE SOUZA, M. SC. __________________________________ PROFESSORA GRAZZIELA FIGUEREDO, M. SC. __________________________________ PROFESSOR PROF. SANDOVAL GONÇALVES, M. SC. 5 Agradecimentos Gostaria de agradecer a todas as pessoas que contribuirão direta ou indiretamente para este projeto e que continuarão contribuindo com idéias, força e dedicação. Ao meu orientador William Augusto R. de Souza que acreditou em mim quando ninguém acreditava. À Rafaela Haddad minha namorada pela dedicação e compreensão por todo este tempo. Ao Coordenador e Prof. José Xexéo por sempre buscar o melhor esforço em cada aluno. A professora Grazziela Figueiredo por me dar a honra de participar da banca mesmo com os problemas existentes. A todos os amigos e amigas que contribuíram para o projeto trazendo sugestões, palavras de força nos piores momentos. À Tino Reichardt, contribuidor do projeto, que nos cedeu a licença de utilização de seus softwares e à Dan. J. Bernstein, desenvolvedor do qmail, sem eles este trabalho não seria possível. Aos professores Fernando Miranda, Nelson, que sempre acreditaram neste projeto deste o princípio. 6 7 SUMÁRIO SUMÁRIO .........................................................................................................................6 Índice de Figuras ...............................................................................................................9 Índice de Tabelas .............................................................................................................10 Glossário ..........................................................................................................................11 1 - Introdução...................................................................................................................13 1.1. Motivação .............................................................................................................15 1.2. Objetivos ...............................................................................................................16 1.3. Etapas de desenvolvimento ..................................................................................17 2 – Licença de Software .................................................................................................19 2.1. Definição ..............................................................................................................19 2.2. Software livre .......................................................................................................20 2.2.1. GNU Public License (GPL) ...............................................................................21 2.3. Software proprietário ............................................................................................22 2.3.1. Creative Commons ............................................................................................23 2. 4. Comparação entre licenças ..................................................................................24 3 – Sistema Operacional Linux .......................................................................................26 3.1. História e definição ...............................................................................................26 3.2. Comparação entre Distribuições ...........................................................................28 3.3. Distribuição Slackware .........................................................................................32 4 – Servidores de e-mail código aberto ...........................................................................34 4.1. Definição e Funcionamento ..................................................................................34 8 4.2. Sendmail, Postfix e Qmail ....................................................................................38 5 – Qmail .........................................................................................................................41 5.1. Definição ..............................................................................................................41 5.2. Segurança e Estrutura Hierárquica .......................................................................42 5.3. Licença de Uso .....................................................................................................46 5.4. Problemas existêntes.............................................................................................46 6 - Otimizações do Slackware para Qubit .......................................................................48 6.1. Pacotes utilizados e descartados ...........................................................................48 6.2. Empacotamento de softwares ...............................................................................50 6.3. Menus interativos de instalação ............................................................................52 6.3.1. Particionamento .................................................................................................52 6.4. Kernel e Patches ...................................................................................................55 6.4.1. Patch para ReiserFS v.4.0 ..................................................................................55 6.4.2. Patch para BootSplash .......................................................................................58 7 - Hardening ...................................................................................................................60 7.1. Hardening de Sistema ...........................................................................................61 7.2. Hardening de Serviços ..........................................................................................64 7.2.1. SSH e serviços de acesso remoto .....................................................................64 8 - qmail e Patches ...........................................................................................................68 8.1. Comparação entre versões e padrões atuais .........................................................68 8.2. Medidas Anti-Spam ..............................................................................................70 8.3. Medidas de Autenticação e Segurança .................................................................74 8.4. Medidas para testes de Bad Mail ..........................................................................77 8.5. Medidas para melhorar mensagens de Status .......................................................78 8.6. Medidas para Logs de email .................................................................................80 8.7. Patch para BootSplash ..........................................................................................81 9 - Softwares Utilizados para serviços ............................................................................82 9.1. EZmlm e EZmlm-idx............................................................................................82 9.2. Autoresponder ......................................................................................................82 9.3. Vpopmail ..............................................................................................................83 9.4. Courier-imap/imaps e Courierpassd .....................................................................84 9.5. Webmail................................................................................................................84 9.6. ClamAV ................................................................................................................85 9.7. SpamAssassin .......................................................................................................85 10 - Padronização ............................................................................................................86 9 10.1. Diretórios e Links ...............................................................................................86 10.2. Arquivos e Conteúdo ..........................................................................................87 11 - Conclusão .................................................................................................................93 12 - Objetivos Futuros .....................................................................................................95 12 - Referências Bibliográficas .......................................................................................96 10 ÍNDICE DE FIGURAS Figura 1 - Funcionamento do Correio Eletrônico (WIKIPEDIA, 2007). ..........................8 Figura 2 - Esquema de daemons do qmail (LIFE WITH QMAIL, 2007) .......................64 Figura 3 - Lista de Hard Disks gerada por Controladora .................................. .............64 Figura 4 - Particionamento Manual e Automático ............................................................8 Figura 5 - Alguma coisa ..................................................................................................64 Figura 6 - Alguma coisa .................................. ...............................................................64 11 ÍNDICE DE TABELAS Tabela 1 - Comparação entre licenças de software (WIKIPEDIA, 2007).........................8 Tabela 2 - Aprovação de licenças por Organizações (WIKIPEDIA, 2007) ...................15 Tabela 3 - Dispositivos e Softwares de Segurança (WIKIPEDIA, 2007) ......................15 Tabela 4 - Arquiteturas de Processadores Suportadas (WIKIPEDIA, 2007) .................15 Tabela 5 - Usuários do servidor qmail (LIFE WITH QMAIL, 2007) ............................15 12 GLOSSÁRIO ACL - Access Control Lists ARPANet - Advanced Research Projects Agency Network BSD - Berkeley Software Distribution COPYRIGHT - Conjunto de direitos exclusivos que regulamentam o uso de uma ideia ou informação em particular DARPA - Defense Advanced Research Projects Agency EMAIL - Eletronic Mail FHS - File Hierarchy System FIREWALL - Dispositivo de uma rede de computadores que tem por função regular o tráfego entre redes distintas e impedir a transmissão e/ou recepção de dados nocivos ou nào autorizados entre redes FSF - Free Software Foundation GNU - Anagrama recursivo para GNU is Not Unix GNU FDL - Free Document License GNU GPL - GNU Public License GNU LGPL - Light GNU Public License HA - High Availability HARDENING - Medidas de segurança tomadas no aumento da segurança de código ou determinado ambiente de computação. IMAP - Internet Message Access Protocol KERNEL - Cerne, é o núcleo de um sistema operacional e representa a camada de software mais próxima ao hardware, sendo responsável por gerenciar recursos do sistema operacional MINIX - Mini Unix MIT - Massachussets Institute of Technology MTA - Mail Transfer Agent MTU - Mail Transfer User MUA – Mail User Agent MX – Mail Exchanger PATCH - Códigos auxiliares incluidos no código fonte para implementação de funcionalidades ou correção de erros POP - Post Office Protocol SELINUX - Security Enhanced Linux SMTP - Simple Mail Transfer Protocol SSL - Secure Sockets Layer TCP/IP - Transfer Control Protocol / Internet Protocol TLS - Transport Layer Security UCLA - University of California Los Angeles VPN - Virtual Private Network 1 - INTRODUÇÃO A Internet tem revolucionado o mundo dos computadores e da comunicação como nenhuma outra invenção jamais conseguiu, ligando usuários de todas as partes da Terra no clique de um botão. Invenções importantes como o telégrafo, telefone, fax e outras serviram de base para preparação do cenário atual de super integração e comunicação existente. Os primeiros registros de interações sociais que poderiam ser realizados através de redes de computadores que se tem notícia foram uma série de memorandos escritos por J.C.R. Licklider, do MIT (Massachussets Institute of Technology), em agosto de 1962. Esta série de memorandos previa a existência de vários computadores interconectados globalmente de forma que todos poderiam acessar dados e programas de qualquer lugar rapidamente. Essencialmente o conceito é muito parecido com o que temos hoje com a Internet. Licklinder foi o primeiro gerente do programa de pesquisas de computador do DARPA, começando em outubro de 1962. O primeiro trabalho sobre a teoria de troca de pacotes existente foi publicado por Leonard Kleinrock, do MIT, em julho de 1961. Leonard Kleinrock começava assim a convencer a todos da possibilidade teórica das comunicações usando pacotes ao invés de circuitos o que representou um grande passo para a criação das redes de computadores atuais. Outro grande passo foi fazer os computadores destas redes conversarem entre si. Foi no DARPA que nasceram os conceitos de redes de computadores atuais que viriam a formar a ARPANET, em 1967, rede esta precursora da Internet.. A ARPANET foi desenvolvida por instituições militares americanas para dinamizar as comunicações entre postos, portanto demorou pouco tempo para que surgisse a primeira troca de mensagens via rede, troca esta que só foi possível depois do desenvolvimento do primeiro Processador de Interface de Mensagens (IMP) pelo DARPA, em 1968. Após um mês de implementação do primeiro IMP na UCLA foi feita a primeira troca de mensagens entre servidores do DARPA e o SRI (servidor localizado na UCLA). Nascia ai a era da comunicação digital, e por assim dizer os serviços de troca de mensagens conhecidos hoje como e-mail. Atualmente a troca de mensagem via servidores de e-mail são responsáveis por 50% do tráfego de internet de todo o meio corporativo segundo dados do Wikipedia, (http://en.wikipedia.org/wiki/Email#Origin), e seu consumo cresce a cada dia devido a sua rápida popularização, facilidade de uso e pragas virtuais decorrentes disto. Devido a este fato é importante que os sistemas funcionem de forma a possuírem performance e segurança para atender a demanda do serviço na Internet. 1.1. Motivação Atualmente existem diversas soluções para e-mail corporativo desenvolvidas por vários fabricantes internacionalmente conhecidos como Microsoft (Exchange Server), IBM (Lotus Notes Workgroup), Critical Path, entre outras. Cada uma dessas soluções possui um conjunto de funcionalidades análogas porém condizentes diretamente a política de serviços da empresa. É importante frisar que todas as soluções supracitadas recaem sobre a licença de software proprietário, portanto sua utilização deve ser de acordo as restrições técnicas e de custo impostas por cada desenvolvedor. Para aumentar a concorrência e expandir o mercado no que diz respeito às tecnologias de servidores de e-mail e no que tange performance e custo, surgiram diversas outras soluções livres, cada uma avaliada e testada pela grande comunidade de software livre. A maior parte possui implementações próprias em ambientes Linux previamente desenvolvidos e padronizados transformando portanto sistemas complicados e complexos em sistemas intuitivos e de fácil instalação e adoção no meio corporativo. Porém a quantidade de distribuições Linux voltadas para o campo de servidores de e-mail é diretamente relacionada à funcionalidades, praticidade e facilidade de configuração do MTA (Mail Transfer Agent) ou cliente de e-mail escolhido, sendo dele Postfix, Sendmail, entre outros. Sendo assim cada distribuição Linux, embora use o mesmo MTA como foco, é implementada e desenvolvida de forma totalmente diferente e muitas vezes incompatível com outros sistemas, terminando por existirem diversas soluções diferentes para um mesmo problema. Isto gera um aumento no esforço de suporte ao ambiente criado bem como inconsistência de procedimentos. Embora existam soluções análogas não inexiste atualmente uma distribuição Linux para servidores de e-mail voltada totalmente para o MTA qmail. Um dos fatos que contribuem para isto é a extrema complexidade quando da implementação de um servidor completo qmail e também na existência de vários tutoriais completamente incompatíveis entre si, gerando inclusive dúvidas quanto a sua implementação, já que cada administrador implementa apenas os recursos pertinentes a sua rede esquecendo muitas vezes que o sistema deve ser escalar permitindo assim uma utilização mais dinâmica e extensa. Outro fato é o código do qmail não ser intensamente mantido por seu criador o matemático Dan. J. Bernstein, desvantagem esta totalmente suprida pela grande comunidade de software livre. Porém esta comunidade gera outros problemas como desenvolver ferramentas diferentes para resolução de um mesmo problema gerando assim uma gama de aplicações análogas, aumentando o trabalho do administrador para padronização e criação de uma solução de e-mail concisa e estável. 1.2. Objetivos Este trabalho é uma extensão dos esforços da comunidade de código aberto em atuação na Internet no desenvolvimento de um sistema de e-mail padronizado, eficiente e seguro. A proposta é desenvolver uma sistema operacional Linux baseado na Distribuição Slackware 12.0 com foco na criação, instalação, configuração e implementação de uma solução completa de serviço de e-mail baseado em qmail, MTA desenvolvido pelo matemático Dan J. Bernstein como alternativa rápida e segura ao famoso MTA Sendmail desenvolvido por Eric Allman. Este sistema será desenvolvido de forma a aproximar o usuário leigo ao mundo dos servidores de e-mail de forma a transformar o processo de implementação em um processo mais intuitivo e totalmente padronizado. O desenvolvimento deste projeto baseia-se no fato de que não existe atualmente uma distribuição totalmente voltada para este servidor específico, como existem para outros servidores como postfix e sendmail. Serão implementados os mais novos conceitos de configuração de servidores seguros utilizando otimização de código via patches, configurações, boas práticas de configuração de serviços e hardening de sistema. Este projeto visa dinamizar e facilitar a implementação e configuração de um servidor de e-mail qmail seguindo os padrões de utilização corporativa atual, reduzindo o tempo médio de tais operações de 48 horas para 1,5 hora máximo, implementando um sistema totalmente integrado com softwares recomendados atualmente como antivírus, anti-spams, e políticas de segurança de sistema e serviços. 1.3. Etapas de desenvolvimento Foram realizadas pesquisas sobre os principais MTAs de código aberto utilizados atualmente em serviços de e-mail. As pesquisas levaram em conta componentes estruturais, funcionais e de segurança na avaliação das diferenças entre cada um dos MTAs utilizados como base na escolha do MTA abordado. São traçados vários paralelos pertinentes a segurança, estabilidade, funcionalidade, freqüência de atualizações oficiais e da comunidade de código aberto, instalação, configuração e uso, assim como estudos de casos reais de utilização no meio corporativo. Foram realizadas também pesquisas de intuitividade quanto a instalação do sistema, e funcionalidades pertinentes a este fim bem como extensa pesquisa sobre hardening (implementações de segurança) de sistema operacional Linux e serviços de e-mail qmail na criação de um serviço seguro. 2 – LICENÇA DE SOFTWARE 2.1. Definição Uma licença de software compreende permissões, direitos e restrições à A um determinado software, sendo ele apenas um componente ou um programa completo. A utilização de um software sem obedecer as restrições impostas por sua licença podem constituir em uma infração dos direitos exclusivos do desenvolvedor do software sobre copyright ou, ocasionalmente , lei de patentes permitindo ao dono do software licenciado direitos para processar o usuário que a infringiu. Sob a licença de software, ela permite a utilização do software desde que esta esteja de acordo com os termos da licença. Se há uma brecha na licença, dependendo do tipo, pode terminar por conceder direitos ao proprietário da licença do software à processar quem a infringiu. Um desenvolvedor de software pode oferecer uma licença unilateral (sem dar ao licenciado oportunidades para renegociação de termos mais favoráveis), ou mesmo como parte de um acordo de licença de software com terceiros. Virtualmente todo software proprietário produzido em larga escala é vendido sob alguma forma de licença. Os termos de tais licenças normalmente são negociados entre as partes, licenciador e licenciado. Em adição a garantia de direitos e imposição de restrições à utilização do software, as licenças tipicamente contém procedimentos que denotam confiabilidade e responsabilidade entre as partes. Em softwares corporativos e softwares de transação comercial são normalmente negociados por equipes especialistas em licenças de software. 2.2. Software Livre São denominados softwares livres, ou de domínio público, os softwares cuja licença permite qualquer tipo de uso, alteração, cópia, venda, e distribuição desejada pelo usuário em relação a seu código-fonte. Para que o código fonte possa ser alterado e aperfeiçoado é imperativo que ele esteja disponível para download sem qualquer restrição e de forma completa. Se um programa é livre ele pode ser facilmente implementado em um sistema operacional também livre. É importante enfatizar que software livre não é sinônimo de software gratuito pois a liberdade de distribuir, alterar e copiar independe da gratuidade. Existem softwares que podem ser obtidos na Internet de forma gratuita mas não podem ser alterados ou redistribuídos pois muitas vezes seu código-fonte é fechado ou recai sobre determinada licença que impede está operação. Atualmente existem diversos tipos de licenças de software livre com as mais variadas permissões e restrições. A licença escolhida para este projeto é a GPL, ou GNU Public License, pela liberdade que apresenta em relação a cópia, alteração e redistribuição de código nela registrado como explicado adiante. 2.2.1. GNU Public License (GPL) A GNU Public License, ou simplesmente GPL, é a licença de software livre criada e idealizada por Richard Stallman, fundador da Free Software Foundation (FSF), no final da década de 1980. A GPL é a licença mais utilizada por projetos de software livre no mundo. Ela baseia-se em 4 premissas básicas: Liberdade de executar um programa para qualquer propósito (Liberdade nº 0). Liberdade de estudar como o programa funciona e adaptá-lo para suas necessidades (liberdade nº 1). O acesso ao código-fonte é um prérequisito para estar liberdade. Liberdade de distribuir cópias de modo que o usuário possa ajudar o seu próximo (liberdade nº2). Liberdade de aperfeiçoar o programa, a liberar os seus aperfeiçoamentos, de modo que toda a comunidade se beneficie deles (liberdade nº 3). O acesso ao código-fonte é um pré-requisito para estar liberdade. Pelos termos da licença GNU podemos escrever, alterar, reenviar, trocar e vender quaisquer alterações feitas no código-fonte pois ele é de utilização livre. A licença GPL também possui outras duas sub-licenças: GNU FDL (GNU Free Document License) e a GNU LGPL (GNU Light Public License), que compreendem em licenças para documentação livre, e uma versão mais resumida e simples da GPL padrão para o desenvolvimento de drivers, bibliotecas e pequenos módulos ou addons, respectivamente. Atualmente todo e qualquer software desenvolvido ligado a comunidade de software e ao Free Software Foundation são licenciados sob a GPL. 2.3. Software Proprietário Softwares proprietários são aqueles cuja cópia, redistribuição ou modificação estão limitadas ou impossibilitadas pelas restrições de sua licença. Para utilizar, copiar, alterar código ou redistribuir, deve-se solicitar permissão ao desenvolvedor ou empresa que detém os direitos de propriedade do software requerido, ou pagar para fazê-lo. Algumas licenças de software proprietário possuem código livre que pode ser utilizado e alterado apenas para uso próprio mas impõe restrições quanto a redistribuição deste código modificado. Outras licenças permitem a utilização de determinado software de modo ilimitado ou temporário sem oferecer o código-fonte utilizado para compilá-lo. Existem ainda softwares cujos códigos-fontes não são distribuídos, são apenas executados via software de instalação e ao mesmo tempo são pagos, como é o caso de muitos sistemas operacionais utilizados no mercado corporativo ou programas de cunho comercial. As restrições e permissões de cada licença variam para cada empresa e proprietário de software. 2.3.1. Creative Commons A licença Creative Commons permite aos proprietários de software garantir em parte ou totalmente seus direitos de software ao público enquanto retém outros, através de uma variedade de licenças e esquemas de contrato incluindo softwares de domínio público ou termos de licença de conteúdo aberto. O objetivo deste tipo de licença proprietária é evitar problemas com a lei de copyright no que tange o compartilhamento da informação. O projeto Creative Commons provê vários tipos de licença gratuitas as quais os proprietários dos direitos de software possam utilizar no lançamento de seus trabalhos na rede. Ao mesmo tempo que protege a propriedade intelectual de seus proprietários, evita problemas com a lei e permite, dentro das restrições impostas pelo proprietário, sua redistribuição, alteração e uso ao público. Exemplos de projetos que utilizam esta licença são Wikimedia (Wikimedia, 2007) , Public Library of Science, Jurispedia, entre outros. 2.4. Comparação entre licenças A tabela seguinte compara várias características de cada uma das licenças , como um guia para os termos que cada uma das licenças contém: Autor Última Versão Data de Publicação ? ? ? Link de código com licença diferente ? Apache License Apache Software Foundation 2 2004 Sim Apple Public Source License Licença Academic Free License Mudanças sob licenças diferentes ? Sim Apple Computer 2 6-Aug-03 Sim Não Artistic License ? 2 ? Sim Com restrições Berkeley Database License ? ? ? ? ? BSD license ? ? ? Sim Sim Boost license ? ? ? Sim Sim Sun Microsystems 1 ? Sim ? Common Public License ? ? ? ? Não Cryptix General License ? ? ? ? ? Eclipse Foundation 1 ? ? ? Common Development and Distribution License Eclipse Public License Educational Community License ? 1 ? Sim Sim GNU General Public License Free Software Foundation 3 Jun-07 Não Não GNU Lesser General Public License Free Software Foundation 3 Jun-07 Sim Não Hacktivismo/Cult of the Dead Cow ? 26-Nov-02 ? ? IBM ? ? ? ? Intel Corporation ? ? ? ? LaTeX project 1.3c ? ? ? ? ? ? Sim Sim Hacktivismo Enhanced-Source Software License Agreement IBM Public License Intel Open Source License LaTeX Project Public License MIT license Mozilla Public License Mozilla Foundation 1.1 ? Sim Não Netscape Public License Netscape 1.1 ? ? ? Open Software License ? ? ? ? ? OpenSSL license OpenSSL Project ? ? ? ? PHP License PHP Group Python Software Foundation Trolltech 3.01 ? ? ? 2 ? ? ? ? ? Não Não Sun Industry Standards Source License Sun Microsystems ? ? ? ? Sun Public License Python Software Foundation License Q Public License Sun Microsystems ? ? Sim Não W3C Software Notice and License ? ? ? Sim Sim X11 license ? ? ? Sim Sim XFree86 1.1 License ? ? ? ? ? zlib/libpng license ? ? ? ? ? Zope Public License ? ? ? ? ? Tabela 1 – Comparação entre licenças de software (WIKIPEDIA, 2007) A tabela abaixo lista para cada licença quais organizações as aprovaram como open source (código livre) e como está organizações as categorizam. Estas organizações aprovam normalmente versões específicas de licenças. FSF approval OSI approval Academic Free License Sim Sim Apache License Sim Sim Apple Public Source License version 1.x Não Sim Apple Public Source License version 2.0 Yes Sim Artistic License Não Sim Clarified Artistic License Sim Sim Berkeley Database License Sim Sim BSD license Sim Sim Common Development and Distribution License Sim Sim Common Public License Sim Sim Cryptix General License Sim No Eclipse Public License Sim Sim Licence and specific version Educational Community License ? Sim GNU General Public License Sim Sim GNU Lesser General Public License Sim Sim Hacktivismo Enhanced-Source Software License Agreement No No IBM Public License Sim Sim Intel Open Source License Sim Sim LaTeX Project Public License Sim No License of Python Sim Sim MIT license Sim Sim Mozilla Public License Sim Sim Netscape Public License Sim No Open Software License Sim Sim OpenSSL license Sim No PHP License Sim Sim Q Public License Sim Sim Sun Industry Standards Source License Sim Sim Sun Public License Sim Sim ? Sim Sim Sim Sybase Open Watcom Public License W3C Software Notice and License XFree86 1.1 License No No zlib/libpng license Sim Sim Zope Public License version 1.0 Sim ? Zope Public License version 2.0 Sim Sim Tabela 2 – Aprovação de licenças por Organizações (WIKIPEDIA, 2007) 3 – SISTEMA OPERACIONAL LINUX 3.1. História e Definição Em 1991 praticamente todas as universidades do mundo utilizavam algum tipo de Unix como sistema operacional acadêmico nos quais seus alunos desenvolviam todo tipo de trabalho de pesquisa . Em sua grande maioria era utilizado o Unix BSD (Desenvolvido pela Berkeley). Como sua licença era muito cara para o meio acadêmico, as universidades passaram a adotar uma versão mais simples e com menos recursos chamada Minix, um clone de código aberto do Unix desenvolvido especialmente para suprir sua falta de verba. Como todo clone o Minix carecia de recursos básicos, utilizado portanto vastamente apenas como sistema base para projetos e trabalhos acadêmicos. Um aluno da Universidade de Helsink na Finlândia, Linus Torvalds, não concordava com esta visão e queria oferecer mais funcionalidades ao Minix fazendo-o tão completo quanto seu similar corporativo. Ele iniciou seu projeto em meados dos anos 1990 através de uma mensagem enviada às listas de e-mail da época convocando programadores a se juntarem a ele no desenvolvimento de um sistema completo e totalmente gratuito que pudesse ser distribuído sem custos e de código livre. Por definição o sistema operacional Linux nada mais é do que um clone código aberto dos sistemas Unix da época possuindo kernel próprio desenvolvido por Linus Torvalds em adição aos programas já existentes da FSF (Free Software Foudation) fundada por Richard Stallman. Devido a sua rápida adoção pelo mercado corporativo e doméstico, existem atualmente diversas distribuições diferentes em funcionalidades e foco no mercado. Exemplos disso são as seguintes distribuições: Slackware (www.slackware.org) : Desenvolvida por Patrick Volkerding em Julho de 1993. É considerada a mais antiga e primeira distribuição Linux completa. Debian (www.debian.org) : Distribuição mais utilizada por desenvolvedores e acadêmicos de Linux pois segue completamente a filosofia da GNU da Free Software Foundation, totalmente licenciada pela GPL, ou seja, gratuito e de código aberto. Redhat (www.redhat.com) : Distribuição Linux criada para o mercado corporativo. Muitos de seus softwares são gratuitos porém praticamente tudo que diz respeito ao mercado corporativo é restrito e de código fechado, sendo assim pago. A Redhat hoje é considerada um gigante no meio corporativo Linux. Conectiva ( www.conectiva.com.br ) : Vertente brasileira do Redhat alterado para uso nacional. É considerada a primeira distribuição Linux brasileira. Hoje não existe mais e foi integrada à distribuição Mandrake formando assim uma nova distribuição chamada Mandriva. Mandriva ( www.mandriva.com ) : Anteriormente conhecido como Linux Mandrake, foi formada pela união da Mandrake com a Conectiva. É atualmente uma das distribuições mais utilizadas no mercado europeu, junto com a Suse. Suse ( www.novell.com/linux ) : Criada por uma das maiores empresas de TI do mundo, a Novell Networks, sendo atualmente a distribuição mais utilizada no mercado europeu. 3.2. Comparação entre Distribuições Existem atualmente, entre distribuições corporativas e suas dissidências, cerca de 90 distribuições famosas largamente utilizadas no mundo. Obviamente existem outras dezenas dissidentes destas e portanto um pouco menos conhecidas. A escolha de determinada distribuição, muitas vezes chamada de “flavor”, ou sabor, depende da aptidão e gosto do usuário com o sistema em questão. Normalmente usuários mais experientes preferem distribuições mais robustas e experientes com um maior número de casos de sucesso como Slackware, Debian e Redhat, distribuições estas com maior respaldo da comunidade de software livre, ou de seus fabricantes. Usuários de entrada ou inexperientes preferem distribuições de escopo técnico menor e mais intuitivas como CentOS, Suse e Mandriva, por serem mais fáceis de utilizar. Esta escolha esta diretamente ligada as seguintes características: Praticidade : É importante quando da utilização, manutenção e suporte da distribuição. Operações que podem levar horas quando a compilação de código é eminente podem ser reduzidas para minutos no caso da existência de ferramentas dinâmicas e de fácil uso diminuindo assim o tempo necessário com suporte e também a curva de aprendizado no treinamento de um profissional da área. Intuitividade : É importante para acelerar tarefas como manutenção do sistema e principalmente mais importante para o usuário final. Sendo este um usuário não muito técnico ter um sistema intuitivo, com softwares facilmente localizados no ambiente de janelas ou linha de comando, é primordial para um bom aproveitamento empresarial ou doméstico sem a necessidade de auxílio profissional do suporte. Segurança : Este é o item mais importante na escolha de uma distribuição para servidores. É extremamente importante uma vez que o Linux é considerado o sistema operacional mais adotado no meio corporativo para serviços críticos como High Availability, Firewall, VPN, E-mail entre outros. Deve-se verificar a freqüência de correções de erros bem como atualizações normais do sistema por meio de pacotes disponibilizados pelo desenvolvedor oficial. Funcionalidades : Devem possuir suporte aos mais novos sistemas de arquivos, algoritmos e ferramentas do mercado. Devem suportar diversos tipos de arquitetura de processadores diferentes para uma melhor adoção no mercado. Como vimos a utilização é baseada no gosto e necessidade de cada administrador, bem como o hardware disponível para utilização. Outro paralelo de comparação necessário é em relação aos dispositivos de segurança existentes em cada distribuição. Cada distribuição depende de um determinado escopo para que suas funcionalidades sejam definidas, por exemplo, é importante para o Linux Redhat suportar diversos sistemas de arquivo e arquiteturas de processadores pois é a distribuição mais largamente utilizada no meio corporativo o qual quase sempre faz parte de um cenário totalmente heterogêneo, mas em relação a segurança não é necessário grade suporte, apenas os básicos como ACLs (Access Lists ou Listas de Acesso) e o pacote SELinux entre outras medidas externas para um melhor e seguro funcionamento do sistema. Por outro lado sistemas como Slackware, Gentoo, Engarde e Backtrace são praticamente todos orientados à algum campo de segurança e são as distribuições mais utilizadas para este fim, necessitando assim de mais recursos neste quesito. Podemos portanto caracterizar as distribuições quanto a este quesito na tabela a seguir: Distribuição AppArmor BGCC CentOS Linux Não Não Debian Linux Não Não Fedora Linux Não Não Gentoo Linux Red Hat Enterprise Linux Não Exec Shield GrSecurity PaX Rsback SELinux Systrace RSBAC Sim Não Não Opcional Opcional Não Não Sim Não Não Não Opcional Não Sim Não Não Não Não Sim Não Não Sim Sim Opcional Sim Não Opcional Opcional Opcional Não Não Sim Não Não Não Sim Não Não Mandriva Linux Não SUSE Linux Sim Não Sim Não Não Não Sim Não Não Não Não Não Não Não Não Não Slackware Linux Sim Não Não Opcional Não Não Não Sim Opcional Não Tabela 3 – Dispositivos e Softwares de Segurança (WIKIPEDIA, 2007) Na tabela supracitada não foram descritos os dispositivos de segurança da distribuição Qubit Linux, escopo deste projeto, pois será discutida a fundo em outro item. No item funcionalidades existe outro fator, já supracitado como exemplo, importante na escolha de uma distribuição que é a quantidade de sistemas de arquivos suportados pelo sistema. Geralmente distribuições de escopo corporativo possuem uma maior desenvoltura neste aspecto visto atenderem os mais heterogêneos ambientes em diversos tipos de empresa. Já distribuições não muito conhecidas possuem um foco menor neste quesito, suportando menos sistemas, na verdade apenas os mais utilizados no escopo de seu funcionamento. Em geral os sistemas de arquivos não suportados por padrão em algumas delas podem ser incluídos por meio de código adicional, mais conhecido como patches, que fornecem mais funcionalidades, estes geralmente aplicados sobre o kernel do linux. Abaixo segue uma tabela comparativa de suporte aos mais variados tipos de sistema de arquivos em alguns sistemas linux mais conhecidos. Distribuição x86 x8664 IA64 ppc ppc64 sparc32 sparc64 s390 s390x alpha CentOS Linux Sim Sim Sim Não Não Não Não Sim Sim Sim Debian Linux Sim Sim Sim Sim Não Sim Sim Sim Sim Sim Fedora Linux Sim Sim Não Sim Não Não Não Não Não Não Gentoo Linux Sim Sim Sim Sim Sim Não Sim Sim Sim Sim Red Hat Enterprise Linux Sim Sim Sim Sim Não Não Não Sim Sim Não Mandriva Linux Sim Sim Não Sim Não Não Não Não Não Não SUSE Linux Sim Sim Sim Sim Não Não Não Sim Sim Não Slackware Linux Sim Não Não Não Não Não Não Sim Não Não Tabela 3 – Arquiteturas de Processadores Suportadas (WIKIPEDIA, 2007) 3.3. Distribuição Slackware O Linux Slackware é um sistema Linux avançado desenvolvido em 1993 pelo programador Patrick Volkerding com o intuito de ter usabilidade e estabilidade como prioridade. Ele inclui as mais novas versões dos mais novos softwares GNU existentes, mantendo o tradicional senso de segurança e estabilidade do sistema, provendo facilidade de uso e flexibilidade. Desde sua primeira versão em 1993, sua proposta é de produzir um sistema mais parecido com o Unix no que tange simplicidade, segurança e desempenho, ele foi desenvolvido primeiramente seguindo os padrões dos Unixes BSD utilizados em Berkeley como OpenBSD, FreeBSD, e NetBSD. O Slackware mantém suporte em relação aos aspectos mais atuais de sistemas linux como FHS (File Hierarchy Standard) com diretórios padronizados e estruturados, bem como ao padrão POSIX, largamente utilizado no mundo Unix e Linux. O Slackware é um sistema linux completo multitarefa na arquitetura 32 bits , com suporte a outras arquiteturas como 64 bits. Ele é baseado no kernel versão 2.4, desenvolvido por Linus Torvalds, com suporte também a versões 2.6 atuais. Todas as versões de kernel baseadas na biblioteca GNU C versão 2.3.4 (libc6). Sua instalação é intuitiva e simples contando com telas de ajuda ao logo do processo. Ele possui extensa documentação no site oficial (www.slackware.org) e também em milhares de fóruns de discussão associados. O sistema Slackware pode rodar em arquiteturas 486 em máquinas x86 como P3, P4, Athlon, Duron, entre outras. O Slackware é a distribuição escolhida por este projeto pois como apóia seu funcionamento em flexibilidade, simplicidade e estabilidade, nos fornece condições favoráveis para desenvolvê-lo aplicando sua gama de funcionalidades para um ambiente corporativo de servidores, suportando o escopo atual de um servidor de email estável, flexível e seguro. Outro fator que influenciou em nossa escolha foi o fato do Slackware Linux ser a distribuição mais imples e flexível disponível permitindonos a alterá-la basicamente reconfigurando scripts simples de inicialização e instalação, bem como criar nossos próprios. Ela nos permite uma escolha bem mais simples de pacotes utilizados e descartados pelo sistema simplesmente apagando-os. 4 – SERVIDORES DE E-MAIL CÓDIGO ABERTO 4.1. Definição e Funcionamento O servidor de e-mail, mais conhecido como mail exchanger (MX), no contexto de um servidor de nomes de domínio é um software de computador instalado em um determinado host capaz de transferir mensagens eletrônicas entre dois computadores conectados a uma rede. Para que dois computadores troquem mensagens entre eles ambos deve estar conectados à uma rede e possuir algum mail transfer agent (MTA). MTAs são softwares que se conectam em determinado servidor de e-mail de modo a enviarem suas mensagens, e também são responsáveis por receber todas as mensagens armazenadas em suas caixas postais eletrônicas neste servidor conectando-se ao mesmo servidor, ou servidor diferente, para resgatá-las. Como em toda conexão baseada em protocolos da pilha TCP/IP, a conexão do MTA com o MX tem seu controle baseado no par IP:Socket, independente do serviço utilizado pelo servidor, que pode variar de porta. Existem atualmente vários protocolos que participam do funcionamento de um servidor de e-mail atual. São eles: SMTP ( Simple Mail Transfer Protocol ) : Serviço da camada 3 do modelo OSI utilizado para troca de mensagens entre hosts definido pela RFC 821 e estendido pela RFC 1123. Atualmente é utilizado o ESMTP definido pela RFC 2821 que nada mais é que o SMTP estendido. Atualmente o ESMTP é o protocolo para troca de mensagens mais utilizado na Internet. O servidor SMTP aguarda conexões TCP de clientes MUA na porta 25. POP ( Post Office Protocol ) : Serviço da camada 3 do modelo OSI utilizado para armazenamento e resgate de mensagens no servidor via clientes MUA. Definido inicialmente pela RFC 918 e atualizado para RFC 1939. O POP aguarda por conexões TCP na porta 110 no servidor. Atualmente está na versão 3. IMAP ( Internet Message Access Protocol ) : Serviço da camada 3 do modelo OSI para armazenamento e resgate de e-mails no servidor, definido pela RFC 1064 e atualizado para RFC 3501. Ele é considerado uma evolução do protocolo POP já conhecido, pois fornece várias outras funcionalidades não existentes neste. Seu servidor aguarda conexões TCP de clientes MUA na porta 143. Podemos definir o funcionamento de troca de mensagens padrão com a figura a seguir: Figura 1 – Funcionamento do Correio Eletrônico (WIKIPEDIA, 2007) O usuário remetente da mensagem utiliza um MUA de sua escolha, como Outlook, Thunderbird, entre outros, para conectar-se ao MTA que possui sua própria caixa postal eletrônica, caracterizado na figura pelo Servidor A, via protocolo SMTP na porta 25. Este MTA por sua vez verifica se a caixa do usuário remente existe. Caso a conta inexista o MTA cancela a operação enviando ao MUA do usuário uma mensagem de erro. Caso a conta exista o MTA faz consultas ao seu DNS para encontrar que MTA no mundo contém a caixa de e-mail do destinatário. Uma vez encontrado o destinatário o Servidor A acessa o MTA remoto, caracterizado na figura pelo Servidor B, também com uma conexão TCP na porta 25 do Servidor B. Quando o MTA Servidor B recebe esta conexão ele verifica se a conta do usuário remetente existe, caso positivo a mensagem é entregue, caso negativo o Servidor A recebe a resposta de que a conta destinatária não existe, mensagem esta retransmitida ao MUA rementente. O resgate das mensagens contidas num servidor de e-mail pode acontecer utilizando dois protocolos diferentes, SMTP ou IMAP. Quando utilizado o protocolo POP, o cliente MUA que requer o resgate das mensagens conecta no MTA que possui sua conta na porta 110 via TCP. O MTA verifica se a conta do usuário existe, negativo o MUA emissor recebe uma mensagem de que a conta inexiste. Caso positivo o MTA destino valida usuário e senha configurados no MUA e compara com as configurações de sua conta. Caso usuário e conta existam e sejam válidos o servidor lista as mensagens existentes. Caso haja alguma o MUA cliente as resgata para si. O procedimento acima é exatamente igual em teoria ao protocolo IMAP com uma única diferença, em um servidor IMAP normalmente as imagens permanecem no servidor por padrão. As únicas informações resgatadas pelo cliente são os índices da caixa postal, ou seja, os nomes de assuntos das mensagens existentes e nada mais. Caso o usuário tenha necessidade de ler alguma mensagem ela é resgatada no momento em que ele a solicita dando um clique simples sob o nome de assunto da mensagem. Atualmente um servidor de e-mails corporativo não possui apenas os serviços básicos para troca de mensagens. A medida que a demanda por funcionalidades aumenta, a necessidade por outros tipos de serviços se justifica. Serviços como webmails que permitem aos clientes acesso a suas mensagens de qualquer lugar do mundo simplesmente através da utilização de qualquer computador conectado a internet via navegador web como Internet Explorer, Mozila Firefox, entre outros. Os serviços de webmail por si só possuem funcionamento bem simples porém necessitam de uma certa infra-estrutura para que funcionem tais como servidores de páginas, suporte a linguagens web interpretadas e , dependendo da complexidade do software, bancos de dados para armazenamento de mensagens e logs dos serviços. 4.2. Sendmail, Postfix e qmail Em 1991 praticamente todas as empresas que possuiam um servidor de e-mail para troca de mensagens utilizava o Sendmail. O Servidor Sendmail foi desenvolvido por Eric Allman em 1971 que tinha como objetivo padronizar todos os MTAs existentes em apenas um. Atualmente o servidor Sendmail ainda é o mais utilizado principalmente por ser o mais antigo e “maduro” servidor existentes porém sua utilização decaiu muito pelo advento da criação de vários outros servidores de e-mail mais modernos. O Sendmail possuia diversos problemas estruturais, primeiramente ele foi feito para um ambiente de interconexão de redes quando a premissa básica era a possibilidade de troca de mensagens e não a segurança do meio em sí visto que este meio era muito caro impossibilitando sua utilização pela maior parte da população. Com este fato apareceram diversos problemas de segurança provenientes de erros no código e também da total falta de adequação ao paradigma da segurança. Seus principais erros eram em relação ao código, muito em parte pela falta de projeto e padronização no desenvolvimento de qualquer software existentes na época o que também trazia outro problema, o tempo de manutenção do software que era constantemente ultrapassado. A medida que os erros no daemon Sendmail iam aparecendo era necessário um suporte eficaz para sua correção, quase sempre acompanhada de patches e consecutiva recompilação do código onde era necessário apenas um erro de uma linha de comando para que está compilação não fosse executada com sucesso. Suas caixas postais de usuários funcionavam no sistema Maildir padrão onde cada mensagem ficava no diretório pessoal do usuário, e cada um dos usuários deveria existir no servidor, fazendo com que se houvesse a necessidade de um servidor para 5.000 contas, deveriam existir 5.000 usuários, um para cada conta, configurado corretamente no sistema de e-mail. Não havia ainda gerenciadores de domínios e contas virtuais obrigando assim que cada usuário de e-mail também fosse um usuário do sistema. Outro erro crucial do sendmail era que seu daemon principal, como é chamado o processo principal de um software servidor, era executado pelo usuário root, administrador do sistema Linux, portanto qualquer falha explorada por um invasor em potencial era explorada sobre este usuário, sendo ele o usuário administrador caso o atacante conseguisse invadir o servidor por meio de alguma falha de buffer overflow no servidor ele entraria com privilégios de root. Além do usuário root alguns programas também eram utilizados com permissões SUID o que permitia que usuários normais do sistema executassem programas com privilégios de root. Esta falha não era apenas de segurança, era também estrutural uma vez que bastava apenas um erro no daemon principal para que o sistema inteiro ficasse inoperante. A configuração do servidor também era baseada apenas em um arquivo, extremamente complexo e não intuitivo, onde eram feitas todas as operações de configuração básicas bem como whitelists, blacklists e outras proteções ao servidor. Se este arquivo fosse comprometido por erros no sistema de arquivo o serviço inteiro era comprometido. É importante frisar que nesta época os sistemas de arquivos Journaling (sistemas de arquivo com gravação e leitura serializada, evitando assim fragmentação) ainda estavam em fase de projeto. Todo sistema de arquivos não journaling é mais propício a falhas, sendo estas mais difíceis de corrigir levando muitas vezes a um problema do servidor mesmo ele não sendo gerado pelo serviço de email em sí. O Sendmail foi feito em uma época onde a segurança não era tão essencial, e este era exatamente seu ponto fraco. O sendmail não conseguiu acompanhar as rápidas e frequentes mudanças nos paradigmas de segurança e novos serviços necessários ao mercado corporativo, contudo continuava a ser o servidor mais completo do mercado. Alguns anos depois foi criada outra alternativa ao Sendmail, o Postfix. Patriocinado pela IBM e desenvolvido por Wietse Venema o Postfix foi criado com o objetivo de ser rápido, fácil de administrar e seguro. Ele possuia suporte completo ao Sendmail pois suas bases eram as mesmas. Houve um grande avanço na instalação e configuração que ficaram bem mais intuitivas e simples. Assim como o Sendmail ele também era gratuito, lançado sob a licença GPL. Porém ele também possuia diversos problemas. O principal é que mantinha a mesma base do sendmail o que o tornava um pouco antigo para algumas configurações. Outro problema eram as constantes atualizações de segurança pois sofria diversas invasões decorrentes de erros gerados por código mal feito. Estas constantes atualizações também necessitavam de recompilação de seu código fonte o que forçava a indisponibilidade do serviço para que sua manutenção fosse executada. Embora suas atualizações de segurança fossem lançadas constantemente o Postfix possuia o mesmo problema principal de executar seu único daemon padrão com privilégios de usuário root o que trazia os mesmo problemas gerados por seu servidor antecessor. Finalmente em 1991 foi criado o qmail desenvolvido por Dan J. Berstein como uma altenativa totalmente segura, rápido e de fácil administração, conforme discutido no capítulo seguinte. 5 – QMAIL 5.1. Definição O servidor qmail, projetado e desenvolvido em 1996 pelo pesquisador e matemático Dan J. Bernstein e tem como objetivo resolver todos os problemas de seus servidores antecessores, principalmente no quesito segurança, de forma a torná-lo rápido, eficiênte e de fácil administração, possuindo assim uma curva de aprendizado menos acentuada. O principal objetivo do qmail era claro, substituir os servidores Sendmail e Postfix. Atualmente ele é considerado o servidor de email mais rápido do mundo sendo o segundo servidor mais utilizado, perdendo apenas para seu antecessor, Sendmail, por motivos históricos. Podemos citar algumas empresas famosas que utilizam o qmail como : Google, Usa.net, Yahoo!, Network Solutions, Critical Path, Verio, Message Labs, Hypermarket, PayPal/Confinity, entre outros. Atualmente o qmail é considerado o servidor de e-mail mais seguro do mundo contando inclusive com um prêmio de USD$ 1.000,00 para o primeiro que encontrar alguma falha de segurança referente ao código padrão do qmail, falha esta não encontrada desde sua criação até a data presente deste trabalho . 5.2. Segurança e Estrutura Hierárquica O sistema de e-mail qmail é formado por basicamente 4 softwares: qmail-1.03, ucspi-tcp, daemontools e checkpassword, que possuem as seguintes funções: qmail-1.03 : O qmail-1.03 é o daemon principal que provê suporte aos protocolos smtp e pop3. O suporte a outros protocolos, como imap e ssl, são providos por daemons externos ao sistema qmail mas que tem total integração a ele. ucspi-tcp : O ucspi-tcp é uma subimplementação de superdaemon feito especialmente por Dan J. Bernstein para o sistema qmail, de maneira a substituir os deficientes, porém padrões históricos, softwares inetd e xinetd dos sistemas Linux, de forma a obter mais performance e flexibilidade. A sigla ucspi significa Unix Client-Server Program Interface. Ele é constituido por várias ferramentas e permite conexões TCP com o qmail e é uma alternativa mais segura que o inetd/xinetd. Com o ucspi-tcp pode-se criar criar daemons de servidores-tcp e clientestcp. daemontools : O daemontools funciona como um sistema de gestão bastante avançado para os processos do qmail e é constituido por um conjunto de pequenas ferramentas, citadas adiante. O daemontools permite a implementaçào de uma relação de confiança entre os serviços que dele dependem, uma vez que tem mecanismos para arranque automático de daemons no caso de eles deixarem de funcionar sem razão aparente.. checkpassword : Este software permite a autenticação durante o processo do protocolo POP, isto é, no acesso as mensagens armazenadas na caixa de correio do usuário. Ele consiste em uma interface simples e uniforme para autenticação de passwords dentro de qualquer aplicação root. Também pode ser útil para a instalação de aplicações futuras tais como o login, ftpd e pop3d. Ao contrário de seus antecessores o qmail possui vários daemons executados com relação de confiança entre eles, cada um possui funções e usuários de controle diferentes. Existe apenas um daemon no sistema qmail que é gerenciado pelo usuário root, que é na verdade o daemon principal que faz o controle de todos os outros, mesmo assim nem o daemon principal nem o resto do sistema fazem uso do bit de permissão especial SUID, tornando assim o qmail mais seguro ainda ao nível do sistema. Isto visa maximizar sua performance bem como facilitar o controle dos daemons, fazendo com que um falha em qualquer um deles mantenha um possível problema isolado do resto dos serviços. O qmail possui basicamente 6 usuários destinados ao controle de cada um de seus daemons, nenhum destes usuários possui um shell real tornando assim o sistema mais seguro. Os usuários e grupos do qmail são os seguintes: alias : Este usuário é responsável por controlar todos os aliases do sistema. Existe de forma análoga ao servidor sendmail e possui a mesma estrutura dando assim total suporte ao sistema sendmail. qmaild : Este usuário é utilizado para executar o servidor tcp especial do qmail chamado tcpserver. qmaill : Este usuário é utilizado pelo daemon splogger, responsável por logar toda e qualquer atividade ao daemon padrão de logs do Linux, o syslogd. É através do splogger que o qmail consegue enviar logs ao sistema Linux. qmailq : Este usuário é utilizado para executar o daemon qmail-clean, responsável por eliminar mensagens e usuários de email que estejam na memória do servidor com relay ainda aberto. qmailr : Este usuário é utilizado para executar o daemon qmail-rspawn, responsável por enviar mensagens para servidores remotos. qmails : Este usuário é utilizado para executar o daemon qmail-send, utililzado para enviar e-mails provenientes da fila do qmail que é gerenciada pelo daemon qmail-queue. root : Este usuário é utilizado para executar os daemons qmail-queue qmail-lspawn, responsável por enviar mensagens para o servidor local. Seu funcionamento é bem simples seguindo sempre uma linha lógica de funcionamento dos daemons regida pela seguinte figura: Figura 2 – Esquema de daemons do qmail (LIFE WITH QMAIL, 2007) O qmail diferencia mensagens recebidas localmente e remotamente por dois daemons diferentes, respectivamente qmail-smtpd e qmail-inject. O daemon qmailsmtpd aceita conexões de servidores de correio remotos e encaminha estas mensagens para o daemon qmail-queue, resposável pela gerência da fila de mensagens do sistema qmail. Da mesma forma temos o daemon qmail-inject que recebe conexões locais e envias suas mensagens para o daemon qmail-queue. O qmail-queue gerencia a fila de forma a entregar suas mensagens, através do daemon qmail-send, para os MTA remoto. O qmail-send é responsável por enviar qualquer mensagem que exista na fila do qmail-queue. Para fazer isso ele chama um dos dois daemons, qmailrspawn ou qmail-lspawn, conforme o caso (remoto/local). O qmail-remote entrega as mensagens dirigidas aos servidores remotos enquanto o qmail-local entrega as mensagens destinadas a um usuário local. 5.3. Licença de Uso O qmail possui uma licença de uso especial. O qmail pode ser alterado de qualquer forma possível a melhorar seu funcionamento porém seus pacotes não podem ser redistribuidos com estas alterações se não foram explicitamente aprovados por seu desenvolvedor, Dan J. Bernstein. Isso quer dizer que pela sua licença, mesmo que seja feita alguma alteração em seu código, ele deve ser distribuido intacto. 5.4. Problemas existêntes O qmail não possui desenvolvimento de seu código, por seu criador, desde o ano que foi criado em 1996, devido a isto ele não está em conformidade com os paradigmas atuais de servidores de e-mail no que tange à novas funcionalidades e softwares existentes. Para tanto é necessário utilizar patches para correção e implementação dessas funcionalidades bem como utilização de outros programas para tornar o qmail um ambiente de servidor de e-mail completo e atual. O problema está na existência de diversos patches e softwares diferentes para a implementação das mesmas funcionalidades, gerando assim uma redundância. Estes softwares muitas vezes não são compatíveis entre sí causando problemas quando da compilação do código do qmail. Para adequar o qmail aos novos paradigmas de segurança e funcionalidades estas melhorias em seu código, via software, tornam-se madatórias, portanto é impossível conseguir um qmail realmente adequado a esses novos paradigmas quando utilizado com seu código padrão intalterado. Todas essas alterações fazem com que não haja padronização na implementação e configuração do sistema dificultando o trabalho do administrador, visto que cada adminsitrador só utiliza o necessário para o seu cenário atual, muitas vezes este cenário não exige uma implementação completa e avaçada do qmail. É obrigação do administrador do servidor conseguir um grupo de pacotes e patches estáveis o bastante de modo a não comprometer a performance e segurança do servidor. Outro problema é que para se criar um servidor nesses novos paradigmas é necessário o uso de patches e novos softwares, para tal é necessário integrá-los, operação esta apenas possível quando compilamos novamente o qmail via código fonte, o que gera um overhead no tempo de criação de um servidor. 6 – OTIMIZAÇÕES DO SLACKWARE PARA QUBIT 6.1. Pacotes utilizados e descartados A distribuição Slackware é composta por 3 CDs de instalação dos quais apenas os dois primeiros são utilizados para uma instalação padrão. No caso de uma instalação no perfil desktop é interessante instalar o Slackware Linux com todos os pacotes, na qual os dois primeiros CDs são necessários totalizando assim 1.2 Gb de espaço em mídia que pode ser gravado em CD ou DVDs. Se esta instalação for feita adicionando-se os softwares contidos no último CD ela totalizará um espaço de 1.9 Gb entre softwares e bibliotecas. O escopo deste trabalho é desenvolver uma distribuição voltada a utilização de servidores de e-mail portanto não se torna necessário a instalação de pacotes fora do deste escopo. Foram excluidos da distribuição Slackware os pacotes dos seguintes escopos: Serviços : Foram descartados todos os pacotes relativos a servidores não utilizados como sendmail, servidores de impressão, fontes, roteamento entre outros. Houve também a exclusão de serviços considerados superdaemon como inetd e xinetd instalados por padrão nas distribuições Linux para levantar e derrubar por demanda serviços configurados. Este superdaemon foi substituido pelo ucspi-tcp utilizado para o mesmo fim em relação aos daemons do sistema qmail. Os serviços inetd e xinetd produzem um grande overhead para executar serviços diminuindo também assim a performance do servidor no que tange a utilização de CPU e Memória RAM para outros serviços. Softwares e Bibliotecas: Foram excluidos todos os softwares e bibliotecas relativos a aplicações não condizentes com o cenário atual como bibliotecas gráficas, svga, seejpeg, seebmp, aplicativos e bibliotecas de som, ferramentas para cálculo matemático, player de som e bibliotecas relativas. Redes : Foram também excluidos softwares para interconectividade de redes não pertinentes ao projeto como wireless, bluetooth, e suas bibliotecas. Ambiente Gráfico : Todo e qualquer pacote relativo a servidores de ambiente gráfico, Xfree86, Xorg, bem como ambientes gráficos como KDE, GNOME entre outros foram excluidos. Todos os aplicativos que executam nestas plataformas também foram excluidos. Enfim foram excluidos todos os pacotes relativos aos grupos Y, X, XAP, TCL, T, KDE e KDEI. Esta operação resultou na redução de praticamente 500Mb da instalação. Estes pacotes foram excluidos por não serem necessários à um servidor de e-mail e também por reduzirem a performance do mesmo. 6.2. Empacotamento de softwares Devido a necessidade de otimização de certos pacotes na rede, bem como a criação de outros, por motivos de performance e redução no tempo de instalação dos mesmos, foram criados pacotes para todos os softwares utilizados no projeto. Para a adequação ao modelo de empacotamento do slackware e também para manter a compatibilidade foram utilizados softwares específicos do próprio sistema para o empacotamento como pkgtool, makepkg, installpkg, checkinstall, bem como ferramentas e bibliotecas de compilação padrões da linguagem C como make, gcc e glibc. No ato da compilação do software via código fonte podem ser passados parâmetros para que algumas de suas características sejam alteradas como diretório de configurações, diretório de armazenamento dos binários gerados, diretório onde serão localizadas as bibliotecas utilizadas pelos binários, entre outros. Para não comprometer a estrutura de cada um dos pacotes, levando assim à um possível problema de quebra de dependência em suas bibliotecas compartilhadas, não foram alteradas características em relação a pacotes já existentes na distribuição, com apenas 3 excessões em relação aos pacotes apache, php e mysql. Todas as outras alterações foram feitas em relação aos arquivos principais de configurações instalados para cada pacote padrão. A criação de pacotes infere duas operações diferente, uma para pacotes préexistentes onde apenas são alterados os arquivos de configuração e alguns diretórios, e para pacotes não existentes onde é preciso compilar, e antes da instalação, criar os pacotes para instalação conforme softwares de empacotamento padrão do sistema. Na primeira opção, modificação de pacotes pré-existentes, primeiramente o conteúdo do pacote é extraido usando-se ferramentas de compactação como tar, bzip e gzip. Depois de toda e qualquer alteração executada deve-se gerar novo pacote com os comandos citados no parágrafo anterior. O processo de criação para pacotes já existentes pode ser visualizado por completo no bloco texto abaixo: Alteração de pacotes compilados do código fonte : root@root root@root root@root root@root root@root root@root root@root /root /root /root /root /root /root /root # # # # # # # tar xvzf pacote.tar.gz cd pacote/ ./configure make mkdir /tmp/temp_pacote/ make install DESTDIR=”/tmp/temp_pacote/” cd /tmp/temp_pacote Executar qualquer alteração necessária root@root /root # makepkg pacote.tgz Alteração de pacotes pré existentes : root@root /root # mkdir /tmp/temp_pacote/ root@root /root # installpkg –root /tmp/pacote pacote.tgz root@root /root # cd /tmp/temp_pacote Executar qualquer alteração necessária root@root /root # makepkg pacote.tgz 6.3. Menus Interativos de Instalação O Slackware Linux possui uma instalação bem intuitiva e leve em relação às instalações dos demais linux existentes. Ela é baseada inteiramente em script criados em shell (Shell Scripting) utilizado a biblioteca Ncurses responsável por desenhar todas as telas de modo a otimizar e facilitar a instalação. O slackware faz uso também da ferramenta dialog, que através da biblioteca ncurses, serve de front-end para configuração de menus e mensagens na instalação. Todo e qualquer menu de instalação criado na distribuição Qubit Linux manterá este mesmo padrão. Não é objetivo deste projeto criar menus interativos complexos ou visualmente mais agradáveis. Nosso objetivo em relação à estes menus é implementar diversas funciolidades básicas necessárias inexistentes no Slackware. 6.3.1. Particionamento Manual e Automático Por padrão qualquer Linux para ser instalado deve ter primeiramente sua midia de instalação (Hard disk, Pen drive entre outros) particionada de forma a receber o sistema. Este particionamento pode ser executado de forma automática ou manual no ato da instalação de diversos linux via menu interativo normalmente utilizando diskdruid , parted, entre outros como respectivamente nos Linux Redhat Enterprise e Slax. O Linux slackware não possui menu interativo para particionamento na instalação o que gera a necessidade de fechar o terminal de instalação e particionar o hard disk manualmente através da interface de console via shell. Para o particionamento podem ser utilizados basicamente dois particionadores destrutivos : fdisk e cfdisk. A diferença entre eles se deve a maior intuitividade do cfdisk em relação ao fdisk. Devido a sua intuitividade e facilidade de uso o cfdisk foi o particionador escolhido para este projeto. Outra funcionalidade básica inexistente no Slackware é a re-leitura da tabela de partições após um particionamento bem sucedido, forçando assim ao usuário que execute um boot no servidor para que ela seja relida e reconhecida pelo processo de isntalação do sistema linux em questão. Esta operação é executada pelo comando PARTPROBE inexistente nas versões 10.2 e 11 do Slackware Linux. O software partprobe foi instalado como um meio de dinamizar a instalação evitando a perda de tempo no reboot do servidor e também a saida da interface de menus interativos para sua execução. A adição deste software culmina com um ganho de tempo de aproximadamente 5 minutos de boot. Foi desenvolvida uma interface responsável pela configuração visual tanto automática como manual da etapa de particionamento. Este menu foi feito em duas etapas, primeiramente verificamos a existência e qual o tipo de hd existe no servidor bem como sua localidade na controladora IDE/SATA/SCSI em questão. Foi desenvolvido um script em Shell Script para este fim utilizando-se expressões regulares. É assim gerada uma lista com diversos dispositivos encontrados pela inicialização da instalação com dados passados pela BIOS (Figura 3). Para geração desta lista é consultado o arquivo /proc/partitions em busca de partições encontradas pelo próprio sistema, através deste arquivo é gerada uma lista de opções para a escolha do hard disk utilizado na instalação. Esta lista é então desenhada pela ferramenta dialog que utiliza as bibliotecas ncurses para criação de menus interativos via shell. É desenhado portanto o menu de escolha de particionamento que possui duas opções: Particionamento Automático e Particionamento Manual (Figura 4). Para o menu de Particionamento Automático ainda existem dois perfis utilizados onde apenas o primeiro é o escopo deste projeto. Este particionamento automático particiona o hard disk escolhido de forma padronizada escolhida pelo projeto. Figura 3 – Lista de Hard Drives encontrados pelo particionamento Figura 4 – Particionamento Manual ou Automático Verifiquem que o escopo de particionamento em nossa distribuição é apenas de Hard Disks baseados em controladores IDE/SATA. Não foram feitos testes extensivos para Hard Disks em controladoras SCSI embora o kernel utilizado ofereça este suporte. 6.4. Kernel e Patches O kernel, também chamado de núcleo, é o cerne do sistema, ele é responsável por verificar e controlar dispositivos de hardware, controlar interrupções, acesso à memória e ao discos, implementação e verificação de segurança, gerência de sistemas de arquivos, detecção e correção de falhas nos hardwares, entre outras funções. Para tanto é necessário que o kernel utilizado tenha um bom suporte a hardware para se adequar aos mais variados ambientes de servidor encontrados no mercado. O kernel utilizado para este projeto é o vanilla versão 2.6.21.5. Chamamos de kernel vanilla os kernels padrões encontrados no repositório central de kernels para Linux (www.kernel.org) . A diferença é que foram aplicados alguns patches ao kernel para dar suporte a alguns dispositivos e sistemas de arquivos listados abaixo. 6.4.1. Patch para ReiserFS v4.0 Há uma discução intensa entre a comunidade e o mercado corporativo sobre qual sistema de arquivos utilizar. Este vai depender do escopo da solução proposta. Existem diversos tipos de sistemas de arquivos famosos, podemos citar alguns como FAT16, FAT32, NTFS para windows. Para os sistemas Linux os mais conhecidos são EXT2, EXT3, ReiserFS e XFS. Existem diversas diferenças entre cada um deles. O sistema de arquivos EXT2 é por natureza um dos mais rápidos por não possuir tantos recursos como seus sucessores, como suporte à Journaling, o que infere uma probabilidade maior de perda de dados quando de um problema no disco. Já o EXT3 possui as mesmas funcionalidades do EXT2 porém com suporte à journaling. Historicamente falando os sistemas mais utilizados, por serem mais antigos e maduros, são os EXT2 e EXT3. Recentemente vem sendo muito empregado em servidores de aplicação crítica, outro sistema de arquivos mais robusto e seguro chamado ReiserFS. Este sistema de arquivos já foi desenvolvido com suporte padrão à Journaling e é baseado na estrutura de arvores B, ganhando assim muita performance. Sua versão estável, e mais utilizada, é a 3.6 pois vem suportada pela maioria dos kernels em várias distribuições Linux atuais. Recentemente foi desenvolvida uma nova versão muito superior a esta em vários quesitos. Podemos consultar os dados de cada um dos sistemas de arquivos nas tabelas abaixo: Limits File Systems EXT2 EXT3 ReiserFS 4.032 bytes / 255 Characterers Reiser4 Maximum Filename Length 255 bytes 255 bytes Allowable Caracters in Directory Entries Any expect NUL Any expect NUL Any expect NUL Any expect and NUL Maximum Pathname Length No Limit Defined No Limit Defined No Limit Defined No Limit Defined Maximum File Size 2 Gb to 1 Tb 16 Gb to 1 Tb 8 Tb 8 Tb to 16 Tb Maximum Volume Size 2 Tb to 32 Tb 2 Tb to 32 Tb 8 Tb to 32 Tb Indefinido Tabela 5 – Limites de sistemas de arquivos 3.976 bytes Metadata File Systems EXT2 Yes EXT3 Yes ReiserFS Yes Reiser4 Yes Posix file permissions Yes Yes Yes Yes Creation Timestamps Yes Yes Yes Yes Last Access / Read timestamps Yes Yes Yes Yes Last metadata change timestamps Yes Yes Yes Yes Stores File owner Last archieve timestamps No No No No Access Control Lists Yes Yes Yes Yes Security / MAC Labels Yes Yes Yes Yes Extended Attributes / Alterante Data streams / Forks Yes Yes Yes Yes Checksum / ECC No No No No Tabela 6 – Metadata de sistemas de arquivos Features File Systems Hard Links EXT2 Yes EXT3 Yes ReiserFS Yes Reiser4 Yes Soft Links Yes Yes Yes Yes Block Journaling No Yes Yes Yes Metadata-only Journaling Yes Yes Yes No Case-sensitive Yes Yes Yes Yes Case-preserving Yes Yes Yes Yes File Change Log No No No No Internal Snapshotting / Branching No No No No XIP No No No No Filesystem-level encryption No No No No Tabela 7 – Funcionalidades de sistemas de arquivos Podemos ver claramente que todas as funcionalidades contempladas pelos sistemas mais antigos são também implementadas no sistema ReiserFS, porém o ReiserFS possui outras funcionalidades não encontradas em sistemas antigos. A maior parte dos sistemas vem com suporte a ReiserFS versão 3.6, embora a mais atual seja 4.0. A versão mais atual é mais robusta, tem maior performance na leitura e gravação de arquivos, bem como suporte a limites bem maiores. Para adicionar o suporte a versão 4 do sistema de arquivos ReiserFS ao kernel deve-se aplicar um patch. 6.4.2. Patch para BootSplash Um dos fatores responsáveis pela não adoção do sistema operacional Linux Slackware é seu caracter pouco intuitivo e, em geral, “seco” do sistema. A inicialização do Slackware é executada em modo verboso sem nenhuma preocupação estética com o usuário final. É bom frisar que nem sempre é necessária uma visualização completa do processo de boot pois o mesmo não pode ser interrompido de repente para alguma tarefa administrativa no caso de alguma falha, sendo esta falha só resolvida com a possível necessidade de outro boot. Portanto no caso de algum erro, os logs do sistema podem ser verificados. Devido a existência de logs no sistema não há a necessidade de exibir todo erro encontrado quando da execução de softwares na inicialização, bastando uma mensagem de funcionamento ou falha. Foram padronizadas todas as mensagens de sucesso como [ OK ], e todas as mensagens de falha como [ FAIL ], respectivamente coloridas de verde e vermelho. Deste modo a vizualização fica mais simplificada, intuitiva e limpa para o usuário final bastando apenas, em caso de falha, verificar os logs para uma saida mais completa. Para mascarar as mensagens de inicialização do boot foi adicionado o patch bootsplash (http://www.bootsplash.org/Welcome_to_the_graphical_world_of_Linux) ao kernel que adiciona uma tela inicial com barra de progresso. Esta tela suprime a visualização de todas as informações de inicialização, deixando assim o processo de boot menos poluido. Mesmo suprimindo suas mensagens o bootsplash ainda fornece suporte a modo verboso via tecla de função F2. 7 – HARDENING 7.1. Hardening de Sistema Atualmente boa parte da quebra de sigilo em sistemas de computação tem como orígem do ataque funcionários da própria empresa. Estes por estarem dentro da empresa possuem ferramentas e informações privilegiadas que lhes concedem conhecimento para executar vários tipos de ataque. Outro fator importante é a relação aberta de confiança entre a empresa e o funcionário, onde pela visão da empresa o funcionário é um indivíduo acima de qualquer suspeita. A situação acima traz consigo um problema, ela termina por deixar os administradores de serviços e sistemas da empresa mais atentos para o que chega à seus servidores de fora da empresa, e mais descuidados com o inimigo interno, o funcionário, abrindo assim uma brecha de segurança condicional. Independente de confiar ou não em seus funcionários, o administrador deve executar e manter políticas pesadas de segurança que permitam apenas ao administrador, e pessoas autorizadas, a utilizarem ou “chegarem” a determinado servidor ou serviço. Quando acessamos remotamente ou localmente um servidor, ou seja, quando possuimos um shell neste servidor mesmo não possuindo privilégios de usuário administrador (usuário root) e consequentemente não executando escritas em quase nenhum arquivo do sistema, o usuário normal também tem privilégios de leitura em vários aspectos do servidor permitindo assim uma quebra de sigilo parcial. Alguns arquivos do sistema pedem atenção especial. Arquivos que armazenam informações de usuário, grupo e suas senhas, respectivamente /etc/passwd, /etc/shadow, /etc/group, /etc/gshadow, devem ser retiradas as permissões para o grupo other de modo que apenas o usuário e grupo do root tenha acesso ao arquivo e nenhum outro. Foram executadas as mesmas alterações nos arquivos de configuração nos serviços de agendamento de tarefas periódico e aperiódicos, respectivamente CRON e AT. Seu conteúdo recebeu a linha de configuração “root” permitindo apenas que o usuário root possa agendar tarefas no sistema, deste modo controlando também as tarefas que porventura sejam agendadas para outros usuários. Em sistemas Linux todos os usuários, por padrão, podem executar reinicialização da máquina com a combinação de teclas CRTL+ALT+DEL, isto implica na possível indisponibilidade de um servidor caso haja um usuário mal intencionado. Para inibir este problema foi comentada no arquivo /etc/inittab a linha responsável por esta funcionalidade que compreende a configuração “ca::crtlaltdel:”. O reinicialização do sistema deve ser executada apenas pelo usuário root mediante execução dos comandos halt, reboot ou init 6. Para permitirmos que determinado software execute com as permissões de outro usuário, usamos um bit especial chamado SUID. Muitos comandos no Linux possuem este bit ligado desnecessáriamente ocasionando assim uma possível falha de segurança. Portanto esta permissão foi retiradas dos seguintes arquivos : /bin/ping, /bin/mount, /bin/ping6, /bin/umount, /usr/bin/at, /usr/bin/cu, /usr/bin/rcp, /usr/bin/rsh, /usr/bin/uux, /usr/bin/chfn, /usr/bin/chsh, /usr/bin/sudo, /usr/bin/uucp, /usr/bin/wall, /usr/bin/lppasswd, /usr/bin/crontab, /usr/bin/crontab, /usr/bin/chage, /usr/bin/write, /usr/bin/traceroute6, /usr/bin/traceroute, /usr/bin/fdmount, /usr/bin/slocate, /usr/bin/expiry, /usr/bin/newgrp, /usr/bin/passwd, /usr/bin/gpasswd, /usr/bin/rlogin, /usr/bin/uuname, /usr/bin/uustat, /usr/bin/lockfile, /usr/bin/slrnpull, /usr/bin/procmail, /usr/lib/utempter/utempter, /usr/sbin/uuxqt, /usr/sbin/uucico, /usr/libexec/pt_chown. Outro fator que pode melhorar a performance do servidor é a quantidade de terminais disponíveis na instalação. Embora em modo single user seja utilizado apenas um, em modo multi user estão disponíveis 6 terminais tty1 à tty6, e mais um especial para a execução do ambiente gráfico. Não há necessidade de existirem tantos terminais pois o superusuário trabalha apenas com 1 ou 2 ao mesmo tempo, e também pelo fato de que um terminal aberto, mesmo não utilizado, consome memória do servidor reduzindo sua performance. Portanto foram eliminados os terminais tty3 à tty7, restando apenas tty1 a tty2 para interação com o usuário. Estas alterações foram executadas com o comando sed para a substituição de strings em um arquivo. Outra medida de segurança tomada foi a alteração e exibição de banners para login local e remoto de usuários. O banner alterado é exibido sempre no início de cada conexão ou login, antes do preenchimento de nome de usuário e senha. A mensagem foi configurada no arquivo principal para este fim localizado em /etc/issue, com a seguinte mensagem: ################################################################################### # WARNING # ################################################################################### # # # This is a Private computer system and is the property of this Company. # # It is for authorized use only. Users (authorized or unauthorized) have no # # explicit or implicit expectation of privacy. # # # # Any or all uses of this system and all files on this system may be # # intercepted, monitored, recorded, copied, audited, inspected, and disclosed to # # authorized site, Department of Energy, and law enforcement personnel, # # as well as authorized officials of other agencies, both domestic and foreign. # # By using this system, the user consents to such interception, monitoring, # # recording, copying, auditing, inspection, and disclosure at the discretion of # # authorized site or Department of Energy personnel. # # # # Unauthorized or improper use of this system may result in administrative # # this system you indicate your awareness of and consent to these terms and # # conditions of use. LOG OFF IMMEDIATELY if you do not agree to the conditions # # stated in this warning. # # # ################################################################################### 7.2. Hardening de Serviços Atualmente grande parte da quebra de sigilo e invasões a sistemas domésticos e corporativos se deve muitas vezes à inabilidade do administrador em protegê-la de forma correta e eficaz, outra parcela se deve a erros existentes nos softwares, mais conhecidos como backholes, que de forma não prevista abrem uma porta de entrada para um intruso em potencial. A customização de serviços de login remoto e locais do servidor que possuam algum suporte a rede chamamos de Hardening de Serviços. 7.2.1. SSH e Serviços de Acesso Remoto Pode-se afirmar que praticamente todo acesso remoto utilizado para manutenção ou desenvolvimento de um servidor atual é feito via shell seguro, mais conhecido como ssh. Desta forma criamos uma camada a mais de proteção pois neste caso o meio é criptografado impossibilitando assim a captura e leitura de pacotes por ataques man-in-the-middle. Porém o ssh, por ser o serviço de login mais amplamente utilizado, também é um dos mais expostos a falhas devido a falta de configuração necessária para protegê-lo de forma eficiênte. Em nossa implementação foram adotadas todas as medidas sugeridas pela NSA (Agência de Segurança Nacional Americada) relativas ao ssh. O ssh, ou Secure Shell, aceita conexões de protocolo TCP no socket 22. Existem atualmente dois protocolos suportados, versão 1.0 e 2.0, entre outras de passagem, sendo a 2.0 mais atual. Por padrão o ssh responde primeiramente por requisições de clientes 2.0, uma vez não encontrando clientes nesta versão o daemon altera automáticamente a requisição para 1.0, dentro de uma sequência lógica préconfigurada, afim de suportar vários protocolos. A versão 1.0 é considerada insegura, tendo sofrido vários problemas relacionados à exploits e obtenção de acesso remoto root via ataques de buffer overflow. Utilizamos portanto apenas a versão 2.0, forçando a utilização de clientes com suporte a versão mais nova aumentando a segurança do serviço. Esta opção é configurada pela linha “Protocol 2”. Para melhor esclarecer o usuário responsável pela conexão remota sobre as políticas atuais de segurança do servidor, a primeira ação tomada é a exibição do mesmo banner anterior, /etc/issue, no início de qualquer conexão remota como um aviso. Outro fator que contribui para o aumento da probabilidade de um ataque é o fato de que o ssh por padrão não limita acessos por usuário ou número de conexões, portanto permitindo acesso remoto ao usuário root quantas vezes forem requisitados. Mesmo que um atacante desconheça a senha, através de um ataque brute force ou wordlist ele está livre para tentar indefinidamente. Para inibir este tipo de ataque ao daemon foi criado o usuário de sistema “admin” responsável por todo e qualquer login remoto ou local, portanto apenas ele tem authorização, configurada pela tag “AllowUsers admin“. Uma vez vetado o acesso remoto ao usuário root a configuração pertinente também foi excluida com a linha “PermitRootLogin no“. Para o limite de logins foi configurada a linha “MaxAuthTries 5“, setando em 5 o número máximo de autenticações por minuto. Em caso de erro de senha 5 vezes seguindas o usuário é automaticamente bloqueado, exigindo assim intervenção local no servidor para a resolução de problemas. Não é permitida também a autenticação de usuários com senhas vazias, mesmo que elas existam. Esta “PermitEmptyPasswords no“. funcionalidade é configurada pela opção Como a distribuição Qubit não possui ambiente gráfico não foram permitidas as configurações para o servidor X11, setadas pelas opções “AllowTcpForwarding no“ e “X11Forwarding no“. Grande parte dos ataques ao ssh são derivados de Denial of Service, onde o servidor recebe uma enxurrada de pacotes inundando suas requisições terminado por não conseguir mais respondê-las. Este ataque termina por derrubar o servidor ou deixá-lo indisponível por horas, as vezes dias. Alguns destes ataques podem ser feitos após o login, tornando-os mais perigosos. Se o daemon ssh executa como standalone, ele automaticamente abre uma thread para cada login remoto ou local utilizado por usuário, deste modo aumentando a performance e diminuindo a probabilidade de danos. A configuração de cada um dos usuários remotos não root foi feita com o conceito de chroot jail (cadeia), pela configuração “UsePrivilegeSeparation yes“. Com isso asseguramos uma separação de privilégios onde o daemon é dividido em duas partes onde uma pequena quantia do código executa como root enquanto o resto executa em ambiente fechado via chroot jail, evitando que um ataque DDOS indisponibilize inteiramente o servidor, atingindo apenas para a thread origem ou destino do ataque. Por medida de segurança foram vetados todos os métodos de autenticações baseadas em hosts como autenticação primária utilizando as configurações: IgnoreRhosts yes, HostbasedAuthentication no, RhostsRSAAuthentication no. Estas autenticações, embora funcionem por túnel criptografado, não possuem senha, por isso são baseadas em hosts. Por não possuirem senha mostram-se ineficazes aos paradigmas de segurança atuais. A configuração do daemon pode ser vista a seguir: # SSH Config # Hardened by Qubit Linux Protocol 2 Port 22 PermitRootLogin no PermitEmptyPasswords no UsePrivilegeSeparation yes Banner /etc/issue ClientAliveinternal 1200 ClientAliveCountMax 0 IgnoreRhosts yes RhostsAuthentication no RhostsRSAauthentication no HostbasedAuthentication no AllowTcpForwarding no X11Forwarding no StrictModes yes SyslogFacility AUTH AllowUsers admin MaxStartups 10 MaxAuthTries 5 #EOF 8 – QMAIL E PATCHES 8.1. Comparação entre versões e padrões atuais O desenvolvimento de uma solução completa de servidor de emails varia principalmente devido ao escopo de utilização do administrador que o desenvolve. Não há a necessidade de implementação de um software desnecessário no sistema. Com isso são gerados diversos padrões de instalação do qmail, sendo os mais conhecidos atualmente: qmailrocks, life with qmail, nrg4u e John Simpson. A medida que cresce a demanda por aplicações no escopo de segurança, bem como adição de funcionalidades adequando os servidores de e-mail aos paradigmas atuais, surge também uma gama de programas, muitas vezes redudantes, para uma mesma função no sistema. Isto acarreta problemas de pois temos diversos programas que resolvem os mesmos problemas implementados com diversas linguagens que são normalmente incompatíveis entre sí. O conjunto de programas utilizados por um administrador também varia de acordo com o escopo. O mesmo acontece em relação aos patches para adição de novas funcionalidades. Cada um dos padrões supracitados utiliza um grupo de softwares e patches diferentes, causando problemas de incompatibilidade, e prolongamento na curva de aprendizado do sistema qmail. Para adequarmos o qmail aos novos paradigmas de funcionalidades e segurança corporativo devemos fornecer um grupo concreto de programas e patches à solução de e-mail de forma que execute com segurança e performance. Existem basicamente duas versões do qmail, qmail-1.03 e netqmail-1.05. na verdade a versão netqmail nada mais é do que a versão original 1.03 com 8 patches recomendados. Neste projeto foi utilizada a versão original junto com outro conjunto de patches que incluiem os 8 recomendados pelo desenvolvedor entre outros 50. Em todos os outros padrões é utilizado o netqmail. Para este projeto foi adotado o patch de funcionalidades combinado, de Tino Reichardt. Este patch possui adequação do código do qmail à diversas RFCs mais atuais, que outros patches dos padrões anteriores não fornecem, portanto deixando o email em conformidade com todos os novos paradigmas e RFCs de e-mail. Todas as configurações do qmail localizam-se no diretório /var/qmail/control, onde cada uma delas podem também ter diversos outros diretórios, detalhados no capítulo XX sobre padronizações da distribuição. Abaixo são listados os patches e medidas de segurança implementados por eles: 8.2. Medidas Anti-Spam Algumas medidas anti-spam podem ser tomadas sem a necessidade de utilização de um software para anti-spam como clamav etc. Diversas novas funcionalidades podem ser inseridas por meio de patches. São frequentes envios de e-mail para destinatários vazios fazendo com que a mensagem não consiga ser entregue ocupando processamento da máquina. Com um patch especial podemos exibir a mensagem de erro “221 2.0.0: I can break rules, too. Goodbye” e fechar a conexão estabelecida caso um cliente envie um comando DATA (abertura de corpo da mensagem) mas nenhum campo RCPT TO (destinatário da mensagem) eliminando perda de performance. Com o patch P0f, controlado pelo arquivo de configuração /var/qmail/control/p0fsock podemos detectar de forma passiva o fingerprint fornecido para assim identificar o servidor remoto, possibilitando filtros por sistemas operacionais. Podemos executar este filtro por máquinas que conectam no servidor (SYN mode), conexões do servidor para máquinas cliente (SYN+ACK mode), máquinas que não podem ser conectadas (RST+ mode) e máquinas que desejamos observar a comunicação. Podemos ainda, devido ao fingerprint, detectar a presença de firewall, Nat, Load Balancer, distancia ao sistema remoto e seu uptime (Tempo em execução), e redes como DSL, OC3 (Cisco) entre outras. Quando um determinado email é enviado para determinado destinatário, a existência deste só é checada quando do recebimento do e-mail ao servidor destino, caso a conta de e-mail destinatária não exista no domínio a mensagem retorna informando que a caixa destino é inexistente, isto gera um problema de performance visto todos os e-mails, reais ou não, serem enviados desnecessáriamente do servidor ocasionando gasto excessivo de tráfego. Com o patch realcrptto toda e qualquer mensagem tem seu campo RCPT TO checado localmente e remotamente, caso o destinatário não exista a mensagem é automaticamente descartada. Foi também implementado outro patch para a verificação de remetente e destinatário no mesmo formato que o patch realrcptto, que pode ser controlado no arquivo de configuração /var/qmail/control/rcptcheck. Neste arquivo configuramos a lista de SENDERs e RECIPIENTS que devem ser verificados. Por motivos melhoria de performance os mesmos valores podem ser configurados via variáveis do sistema, respectivamente $SENDER e $RECIPIENT de forma a aumentar a velocidade do serviço. As seguintes mensagems de retorno foram implementadas: 1 -> "553 2 -> "421 3 -> "421 11 -> "451 12 -> "451 13 -> "451 14 -> "451 16 -> "451 17 -> "451 18 -> "451 21 -> "452 22 -> "452 111 -> "421 112 -> "421 (greylisting)" 5.1.1 4.3.0 4.3.0 4.1.1 4.1.2 4.1.3 4.1.4 4.1.6 4.1.7 4.1.8 4.2.1 4.2.2 4.3.0 4.3.0 sorry, no mailbox here by that name." unable to verify recipient/sender (misuse)" unable to verify recipient/sender (internal)" bad destination mailbox address" bad destination system address" bad destination mailbox address syntax" destination mailbox address ambiguous" mailbox has moved" bad sender's mailbox address syntax" bad sender's system address" mailbox disabled, not accepting messages" mailbox full" unable to verify recipient/sender (temporary)" unable to verify recipient/sender Neste mesmo patch podemos também implementer o conceito de graylist onde vetamos a utilização de nosso servidor por um determinado domínio, por padrão, porém permitindo determinada conta deste mesmo domínio, de forma a criarmos um controle mais complexo. Também foram implementadas blacklists baseadas em remententes e destinatários, respectivamente configuradas pelos arquivos /var/qmail/control/badmailfrom e /var/qmail/control/badmailto, onde vetamos a entrada ou saida de um determinado e-mail, domínio ou padrão de mensagem préestabelecida, sem a utilização de antivirus. Podemos ainda implementar veto de mensagens de anúncio de servidores ou clientes pelo arquivo /var/qmail/control/badhelo bastando listar linha a linha, assim como os arquivos supracitados, os nomes não autorizados a se anunciarem ao servidor. É importante frisar que os arquivos badmailfrom, badmailto, badhelo e goodmailto podem utilizar expressões regulares para expor determinado padrão ao filtro, poupando assim um imenso trabalho de manutenção do administrador. Podem haver ocasiões onde um e-mail é enviado para um determinado domínio que não publique registros MX, próprios de email. A maioria dos servidores de email existentes não executa esta checagem, causando perda de banda desnecessária. Podemos realizar esta tarefa através de checagens de registros DNS próprios para servidores de email baseados no patch mfcheck, controlado pelo arquivo /var/qmail/control/mfcheck, onde a entrada simples de 3 valores diferentes referense à ação tomada mediante sucesso ou erro da verificação. Os valores são: 0: Nenhum dns-check é feito 1: Apenas são checadas entradas MX/A do DNS 2: - Um teste testbounce é enviado ao MX remoto do domínio do rementente - Permanentemente ignora os IPs, que serão listados no arquivo /var/qmail/control/mxblacklist, aguardando intervenção do administrador para liberá-los. Todos os Ips de domínios que porventura forem checados e vão para a lista de mxblacklist serão listados no arquivo /var/qmail/control/mxblacklist. Esta lista, embora normalmente populada automaticamente pela checagem de dns implementada por patch, pode ser também manualmente alimentada. Por padrão para que uma mensagem não fique na fila durante muito tempo, e por diversas vezes vetando assim e-mails de supostos atacantes com datas erradas de envio usamos o patch datecheck para checagem de data. Assim como os demais ele funciona com regexp que pode ser utilizada para definir um padrão de data a ser checado. Por padrão as mensagens aguardam 7 dias na fila caso seu destino nào seja encontrado por vários motivos, só então quando não for encontrada a mensagem retorna. Caso haja o antivirus ClamAV não esteja instalado no servidor podemos fornecer o IP de seu servidor para consulta e verificação de virus. Esta funcionalidade não existe para nenhum outro MX, fazendo com que seja madatória a instalação de um antivirus no servidor, ocasionando uma drástica queda de performance. Podemos agora também consultar listas de blacklists de outros provedores ou servidores globais de blacklists através do software rblsmtpd implementado em nosso software. Sua configuração é feita alterando-se o arquivo de envio de email, e inserindo-o antes da fila de saida do daemon qmail-smtpd seguido de sua lista de verificação, como abaixo: /command/rblsmtpd -C -t 10 \ -r "cbl.abuseat.org:Sorry. You are listed in cbl.abuseat.org ..." \ -r "sbl.spamhaus.org:Sorry. You are listed in sbl.spamhaus.org ..." \ -r "xbl.spamhaus.org:Sorry. You are listed in xbl.spamhaus.org ..." \ 8.3. Medidas de Autenticação e Segurança Em todos os padrões anteriores são utilizados patches para a implementação de segurança via criptografia de dados bem como autenticação forçada. O patch mais comumente utilizado é do desenvolvedor John Simpson. Os patches funcionam sem demais problemas, porém possuem deficiências básicas. Quando passamos um patch diretamente ao código do qmail, é necessária uma recompilação para que os binários sejam novamente construidos e a nova funcionalidade seja executada. O patch para criptografia e autenticação forçada de John Simpson não possui controle via arquivos de texto modularizados, portanto caso o administrador queira desligar a feature, ou usar whitelists para permitir que determinados usuários possam logar sem senha o código fonte do qmail deve ser novamente recompilado, gastando assim um tempo valioso pois durante a operação o serviço deve estar indisponível. John Simpson implementa apenas alguns tipos de criptografia em seus patches, qualquer outra deve ser implementada por outro conjunto de patches. Tino Reichardt desenvolveu um patch combinado com diveros protocolos de autenticação adequando assim o qmail a diversos RFCs. Todos os seus patches tem configuração baseada em arquivos texto para cada tipo de serviço. Uma lista de todos os pachtes pode ser visualizada no anexo 1. Todos os arquivos de configuração relativos a tipos de criptografia aceita por smtp e pop são populados via um código de base 2, onde o número de entrada é sempre um valor somado de uma potência de 2. Seguindo a tabela abaixo conseguimos atribuir facilmente uma configuração antes fixa, de forma modular apenas somando-se os valores para cada tipo de autenticação: LOGIN PLAIN CRAM-MD5 CRAM-SHA1 CRAM-RIPEMD DIGEST-MD5 = 1 = 2 = 4 = 8 = 16 (RIPEMD-160) = 32 Os arquivos control/auth/pop3, control/auth/spop3, control/auth/smtp e control/auth/smtps podem por exemplo ter o valor 63 que é a soma de todos os suportes da tabela acima. Vemos que desta forma modular é mais facil e simples administrar os sistema. Cada conexão ao serviço protegido o daemon responsável, qmail-smtpd, analisa o arquivo via filtros de REGEXP e verifica qual o tipo de suporte a conexão o servidor tem suporte. Uma medida de segurança tomada nos serviços foi vetar a possibilidade de login sem limite de tempo sobre as tentativas de login errado. Foi implementado patch, configurado pelo arquivo texto /var/qmail/control/auth/delay que informa que depois de cada erro de senha quanto tempo o servidor irá aguardar para receber a mesma requisição do cliente novamente. Isto reduz o overhead do servidor e também impossibilita uma tentiva infinita de DDOS ou Brute Force para verificação de senha de alguma conta existente. O conteúdo de configuração deste arquivo é dado em segundos. 8.4. Medidas de Testes para badmail Conforme citado no capítulo 8.2 sobre medidas anti-spam, conseguimos agora vetar diversas funcionalidades para clientes que não se adequem ao padrão configurado. No arquivo /var/qmail/control/badhelo vetamos o anuncio de clientes com determinadas strings para o comando HELO/EHLO, com isso também obrigamos o cliente a se identificar para começar uma sessào de email, funcionalidade não existente no postfix ou sendmail. Com o comando EHLO no smtp podemos verificar todos os tipos de autenticação do servidor. Isto é muito importante quando temos um servidor onde apenas a rede interna de uma empresa acesse, mesmo que ele se encontre na DMZ onde naturalmente terá IP público. Toda mensagem negada receberá a resposta de erro “553 5.7.1 sorry, your helo or ehlo is incorrect”. No arquivo /var/qmail/control/badmailfrom podemos criar uma blacklist de emails, domínios e padrões definidos por expressões regulares que não queremos receber, por exemplo para bloquear qualquer email vindo do dominio @ig.com.br pela linha „*@ig.com.br‟. Toda mensagem bloqueada recebera o erro “553 5.7.1 sorry, your envelope sender has been denied. No arquivo /var/qmail/control/badmailto são configurados os mesmos valores, com os mesmos padrões em relações aos emails destinados a determinado e-mail, dóminio ou padrão estabelecido por regexp. Toda mensagem negada receberá a resposta de erro “553 5.7.1 sorry, your envelope recipient has been denied”. No arquivo /var/qmail/control/goodmailfrom podemos gerar uma whitelist contendo emails ou domínios que sempre serão aceitos no relay do servidor, mesmo que ele se aplique à alguma regra restritiva do servidor. 8.5. Medidas para melhorar mensagens de Status Quando encontramos algum erro de mensagem, devido a não adequação do código do postfix e sendmail às novas mensagens de erro, implementadas por RFCs mais novos, não conseguimos resolver de forma segura o problema em sí. Nesta distribuição o código do qmail foi adequado, via patch, as RFCs mais novas sendo elas RFC1893, RFC2034 e RFC3463, implementando assim todas as mensagens , não existentes em outros sistemas de email, embora sejam mandatórias em padrões mundias. A lista de mensagens pode ser visualizada no anexo 2. 8.6. Medidas para Logs de e-mail Em sistemas postfix, sendmail, exim entre outros, todas as mensagens de log de sistemas de email são automaticamente redirecionadas um arquivo geral /var/logs/maillog. Centralizando esses logs gera-se um problema de supercrescimento deste arquivo, uma vez que ele recebera todas as mensagens. Torna-se assim mandatório uma rotação de logs mais frequentes trazendo queda de performance. Caso haja problemas o adminsitrador é obrigado a ler o arquivo inteiro em busca do erro, tendo que filtrá-lo com diversas ferramentas como perl, sed, awk, entre outras, tornando a identificação, leitura e depuração de logs uma tarefa demorada e custosa. Neste projeto todos os logs do sistema foram descentralizados e modularizados em arquivos diferentes para cada serviço dentro de um diretório especial fora do padrão de logs do linux (/var/logs). Implementamos o diretório /var/qmail/control/log, via patch qmaillog, no mesmo diretório de arquivos de controle do qmail como forma de padronizar a distribuição. Neste diretório encontram-se todos os arquivos referentes aos logs separados pelo nome do serviço referente a ele. Podemos verificar uma lista destes arquivos no anexo 3: Baseando-se em arquivos modulares de logs para cada serviço podemos encontrar mais facilmente as mensagens de problemas requeridas. 9 – SOFTWARES UTILIZADOS PARA SERVIÇOS 9.1. Ezmlm e Ezmlm-idx Como todo servidor de e-mail, neste projeto também foi incluido um sistema de gerência para mailing lists. Estes sistema foi desenvolvido por Dan. J. Bernstein e possui várias funções além de ser um dos mais simples de ser gerenciado. Seu código é aberto e pode ser alterado sem problemas, mesmo não estando sob a licença GPL. 9.2. Autoresponders Autoresponder são softwares responsáveis por responder ou reenviar mensagens de contas de e-mail inativas ou inoperantes. Seu uso principal é a ativação de mensagens de férias para funcionários ativos ou inativos. O próprio daemon do serviço trata de responder todas as mensagens que tenham como destino o email do funcionário, baseado em um padrão pré-configurado em arquivos .qmail no diretório home da conta de todo usuário. Em nosso sistema foi utilizado o autoresponder do desenvolvedor Eric Huss por ser o mais adotado mundialmente, fornecendo assim basntante informação usuário final quando da configuração manual via console, sem um sistema web. 9.3. Vpopmail Quando desenvolvemos um sistema de e-mail existem várias estruturas responsáveis por manter e armazenar caixas postais de usuários. A forma padrão do qmail chama-se .Maildir. Neste formato as mensagens são armazenadas de duas formas diferentes, ou todas em apenas um arquivo geral ou cada mensagen cria um arquivo diferente dentro de uma estrutura pré-determinada. Quando utilizamos este modelo temos um problema de manutenção visto estas mensagens serem arquivos do sistema operacional. Caso este mesmo sistema tenha sofrido algum tipo de tunning para performance e seus inodos tenham sido limitados, podemos ter problemas com muitas mensagens. Outro problema proveniente deste sistema é a necessidade de um usuário de sistema para cada usuário de e-mail, causando assim um enorme trabalho ao administrador e também ao sistema. O software vpopmail, da impresa Inter7 e de código GPL, implementa uma estrutura diferente baseada em domínios virtuais onde os usuários não mais são configurados via /etc/passwd e /etc/shadow, e sim em um arquivo modular a parte do sistema. Assim o diretório home de cada usuário também pertence a outra estrutura diferente do diretório padrão /home, no diretório /home/vpopmail onde cada diretório dentro deste é responsável pelo armazenamento de mensagens para um determinado domínio, e dentro de cada diretório de domínio temos portanto diretórios home dos usuários. O vpopmail também possui suporte à armazenamento e controle de todos os seus domínios e contas de usuário via banco de dados MySQL e Postgres. A integração com estes bancos de dados não foi abordada neste projeto e será abordada em projetos futuros. 9.4. Courier-imap/imaps e Courierpassd Por padrão o qmail não possui suporte ao protocolo IMAP, embora mais lento é mais atual e seguro que seu antecessor POP. Para sua implementação foi escolhido o Courier-Imap/Imaps com código sob a licença GPL. O pacote courierpassd é utilizado para a integração de webmails com funcionalidades de mundança de senha via interface web. 9.5. Webmail Caso o acesso ao servidor nào seja feito via protocolos padrões como POP, SMTP e IMAP, há a opção do usuário entrar via web em sua caixa independente de sua localidade. O webmails abordado neste projeto foi o roundcube considerado rápido e fácil de utilizar. Ele funciona sobre arquitetura LAMP usando Ajax, portanto economizando banda. 9.6. ClamAV Atualmente existem vários softwares para verificação de virus em e-mails e sistema. A grande maioria é copyright, portanto paga, e uma outra grande parcela não funciona diretamente para Linux. O Antivirus ClamAV foi a opção escolhida para este projeto por ter arquitetura simples, grande adoção no mercado de software como um dos melhoers. Ganhando inclusive prêmios por ser o antivirus de software mais rápido e com mais frequência de atualizações. Este software está sob a licença GPL, podendo ser distribuido e alterado. 9.7. SpamAssassin Além das medidas tomadas via patches para spam, foi adotado o software software Anti-Spam mais conhecido do mundo, Spamassassin. Ele foi implementado de maneira prática e simples, embora sua configuração não seja muito intuitiva e realmente bem complexa. Este software será melhor abordado em versões futuras do sistema. 10 – PADRONIZAÇÃO 10.1. Diretórios e Links Verificamos que para criarmos um servidor de email completo possuimos vários aspectos, vários softwares utilizados, cada qual com seu arquivo principal de configuração localizado em locais diferentes dificultando assim a gerência uma vez que devemos localizar cada um dos arquivos ao longo do sistema de diretórios do servidor. Para evitar esta perda de tempo com localização de diretórios foi desenvolvido um script chamado rc.qubit_defaults que checa e seta, executando sempre na inicialização, todos os padrões pertinentes à este projeto. Foi padronizado e criado o diretório /etc/qubit dentro do diretório principal de configuração para armazenar os links para todos os arquivos principais de configuraçào para cada software pertinente ao servidor. Foi criado o link /etc/qubit/qmail para o diretório /var/qmail/control para agruparmos todas as configurações do qmail. Foi considerado o diretório /home/vpopmail que armazena o diretório home das contas de email dos usuários, padronizados no link /etc/qubit/qmail/domains. Todos os arquivos de configuração dos softwares participantes, porém não padrões, do qmail foram armazenados no diretório /etc/qubit/qmailother. Para todos os outros softwares não relativos a serviço de email como ssh, ntp entre outros, foram criados links para seus arquivos principais de configuração e armazenados no diretório /etc/qubit/network. Seus valores foram padronizados pelo script /etc/rc.d/rc.hardening discutido no capítulo 7. 10.2. Arquivos e Conteúdo Para eliminar o atraso e gasto de tempo na configuração manual de um servidor de e-mail qmail, foram atribuidos valores padrões à vários arquivos de configuração do servidor de email, tanto nos arquivos de configuração geral do qmail , /var/qmail/control/, como para outros softwares como spamassassim, vpopmail entre outros. Todos os arquivos reconfigurados são opcionais e normalmente configurados manualmente pelo administrador. Os valores abaixo, seguidos da explicação de cada arquivo, foram extraidos de configurações conhecidas de segurança bem como orientações e recomendações da comunidade de software livre para criar um servidor corporativo. Arquivos de controle geral (/var/qmail/control/): concurrencyincoming : Arquivo para configuração do número de sessões remotas concorrentes feitas ao servidor. Valor padrão “200”. concurrencylocal : Arquivo para configuração do número de sessões geradas localmente pela rede interna ou localhost do servidor. Valor padrão “200”. concurrencyremote : Arquivo para configuração do número de sessões geradas para outros servidores. Valor padrão “200”. databytes : arquivo para configuração de tamanho máximo para cada email em bytes. Valor padrão “16384”, ou seja, 20 MB por e-mail. rcpthosts : Arquivo para a configuração, linha a linha, de domínios hospedados localmente no servidor. Este arquivo é populado automaticamente na criação de um domínio. morercpthosts : Arquivo auxiliar na configuração, linha a linha, de domínios hospedados localmente. Para aumento de performance é sugerido que a configuração de mais de 50 domínios passe a ser feita neste arquivo, caso contrário o arquivo rcpthosts ficaria grande demais para ser lido de forma eficaz. „ percenthack : Arquivo de configuração utilizado para corrigir domínios que troquem o símbolo “@” por “%” como o sendmail. Valor padrão “%”. qmpqservers : Arquivo para configuração de redes internas para balanceamento de carga entre servidores. Utiliza um protocolo especial do qmail chamado QMPQ, mais rápido que o SMTP. Pode ser utilizado apenas entre trocas e balanceamento de carga entre servidores qmail. queuelifetime : Arquivo para configuração de quanto tempo, em segundos, uma mensagem pode permanecer na fila até ser entregue ou devolvida. Valor padrào “604800”, ou seja, 7 dias. smtproutes : Arquivo para configuração de forwarders para domínios ou emails baseados em regexp. Podemos com o qmail informar que toda e qualquer mensagen vinda do domínio hotmail.com seja enviada para o servidor número 3 para que ele a envie para a internet. Podemos assim criar um controle eficaz de fila diminuindo o número de spam e aumentando a verbosidade da rede na busca de algum problema. smtpgreeting : Mensagem de boas vindas exibida para uma conexão entre servidores ou via telnet. Esta mensagem contém o banner do serviço qmail, mais conhecido como fingerprinting. timeoutconnect : Arquivo de configuração que informa ao qmail quanto tempo, em segundos, esperar por uma conexão SMTP. Valor padrão “60”, ou seja 1 minuto. timeoutremote : Arquivo de configuração que informa ao qmail quanto tempo, em segundos, esperar pela conexão de um servidor. Valor padrão “1200”, ou seja, 2 minutos. timeoutsmtpd : Arquivo de configuração que informa ao qmail quanto tempo, em segundos, esperar pela conexão de um cliente SMTP. Valor padrão “1200”, ou seja, 2 minutos. virtualdomains : Arquivo de configuração utilizado para criar domínios virtuais. Arquivos de controle para autenticação (/var/qmail/control/auth/): pop3 : Controle de protocolos de autenticação para o protocolo POP. Valor padrão “60”, ou seja, ligados os modos DIGEST-MD5, CRAMRIPEMD, CRAM-SHA1, CRAM-MD5. spop3 : Controle de protocolos de autenticação para o protocolo SPOP. Valor padrão “60”, ou seja, ligados os modos DIGEST-MD5, CRAMRIPEMD, CRAM-SHA1, CRAM-MD5, PLAIN, LOGIN. smtp : Controle de protocolos de autenticação para o protocolo SMTP. Valor padrão “60”, ou seja, ligados os modos DIGEST-MD5, CRAMRIPEMD, CRAM-SHA1, CRAM-MD5. smtp : Controle de protocolos de autenticação para o protocolo SMTP. Valor padrão “60”, ou seja, ligados os modos DIGEST-MD5, CRAMRIPEMD, CRAM-SHA1, CRAM-MD5, PLAIN, LOGIN. delay : Arquivo de configuração para o tempo em segundos entre tentativas de conexão caso haja um erro de senha do usuário. Valor padrão “60”. oldauth : Arquivo de configuração para corrigir falha de antigos clientes de email microsoft que não finalizam a sessão de e-mail deixando uma conexão persistente no servidor e assim reduzindo a performance. Arquivos de controle Anti-Spam (/var/qmail/control/): p0fsock : Arquivo para configuração de padrões, via regexp, para verificação passiva de Sistemas Operacionais. Utilizado como filtros de acesso. rcptcheck : Arquivo para configuração de software para checagem e validação de remententes e destinatários. mfcheck : Arquivo de configuração para checagem de DNS validando apenas recebimento de emails de domínios que publiquem registros MX/A de DNS. Valor padrão “1”. datechecks : Arquivo de configuração para checagem de datas em emails. Sem a utilização deste patch redes como usenet, e mailing lists podem ficar inoperantes. Valor padrao “qmail-list-:7” checando apenas por nomes decorrentes de padrões de mailing list. clamd : Arquivo para configuração de IP do servidor de Antivirus ClamAV. Valor padrão “127.0.0.1”, setando para o localhost já que o servidor de antivirus foi instalado no próprio servidor. mxblacklist : Arquivo de configuração, linha a linha, de MX recusados pelo servidor. Este arquivo é populado dinamicamente pelo software rblsmtpd. 11 – CONCLUSÃO Ao final deste projeto conseguimos desenvolver uma versão beta baseada no Linux Slackware, Qubit Linux, com uma integração total de praticamente todos os softwares pertinentes ao funcionamento de um servidor de e-mail atual. Nosso servidor foi adequado a praticamente todos os RFCs mais atuais no escopo de servidores de e-mail. Reduzimos o trabalho e tempo de instalação, implementação e manutenção do administrador de 72 horas para 2 horas em média com a instalação personalizada e padronizada. Modularizamos a configuração de todos os aspectos de um servidor de e-mail em arquivos separados, diferente de outras distribuições onde a configuração é praticamente toda feita em apenas um arquivo geral. Implementamos diversos outros serviços de rede como IMAP, Antivírus e Antispams de forma padronizada. Melhoramos a gerência de todo o sistema padronizando um diretório geral de todas as configurações necessárias aos serviços de email facilitando e poupando tempo final do administrador. O objetivo desta padronização é criar um ambiente favorável à criação de ferramentas web customizadas para executar todas as tarefas de implementação e configuração de um servidor de e-mail corporativo, tarefas essas impossíveis anteriormente devido a falta de padrões de instalação, manutenção e pacotes do sistema. 12 – TRABALHOS FUTUROS Criação de interface web baseada em PHP e Ájax AJAX para a administração total do servidor de e-mail sem a necessidade de recorrer a linha de comando, poupando assim mais tempo devido a intuitividade das operações e abstraindo a parte técnica permitindo ao usuário uma configuração eficaz sem a necessidade de um conhecimento profundo do sistema operacional e sistema de email qmail.. Este ambiente contará com telas completas de gerência dinâmicas que farão o monitoramento de vários servidores ao mesmo tempo remotamente via rede. Tentaremos adequar o qmail de forma a concorrer com outros softwares do mercado como uma suíte completa de e-mail como LOTUS NOTES e Microsoft Exchange. Implementação de mais protocolos de segurança de maneira mais completa como OpenSSL afim de aumentar a segurança do servidor. 13 - REFERÊNCIAS BIBLIOGRÁFICAS LEVINE, John. Qmail® – Managing Unix-Based Mail Systems . 2004. Livro Técnico – O‟Reilly® Media Inc., United States. ISBN 10: 1-56592-628-5, ISBN 13: 9781565926288 COSTA, Felipe. Qmail® Livro técnico prático, de fácil leitura e muitas ilustrações. 2006. Livro Técnico – Editora Ciência Moderna. SOFTWARE LIVRE. Disponível em: http://www.softwarelivre.gov.br/SwLivre/ [capturado em novembro de 2007]. GNU. Disponível em: http://www.gnu.org/licenses/licenses.html#GPL [capturado em novembro de 2007]. WIKIPEDIA. Disponível em: http://en.wikipedia.org/wiki/Software_license [capturado em novembro de 2007]. NSA National Security Agency – Guide to the Secure Configuration of Red Hat Enterprise Linux 5. NSA, 2007. MICROSOFT Delivery Guide - Developing Microsoft ASP.NET Web Applications Using Visual Studio® .NET. Microsoft, 2002.