sábado, 22 de agosto de 2009

DNS – Endentendo e Implementando

Atualmente em diversas implementações de serviços em clientes venho tendo problemas e, na maioria das vezes, o diagnóstico acaba em configurações erradas no servidor de DNS.

Aparentemente o serviço de DNS é simples, entretanto existe alguma complexidade e muitos features que esse serviço oferece.

Antes de mostrar como implementar um serviço de DNS tanto em servidores Linux como em servidores Windows System temos que entender o que é e como funciona o DNS. Vamos lá!

DNS – Domain Name Server (Servidor de Nomes de Domínios)

DNS é um serviço de gerenciamento de nomes hierárquico e distribuído. O seu principal funcionamento basicamente resume-se em resolver nomes de domínios em endereços de rede (IPs). Necessariamente ele "traduz" nomes para endereços IPs e endereços IPs para nomes respectivos, permitindo a localização de hosts em um determinado domínio.

Cada domínio possui um registro de DNS que define qual o endereço IP do servidor e de e-mail que responderão por este domínio. Esse processo é conhecido como resolução de nomes ou resolução de domínio.

Por causa do grande tráfego da internet e pela segurança da rede, a estrutura de banco de dados DNS é distribuída e hierárquica. O que isso significa? Significa que ao invés de um banco de dados central e único com informações de todos os domínios, a resolução de nomes ocorre consultando diversos servidores DNS, ou seja, um servidor DNS pode apontar para outro servidor DNS, que aponta pra outro e assim sucessivamente).

Essa hierarquia é equivalente a uma pirâmide, existe um servidor principal que aponta para um secundário que aponta pra um terciário e assim vai. O servidor que está na topo da "pirâmide" é o servidor raiz.


O servidor raiz da internet possui um banco de dados que indica qual DNS será responsável pela resolução de domínios para cada extensão de domínio diferente chamado de TLD (Top Level Domain). Sua tabela em si é muito pequena, pois possui apenas uma entrada para cada TLD existente. Os TLDs podem ser dois tipos:

  • Generic Top Level Domains (gTLDs);
  • Country Code Top Level Domains (ccTLDs);

Os gTLDs são domínios usados no mundo todo (.com, .net, .org, etc.). Os ccTLDs respondem pelas extensões de domínios administrados por países (.br, .de, .ar, etc.). Por segurança, o servidor raiz foi replicado em 13 servidores raízes apenas que estão replicados pelo mundo e duas vezes ao dia seu conteúdo é automaticamente replicado.

Por convenção que cada servidor raiz seria chamado por uma letra do alfabeto (Server A, Server B, etc.). Mesmo um determinado servidor raiz, o servidor raiz "A", por exemplo, pode ser replicado em várias regiões do mundo, para assegurar que o tempo para a resolução de um domínio seja rápido.

Essa estrutura hierárquica possui um problema intrínseco de segurança. Imagine que você tente acessar o site do seu banco e o provedor lhe fornecer por erro o endereço de outro site, ou na pior das hipóteses, direcionar sua solicitação para um site phishing, que simularia o site do seu banco e roubasse suas informações.

O grande problema dessa vulnerabilidade que seria impossível identificar que o provedor de acesso fez isso.

No entanto a estrutura de resolução de nomes IETF (Internet Engineering Task Force) criou uma extensão do uso atual do DNS denominado de DNSSEC. Essa extensão autentica as informações do DNS e garante que essas informações são íntegras.

Atualmente o Registro.br, responsável pela administração dos domínios .br já começou a permitir o registro com o DNSSEC para algumas extensões como blog.br, eng.br, etc.

Bom, voltando. Geralmente o servidor de DNS atua resolvendo o nome do domínio de um host para um endereço IP correspondente. O DNS Reverso faz exatamente o contrário, resolve endereços IPs, buscando o nome de domínio associado ao host. Ele serve principalmente para verificar a autenticidade de endereços, verificando se o endereço IP atual corresponde ao endereço IP informado pelo servidor DNS. Isto dificulta que alguém utilize um domínio que não lhe pertence para enviar SPAM, por exemplo.

Chega de teoria, vamos à prática. Iremos aprender como implementar um serviço DNS no Linux utilizando o BIND (Berkeley Internet Name Domain) e no Windows utilizando o serviço incorporado no Windows Server de resolução de nomes.

No próximo post mostraremos como implementar um servidor de DNS no Windows Server 2003.

Até lá!

sexta-feira, 21 de agosto de 2009

Implementação completa de um servidor de e-mail com o Zimbra Colaboration Suite (ZCS) Open Source Edition

Hardware utilizado:
Processador: Intel Core 2 Duo 2.8GhZ
Memória: 2024mb DDR PC 400
Disco: 2 Hds 80Gb RAID

Software:
Sistema Operacional: CentOS 5.3 32-bits
Repositórios Adicionais: Epel e RPM Fusion

Observações:
Conhecimentos Necessários: redes, conceitos de serviços de redes (DNS e E-Mail) e manipulação de arquivos e pastas no Linux.
Nível de experiência: Intermediário
Nível de dificuldade: 6.0

O Zimbra é uma suíte de colaboração e mensageria. Ele incorporta um poderoso e intuitivo webmail, calendário corporativo, mensageiro instantâneo, gerenciador de tarefas, porta-arquivos, agenda, anti-vírus, anti-spam entre outros recursos.
O Zimbra tem como seu diferencial o recurso de permitir compatilhar itens entre contas. Desta forma os usuários podem compartilhar informações com outros usuários de forma fácil e eficiente.
Iremos inciar uma instalação completa de todos os requisitos para que tenhamos um servidor de colaboração funcional e com todos os recursos.
Seguiremos um passo-a-passo. Sugiro que o leitor atente a todos os detalhes para que nossa implementação ocorra de forma tranquila.

Vamos lá!
à Passo 1 – Instalação e configuração do DNS
DNS é a sigla para Domain Name System. É um sistema de gerenciamento de nomes hierárquico e distribuído que opera seguindo duas definições:

  • Examinar e atualizar seu banco de dado;
  • Resolver nomes de domínios em endereços de redes (IP);

O servidor DNS traduz nomes para os endereços IP e endereços IP para nomes respectivos, e permitindo a localização de hosts em um domínio determinado.

Para implementar nosso servidor DNS os seguintes pacotes:

  • bind;
  • bind-chroot;
  • caching-nameserver;

> yum install bind bind-chroot caching-nameserver


Passo 1.1 – Configuração do named.conf

Nas novas versões do CentOS 5, Fedora 6, 7, 8 e 9, RHEL 5 o arquivo não se chama mais named.conf e sim caching-nameserver.conf. Teremos que configurar o arquivo caching-nameserver.conf para que fique com o nome named.conf para que funcione.

> rm -rf /etc/named.caching-nameserver.conf
à removemos o arquivo named.chaching-nameserver.conf que se localiza dentro de /etc
> cd /var/named/chroot//etc/
à direcionamos para dentro do diretorio /var/named/chroot/etc
> mv /var/named/chroot//etc/named.caching-nameserver.conf named.conf
à renomeamos o arquivo named.caching-nameserver.conf para named.conf
> ln -s /var/named/chroot/etc/named.conf /etc/named.conf
à criamos um link simbólico dentro de /etc com o nome named.conf direcionando para /var/named/chroot/etc/named.conf
> ll /etc/named.conf
lrwxrwxrwx 1 root root 32 Jul 31 17:33 /etc/named.conf -> /var/named/chroot/etc/named.conf
à conferimos se o link simbólico foi criado corretamente

Abra o arquivo /etc/named.conf

> vim /etc/named.conf

Substitua o conteúdo do arquivo pelo seguinte:

// generated by named-bootconf.pl
options {
directory "/var/named";
/*
* If there is a firewall between you and nameservers you want
* to talk to, you might need to uncomment the query-source
* directive below. Previous versions of BIND always asked
* questions using port 53, but BIND 8.1 uses an unprivileged
* port by default.
*/
query-source address * port 53;
listen-on { 127.0.0.1/32; 172.16.5.38/24;};
allow-recursion { 127.0.0.1/32; 172.16.5.0/24; };
};
//
// a caching only nameserver config
//
controls {
inet 127.0.0.1 allow { localhost; } keys { rndckey; };
};
zone "." IN {
type hint;
file "named.ca";
};
zone "localhost"
IN {
type master;
file "localhost.zone";
allow-update { none; };
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local";
allow-update { none; };
};
zone "teste.com.br" IN {
type master;
file "db.teste.com.br";
};
zone "5.16.172.in-addr.arpa" IN {
type master;
file "db.172.16.5.0";
};
include "/etc/rndc.key";


Não irei explicar o que cada parâmetro faz. Deixarei isso para outro post. Atente para que as configurações desse arquivo estejam de acordo com as configurações da sua infra-estrutura.

Salve o arquivo e saia.

Passo 1.2 – Configurando a Zona
O próximo passo é criar os arquivos de configuração das zonas diretas e reversas que configuramos no named.conf.
Os arquivos de zona deverão se localizar em /var/named/chroot/var/named. O nome do nosso arquivo de zona será db.teste.com.br conforme configuramos no named.conf.

> vim /var/named/chroot/var/named/db.teste.com.br


O conteúdo do arquivo ficará assim:

$TTL 86400
@ IN SOA mail.teste.com.br.
hostmaster.teste.com.br.
2009080101 ;Serial
28800 ; Refresh
14400 ; Retry
360000 ; Expire
86400 ) ; Minimum
IN NS mail.teste.com.br.
IN MX 0 teste.com.br.
mail. IN A 172.16.5.38
ns1. IN A 172.16.5.38


Salve o arquivo.

Agora criaremos o arquivo de configuração da zona reversa.
Da mesma forma, os arquivos de configuração de zona reversa deverão se localizar em /var/named/chroot/var/named. O nome do arquivo que iremos criar será dB.172.16.5.0 conforme configuramos no named.conf.

> vim /var/named/chroot/var/named/db.172.16.5.0


O conteúdo do arquivo ficará assim:

$TTL 86400
@ IN SOA mail.teste.com.br.
hostmaster.teste.com.br.
2009080101 ;Serial
28800 ; Refresh
14400 ; Retry
360000 ; Expire
86400 ) ; Minimum
IN NS mail.teste.com.br.
38 IN PTR mail.teste.com.br.


Não irei explicar o que cada termo desses dois arquivos fazem. Ficará pra próxima. ;)
Passo 1.3 – Configurando nosso servidor
Iremos editar 3 arquivos para que nosso servidor utilize ele mesmo para resolver nomes. Os arquivos são o /etc/hosts, /etc/resolv.conf e o /etc/sysconfig/network. O conteúdo desses arquivos deve ser:
Editando o arquivo /etc/hosts:

> vim /etc/hosts


O conteúdo ficará:

172.16.5.38 mail.teste.com.br mail


Editando o /etc/resolv.conf:

> vim /etc/resolv.conf


O conteúdo ficará:

search
teste.com.br
nameserver
172.16.5.38


Editando o /etc/ sysconfig/network:

> vim /etc/sysconfig/network


O conteúdo ficará:

NETWORKING=Yes
NETWORKING_IPV6=no

NETWORKING_IPV4=Yes
HOSTNAME=mail.teste.com.br


Para aplicar as configurações de rede reinicie o servidor. Caso não queira reinicar utilize o comando hostname <nome do host> para que a configuração do nome do host seja aplicada imediatamente.

> hostname mail.teste.com.br


Para conferir se o nome do host foi configurado corretamente utilize o comando hostname somente e verifique o output.
Passo 1.4 – Iniciando o serviço de DNS
Depois de configurar todos os arquivos necessários para que tenhamos um servidor de DNS funcional iremos iniciar o serviço:

> service named start
Starting named: [
OK ]


Se o output for igual o acima, parabéns, o primeiro passo do nosso tutorial foi feito corretamente!

à Passo 2 – Baixando e descompactando o ZCS (Zimbra Colaboration Suite)
O Zimbra tem builds específicas para algumas distros. São elas:

  • Red Hat Enterprise Linux (versões 4 e 5)
  • RedHat fedora 7;
  • Debian 4;
  • MacOS.4 (Tiger);
  • MacOS 10.5 (Leopard);
  • openSUSE Linux 10.2;
  • SUSE Linux Enterprise Server 10;
  • Ubuntu (Versões6.06 LTS e 8.04 LTS);

Como estou utliziando CentOS, que é uma distribuição derivada do Red Hat Enterprise Linux, vou utilizar o build do Zimbra para o RHEL 5. Faça o download do build referente à sua instalação. Caso seja necessário compilar.
Passo 2.1 – Baixando e descompactando o Zimbra
Irei baixar o build do Zimbra para o RHEL 5 e descompactar em /usr/src.

> cd /usr/src
> wget http:/(…)090707164432.tgz
100%[==========================>] 493,408,798 1.08M/s in 8m 46s
> tar xfvz zcs-5.0.18_GA_3011.RHEL5.20090707164432.tgz


Antes de instalar o Zimbra iremos preparar o servidor com as dependências e retirar os pacotes que podem causar conflitos. Alguns pacotes são necessários e não vem instalados por padrão no CentOS. Os pacotes são:

  • compat-libstdc++-296;
  • compat-db;
  • libtool-ltdl;
  • gmp;
  • compat-libstdc++-33;
  • fetchmail;

Iremos também remover o sendmail e instalar o fetchmail. Para evitar conflitos iremos, nesta ordem, desinstalar o sendmail e instalar as dependências. Aproveite e deixe seu sistema operacional atualizado:

> yum remove sendmail
> yum install compat-db gmp compat-libstdc++-296 compat-libstdc++-33 libtool-ltdl fetchmail
> yum update -y


Uma das dependências do fetchmail é o exim. Precisaremos desabilitá-lo para que não conflite com o MTA do Zimbra (Postfix). Para desabilitar a inicialização utilize o comando:

> chkconfig exim off
> service exim stop


Passo 2.2 – Instalando o Zimbra
O Zimbra possui sua instalação bem automatizada. Através de seu script ele faz uma série de verificações. Se seguiu o tutorial e preparou o SO conforme as especificações então a verificação deve ocorrer sem problemas, se o script lhe notificar algum problema, aborte a instalação e inicie o processo novamente.
Essa instalação iremos fazer de um servidor StandAlone. Em outro momento mostrarei como fazer uma instalação multi-server.
Para iniciar a instalação execute o script que está dentro da pasta do Zimbra (/usr/src/zcs-X.X.XX.RHEL5.YYYYYY. Como estou utilizando o CentOS precisarei de um parâmetro para que o script ignore a flag do sistema operacional.

> ./install.sh –platform-override
Operations logged to /tmp/install.log.16755
Checking for existing installation...
zimbra-ldap...NOT FOUND
zimbra-logger...NOT FOUND
zimbra-mta...NOT FOUND
zimbra-snmp...NOT FOUND
zimbra-store...NOT FOUND
zimbra-apache...NOT FOUND
zimbra-spell...NOT FOUND
zimbra-proxy...NOT FOUND
zimbra-archiving...NOT FOUND
zimbra-convertd...NOT FOUND
zimbra-cluster...NOT FOUND
zimbra-core...NOT FOUND


PLEASE READ THIS AGREEMENT CAREFULLY BEFORE USING THE SOFTWARE.
ZIMBRA, INC. ("ZIMBRA") WILL ONLY LICENSE THIS SOFTWARE TO YOU IF YOU
FIRST ACCEPT THE TERMS OF THIS AGREEMENT. BY DOWNLOADING OR INSTALLING
THE SOFTWARE, OR USING THE PRODUCT, YOU ARE CONSENTING TO BE BOUND BY
THIS AGREEMENT. IF YOU DO NOT AGREE TO ALL OF THE TERMS OF THIS
AGREEMENT, THEN DO NOT DOWNLOAD, INSTALL OR USE THE PRODUCT.

License Terms for the Zimbra Collaboration Suite:
http://www.zimbra.com/license/zimbra_public_eula_2.1.html

Press Return to continue


O script irá verificar se existe alguma instalação anterior do Zimbra e irá imprimir os termos de uso. Aperte [ENTER] para continuar com a instalação onde irá verificar os se os pré-requisitos foram atendidos e verificar os pacotes de instalação. Após a verificação ele nos perguntará quais pacotes desejamos instalar.

Checking for prerequisites...
FOUND: NPTL
FOUND: sudo-1.6.9p17-3
FOUND: libidn-0.6.5-1.1
FOUND: fetchmail-6.3.6-1.1
FOUND: gmp-4.1.4-10
FOUND: compat-libstdc++-296-2.96-138
FOUND: compat-libstdc++-33-3.2.3-61
FOUND: libtool-ltdl-1.5.22-6.1
FOUND: /usr/lib/libstdc++.so.6
Checking for suggested prerequisites...
FOUND: perl-5.8.8
Prerequisite check complete.

Checking for installable packages

Found zimbra-core
Found zimbra-ldap
Found zimbra-logger
Found zimbra-mta
Found zimbra-snmp
Found zimbra-store
Found zimbra-apache
Found zimbra-spell
Found zimbra-proxy

Select the packages to install

Install zimbra-ldap [Y] Y
Install zimbra-logger [Y] Y
Install zimbra-mta [Y] Y
Install zimbra-snmp [Y] Y
Install zimbra-store [Y] Y
Install zimbra-apache [Y] Y
Install zimbra-spell [Y] Y
Install zimbra-proxy [N] N
Checking required space for zimbra-core
checking space for zimbra-store

Installing:
zimbra-core
zimbra-ldap
zimbra-logger
zimbra-mta
zimbra-snmp
zimbra-store
zimbra-apache
zimbra-spell

You appear to be installing packages on a platform different
than the platform for which they were built.

This platform is CentOS5
Packages found: RHEL5
This may or may not work.

Using packages for a platform in which they were not designed for
may result in an installation that is NOT usable. Your support
options may be limited if you choose to continue.

Install anyway? [N]Y

The system will be modified. Continue? [N] Y


Atente que o script reconheceu que a nossa plataforma é o CentOS 5 e o build do Zimbra é para RHEL 5. Como sabemos que as plataformas são compatíveis iremos continuar a instalação. Ao aceitar continuar a instalação, o script irá instalar os pacotes dos módulos que selecionamos. Em seguida nos será solicitada as configurações de DNS.

Removing existing packages

zimbra-ldap...done
zimbra-logger...done
zimbra-mta...done
zimbra-snmp...done
zimbra-store...done
zimbra-core...done

Installing packages

zimbra-core......zimbra-core-5.0.18_GA_3011.RHEL5-20090707164432.i386.rpm...done
zimbra-ldap......zimbra-ldap-5.0.18_GA_3011.RHEL5-20090707164432.i386.rpm...done
zimbra-logger......zimbra-logger-5.0.18_GA_3011.RHEL5-20090707164432.i386.rpm...done
zimbra-mta......zimbra-mta-5.0.18_GA_3011.RHEL5-20090707164432.i386.rpm...done
zimbra-snmp......zimbra-snmp-5.0.18_GA_3011.RHEL5-20090707164432.i386.rpm...done
zimbra-store......zimbra-store-5.0.18_GA_3011.RHEL5-20090707164432.i386.rpm...done
zimbra-apache......zimbra-apache-5.0.18_GA_3011.RHEL5-20090707164432.i386.rpm...done
zimbra-spell......zimbra-spell-5.0.18_GA_3011.RHEL5-20090707164432.i386.rpm...done
Operations logged to /tmp/zmsetup.08012009-225502.log
Setting defaults...

DNS ERROR resolving MX for mail.teste.com.br
It is suggested that the domain name have an MX record configured in DNS
Change domain name? [Yes] yes
Create Domain: [mail.teste.com.br] teste.com.br
MX: teste.com.br (172.16.5.38)

Interface: 172.16.5.38
Interface: 127.0.0.1
Interface: 192.168.122.1
done.
Checking for port conflicts


Após a instalação dos pacotes ele irá procurar pelo registro MX no DNS. Como o hostname do nosso servidor é mail.teste.com.br. Quando pedir se deseja mudar o nome do domínio, confirme e configure o novo nome para teste.com.br.

> Change domain name? [Yes] yes
> Create Domain: [mail.teste.com.br] teste.com.br


Se a configuração de DNS estiver correta, ele irá encontrar o registro MX e continuará a instalação mostrando um menu de configuração.
Neste menu poderemos configurar a maior parte do Zimbra, entretanto iremos somente configurar o básico para funcionar nosso servidor de e-mail. Neste primeiro momento iremos configurar a senha do usuário a dministrador e o timezone.

Main menu

1) Common Configuration:
2) zimbra-ldap: Enabled
3) zimbra-store: Enabled
+Create Admin User: yes
+Admin user to create: admin@teste.com.br
******* +Admin Password UNSET
+Enable automated spam training: yes
+Spam training user: spam.kt4e8v1gm@teste.com.br
+Non-spam(Ham) training user: ham.jzibqitm@teste.com.br
+Global Documents Account: wiki@teste.com.br

+SMTP host: mail.teste.com.br
+Web server HTTP port: 80
+Web server HTTPS port: 443
+Web server mode: HTTP
+IMAP server port: 143
+IMAP server SSL port: 993
+POP server port: 110
+POP server SSL port: 995
+Use spell check server: yes
+Spell server URL: http://mail.teste.com.br:7780/aspell.php
+Configure store for use with reverse mail proxy: FALSE
+Configure store for use with reverse web proxy: FALSE

4) zimbra-mta: Enabled
5) zimbra-snmp: Enabled
6) zimbra-logger: Enabled
7) zimbra-spell: Enabled
8) Default Class of Service Configuration:
r) Start servers after configuration yes
s) Save config to file
x) Expand menu
q) Quit


Para configurarmos a senha do administrador siga o menu [3] e em seguida [4], digite a nova senha e pronto.
Para voltar ao menu principal use [R].
Para configurarmos o timezone siga o menu [1], em seguida menu [6]. Para (GMT-3.00)Brasilia usamos [26].
[R] para retornar ao menu principal, [A] para aplicar as configurações. Siga as instruções na tela.

Se todas as configurações foram seguidas, a instalação terminará com sucesso sem problemas. Se houver algum problema, volte e revise as configurações.

Além do serviço de e-mail é necessário domínio sobre outros serviços básicos como DNS, Anti-Spam, etc. Em posts futuros mostrarei como configurar esses serviços.

Até a próxima!

Referências bibliográficas: