Você está na página 1de 127

DNS e Correio Eletrnico

DNS e Correio Eletrnico

Todos os direitos reservados para Alfamdia Prow LTDA.

AVISO DE RESPONSABILIDADE
As informaes contidas neste material de treinamento so distribudas NO ESTADO EM
QUE SE ENCONTRAM, sem qualquer garantia, expressa ou implcita. Embora todas as
precaues tenham sido tomadas na preparao deste material, a Alfamdia Prow LTDA.
no tm qualquer responsabilidade sobre qualquer pessoa ou entidade com respeito
responsabilidade, perda ou danos causados, ou alegadamente causados, direta ou
indiretamente, pelas instrues contidas neste material ou pelo software de computador e
produtos de hardware aqui descritos.

01/2009 Verso 1.0

Alfamdia Prow LTDA


Av. Cristvo Colombo 1496
Porto Alegre, RS
(51) 3073-2100
http://www.alfamidia.com.br

2009 Processor Alfamidia LTDA. -2


DNS e Correio Eletrnico

A Alfamdia d Boas Vindas aos seus clientes e deseja um


excelente treinamento.
Benefcios ao aluno
- Suporte ps-treinamento via e-mail (3 consultas por 90 dias aps o trmino do curso) para
tirar dvidas do contedo ministrado em aula, atravs do e-mail
matricula@alfamidia.com.br;
- Acesso a extranet www.alunoalfamidia.com.br para verificao de agenda e pontos do
PROGRAMA FIDELIDADE;
- Convnio com o estacionamento do prdio (desconto);
- Avaliaes de acompanhamento e final de curso (em cada mdulo) durante todo o
treinamento, garantindo a qualidade do curso.

Observaes Importantes
- obrigatrio que sejam salvos todos os trabalhos efetuados durante a aula, no servidor
indicado pelo instrutor.
- No permitido entrar em sala de aula com alimentos ou bebidas de qualquer espcie ou
fumar nas dependncias da Alfamdia;
- No permitida a instalao de outros Hardwares ou Softwares que no sejam os
utilizados em treinamento;
- O preenchimento da avaliao final de curso/mdulo condio obrigatria para que o aluno
possa acionar a garantia do curso, conforme previsto na ficha de matrcula;

- Somente ser fornecido certificado ao aluno com assiduidade igual ou superior a 75% do
treinamento;

- Qualquer necessidade de alterao na agenda ou cursos contratados inicialmente, consulte


os Termos de Contratao na Ficha de Matrcula;

- Contatos com a Alfamdia podem ser feitos atravs dos e-mails:


matricula@alfamidia.com.br dvidas aps contratao
info@alfamidia.com.br novas contrataes

2009 Processor Alfamidia LTDA -3


DNS e Correio Eletrnico

ndice
Introduo ao Curso .......................................................................................................... 6
Sobre o Curso................................................................................................................................................. 6
Formato do Curso ........................................................................................................................................... 6
Objetivos do Curso ......................................................................................................................................... 6
Pr-requisitos do Curso .................................................................................................................................. 6
Estrutura do Curso
........................................................................................................................................................................ Erro
! Indicador no definido.
Unidade 1: Domain Name System - DNS .......................................................................... 7
Introduo ....................................................................................................................................................... 7
Resoluo de Nomes...................................................................................................................................... 10
Arquivos de Configurao............................................................................................................................... 13
Iniciando o DNS .............................................................................................................................................. 37
NSLOOKUP .................................................................................................................................................... 38
Sinais operacionais do BIND .......................................................................................................................... 48
Ferramentas de Gerenciamento ..................................................................................................................... 49
Rodando o BIND em Ambiente Enjaulado (chroot() enviroment) ................................................................... 50
Uma viso do ambiente Enjaulado. ................................................................................................................ 50
A Segurana por trs da idia. ....................................................................................................................... 50
Configurando o ambiente Enjaulado............................................................................................................... 51
BIND9x - Configurao e Introduo s novas funes. ................................................................................ 53
Principais caractersticas do BIND9 ................................................................................................................ 53
O que necessrio para configurar ou migrar para o BIND9? ....................................................................... 54
Configurao do BIND9 NameServer. ............................................................................................................ 56
named.conf no BIND9..................................................................................................................................... 57
Unidade 2: Correio Eletrnico ........................................................................................... 69
Introduo ....................................................................................................................................................... 69
Sendmail ......................................................................................................................................................... 73
Introduo ....................................................................................................................................................... 73
Opes ........................................................................................................................................................... 73
Aliases ............................................................................................................................................................ 74
sendmail.cf...................................................................................................................................................... 74
2009 Processor Alfamidia LTDA. -4
DNS e Correio Eletrnico

sendmail.cw .................................................................................................................................................... 82
VIRTUSERTABLE .......................................................................................................................................... 83
GENERICSTABLE .......................................................................................................................................... 83
PostFix ............................................................................................................................................................ 84
Como funciona................................................................................................................................................ 84
SPF ................................................................................................................................................................. 101
Tutorial: ........................................................................................................................................................... 105
Configurando Postfix com MySQL e domnios virtuais ................................................................................... 105
Intoduo ........................................................................................................................................................ 105
Planejando e preparando................................................................................................................................ 105
Hardware ........................................................................................................................................................ 106
Software.......................................................................................................................................................... 108
Instalao ....................................................................................................................................................... 111
Debian GNU/Linux .......................................................................................................................................... 111
Configurao .................................................................................................................................................. 116
Apache............................................................................................................................................................ 116
MySQL ............................................................................................................................................................ 116
Base de Dados ............................................................................................................................................... 117
Postfix ............................................................................................................................................................. 122
Cyrus SASL 2 ................................................................................................................................................. 126

2009 Processor Alfamidia LTDA -5


DNS e Correio Eletrnico

Introduo ao Curso
Sobre o Curso
O curso de DNS / Correio Eletrnico tem por objetivo capacitar o aluno a projetar, implementar e
administrar um sistema de servidor de nomes do domnio - DNS - e os servidores de correio
eletrnico, com suas caractersticas de protocolos, mecanismos de funcionamento e aspectos de
segurana.

Formato do Curso
Esse curso dividido em duas unidades, a maioria delas apresentando novas informaes e contendo
demonstraes, tutoriais e atividades prticas.

Objetivos do Curso
Aps completar esse curso, voc ser capaz de:
Programar um servidor de DNS, utilizando o BIND;
Configurar um servidor de Correio Eletrnico, utilizando o Sendmail ou PostFix;
Gerenciar o servidor de e-mail em relao s caixas postais, domnios virtuais.

Pr-requisitos do Curso
Curso Redes e Samba ou conhecimentos equivalentes

2009 Processor Alfamidia LTDA. -6


DNS e Correio Eletrnico

Unidade 1: Domain Name System - DNS


Introduo

Conceitos de Nomes e Endereos

Toda interface de rede ligada a uma rede TCP/IP identificada por um endereo IP
formado por 32 bits. Um nome pode ser atribudo a qualquer dispositivo que possua um
endereo IP. A atribuio de nomes aos endereos se deve ao fato de que muito mais
fcil uma pessoa se lembrar de nomes do que de nmeros. O software de rede, entretanto
trabalha apenas com os nmeros.

Na maior parte dos casos, os nomes e nmeros podem ser usados indistintamente.
Desta forma, os comandos telnet computador.alfamidia.com.br e telnet 200.246.156.90
levam ao mesmo computador. Quando se utilizam nomes necessrio que exista um
servio que efetue a converso deste nome em um nmero IP para que se estabelea a
conexo.

DNS - Domain Name Service

A traduo entre nomes (mais facilmente memorizveis) e nmeros passou por


diversos estgios durante o desenvolvimento da Internet e das redes que a precederam.
Inicialmente existia uma tabela, chamada hosts.txt, mantida pelo DDN-NIC e que era
distribuda a todos os computadores da Internet. Com o crescimento da Internet este
esquema se tornou invivel, exigindo a criao de um servio mais eficiente para a
resoluo de nomes. A tabela hosts.txt foi substituda por um banco de dados distribudo
denominado Domain Name Service (Domain Name Server quando se trata da mquina e
dos daemons servidores que fazem o servio) concebido por Paul Mockapetris. As
especificaes encontram-se descritas na RFC 1034.

O DNS, ou Domain Name Service, foi desenvolvido para oferecer uma alternativa
resoluo de nomes atravs do arquivo hosts.txt que pudesse garantir seu funcionamento
eficiente mesmo em face do crescimento explosivo por que vem passando a Internet,
permitindo ao mesmo tempo que informaes sobre computadores novos sejam
rapidamente disseminadas conforme a necessidade.

BIND (Berkeley Internet Name Domain)

Em ambiente Unix, o servio DNS, que um sistema cliente servidor,


implementado atravs do software BIND. O lado cliente do BIND chamado resolver, ele
envia perguntas relativas a informaes contidas no DNS a servidores de nomes
(nameservers), e o servidor DNS responde a estas perguntas. O lado servidor do DNS
chama-se named. O Conjunto BIND/NAMED a opo mais usada e mais confivel,
quando bem administrada, para servios de nomes em sistemas Unix.

2009 Alfamidia Prow LTDA. -7


DNS e Correio Eletrnico

- Zonas
O termo zona (zone) se refere a informaes contidas em um arquivo da base de
dados do DNS.

- Domnio
Parte da hierarquia de domnios, em forma de rvore de nomes, identificada por um
nome de domnio, e sempre sendo um tronco inferior a uma outra rvore de nomes
(salvo em casos extremos, os Top Level Domains ou Nomes de Nveis Altos).

Tipos de Servidor

O software BIND pode ser configurado de diversas maneiras. So as seguintes as


configuraes mais comuns:

caching-only
Caching-only so servidores que rodam o programa named, mas no so fontes oficiais de
informao a respeito de domnios. Estes servidores obtm a resposta a todas as
perguntas que lhe so direcionadas a partir de algum servidor remoto.

Servidores Primrios
O servidor primrio a fonte oficial de todas as informaes a respeito de um domnio
especfico. Ele carrega as informaes sobre o domnio a partir de arquivos locais mantidos
pelo administrador do domnio. O servidor primrio o servidor mestre devido ao fato de
que pode responder a qualquer pergunta sobre seu domnio com total autoridade.

Servidores secundrios
Servidores secundrios so aqueles que transferem um conjunto completo de informaes
a partir do servidor primrio. Os arquivos descrevendo as zonas so transferidos do
servidor primrio e armazenados no servidor secundrio como um arquivo local. Esta
transferncia chama-se zone transfer. O servidor secundrio mantm uma cpia completa
de todas as informaes a respeito do domnio e responde a perguntas com autoridade.
Consequentemente, um servidor secundrio tambm considerado um servidor mestre.

Configuraes RESOLVER (Cliente)

O resolver uma biblioteca de rotinas invocadas por processos que utilizam


servios de rede.

Existem duas maneiras de se configurar o resolver. Pode-se usar a configurao


default, ou criar o arquivo /etc/resolv.conf, modificado para atender s necessidades locais.

A configurao default utiliza o computador local como name server default e obtm
o nome de domnio default a partir da string retornada pelo comando hostname.

Para que esta configurao funcione o computador precisa estar rodando o


processo named e o seu nome precisa estar corretamente configurado. Se o sistema local
no estiver rodando o programa named, ou se o nome do domnio no puder ser obtido a
partir do comando hostname, faz-se ento necessria a utilizao do arquivo
/etc/resolv.conf.

-8 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

O arquivo /etc/resolv.conf

A configurao do resolver utilizando o arquivo /etc/resolv.conf possui algumas


vantagens em relao configurao default. Este arquivo oferece a possibilidade de se
definir claramente a configurao e permite que se especifiquem servidores de nomes
adicionais que podem ser usados caso o servidor default no responda.

Exemplo:
domain fatectq.com.br
nameserver 200.210.2.10
nameserver 200.210.2.11

search fatectq.com.br

Domnios

O DNS um sistema hierarquicamente distribudo, concebido para realizar a


traduo de nomes para nmeros necessria ao estabelecimento de conexes entre
computadores ligados Internet. Sob este sistema no existe nenhum repositrio central
que contenha informaes sobre todos os computadores ligados Internet.

Esta informao distribuda por milhares de computadores, denominados


servidores de nomes, ou name servers. Estes servidores de nomes encontram-se
organizados de maneira similar ao sistema de arquivos do Unix.

Esta hierarquia pode ser representada da seguinte forma:


O DNS possui um domnio raiz, localizado no topo da hierarquia de domnios, que servido
por um grupo de servidores denominados root name servers . Esses servidores raiz so
mantidos pela InterNIC (falaremos sobre essa instituio mais adiante), e essas mquinas
ficam localizadas em diversas partes do planeta, Amrica do Norte (Estados
Unidos/Canad), sia e Europa.

Criao de Domnios e Subdomnios

O InterNIC (Internet Network Information Center), nos Estados Unidos tem a


autoridade para alocar domnios. Para obter um domnio, o interessado precisa submeter
um pedido ao NIC para criar um domnio sob um dos domnios de alto nvel (net, gov, mil,
org, com, edu).

O NIC americano delegou Fundao de Amparo Pesquisa do Estado de So


Paulo (FAPESP, a autoridade para alocar domnios em nveis abaixo do domnio .br
(net.br, gov.br, mil.br, org.br, com.br e edu.br), Portanto o domnio .br um Top Level
Domain, mantido pela Fapesp.

O registro de um domnio feito diretamente atravs da Web no endereo


http://registro.br, neste endereo possvel tambm verificar se domnios pretendidos j
foram registrados. A InterNIC permite a aplicao de regras prprias para o registro dos
domnios em todo o mundo, portanto as regras para se registrar um domnio delegado sob
o Top Level .br so diferentes das formas de registro de outros domnios, no
representados pela Fapesp.
2009 Alfamidia Prow LTDA. -9
DNS e Correio Eletrnico

Resoluo de Nomes

Resoluo Recursiva

Na recurso (recursion), o resolver envia uma pergunta recursiva a um servidor de


nomes para obter informaes a respeito de um domnio. O servidor de nomes interrogado
ento obrigado a obter os dados solicitados ou retornar um erro informando que os dados
solicitados no existem ou que o domnio em questo inexistente. O servidor de nomes
no pode redirecionar o cliente para outro servidor de nomes porque a pergunta foi
recursiva.

Se o servidor de nomes no for o servidor oficial do domnio a respeito do qual se


quer obter informaes, ele ter que perguntar a outros servidores de nomes at obter a
informao solicitada. Ele poder enviar perguntas recursivas a outros servidores,
obrigando-os a obter a resposta e retorn-la, ou poder enviar perguntas iterativas se
aproximando de outros servidores que estejam mais prximos do domnio que est
procurando.

- 10 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

Resoluo Iterativa

A resoluo iterativa no requer tanto trabalho por parte do servidor de nomes


consultado. Na resoluo iterativa, o servidor de nomes retorna ao cliente a melhor
resposta que j conhece. No existem perguntas adicionais.

O servidor de nomes consultado pesquisa seus dados (inclusive o seu cache). Se


no encontra a informao desejada entre estes dados, ele tenta fornecer ao cliente
(resolver) a melhor informao que puder que possibilite a continuao da resoluo do
nome desejado. Normalmente esta informao consiste de nomes e endereos de
servidores que estejam mais prximos dos dados que se procura.

Resource Records

A maior parte das entradas nos arquivos de banco de dados do DNS so chamadas
de Resource Records. As pesquisas feitas pelo DNS ignoram se as letras so maisculas,
minsculas ou misturadas. Normalmente se utilizam apenas letras minsculas. Os RRs
precisam iniciar na primeira coluna.

A tabela abaixo lista os tipos principais de RRs encontrados nos arquivos de


configurao do DNS:

Marca o incio de uma Zona com autoridade mxima sobre o Domnio referido. Sintaxe ordenada
SOA o Domnio, o endereo de domnio do admin, um nmero serial e os parmetros Refresh, Retry,
Expire e TTL Mnimo, em segundos. Para mais informaes veja a RFC 883 e RFC 2808.

NS Lista um servidor de nomes com autoridade sobre este domnio

A Mapeamento quaternrio de nomes para endereos IP (xxx.xxx.xxx.xxx)

PTR Ponteiro utilizado para mapeamento reverso, ou de endereos para nomes

Nomes cannicos (para aliases) - Canonical Names so os Apelidos referidos na configurao de


CNAME um Servidor de Nomes.

NULL Uma referncia NULA de Nomes. Sem dados e sem formato

TXT Informaes textuais

Responsible Person - Informaes sobre o responsvel pelo Servidor de Nomes, por um


RP MX Record ou por uma entrada TXT

2009 Alfamidia Prow LTDA. - 11


DNS e Correio Eletrnico

WKS Well-Known Services

HINFO Information. Informaes sobre o Host, como qual o Sistema Operacional

MX Mail Exchanger

- 12 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

Arquivos de Configurao
Agora ns trataremos dos arquivos de configurao do servidor de nomes no Linux.
Antes, porm, vamos fazer algumas observaes sobre a estruturao hierrquica desses
arquivos.

Em sntese, quando voc aprende a desenvolver os arquivos de configurao do


DNS para um sistema Unix, voc tende a seguir os padres adotados pelo curso que voc
fez, pelos amigos que te ensinaram, pelos arquivos que voc obteve como exemplo e
aprendeu sozinho, ou pela documentao que voc leu para aprender a configurar o
servidor de nomes.

Outras vezes esses padres so adotados devido ao sistema que voc est usando.
Mas o mais importante voc ter em mente que as configuraes do seu DNS, voc
quem faz, portanto o mais importante entender como funcionam os arquivos utilizados
para que, qualquer leitura de um outro servidor de nomes possa ser facilmente assimilada.
Voc pode ter um padro prprio de configurao.

Para isso, devemos entender a ordem que os arquivos hierarquicamente so


invocados. Quando se inicia o servidor NAMED, o primeiro arquivo que voc deve mostrar a
ele um arquivo de configurao bsico, que contm informaes que dizem, qual o
diretrio padro onde o servidor de nomes dever trabalhar seus arquivos. Depois disso,
esse mesmo arquivo tambm indica quais outros arquivos, e de que tipo eles so, que
devem ser procurados para determinada finalidade. Voc entender isso de forma clara a
seguir. O Passo seguinte, o servidor de nomes carregar todos esses arquivos de
configurao indicados (no caminho indicado no incio do arquivo, sob a diretiva directory{}).

Nesse momento ento, se o contedo de todos esses arquivos for interpretvel pelo
named, ento seu servidor de nomes dever estar rodando. Interpretvel porque, aqui sim,
o contedo das informaes deve seguir uma padronizao que o servidor de nomes
entender.

O que diferencia e influencia o administrador na adoo de um padro


normalmente o sistema onde ele trabalha, e a verso dos softwares com os quais ele trata.
Usualmente o named, quando iniciado por padro, procurava pelo arquivo named.boot
para iniciar seu servio de nomes. Em alguns sistemas Unix, como o Linux, o padro era
procurar pelo arquivo, no caminho /etc/named.boot. Os named mais novos, no entanto,
adotaram o arquivo padro a ser procurado como sendo o named.conf, que, em sistemas
Unix System V, esse caminho tambm o /etc/named.conf.

Bom, depois de carregado ento o arquivo inicial de configurao, o named recebe


informaes que dizem em que diretrio ele dever trabalhar os seus arquivos de nomes.
Recebe informaes sobre quais arquivos de bases de dados contm as informaes com
as quais ele vai trabalhar, e de que tipo; Ento essas informaes so carregadas. Em
alguns ambientes Unix, os administradores costumam trabalhar seu servio de nomes com
os arquivos de base de dados no diretrio /var/named/.

A ltima questo como nomear os arquivos. Com o Servidor de Nomes, ns


estaremos trabalhando com alguns tipos diferentes de arquivos. Arquivos de Base de
Dados de informaes sobre a mquina servidora, base de dados do dommio pelo qual
nosso servidor de nomes tem autoridade, base de dados de domnios virtuais dos quais ns
tambm temos autoridade, base de dados de relacionamento global, com os Root Name

2009 Alfamidia Prow LTDA. - 13


DNS e Correio Eletrnico

Servers e com outros grandes servidores de nomes importantes (que o que far nosso
servidor de nomes se comunicar com os principais servidores ao redor do mundo), ainda,
com informaes sobre a interface local de nomes, e por ltimo, trabalharemos com
informaes reversas de tudo isso sob o que ns temos autoridade.

A grande questo , todos esses arquivos, so arquivos de texto, e como nos Unix
no existe distino de arquivos por extenso, a forma como voc nomeia seus arquivos
deve ser sua maior aliada na organizao do seu servidor de nomes.

Dois arquivos porm no devem ser tratados com outros nomes. No que no
possa, apenas no indicado. Estes so, o named.ca que o arquivo que colocar o seu
servidor de nomes em contato com os outros servidores principais ao redor do mundo, e o
named.local, contendo informaes sobre a mquina servidora de nomes. No caso a sua
mquina.

Por padro, a maioria dos administradores costuma usar dominio.zone para as


zonas relacionadas, dominio.rev para os dados sobre dominios reversos, e o que bem
entenderem para outras informaes.

Ao decorrer dessa documentao, vamos assumir estar configurando um servidor


de nomes para o domnio eeviac.com.br, com as seguintes informaes:

Domnio: eeviac.com.br
Servidor Primrio: eeviacbsd.eeviac.com.br
Servidor Secundrio: xffa.eeviac.com.br
Segundo Secundrio: corduroy.eeviac.com.br
Faixa de IPs da Rede: 200.230.200.0 at 200.230.200.63
Portanto Mscara: 255.255.255.192

Consideraes adotadas, vamos ver tudo isso na prtica.

/etc/named.conf

O arquivo a partir do qual o named carrega todas as informaes de configurao,


por default, o arquivo /etc/named.conf A localizao deste arquivo, no diretrio /etc/, pode
ser mudada por meio da diretiva -c. Por exemplo o comando:

# named
Far com que o BIND seja inicializado utilizando a informao contida no arquivo
/etc/named.conf

J o comando:

# named -c /usr/local/algum_diretorio/named/named.conf
Far com que o BIND seja inicializado com a informao contida no arquivo
/usr/local/algum_diretorio/named/named.conf

Mas a maioria dos sistemas Unix utiliza esta conveno, de sempre manter o
arquivo de inicializao do named onde ele procura por default, evitando usar a opo -c
ou apenas fazendo uso dela pra ter certeza de estar iniciando o named da forma correta. O
arquivo named.conf abaixo exemplifica a configurao de nosso servidor, como se fosse
um site pequeno, com apenas um domnio e apenas uma classe C:

- 14 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

options {
directory "/usr/named/";
query-source address * port 53;
};

zone "." {
type hint;
file "named.ca";
};

zone "0.0.127.in-addr.arpa" {
type master;
file "named.local";
};

zone "eeviac.com.br"{
type master;
file "db.eeviac";
};

zone "0-63.200.230.200.in-addr.arpa"{
type master;
file "db.200.230.200";
};

O quadro abaixo explica resumidamente o significado de algumas das diretivas que


podem ser utilizadas no arquivo /etc/named.conf

DIRECTORY - Informa ao named o diretrio onde se encontram todos os arquivos


referenciados. Por exemplo, o arquivo named.ca, se encontra na realidade em
/usr/namedb/named.ca

HINT - Informa ao named onde se encontra a lista dos root nameservers utilizada para
fazer a inicializao de seu cache.

MASTER - Pode ser utilizada diversas vezes, e sinaliza ao named quais so os domnios
para os quais possui informaes oficiais (authoritative).
SECONDARY - Declara este servidor como secundrio da zona especificada.

FORWARDERS - Lista servidores para os quais queries so enviados

SLAVE - Obriga o servidor a usar apenas forwarders

Esse foi um pequeno exemplo, a partir de agora comentaremos nossas


configuraes e explicaremos o porque de cada diretiva estar sendo usada. Dessa forma,
vamos analisar agora, como trabalharia o nosso arquivo named.conf, se utilizssemos
esse pequeno exemplo apenas para o nosso domnio:
options {
; /* declara que estamos iniciando uma opo que deve
;* ser interpretada pelo nosso servidor de nomes
;*/

directory "/usr/named/";
;/* indica que a opo aberta na linha
;anterior vai apontar

2009 Alfamidia Prow LTDA. - 15


DNS e Correio Eletrnico

;* pro nosso servidor de nomes o diretrio


;padro, onde ele
;* vai encontrar todos os arquivos que sero
;referenciados
;* a partir de agora, nesse mesmo arquivo
;*/

query-source address * port 53;


;/* uma Segunda opo, repare que a TAG options{}; ainda
;* no foi terminada, ok? Bom, essa opo indica ao NAMED que ele
;* responder ao BIND, quando esse fizer
;perguntas na porta 53.

};
;/* agora sim, a tag options {}; est terminada. */

zone "." {
;/* Lembre-se: a inteno voc aprender, ao invs de simplesmente copiar
;* ento ateno a essa diferena, agora a tag no foi iniciada com a
;* mesma sintaxe que anteriormente. A diretiva ZONE trata da Zona
;* referenciada, portanto, antes se indica de que zona voc est falando
;* a sim abre a tag {}; para inserir as opes. Nessa linha estaremos
;* trabalhando com os domnios absolutos, a raiz de todos os servidores
;* de nomes. Ou seja, os Root NameServers, como j vimos antes.
;* Ento, para indicarmos que a zona mais alta possvel, usamos a
;* diretiva "."
;*/

type hint;

;/*agora estamos indicando que essa zona do tipo hint, lembra-se da


;* tabela que vimos acima? Nosso servidor entrar em contato com os Root
;* NameServers para preparar o nosso cache de resoluo de nomes.
;*/

file "named.ca";

;/* agora estamos indicando qual arquivo tem os endereos dos Root

;* Nameservers para nos conectarmos.*/

};

;/* Mais uma vez, fechando as informaes da opo zone "." {}; */

zone "0.0.127.in-addr.arpa" {

;/* lembra-se que a diretiva ZONE trabalha indicando antes de que zona

;* se trata, para somente depois iniciar as opes certo? Agora estamos

;* tratando da Zona Local Reversa, ou seja, da forma reversa com a qual


;* nossa maquina ser tratada pela interface de Loopback ("lo").
;* Essa a sintaxe, que quer dizer que estamos tratando do reverso
;* da rede na entrada do endereamento dos socks arpa no kernel.

;* Parece confuso, e mesmo, mas lembre-se da sintaxe, reverso da rede

- 16 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

;* ponto (.) entrada (in) do endereo (addr) arpa.

;*/

type master;
;/* tipo de entrada master na tabela acima. Master, lembrando

;* so os tipos de Zonas pelas quais ns temos autoridade na

;* na Internet... pode ser usado inmeras vezes, sempre

;* que for preciso indicar uma zona pela qual ns respondemos


;*/

file "named.local";
;/* Bom, aqui estamos indicando que as informaes sobre essa

;* Zona que ns dizemos Ter autoridade est no arquivo

;* named.local Como voc j deve ter notado, pela diretiva da

;* zona, ns estamos falando da zona local, de loopback, ento

;* esse arquivo conter apenas informaes sobre a rede 127.0.0.0

;* ou seja, como somos a nica mquina da interface de loopback,

;* esse arquivo vai conter informaes sobre a mquina 127.0.0.1,

;* ou seja, apenas informaes sobre a maquina local (localhost).

;*/

};
;/* Mais uma vez, terminando a diretiva. */

zone "eeviac.com.br"{
;/* Como j entendemos a sintaxe da diretiva zone ""{}; ento j

;* podemos visualizar que agora sim estamos tratando de uma

;* zona da Internet, que certamente ser alcanada por outras zonas

;* outras mquinas e outras redes. Ento agora estaremos tratando

;* da vida de um domnio pro resto do mundo. Nesse caso, esse domnio

;* o nosso prprio domnio, eeviac.com.br. Ateno a partir de agora.

;*/
type master;

;/* Como ns respondemos com toda autoridade do mundo para

;* o domnio eeviac.com.br e somos os responsveis pelo mesmo,

;* ento claro que um domnio do tipo master.

;*/
file "db.eeviac";

2009 Alfamidia Prow LTDA. - 17


DNS e Correio Eletrnico

;/* Estamos indicando que todas as informaes sobre o Domnio

;* eeviac.com.br esto guardadas na DataBase db.eeviac do diretrio

;* referenciado no incio do named.conf

;*/
};

;/* fim dos parmetros da zona eeviac.com.br */

zone "0-63.200.230.200.in-addr.arpa"{

;/* Agora muita ateno! Lembra-se da rede reversa de loopback? Pois bem

;* agora no estamos mais tratando de uma rede privada, estamos

;* tratando das informaes reversas da rede toda! Vamos entender a

;* a sintaxe: zona do tipo reversa, dos clientes 0-63 (Zero at 63) da rede

;* 200.230.200.0 de mscara 192, ou seja, todos os clientes dentro da nossa rede.

;*

;* Como ns somos os responsveis por esses hosts devemos prover tambm

;* a traduo reversa de nomes, informando o nome da mquina quando

;* o query quiser informaes de nome sobre um endereo IP.

;* Ou seja, a prxima base de dados

;* ter que conter informaes reversas (se voc leu com ateno as

;* tabelas anteriores, j pode imaginar que elas sero referenciadas usando

;* a diretiva PTR) de todos os IPs da nossa rede.

;*/

type master;
;/* claro que ns respondemos com autoridade pelo reverso da nossa rede

;* ento essa zona mesmo do tipo master, ns somos os donos!

;*/

file "db.200.230.200";
;/* e esse o arquivo que contm a Base de Dados reversa da

;* nossa rede/domnio. Certamente voc entendeu agora porque eu

;* eu nomeio como db.200.230.200, certo?!

;*/
};

- 18 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

ATENO: No BIND 9 a informao sobre a zona reversa no deve ser apresentada na


forma

xxx-xxx.xxx.xxx.xxx.in-addr.arpa (como 0-63.200.230.200.in-addr.arpa nesse exemplo) pois


sero interpretadas como uma zona reversa de endereos IP de Prxima Gerao (IPv6).
Nesse caso apresente a informao omitindo a zona de abrangncia, deixe que apenas o
arquivo reverso faa isso. Use apenas a rede, sem os hosts. Portando no nosso exemplo,
para uma zona reversa IPv4 utilize 200.230.200.in-addr.arpa (xxx.xxx.xxx.in-addr.arpa onde
xxx.xxx.xxx a rede reversa); Para zona reversa IPv6 utilize xxx.xxx.xxx.xxx.xxx.in-
addr.arpa (onde xxx.xxx.xxx.xxx.xxx a rede reversa IPv6).

Essa sintaxe tambm pode ser adotada no BIND 8.2.4 e superiores, no comprometendo a
eficincia das informaes.

/usr/named/named.ca

Bom, voc certamente se lembra da primeira zona do nosso arquivo de


configurao, a zona "." Do tipo hint ou seja, onde ns nos conectaramos com os Root
Nameservers para prepararmos nosso cache de nomes... Pois bem, claro que voc pode
visualizar que essa nossa entrada faz referncia ao arquivo (file) named.ca; Ento vamos
analisar esse arquivo esttico.

Este arquivo contm a informao necessria para se inicializar o cache com os


dados relativos aos Root Nameservers.

As informaes deste arquivo so praticamente estticas, porque fazem referncias


a servidores que quase nunca mudam de endereo. Algumas alteraes raramente so
feitas, mas quando feitas, so para atualizar algum endereo ou outro, ou so para
adicionar novos servidores. A InterNIC disponibiliza este arquivo via ftp annimo, e os
endereos para a atualizao dele so encontrados em:
ftp.rs.internic.net:/domain/named.root para FTP annimo, ou para acesso via Gopher, no
endereo: RS.INTERNIC.NET, sob o menu InterNIC Registration Services (NSI),
submenu InterNIC Registration Archives e arquivo named.root.

Recomenda-se a verificao deste arquivo periodicamente a cada 3 meses, e


recomenda-se que o seu named.ca seja sempre criado a partir da verso mais recente. A
tarefa de pegar esse arquivo muito fcil e pode ser facilmente automatizada, com algum
script simples no cron.

Bom, agora vamos dar uma olhada no arquivo. Essa a descrio do arquivo
named.ca:
; This file holds the information on root name servers needed to
; initialize cache of Internet domain name servers
; (e.g. reference this file in the "cache . "
; configuration file of BIND domain name servers).
;
; This file is made available by InterNIC registration services
; under anonymous FTP as
; file /domain/named.root
; on server FTP.RS.INTERNIC.NET
2009 Alfamidia Prow LTDA. - 19
DNS e Correio Eletrnico

; -OR- under Gopher at RS.INTERNIC.NET


; under menu InterNIC Registration Services (NSI)
; submenu InterNIC Registration Archives
; file named.root
;
; last update: Aug 22, 1997
; related version of root zone: 1997082200
;
;
; formerly NS.INTERNIC.NET
;
. 3600000 IN NS A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4
;
; formerly NS1.ISI.EDU
;
. 3600000 NS B.ROOT-SERVERS.NET.
B.ROOT-SERVERS.NET. 3600000 A 128.9.0.107
;
; formerly C.PSI.NET
;
. 3600000 NS C.ROOT-SERVERS.NET.
C.ROOT-SERVERS.NET. 3600000 A 192.33.4.12
;
; formerly TERP.UMD.EDU
;
. 3600000 NS D.ROOT-SERVERS.NET.
D.ROOT-SERVERS.NET. 3600000 A 128.8.10.90
;
; formerly NS.NASA.GOV
;
. 3600000 NS E.ROOT-SERVERS.NET.
E.ROOT-SERVERS.NET. 3600000 A 192.203.230.10
;
; formerly NS.ISC.ORG
;
. 3600000 NS F.ROOT-SERVERS.NET.
F.ROOT-SERVERS.NET. 3600000 A 192.5.5.241
;
; formerly NS.NIC.DDN.MIL
;
. 3600000 NS G.ROOT-SERVERS.NET.
G.ROOT-SERVERS.NET. 3600000 A 192.112.36.4
;
; formerly AOS.ARL.ARMY.MIL
;
. 3600000 NS H.ROOT-SERVERS.NET.
H.ROOT-SERVERS.NET. 3600000 A 128.63.2.53
;
; formerly NIC.NORDU.NET
;
. 3600000 NS I.ROOT-SERVERS.NET.
I.ROOT-SERVERS.NET. 3600000 A 192.36.148.17
;
; temporarily housed at NSI (InterNIC)
;
. 3600000 NS J.ROOT-SERVERS.NET.
J.ROOT-SERVERS.NET. 3600000 A 198.41.0.10

- 20 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

;
; housed in LINX, operated by RIPE NCC
;
. 3600000 NS K.ROOT-SERVERS.NET.
K.ROOT-SERVERS.NET. 3600000 A 193.0.14.129
;
; temporarily housed at ISI (IANA)
;
. 3600000 NS L.ROOT-SERVERS.NET.
L.ROOT-SERVERS.NET. 3600000 A 198.32.64.12
;
; housed in Japan, operated by WIDE
;
. 3600000 NS M.ROOT-SERVERS.NET.
M.ROOT-SERVERS.NET. 3600000 A 202.12.27.33
; End of File

/usr/named/named.local

Seguindo a ordem de inicializao do nosso servidor de nomes, agora o named.conf


chama a interface reversa de Loopback, e aponta para o arquivo named.local para obter
os dados. Ento vamos entender agora a funo do arquivo named.local

Segue a descrio do arquivo named.local encontrado na nossa configurao em


/usr/named/
;
; BIND data file for local loopback interface.
;
@ IN SOA localhost. root.localhost. (
98101401 ; serial
28800 ; refresh
14400 ; retry
3600000 ; expire
86400 ; default_ttl
)
@ IN NS localhost.
1 IN PTR localhost.
;
;

Acompanhe agora com a tabela dos Resource Records, e vamos entender ento
quais os dados e como esto sendo passados para o nosso servidor de nomes. Lembrando
que ns estamos tratando de uma zona do tipo master, ou seja, onde ns temos autoridade
e responsabilidade total sobre os dados que estamos tratando. Felizmente essa a
interface de Loopback, mas o rigor das informaes o mesmo para outras zonas da
Internet as quais ns tenhamos autoridade.
;
; BIND data file for local loopback interface.
;

; a descrio do arquivo, os dados referentes interface de

; loopback local para o BIND. Os ponto e vrgula ;

2009 Alfamidia Prow LTDA. - 21


DNS e Correio Eletrnico

; so observaes (comentrios) nesse arquivo.

$TTL 14400
@ IN SOA localhost. root.localhost. (

; A forma como iniciamos um arquivo de Zona dizendo sobre qual zona

; estamos trabalhando, sempre uma zona que tenhamos autoridade total.

; E j vimos na tabela dos RRs que a entrada para apontar autoridade

; sobre uma zona a entrada SOA. Tnhamos tambm a descrio da sintaxe

; da entrada SOA, que era o Domnio da Zona em questo, o endereo de domnio do admin

; um nmero serial, e os parmetros Refresh, Retry, Expire e TTL Mnimo,

; em segundos, certo? Como voc pode ver, a sintaxe toda est referida aqui.

; O arquivo inicia com uma @, @ em ingls se pronuncia como a conjuno "at" que

; que como se fosse, traduzindo livremente, como a conjuno "em" na nossa lngua

; ou seja, referenciamento de lugar, local. Foge ao assunto desse captulo, mas vamos

; a uma breve adenda: por isso que os endereos de e-mail tm o formato

; alguem@algum-dominio, ou seja, o endereos se refere a alguem em algum lugar, onde

; nesse caso o lugar a zona (domnio) da internet onde ele se encontra.

; Bom, voltando. Inicialmente, com o BIND antigo, era preciso usar uma arroba (@) antes

; de anunciarmos a entrada (IN) da zona que estamos tratando. Hoje em dia a arroba (@)

; no mais necessria, mas ainda pode ser usada.

; Ento agora j sabemos que nesta linha estamos apontando uma entrada (IN) ao nosso

; servidor de nomes, e depois percebemos que essa entrada do tipo Autoritativa, ou seja,

; ns temos total controle sobre ela. A seguir ento segue-se a ordem da sintaxe dessa

; entrada SOA, primeiro o domnio da Zona em questo, que nesse caso a zona

; de Loopback, ou seja, o localhost, que seguido do domnio (zona) do administrador.

; A Sintaxe da zona do administrador "usurio.zona", as mensagens de erro ou mal

; funcionamento do nosso servidor de nomes ser enviado a ele. No nosso caso, ele

; root.localhost por estarmos tratando do superusurio, no nosso host (mquina).

; Abrem-se parnteses para os prximos dados.

- 22 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

98101401 ; serial

; A primeira entrada o nmero serial que identifica o nosso servidor de nomes.

; um nmero que segue o formato acima, e tem uma funo importante,

; da mesma forma que nos conectamos aos Root Nameservers para fazermos

; uma verificao e criar o nosso cache com dados sobre nomes, claro que

; os dados do nosso servidor de nome tambm so referenciados, porque ns

; temos autoridade sobre um (ou vrios) domnios importantes, ento tudo que

; o nosso servidor de nomes diz, importante pra Internet como um todo.

; Sempre que esse nmero serial alterado, os Root Nameservers atualizam

; suas informaes em relao ao nosso servidor de nomes. Alterar incrementando

; o nosso serial fora os outros servidores de nomes a atualizarem suas informaes

; sobre ns.

28800 ; refresh

; Bom caso no alteremos o serial do nosso servidor de nomes, existe um tempo, em segundos

; que ns foramos a sincronia dos nossos dados com os outros servidores de nomes do mundo.

14400 ; retry

; Caso no consigamos exportar ou importar novos dados, existe um tempo, tambm em segundos

; para uma nova tentativa. o retry.

3600000 ; expire

; Esse o limite para os dados no servidor de nomes e pra sincronia entre ns e o

; resto do mundo expirar, caso no haja atualizaes.

86400 ; default_ttl

; Default TTL (Time To Live) o tempo de vida padro para uma requisio de nome ser resolvida

; Depois desse tempo a requisio morre... essa entrada para default_ttl usada se o nosso arquivo

; no tiver uma entrada $TTL no inicio.

; fecha os parnteses, porque acabaram os dados requeridos para a entrada (IN) autoritativa (SOA)
2009 Alfamidia Prow LTDA. - 23
DNS e Correio Eletrnico

@ IN NS localhost.

; Nessa linha, estamos indicando uma entrada (IN) de um servidor de nomes (NS) com autoridade

; sobre o Domnio (zona) em questo. O Servidor de nomes (NS) com autoridade sobre a

; zona de loopback (localhost) a mesma mquina local, portanto, localhost. Em sntese, esse

; linha esta indicando que ela ser servidora de nomes para a zona dela mesma.

1 IN PTR localhost.

; Como essa entrada de zona do tipo reversa (0.0.127), na entrada de endereamento arpa

; (.in-addr.arpa) ento devemos apontar para os endereos reversos da zona. Como j

; temos em mente que a zona que estamos trabalhando a de loopback, ento s existe a

; nossa prpria mquina nessa zona, portanto o cliente (host) nmero 1 somos ns. De uma

; olhada na tabela de RRs para ver como declaramos endereamento reverso dos hosts de uma

; zona e voc vai lembrar que pra isso usamos os Ponteiros (PTR) apontando o host ao nome.

; Portanto a primeira mquina de nossa zona (1) uma entrada (IN) do tipo reversa, que aponta

; (ponteiro - PTR) para a mquina local (localhost).

E eis o final do nosso arquivo named.local, que indica a nossa zona e reverso da
interface de Loopback. A importncia dessa identificao a segurana que a identificao
de uma zona inteira a um nico host pode oferecer, sendo esse nico host o prprio
servidor de nomes.

Dessa forma, antes de sermos apenas mais um host de uma zona que temos
autoridade (o que voc ver a seguir) somos o nico host de uma zona prpria tambm. Ou
seja antes de sermos o nosso endereo IP real para o resto do mundo, ns somos o
127.0.0.1, e isso traz segurana vrios tipos de configurao.

/usr/named/db.eeviac

A prxima entrada no arquivo de configurao do nosso servidor de nomes aponta


tambm para uma zona. Agora sim a situao a mais importante. A zona a qual estamos
tratando a zona que ns pegamos para nosso exemplo, a zona eeviac.com.br ou seja, a
partir de agora, toda informao sobre servio de nomes e de hosts dentro dessa zona,
somos ns quem somos responsveis e temos total autoridade. Autoridade sinnimo
direto de responsabilidade, pois toda informao referente a essa zona na Internet estar
por nossa conta. Dessa forma temos que Ter o nosso servidor de nomes funcionando com
perfeio e com configuraes claras, para que o resto do mundo entenda toda informao
que estamos passando em relao eeviac.com.br (nosso exemplo).

Como ns temos informaes oficiais sobre a zona eeviac.com.br ento ela do


tipo master, que a forma como apontada no named.conf, e toda informao sobre essa
zona do tipo master est contida na base de dados que chamada pelo mesmo arquivo de
db.eeviac. Poderia ser eeviac.zona ou zone.eeviac de acordo com a forma que cada
administrador implementa.

- 24 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

esse db.eeviac que ns vamos analisar agora. Segue um exemplo de como deve
ser o arquivo:
$TTL 14400
@ IN SOA eeviac.com.br. root.eeviac.com.br. (
2000041003 ; serial
28800 ; refresh
14400 ; retry
3600000 ; expire
86400 ; default_ttl
)
@ IN NS eeviacbsd.eeviac.com.br.
@ IN NS ns.embratel.net.br.
@ IN NS xffa.eeviac.com.br.
@ IN MX 10 smtp.eeviac.com.br.
@ IN MX 20 xffa.eeviac.com.br.
@ IN A 200.230.200.10
rt IN A 200.230.200.1
ras IN A 200.230.200.2
eeviacbsd IN A 200.230.200.10
smtp IN A 200.230.200.10
; smtp IN CNAME mail.eeviac.com.br
pop3 IN A 200.230.200.10
; pop3 IN CNAME mail
ftp IN A 200.230.200.10
; ftp IN CNAME wwwfserv.eeviac.com.br
www IN A 200.230.200.10
; www IN CNAME wwwfserv
host3 IN A 200.230.200.3
maq4 IN A 200.230.200.4
maq5 IN A 200.230.200.5
host6 IN A 200.230.200.6
ma7 IN A 200.230.200.7
eeviac8 IN A 200.230.200.8
xffa IN A 200.230.200.9
corduroy IN A 200.230.200.11
eev12 IN A 200.230.200.12

Como voc pode ver, esse arquivo agora bem completo, e contm vasta
informao. Na verdade, esse arquivo no contm apenas as informaes de nomes da
sua zona (domnio) mas tambm toda informao de nomes dos clientes (hosts) da sua
rede ou zona. Essa informao o relacionamento de um nome, dentro da sua zona, ou
um apelido (ALIAS) de um nome dado para outro host, o que chamado de Nome
Cannico (CNAME). Vamos ento acompanhar e entender cada linha do arquivo de base
de dados que representa toda informao para zona eeviac.com.br:
$TTL 14400

; Time To Live a ser usado. No obrigatrio, se essa opo no existir o

; default_ttl ser utilizado.

@ IN SOA eeviac.com.br. root.eeviac.com.br. (

; como vimos na entrada do named.local, essa a indicao de uma entrada (IN)

; no nosso servidor de nomes, e a entrada do tipo que ns temos total autoridade,

2009 Alfamidia Prow LTDA. - 25


DNS e Correio Eletrnico

; ou seja, do tipo Autoritativa (SOA) e a zona faz referncia um domnio, ou o nome

; da zona, que no exemplo anterior era a zona localhost, e agora a zona a zona da

; internet eeviac.com.br. A seguir o endereamento do mantenedor desse domnio, no caso

; o root do domnio eeviac.com.br. No geral: estamos dizendo que a partir de agora, a zona

; na internet representada por eeviac.com.br ser respondida por ns. Ns temos autoridade

; e responsabilidade sobre a informao referida a essa zona, em relao ao resto do mundo.

; No entanto, vamos fazer uma pausa para um detalhe que eu propositalmente deixei de

; comentar quando comentamos o arquivo named.local; Se voc reparar, o domnio da zona

; terminado por um ponto final, sempre que esse referenciado. Veja o trecho:

; @ IN SOA eeviac.com.br. root.eeviac.com.br. (

; podemos observar um ponto ao final do domnio eeviac.com.br, ficando eeviac.com.br. e

; a mesma coisa no endereo do mantenedor root.eeviac.com.br. A explicao para isso,

; que ao colocarmos um ponto final, ao final do domnio da nossa zona, estamos indicando

; que um domnio absoluto, ou seja, depois do ponto nunca vai existir mais nada. Na

; prtica, nunca vai existir um host depois da zona referida, assim, nunca existir uma

; mquina com nome eeviac.com.br.host1 por exemplo. Poder, e existir sempre um host

; antes, mas nunca depois, sendo, um host, um nome canonico com o nome de www

; por exemplo, ou seja, www.eeviac.com.br, mas nunca eeviac.com.br.www.

2000041003 ; serial

; Esse o serial da nossa zona eeviac.com.br, voc se lembra da descrio dele no arquivo

; named.local certo? O Nmero serial costuma ser formado da data e da ao, assim, esse

; nmero serial estaria representando o serial da terceira alterao feita em 10 do ms

; 04 do ano 2000. Mas na verdade isso uma adoo apenas, e no tem que ser levada

; ao p da letra. As Man Pages (pginas de manuais) do named dizem que o serial

; pode ser at pontuado, mas que algo desnecessrio devido ao fato da traduo

; dos Inteiros reais serem via concatenao, e no via multiplicao ou adio. Diz ainda que voc

; pode escrever o ms, o ano e o dia do ms, que ainda assim esses sero dados dentro do

; padro que o BIND entende, que de 32 bits, se bem que isso ter que ser repensado

; no ano 4294, mas ningum se importa com isso por enquanto...

- 26 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

28800 ; refresh

; lembra-se da descrio do refresh no arquivo named.local certo? Pois bem ento

; vamos obter mais informaes... o tempo do refresh, em segundos tambm

; o tempo que os servidores secundrios da sua zona/rede iro perguntar ao servidor

; primrio se houve alguma mudana na Zona. Se a mudana acontece, ento uma

; rea de transferncia de dados aberta para a atualizao do servidor de nomes.

14400 ; retry

; o tempo em segundos para iniciar uma nova tentativa de atualizao ou sincronia

; de dados no servidor de nomes.

3600000 ; expire

; O tempo no expire, alm da funo descrita anteriormente tambm o perodo mximo

; que o servidor secundrio vai insistir em atualizar seus dados...

86400 ; default_ttl

; E esse o valor mnimo para o TTL (Time to Live) que o servidor permanecer insistindo

; com uma requisio com resposta negativa, caso outro valor no tenha sido previamente

; anunciado com um $TTL inicial

; Fecha o parntese porque o fim da configurao obrigatria de todos os parmetros

; da entrada SOA (autoritativa).

@ IN NS eeviacbsd.eeviac.com.br.

; Lembra-se que, de acordo com a tabela dos Resource Records (RRs) a entrada para se

; referenciar um servidor de nomes NS (de Name Server), ento nessa linha estamos

; dizendo que a entrada (IN) do nosso servidor de nomes (NS) eeviacbsd.eeviac.com.br

; portanto essa a mquina que estar nos servindo, ou seja, eeviacbsd essa mesma

; estao (host) que ns estamos configurando, portanto a primeira entrada dos servidores

; de nomes padro no nosso DNS ns mesmos. Detalhe no ponto final ao final do domnio.

@ IN NS ns.embratel.net.br.

; Podemos Ter mais que um servidor de nomes configurado em nosso DNS, e esse segundo

; o Servidor de nomes da Embratel, um dos principais pontos de referncia de servios

; de nomes no Brasil, ou seja, esse servidor de nomes ser consultado sempre que no

; pudermos responder pela requisio de nossos clientes. No caso de no sermos autoridades

2009 Alfamidia Prow LTDA. - 27


DNS e Correio Eletrnico

; sobre o domnio que esta sendo consultado, ento perguntaremos ao NS da embratel, se

; o nosso prprio no puder responder.

@ IN NS xffa.eeviac.com.br.

; E configuramos ainda um terceiro servidor, mais por finalidade demonstrativa. No necessrio

; Ter mais que um servidor de nomes e um secundrio, ou seja, voc deve sempre configurar o

; seu prprio NS e o de um backbone (espinha dorsal da rede), nesse caso o NS da Embratel.

; Veja que as entradas so sempre iguais, e apontam entrada (IN) de um

; servidor de nomes (NS) e em seguida o nome+domnio da mquina. Lembramos que a arroba

; (@) no mais obrigatria nos BIND/NAMED atuais.

@ IN MX 10 smtp.eeviac.com.br.

; Bom, o servio de e-mail um dos principais e mais bsicos quando se trata

; de um domnio (zona) da Internet. Imagina-se que por todos os domnios que ns

; tenhamos autoridade queira-se poder configurar e-mails para essas zonas. Dessa forma

; devemos indicar o(s) servidor(es) de e-mail que responde(m) por nossa(s) zona(s).

; Podemos indicar quantos servidores de e-mails sejam necessrios, ou estejam

; configurados, podendo ser inclusive mquinas de fora da nossa rede (zona).

; O mnimo que se deve ter indicado a entrada (IN) de um servidor de e-mail

; ou Mail eXchanger (MX) com preferir, para que possa receber as mensagens

; de e-mail enviadas usurios em nossa zona (rede/domnio). A Sintaxe dessa

; entrada deve ser: IN (entrada) MX (servidor de email, Mail eXchanger) seguidos

; de um nmero X e depois o nome+Domnio da mquina indicada. Bom, esse

; nmero indica a preferncia (0..99) que o servidor tem, em caso de existir mais

; de um servidor que responde pelas zonas que temos autoridade. Esse valor

; reverso, ou seja, quanto menor o valor do nmero, maior preferncia sobre os

; outros servidores de e-mail (MX) ele tem. Dessa forma, se tivermos 2 ou 3 servidores

; distintos, ento seus valores podero ser 0, 5, 10... ou 0, 1, 2 ou 1, 2, 4 enfim, a

; forma como voc vai administrar o que difere a situao numrica.

@ IN MX 20 xffa.eeviac.com.br.

; Agora voc est vendo isso na prtica, um segundo servidor de e-mail

; referenciado, mas com uma prioridade mais alta que o primeiro, como

; a prioridade reversa, ento esse servidor s ser usado se o

- 28 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

; primeiro negar o destinatrio, ou estiver fora do ar. Vamos entender... enviado um e-mail

; para um determinado usurio, de uma determinada zona, ento seu

; servidor que tem autoridade sobre essas zonas, deve identificar qual

; servidor vai receber os e-mails daquela zona ou usurio. Assim, se um

; e-mail enviado para pixies@velouria.com.br, e se voc tem autoridade

; (SOA) sobre o domnio velouria.com.br, ento o seu servidor DNS dever

; se responsabilizar por entregar esse e-mail. Ele pergunta ao seu servidor com

; menor entrada (no nosso caso smtp.eeviac.com.br, com entrada 10) e esse

; servidor diz que no reconhece esse usurio desse domnio. Ento seu servidor

; passa a requisio para o prximo servidor que ele conhece, com a prxima entrada

; mais baixa, no caso a entrada 20, que aponta o servidor xffa.eeviac.com.br; Se esse

; servidor aceita e-mails para esse domnio (zona - velouria.com.br) e reconhece o usurio

; (pixies) ento o e-mail esta entregue. Mas se esse servidor de e-mail tambm no

; responde por esse usurio e/ou zona (velouria.com.br) e no existe outro servidor de

; e-mail cadastrado no seu servidor DNS (uma terceira entrada -IN- de servidor de mail

; -MX- com um valor maior que o ltimo consultado), ento uma mensagem de erro

; enviada ao remetente do e-mail, dizendo que no pode entregar o e-mail, ou seja,

; a mensagem que o e-mail voltou...

@ IN A 200.230.200.10

; Agora vamos comear a adicionar os mapeamentos quartenrios (A)

; dos endereos IPs correspondentes a cada mquina (host). Lembrando

; que, o endereo IP de um host composto pelo endereo da rede seguido

; do endereo referente aquela mquina na rede. Dessa forma, a mquina

; com IP 200.230.200.53 o host (cliente/mquina) de nmero IP 53, na nossa rede

; que a 200.230.200.0, certo? Bom, essa primeira entrada obrigatria

; para resolver o domnio sem um host

; ou seja resolver eeviac.com.br pro endereo IP em questo. Essa entrada diz que

; as configuraes acima criadas so referentes aquela mquina, e demonstra o

; endereo Quartenrio dela. Isso evita que o DNS precise ser consultado para

; perguntar que aquela mquina de nome eeviacbsd, no domnio eeviac.com.br.

; Agora sim comea um dos servios mais importantes de nosso servidor de nomes,

2009 Alfamidia Prow LTDA. - 29


DNS e Correio Eletrnico

; voc se lembra da introduo desse captulo que diz que as mquinas conversam entre

; si usando os endereos IPs a nvel de software e hardware, mas que isso transparente

; para o usurio leigo, certo? E voc viu que, at agora muitas vezes ns fizemos

; referncias a nomes inteiros de identificao, certo? Como a entrada MX que indica

; smtp.eeviac.com.br e a Segunda entrada MX que aponta para xffa.eeviac.com.br, e

; o principal, o nosso servidor eeviacbsd.eeviac.com.br. Esse ao menos apontado no

; primeiro referenciamento do nosso DNS, e diz que a mquina a 200.230.200.10, mas

; e o resto? agora que vamos tratar dos nomes dos clientes... ( os hosts ).

rt IN A 200.230.200.1

; A sintaxe para as entradas quartenrias de referenciamento de IPs (com excluso da

; primeira entrada que no precisa ter o nome da mquina (host) e hoje em dia nem a

; arroba mais obrigatria, e que ns j vimos pra que serve essa entrada) :

; O nome da mquina sob a zona primria, referenciando uma entrada (IN) do tipo

; endereo Quartenrio IP (A) e apontando esse endereo quartenrio. Vale lembrar que

; o "nome da mquina sob a zona primria", e quartenrio enquanto estiver configurando

; um servidor de nomes com endereo IPv4. Isso quer dizer que o nome completo do endereo

; daquele host dar o nome dele + a zona autoritativa sobre a qual ele pertence.

; No nosso exemplo, como a nossa zona SOA a eeviac.com.br, ento o endereo completo

; vai ser o nome do host mais essa zona. Nessa entrada acima, estamos ento dizendo que

; o nome "rt" uma entrada (IN) pro endereo IP quartenrio (A) referente a 200.230.200.1

ras IN A 200.230.200.2

; Essa prxima entrada quer dizer... a mesma coisa, mas faz referncia de nome de outra

; mquina a outra entrada quartenria. No Caso, essa entrada diz que o nome "ras"

; correspondente entrada (IN) de IP Quartenrio (A) referente a 200.230.200.2

; Uma dica, para melhor desempenho da sua rede em relao ao servidor de nomes (DNS)

; sempre usar os hosts mais baixos da sua rede para serem as mquinas com maior requisio

; ou seja, os servidores. E se houver alguma mquina que seja servidor, e o host (IP) dela seja

; superior a o de um host menos importante, ento indique ela antes nas suas entradas DNS.

; Depois voc indica os outros clientes (hosts) menos acessados.

eeviacbsd IN A 200.230.200.10

- 30 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

; Nesse caso escolhemos o primeiros host de nossa rede (200.230.200.1) para ser o nosso

; servidor de rotas, ou seja o nosso roteador, por isso o nome "rt" O Segundo IP/host o

; nosso Autenticador Remoto (RAS) por isso o nome "ras" (IP 200.230.200.2). O RAS o

; autenticador/atendedor das nossas conexes remotas, ou seja o servidor responsvel

; pelas conexes dial-up (PPP/SLIP), caso existam na nossa

; rede/domnio/zona, caso sejamos um

; provedor de acesso INTERNET. Essa terceira entrada, no a do host 3, mas sim a do

; host 10 da nossa rede (200.230.200.10) e referenciada agora, porque o nosso servidor

; principal, onde est rodando, entre outras coisas importantes, esse servidor de nomes aqui.

; A entrada diz que o host com nome "eeviacbsd" uma entrada (IN) para o endereo IP

; quaternrio (A) referente 200.230.200.10

smtp IN A 200.230.200.10

; Essa entrada diz que a mquina com nome de smtp (que foi referenciada l em cima)

; a entrada quaternrio para o IP 200.230.200.10, e voc vai perguntar, se pode

; existir duas referncias de nomes distintos mesma mquina... a resposta que

; pode, mas no o indicado, ou no o ideal. Para esse tipo de ao, prover

; um apelido (alias) para uma mquina, existe a entrada de nomes cannicos, os

; Canonical Names, os chamados CNAMEs.

*smtp IN CNAME eeviacbsd.eeviac.com.br

; Agora estamos vendo o que seria a forma ideal de se prover aquela entrada acima.

; Por isso em cor vermelha, em Itlico e com asterisco (*) antes da entrada. Essa entrada

; no deveria existir no nosso arquivo, porque existe a de cima. Ela est aqui por motivos

; didticos, portanto quando voc for fazer o seu DNS, escolha por apenas uma forma de

; atribuir outro nome mesma mquina. A Sintaxe dos nomes cannicos , o nome referente

; entrada de nome cannico referente ao nome da mquina verdadeira, ou seja, de quem

; aquele nome ser um apelido. Podemos apontar uma mquina fora de nossa rede, podemos

; usar apenas o nome do host, ou tambm o nome do host + domnio ou zona.

pop3 IN A 200.230.200.10

*pop3 IN CNAME eeviacbsd

; Essas duas linhas acima fazem de novo as referncias que eu acabei de comentar, lembrando

; que o ideal a Segunda entrada. Escolha uma delas e substitua pela outra, deixando apenas uma

2009 Alfamidia Prow LTDA. - 31


DNS e Correio Eletrnico

; no seu DNS, e detalhe na sintaxe, agora aponta apenas para o nome do host (eeviacbsd) e no

; mas o host+dominio como antes. Ambos esto perfeitos.

ftp IN A 200.230.200.10

*ftp IN CNAME wwwfserv.eeviac.com.br

www IN A 200.230.200.10

*www IN CNAME wwwfserv

; Mais dois exemplos para garantir que voc entendeu esse conceito de nomes

; distintos para a mesma mquina. Vamos supor que voc tenha uma outra mquina, que seja

; servidor de arquivos e de pginas html. Claro que voc vai ter que indicar o nome dela at

; o final dessa configurao, e o nome dela na nossa hiptese wwwfserv, portanto, estando

; sob sua autoridade (SOA) ela a mquina wwwfserv.eeviac.com.br. Ela na verdade ser sempre

; invocada quando suas pginas Internet sero chamadas, ou quando algum for se conectar

; via FTP nela, ento voc cria os apelidos www e ftp para a sua wwwfserv, ou seja, agora sempre

; que o endereo de nome www.eeviac.com.br ou ftp.eeviac.com.br for chamado, a mesma

; mquina ser invocada. Isso explica muito da Internet atual.

host3 IN A 200.230.200.3

; Bom, agora sim voc continua dando seus nomes suas mquinas. O Nome que voc

; quiser, por isso os exemplos abaixo no seguem um padro. Para demonstrar que pode ser

; o nome que voc bem entender. Claro que deve-se considerar uma opo de organizao

; Se outros servidores existissem, como o nosso exemplo wwwfserv, o nome teria que ser

; configurado, claro...

maq4 IN A 200.230.200.4

; Agora em todas essas entradas estamos admitindo que seja de simples hosts da

; sua rede ou zona.

maq5 IN A 200.230.200.5

; Configure todos os nomes, at o final da sua rede.

host6 IN A 200.230.200.6

; Se por exemplo a mquina 6 fosse do presidente da sua empresa, ela poderia Ter

; o nome de presidente, para ser a mquina presidente.eeviac.com.br no seu DNS...

ma7 IN A 200.230.200.7

; Faa como quiser, da melhor forma para a organizao e agilidade da sua empresa, escola,

- 32 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

; provedor internet...

eeviac8 IN A 200.230.200.8

; Lembrando-se sempre da sintaxe: nome IN A ENDEREO

xffa IN A 200.230.200.9

; e que o nome ser sempre sob a sua zona (SOA), ou seja, no prximo caso...

corduroy IN A 200.230.200.11

; ...o nome completo do host 11 corduroy.eeviac.com.br lembra-se?

eev12 IN A 200.230.200.12

eevbr13 IN A 200.230.200.13

Agora o nosso servidor de nomes j est quase perfeito. Ele j pode responder com
total autoridade pelos nomes dos hosts da nossa zona (domnio/rede) e ao fazermos uma
consulta ao nosso servidor de nomes, ele pode identificar e servir informaes que permita
qualquer outra mquina ou rede na internet identificar o endereo IP dos nomes dos nossos
hosts. Sendo assim, se algum quiser saber qual o endereo IP por exemplo, da mquina
xffa.eeviac.com.br assim que o nosso servidor de nomes for interrogado, ento a resposta
(200.230.200.9) ser imediatamente exibida. Estamos quase prontos...

/usr/named/db.200.230.200

Agora vamos tratar da ltima entrada no nosso arquivo de configurao do servidor


de nomes, o named.conf. Na ltima entrada do named.conf ele faz referncia a uma zona,
que varia de 0 a 63, da rede 200.230.200, indicando uma entrada de endereo arpa, e
depois indica que essa zona do tipo master, ou seja, de onde temos autoridade, e indica
o arquivo db.200.230.200 como sendo a base de dados (data base) das informaes que o
servidor de nomes dever adotar.

Na verdade essa entrada no named.conf (63-0.200.230.200.in-addr.arpa) indica


uma zona reversa. E o arquivo de base de dados contm informaes reversas sobre essa
zona. Pode-se reparar que a zona em questo, no named.conf eeviac.com.br ou seja,
agora estaremos tratando com o endereo reverso de todos os hosts de nossa
rede/zona/domnio.

E qual a importncia de mantermos informaes sobre as zonas reversas no nosso


servidor de nomes? Muita! As informaes referentes as zonas reversas permite que se
localize o nome de uma mquina (um host na rede) sabendo apenas o endereo IP do
mesmo. Ou seja, no arquivo de zonas, o db.eeviac, ns ensinamos o nosso servidor de
nomes a indicar um endereo IP a partir de um nome, e agora ensinaremos a indicar o
nome a partir do endereo IP, essa a ao reversa que dever ser respondida sempre
que o nosso servidor de nomes for perguntado.

O Arquivo de zona reversa em um servidor de nomes lembra muito o de definies


de zona (o db.eeviac ) e se difere na adio das interfaces dos hosts. Voc se lembra que
para definir os nomes, ns obtnhamos o nome e adicionava-mos uma entrada (IN) do tipo
quaternaria (A) ao endereo IP referente ao nome da mquina (host). Agora ns faremos a
funo reversa, ou seja, a partir do host da nossa rede (no nosso caso: 0 at 63 porque

2009 Alfamidia Prow LTDA. - 33


DNS e Correio Eletrnico

nossa rede abrange esses hosts apenas) deveremos permitir que o nosso servidor de
nome identifique o nome da mquina.

Vamos dar uma olhada no formato que esse arquivo deve ter:
$TTL 14400
@ IN SOA eeviac.com.br. root.eeviac.com.br. (
2000041003 ; serial
28800 ; refresh
14400 ; retry
3600000 ; expire
86400 ; default_ttl
)
@ IN NS eeviacbsd.eeviac.com.br.
@ IN NS ns.embratel.net.br.
1 IN PTR rt.eeviac.com.br.
2 IN PTR ras.eeviac.com.br.
10 IN PTR eeviacbsd.eeviac.com.br.
10 IN PTR pop3.eeviac.com.br.
10 IN PTR smtp.eeviac.com.br.
10 IN PTR ftp.eeviac.com.br.
10 IN PTR www.eeviac.com.br.
9 IN PTR xffa.eeviac.com.br.
3 IN PTR eev3.eeviac.com.br.
4 IN PTR eev4.eeviac.com.br.
5 IN PTR eev5.eeviac.com.br.
6 IN PTR eev6.eeviac.com.br.
7 IN PTR eev7.eeviac.com.br.
8 IN PTR eev8.eeviac.com.br.
11 IN PTR freebsd.eeviac.com.br.
12 IN PTR eev12.eeviac.com.br.
13 IN PTR eev13.eeviac.com.br.
14 IN PTR eev14.eeviac.com.br.
15 IN PTR eev15.eeviac.com.br.
16 IN PTR eev16.eeviac.com.br.
17 IN PTR eev17.eeviac.com.br.
18 IN PTR eev18.eeviac.com.br.
19 IN PTR eev19.eeviac.com.br.

Bom, sem contar todo o incio do arquivo, a descriminao da zona de autoridade


(SOA), voc deve ter reparado duas particularidades, a primeira, o final dos endereos
descritos estarem com um ponto final, ou seja, declarando que um domnio absoluto, e
outra coisa, que voc com certeza reparou, se se lembra da nossa tabela de RRs
(Resource Records), que o uso de ponteiros (PTR). J comentamos que para tratarmos
de dados reversos, usaremos os ponteiros. Voc percebe que agora, apenas os hosts da
nossa rede esto descriminados. Para evitar um arquivo de exemplo muito grande, ns
terminamos o arquivo no host 19, mas ele deve continuar at o 62 (uma vez que o IP 63 o
broadcast da rede) ou at o penltimo host da sua rede, seja ela do tamanho que for.

A descrio dos endereos IPs podem ser completos, mas no tem porque conter a
rede, se no named.conf ns declaramos que trataremos da rede 200.230.200.in-addr.arpa,
o servidor de nomes j sabe exatamente de que rede estamos tratando. Agora a ao
reversa indica para o nosso servidor de nomes que, para o cliente (host) nmero X da
nossa rede, ns estamos adicionando uma entrada (IN) que aponta (PTR) para o nome da
mquina. Vamos analisar com mais detalhes ento esse arquivo:

- 34 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

$TTL 14400
@ IN SOA eeviac.com.br. root.eeviac.com.br. (
2000041003 ; serial
28800 ; refresh
14400 ; retry
3600000 ; expire
86400 ; default_ttl
)

; at aqui a entrada absolutamente familiar, ou seja, voc

; j consegue entender cada entrada e sua funo.

@ IN NS eeviacbsd.eeviac.com.br.

@ IN NS ns.embratel.net.br.

; at aqui tambm, nenhuma novidade, esses so as entradas para os

; dois servidores de nomes que estaremos alimentando com nossos dados

; reversos. Alimentando e nos servindo tambm.

1 IN PTR rt.eeviac.com.br.

2 IN PTR ras.eeviac.com.br.

; agora sim, estamos tratando as entradas reversas do roteador (rt)

; e do autenticador/atendedor da nossa rede (ras). Ateno na forma

; como o nome + domnio/zona so tratados, com um ponto final depois

; do .br, voc deve se lembrar disso ao criar o seu db reverso.

10 IN PTR eeviacbsd.eeviac.com.br.

10 IN PTR pop3.eeviac.com.br.

10 IN PTR smtp.eeviac.com.br.

10 IN PTR ftp.eeviac.com.br.

10 IN PTR www.eeviac.com.br.

; agora, como o nosso host 200.230.200.10 na verdade

; o servidor principal da nossa rede/zona, ento adicionamos

; uma entrada reversa para cada nome que ele deve responder.

; Isso opcional e na maioria dos casos adiciona-se apenas a entrada

; reversa do nome verdadeiro do servidor, ou seja, eeviacbsd.eeviac.om.br

9 IN PTR xffa.eeviac.com.br.

; e essa a entrada reversa para o nosso servidor secundrio.

3 IN PTR eev3.eeviac.com.br.

2009 Alfamidia Prow LTDA. - 35


DNS e Correio Eletrnico

4 IN PTR eev4.eeviac.com.br.

5 IN PTR eev5.eeviac.com.br.

6 IN PTR eev6.eeviac.com.br.

7 IN PTR eev7.eeviac.com.br.

8 IN PTR eev8.eeviac.com.br.

11 IN PTR corduroy.eeviac.com.br.

; e assim segue, repare que agora inserimos os dados reversos

; para o nosso segundo servidor secundrio...

12 IN PTR eev12.eeviac.com.br.

13 IN PTR eev13.eeviac.com.br.

14 IN PTR eev14.eeviac.com.br.

15 IN PTR eev15.eeviac.com.br.

16 IN PTR eev16.eeviac.com.br.

17 IN PTR eev17.eeviac.com.br.

18 IN PTR eev18.eeviac.com.br.

19 IN PTR eev19.eeviac.com.br.

; e assim voc deve continuar com todos os hosts da sua rede,

; sempre adicionando um ponteiro para apontar o IP para o

; nome certo da mquina. Lembre-se sempre da sintaxe:

; a entrada do IP do host/mquina indicando uma entrada (IN)

; de um ponteiro (PTR) que aponta ao nome da mquina que

; corresponde a aquele IP. No se esquea do ponto final

; no nome completo da mquina. isso a! Eis o seu Reverso!

- 36 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

Iniciando o DNS
Bom, agora que voc j tem todos os arquivos que compe a configurao do seu
servidor de nomes prontos, ento hora de iniciar o seu servidor de nomes, e cuidar para
que ele se inicie sempre que necessrio, junto ao sistema operacional, e com os
parmetros corretos.

Lembre-se que no incio desse captulo, vimos que podemos mudar o local dos
diretrios onde os arquivos de base de dados e configurao do servidor de nomes fica, por
segurana. Bom, vamos lembrar de um detalhe... pra rodar o servidor de nomes, o usurio
deve ser algum com um pouco mais de direitos no sistema, e isso no bom. O Usurio
BIND tem alguns privilgios que podem ser perigosos, se algum mal intencionado puder
usufruir deles de alguma forma.

Felizmente, no nada fcil se tornar o usurio que roda seu servidor de nomes, e
o que pode ser feito, as vezes (bem raramente...) algum ser muito esperto conseguir
executar comandos arbitrrios no seu sistema, com os direitos do root. Poucos comandos
podem ser executados, e o suposto invasor faz isso quase que s escuras, mas quando se
tem um pouco mais de liberdade, um terceiro pode at abrir uma shell no seu servidor, a
estamos totalmente merc.

E como essa forma de exploitar um servidor BIND mesmo quase sempre as


escuras, com comandos lanados s cegas, ento, claro que se o invasor conhea
menos do seu sistema, ento melhor, porque ele no fica "adivinhando" onde voc roda os
seus arquivos, e/ou onde o BIND tem esses direitos a mais. Direcionando um diretrio
exclusivo aos arquivos do BIND, voc pode usar de formas administrativas no linux para
no permitir que alguns tipos de aes sejam feitas, ou executadas a partir daquele
usurio. Liberar direitos direcionados uma forma de prevenir problemas com
espertinhos que queiram brincar com seu sistema. Claro que estamos tratando aqui de
situaes raras, mas, recentemente uma das verses mais distribudas do BIND teve um
probleminha, e se tornou alvo desses tipos de exploits. Esse problema foi o bastante para
tirar do ar alguns dos servidores mais bem administrados do mundo, inclusive 3 Root
Nameservers ao mesmo tempo.

A forma mais segura de se garantir uma despreocupao, em relao segurana,


rodar o BIND enjaulado, ou seja no modo CHRoot enviroment. Enjaular algo bem
usual no BSD e est se tornando usual em outros Unix e Linux. Imagine que o BIND seja
um usurio apenas com acesso ao seu ROOT DIRECTORY, e mesmo com direitos a mais,
ele entendesse sempre que est no ponto mais alto do sistema de arquivos, o "/" mesmo
no estando. Ento ele realmente teria todos os direitos do mundo, mas apenas daquele
diretrio pra baixo, no podendo nem ver os outros diretrios do sistema.

Agora sim, o seu servidor de nomes est prontinho pra rodar. Para testar, voc pode
digitar:

# /etc/init.d/named start

2009 Alfamidia Prow LTDA. - 37


DNS e Correio Eletrnico

NSLOOKUP

Para ter certeza que o seu servidor de nomes esta funcionando da forma correta,
voc pode usar uma ferramenta muito boa. Essa ferramenta se chama nslookup e usada
para interrogar servidores de nomes. Ela distribuda juntamente com o software BIND, e
faz parte das interfaces cliente do servio de nomes.

Ela permite a qualquer usurio consultar um servidor de nomes e recuperar


qualquer informao conhecida por este servidor. extremamente til para identificar
problemas com servidores de nomes, se esto configurados corretamente e tambm para
obter informaes fornecidas por servidores remotos.

Para garantir que voc estar usando o seu prprio servidor de nomes para se
comunicar com outros servidores, ento configure o seu resolver para procurar apenas no
seu prprio servidor de nomes. Edite o seu arquivo /etc/resolv.conf e certifique-se que
existam as entradas DOMAIN, SEARCH, e NAMESERVER configuradas, e que a entrada
NAMESERVER aponte para o seu endereo IP, ou seja, faa com que o seu servidor de
nomes seja voc mesmo. Garanta que no exista outra entrada NAMESERVER, assim, no
existindo um servidor de nomes secundrio configurado, voc garante que, se tudo der
certo mesmo porque o seu servidor de nomes esta perfeito.
Para editar o /etc/resolv.conf use um editor, como o vi:

# vi /etc/resolv.conf
e adicione:

domain seudominio.com.br
search seudominio.com.br
nameserver IP do SEU SERVIDOR DE NOMES

no nosso exemplo, voc adicionaria:

domain eeviac.com.br
search eeviac.com.br
nameserver 200.230.200.10

Agora sim, voc est pronto para usar o NSLOOKUP para testar o seu servidor de
nomes.

Digite "nslookup" e a sada, se tudo ser certo, deve ser parecida com:

# nslookup
Default Server: eeviacbsd.eeviac.com.br
Address: 200.230.200.10
>

Se no der certo, aparecer uma mensagem parecida com:


*** Couldnt resolve for localhost
*** Couldnt find a nameserver at 200.230.200.10

Ento reveja os seus arquivos de configurao do named. Uma dica , se no


funcionar na sua interface externa de rede (no nosso caso 200.230.200.10) tente colocar

- 38 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

nameserver 127.0.0.1 no seu /etc/resolv.conf. Se dessa vez funcionar, ento estamos


diante de um problema no muito comum. Para garantir que seja esse o problema,
certifique-se que o seu servidor de nomes esteja ouvindo na interface externa. Para isso, a
sada do comando netstat -an | grep -i list deve apontar o seu IP real (interface externa)
ouvindo na porta 53.

Outra forma de certificar isso, dar telnet na porta 53 da interface externa. (telnet
200.230.200.10 53 - no nosso exemplo). Se a conexo se estabelecer e o nslookup no
funcionar na interface externa, ento o nosso problema raro.

Isso acontece quando o seu reverso no esta configurado corretamente. Se seu


reverso no funcionar da forma certa, o BIND, por segurana, no responde a query
nenhuma feita na interface externa, apenas no loopback. Mesmo ouvindo na interface ele
simplesmente no responde. Esse problema com o reverso pode ser a entrada
xxx.xxx.xxx.in-addr.arpa no seu /etc/named.conf . Se voc est usando BIND acima do
8.2.4 tente no colocar a zona de abrangncia (xxx-xxx) no seu named.conf

Se assim tambm no funcionar, reveja seus arquivos e reveja os exemplos dessa


documentao porque voc deve ter configurado alguma informao imprecisa.

Mas se der certo, voc pode ter certeza que o seu servido de nomes est se
comunicando com os outros servidores de nomes do mundo, da seguinte forma: ao digitar
"nslookup", a sada da resposta ser uma prompt com um sinal de maior (>):
# nslookup
Default Server: eeviacbsd.eeviac.com.br
Address: 200.230.200.10
>

Ento nessa prompt digite o nome de vrios domnios, e tambm os endereos IP, para
testar os reversos. As sadas devem ser algo parecido com:
# nslookup
Default Server: eeviacbsd.eeviac.com.br
Address: 200.230.200.10
> www.fatectq.com.br

Default Server: eeviacbsd.eeviac.com.br


Address: 200.230.200.10

Non-authoritative answer:
Name: www.fatectq.com.br
Address: 200.210.2.10

> www.vitalogy.org
Default Server: eeviacbsd.eeviac.com.br
Address: 200.230.200.10

Non-authoritative answer:
Name: www.vitalogy.org
Address: XXX.XXX.XXX.XXX

> 200.230.200.11
Default Server: eeviacbsd.eeviac.com.br
Address: 200.230.200.10

Non-authoritative answer:
2009 Alfamidia Prow LTDA. - 39
DNS e Correio Eletrnico

Address: 200.230.200.11
Name: corduroy.eeviac.com.br

Opes do NSLOOKUP

O nslookup tem uma srie de opes de uso, para aprender como usa-las, digite set
all na prompt
>

# nslookup
Default Server: maquina1.eksffa.net
Address: 143.106.10.11
>set all

Default Server: maquina1.eksffa.net


Address: 143.106.10.11
Set options:
nodebug defname search recurse
nod2 novc noignoretc port=53
querytype=A class=IN timeout=6 retry=4
root=ns.nic.ddn.mil.
domain=eksffa.net
srchlist=maquina1.eksffa.net/eksffa.net
>

Veja agora uma peque lista das opes mais comuns do NSLOOPUP e sua descrio:

[no]debug Debugging desativado por default. Se ativado, o servidor de nomes exibe


informaes como timeout e exibe o pacote de resposta.

[no]defname Por default, o comando nslookup acrescenta o nome do domnio default a


nomes que no possuem um "." no final.

[no]search A opo search encobre o domnio default (opo defname). Ou seja, a opo
defname somente se aplica se a opo search est desligada. O comando nslookup
acrescenta os nomes dos domnios listados na lista de procura (srchlist) a nomes que no
terminam em "."

[no]recurse o programa nslookup solicita servio recursivo por default.

[no]d2 O debug no nvel 2 desativado por default. Se ativado, so exibidos os pacotes


enviados em adio sada do debug.

[no]vc Por default, o comando nslookup utiliza pacotes UDP ao invs de TCP (circuitos
virtuais ou virtual circuits - vc). A maior parte das perguntas (queries) so feitas utilizando
UDP. Da mesma forma que o resolver pode ser instrudo a utilizar TCP, o nslookup tambm
oferece a mesma funcionalidade.

[no]ignoretc Por default, o nslookup no ignora pacotes truncados. Se recebido um


pacote que possui o bit indicativo de pacote truncado ligado, indicando que o servidor de
nomes no conseguiu incluir toda a informao dentro de um pacote UDP, o nslookup no
o ignora. repetida a pergunta utilizando-se uma conexo TCP ao invs de UDP.

port=53 O servio DNS atende na porta 53. O DNS pode ser inicializado em outra porta
para fins de debug e o nslookup pode ser direcionado a utilizar esta nova porta.

- 40 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

querytype=A Por default, o nslookup tenta resolver endereos,registros do tipo A


(address).

class=IN A nica classe que importa IN (Internet). Existem outras classes como por
exemplo HESIOD (HS).

Timeout=5 Se o servidor de nomes no responder em 5 segundos, o nslookup reenvia a


pergunta e dobra o timeout (para 10, 20 e 40 segundos). O resolver do BIND utiliza os
mesmos timeouts ao interrogar um nico nameserver.

Retry=4 Envia a pergunta 4 vezes antes de desistir. Aps cada pergunta o timeout
dobrado.

root=ns.nic.ddn.mil Existe uma facilidade chamada root que chaveia o servidor de nomes
para o servidor identificado por esta opo.

Domain= Este o domnio default acrescido ao nome fornecido caso a opo defname
esteja ligada.

Srchlist= Se a opo search estiver ativa, estes so os domnios acrescidos a nomes que
no se encerrem em "."

Exemplos de utilizao do NSLOOKUP

% nslookup
Default Server: maquina1.eksffa.net
Address: 143.106.10.11
> acme.com
Server: maquina1.eksffa.net
Address: 143.106.10.11
Name: acme.com
Address: 206.86.3.110
> set type=ptr

> 206.86.3.110
Server: maquina1.eksffa.net

Address: 143.106.10.11

110.3.86.206.in-addr.arpa host name = jef.vip.best.com

3.86.206.IN-ADDR.ARPA nameserver = ns1.best.com

3.86.206.IN-ADDR.ARPA nameserver = ns2.best.com

3.86.206.IN-ADDR.ARPA nameserver = ns3.best.com

ns1.best.com inet address = 206.86.8.69

ns2.best.com inet address = 206.86.0.21

ns3.best.com inet address = 204.156.128.1

2009 Alfamidia Prow LTDA. - 41


DNS e Correio Eletrnico

> set_ _q=mx

> acme.com

Server: maquina1.eksffa.net

Address: 143.106.10.11

acme.com preference = 20, mail exchanger = mail3.best.com

acme.com preference = 20, mail exchanger = mail4.best.com

acme.com preference = 10, mail exchanger = mail1.best.com

acme.com preference = 10, mail exchanger = mail2.best.com

acme.com nameserver = ns.best.com

mail3.best.com inet address = 206.86.0.21

mail4.best.com inet address = 206.86.8.69

mail1.best.com inet address = 206.86.8.14

mail2.best.com inet address = 206.86.8.14

ns.best.com inet address = 206.86.8.69

> set q=any

> acme.com

Server: maquina1.eksffa.net

Address: 143.106.10.11

Non-authoritative answer:

acme.com nameserver = NS.BEST.COM

acme.com nameserver = NS2.BEST.COM

acme.com nameserver = NS3.BEST.COM

acme.com inet address = 206.86.3.110

acme.com preference = 20, mail exchanger = mail3.best.com

acme.com preference = 20, mail exchanger = mail4.best.com

acme.com preference = 10, mail exchanger = mail1.best.com

acme.com preference = 10, mail exchanger = mail2.best.com

Authoritative answers can be found from:

acme.COM nameserver = NS.BEST.COM

acme.COM nameserver = NS2.BEST.COM

acme.COM nameserver = NS3.BEST.COM

- 42 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

NS.BEST.COM inet address = 204.156.128.1

NS.BEST.COM inet address = 206.86.8.69

NS2.BEST.COM inet address = 206.86.0.21

NS3.BEST.COM inet address = 204.156.128.20

NS3.BEST.COM inet address = 204.156.128.1

mail3.best.com inet address = 206.86.0.21

mail4.best.com inet address = 206.86.8.69

mail1.best.com inet address = 206.86.8.14

mail2.best.com inet address = 206.86.8.14

> set q=soa

> acme.com

Server: maquina1.eksffa.net

Address: 143.106.10.11

acme.com origin = ns.best.com

mail addr = root.best.com

serial=5, refresh=43200, retry=600, expire=604800, min=259200

>

Respostas Oficiais e No Oficiais

% nslookup

Default Server: xffa.eksffa.net

Address: 143.106.10.54

mit.edu

Server: xffa.eksffa.net
Address: 143.106.10.54

Name: mit.edu
Address: 18.72.2.1

> mit.edu
Server: xffa.eksffa.net
Address: 143.106.10.54

Non-authoritative answer:
Name: mit.edu
Address: 18.72.2.1

2009 Alfamidia Prow LTDA. - 43


DNS e Correio Eletrnico

>

Opes norec /nosearch

O nslookup pode se comportar tanto como um resolver ou como um servidor de


nomes.

Quando um servidor de nomes recebe um pedido, ele verifica se possui a


informao em seu cache. Se no pode responder, e a autoridade para o domnio, o
servidor responde informando que o nome no existe ou que no existem dados
disponveis para aquele tipo de pergunta. Se o servidor no possui a resposta e no o
servidor oficial para aquele domnio, ele comea a andar atravs da hierarquia do espao
global de nomes buscando pela informao.

Se um servidor recebe uma pergunta no recursiva, ele responde ao cliente


fornecendo os registros NS que encontrou. Por outro lado, se a pergunta for recursiva, o
servidor encaminha perguntas aos servidores obtidos a partir dos registros NS que
encontrar. Quando o servidor recebe uma resposta de um dos servidores remotos, ele
coloca a informao no cache e repete o processo, se necessrio. A resposta do servidor
remoto ir ou responder a pergunta original ou conter uma lista de servidores mais
embaixo na hierarquia do espao de informaes do DNS que esteja mais prxima da
resposta.
% nslookup -norec -nosearch

Default Server: localhost

Address: 127.0.0.1

> server ns.nasa.gov

Default Server: ns.nasa.gov

Served by:

- E.ROOT-SERVERS.NET

192.203.230.10

NASA.GOV

- NS.GSFC.NASA.GOV

128.183.10.134

NASA.GOV

- JPL-MIL.JPL.NASA.GOV

128.149.1.101

NASA.GOV

- MX.NSI.NASA.GOV

128.102.18.31

- 44 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

NASA.GOV

> acme.com

Server: ns.nasa.gov

Served by:

- E.ROOT-SERVERS.NET

192.203.230.10

NASA.GOV

- NS.GSFC.NASA.GOV

128.183.10.134

NASA.GOV

- JPL-MIL.JPL.NASA.GOV

128.149.1.101

NASA.GOV

- MX.NSI.NASA.GOV

128.102.18.31

NASA.GOV

Name: acme.com

Served by:

- NS.BEST.COM

204.156.128.1

acme.com

- NS2.BEST.COM

206.86.0.21

acme.com

- NS3.BEST.COM

204.156.128.20

acme.com

> server ns.best.com

Default Server: ns.best.com

Address: 204.156.128.1

> acme.com

2009 Alfamidia Prow LTDA. - 45


DNS e Correio Eletrnico

Server: ns.best.com

Address: 204.156.128.1

Name: acme.com

Address: 206.86.3.110

Transferncia de Zonas

O comando nslookup pode tambm ser utilizado para transferir uma zone inteira
utilizando-se o comando ls. Esta facilidade pode ser utilizada para resoluo de problemas,
realizar contagem do nmero de hosts em determinado domnio, etc.
% nslookup

Default Server: maquina1.eksffa.net

Address: 143.106.10.11

> ls ad.eksffa.net

[maquina1.eksffa.net]

ad.eksffa.net. 143.106.10.2

ad.eksffa.net. server = ns.ca.eksffa.net

ns.ca.eksffa.net. 143.106.32.65

ns.ca.eksffa.net. 143.106.32.129

ad.eksffa.net. server = maquina1.eksffa.net

maquina1.eksffa.net. 143.106.10.11

maquina1.eksffa.net. 143.106.1.5

localhost 127.0.0.1

ftp 143.106.32.67

mail 143.106.32.65

www 143.106.32.126

> ls -t mx cenapad.eksffa.net

[maquina1.eksffa.net]

ad.eksffa.net. 0 ns.ca.eksffa.net

ad.eksffa.net. 5 maquina1.eksffa.net

ftp 0 ns.ca.eksffa.net

ftp 5 maquina1.eksffa.net

mail 0 ns.ca.eksffa.net
- 46 2009 Alfamidia Prow LTDA.
DNS e Correio Eletrnico

mail 5 maquina1.eksffa.net

www 0 ns.ca.eksffa.net

www 5 maquina1.eksffa.net

> ls -t dcc.eksffa.net > /tmp/dcc.zone

[maquina1.eksffa.net]

########

Received 413 records.

view /tmp/dcc.zone

2009 Alfamidia Prow LTDA. - 47


DNS e Correio Eletrnico

Sinais operacionais do BIND

O BIND name server, manipulado atravs de sinais. A tabela abaixo lista os sinais
suportados pelo BIND e uma descrio resumida de sua funo:

HUP - Reinicializa o servidor de nomes. Envie este sinal ao servidor primrio aps modificar
o arquivo de boot (/etc/named.conf) ou qualquer dos arquivos de seu banco de dados. O
comando named.reload tambm pode ser usado.

INT - Efetua um dump do banco de dados interno do servidor de nomes no arquivo


/usr/tmp/named_dump.db

ABRT - Acrescenta estatsticas do servidor de nomes ao arquivo /usr/tmp/named.stats.


Este sinal chamado de IOT em alguns sistemas

USR1 - Acrescenta informaes de debug ao arquivo /usr/tmp/named.run. Cada sinal


subseqente do mesmo tipo aumenta o nvel de detalhe registrado.
USR2 - Desabilita o debugging

Mais informaes importantes sobre SERVIDORES DE NOMES

Esse sub-captulo pode ser entendido como um bnus do nosso captulo sobre
DNS. Acontece que, esse servio de nomes um dos mais nobres, seno o mais nobre
servio realizado por um servidor na Internet. Pode-se com isso at mesmo configurar um
servidor para ter autoridade sobre outros domnios/zonas que no sejam de uma rede ou
mquina privada.

Por ser um servio to importante e to usual na Internet e em redes em geral,


vamos obter e analisar algumas outras informaes e vamos ver situaes comuns para
administradores de redes e sistemas de informao via Internet.

EsteGlue Records

Estes registros aparecem do lado direito da definio de um servidor de nomes:


itd.umich.edu. IN NS dns2.itd.umich.edu.
dns2.itd.umich.edu. IN A 141.211.164.3

O segundo registro uma "cola" para o registro NS anterior.

Registros "cola" so necessrios quando se delega autoridade para um servidor de


nomes que reside dentro do domnio delegado.

Desta forma, no exemplo acima, o servidor de nomes dns2.itd.umich.edu precisa


possuir uma entrada com seu endereo no servidor que est delegando autoridade, pois
reside dentro do domnio itd.umich.edu. Caso contrrio, como seriam encontradas as
informaes relativas ao domnio itd.umich.edu se o prprio servidor est dentro deste
domnio? J neste caso:

- 48 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

itd.umich.edu. IN NS dns.cs.wisc.edu.

No existe a necessidade de um registro "cola"

Lame Delegation

Server *** was (ou IS) a lame server

Essa linha bem comum hoje nos logs dos nossos servios de nomes. Saiba que
Lame delegation ocorre quando, por exemplo, o servidor de nomes X considerado fonte
oficial de informaes para o domnio Y. Ao se perguntar ao servidor X sobre o domnio Y
so retornadas informaes no oficiais, ou o servidor X no sabe nada sobre o domnio Y.

Para identificar servidores de nomes nesta condio, utilize o programa nslookup


(ou similar) para interrogar os servidores de nomes um nvel acima do servidor suspeito.
Obtenha a lista dos servidores para o domnio desejado e por sua vez questione cada um
dos servidores obtidos e verifique se retornam informaes oficiais.

Resoluo de Problemas (uma pequena CheckList)

A maior parte dos problemas relativos ao DNS geralmente se enquadram em


categorias bastante comuns e podem ser resolvidos de modo razoavelmente simples. So
eles (no agrupados em ordem de importncia ou de ocorrncia):

No alterar o nmero de srie dos mapas


No sinalizar ao named que algum mapa foi mudado
Servidores secundrios no conseguem carregar os dados da zona
Criar a entrada de uma mquina no mapa direto e no fazer o mesmo para o mapa reverso
Erro de sintaxe no arquivo de boot ou nos mapas do DNS
No colocao do "." no final de um nome
Informaes ausentes no mapa do cache (named.ca)
Falta de conectividade rede
Delegao incorreta para subdomnios
Delegao de autoridade no efetivada
Erro de sintaxe no arquivo /etc/resolv.conf
Nome do domnio default no definido
Problema na sintaxe do named.conf
M configurao da zona reversa

Ferramentas de Gerenciamento

- Diagnsticos Bsicos

nslookup uma ferramenta para interrogar servidores de nomes

dig mais abrangente que nslookup, usado por diversas outras ferramentas.

host desenvolvido como uma evoluo das ferramentas nslookup e dig.


2009 Alfamidia Prow LTDA. - 49
DNS e Correio Eletrnico

Rodando o BIND em Ambiente Enjaulado (chroot()


enviroment)

Uma viso do ambiente Enjaulado.

Esse subcaptulo desse documento aborda uma das mais importantes e indicadas
precaues de segurana que se pode tomar em relao ao software BIND. Vamos
demonstrar aqui, de forma clara e prtica, todo o procedimento para colocar o BIND sendo
executado em ambiente Enjaulado. O Termo CHRoot significa Modificar a Raiz (CHange
Root). A analogia simples, o ambiente unix segue uma estrutura de arquivos em rvores
hierrquicas, onde o nvel mais baixo (raiz), representada nesse ambiente pelo "/" pode (de
acordo com as permisses do sistema) obter acesso todos os nveis mais altos da
estrutura de arquivos do computador, portanto, todo o sistema local. Esse conceito bsico
de ambiente Unix, portanto, pode ser modificado, criando assim um ambiente virtual da
estrutura raiz.

No Linux, voc pode implementar um sistema de priso para um ambiente com o


diretrio raiz modificado. Voc pode at rodar um sistema operacional dentro de outro, em
ambiente de raiz modificada. A esse procedimento, damos o nome de "CHroot Jail".
Quando um sistema ou processo executado em um ambiente desse tipo, o seu diretrio
modificado passa a ser o seu diretrio raiz, e, consequentemente, ele s passa a enchergar
a estrutura de diretrios existente acima do seu ambiente 'chrootado', ou enjaulado.

Voc provavelmente j teve ao menos um tipo de experincia com esse ambiente.


Sempre que voc faz acesso FTP como cliente, em algum servidor pblico, como usurio
annimo, ou mesmo com outro usurio vlido, em um servidor que tenha algum nvel de
segurana, voc percebe que apenas encherga a estrutura de diretrios criadas a partir do
seu prprio diretrio HOME, e consequentemente, s encherga o que voc precisa, ou
criou. Se deslocar para um nvel mais baixo na rvore do sistema impossvel,
simplesmente porque aquele o nvel mais baixo pra voc. Voc passa a enchergar o seu
'/usr/home/user' como o seu diretrio '/'.

A Segurana por trs da idia.

Rodar o BIND como processo e usurio aprisionados em um ambiente enjaulado,


tem por finalidade diminuir considervelmente os riscos de acesso indevido de alguma
pessoa m intencionada. O BIND, historicamente apresenta relatos de vrias exploraes
de seus servios. Esse tipo de abuso j tirou do ar vrios sites grandes e servidores
importantes da Internet, e essa uma das melhores e mais eficientes formas de se limitar
esses abusos.

por esse mesmo motivo que ns executamos o BIND como usurio no


privilegiado, como visto anteriormente, lembre-se que, manter o seu BIND o mais atualizado
possvel to importante quanto essas medidas de segurana, visto que todos os
problemas quando descobertos, so rapidamente corrigidos. Utilizar um BIND inferior

- 50 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

verso 9 desaconselhado, por motivos de segurana, especialmente se no for


implementado em ambiente chrootado.

Configurando o ambiente Enjaulado

Para criar uma cadeia de chroot no ser necessrio utilizar nenhum aplicativo, basta
seguir as instrues abaixo e iniciar o bind, lembrando, que este artigo no mostrar como
configurar o bind e sim, apenas como criar a jaula para o servio. Vamos aos passos!

1 - Iremos criar o diretrio que servir como jaula:

# mkdir /var/named/jaula

2 - Agora iremos criar os diretrios utilizados pelo named dentro da jaula:

# cd /var/named/jaula
# mkdir -p etc
# mkdir -p var/log/named
# mkdir -p var/run
# mkdir -p dev
# mkdir -p var/named

3 - Estes so os arquivos utilizados pelo named:

# mknod null c 1 3
# mknod random c 1 8
# chmod 666 null
# chmod 666 random

4 - Devemos agora copiar os arquivos utilizados pelo named para dentro da jaula (lembre-
se voc precisa estar dentro da jaula):

# cp /var/named/* var/named

5 - Note que os diretrios dentro da jaula pertencem ao root, necessrio alterar o dono
para o usurio named:

# chown named.named var/named


# chown named.named var/run
# chown named.named var/log/named
# chown named.named var/run/named

6 - Agora precisamos habilitar a execuo do chroot, edite o arquivo /etc/sysconfig/named,


deixando "chroot = yes".

7 - Para finalizar, iremos fazer com que o daemon ao startar o processo localize os arquivos
de configurao do named dentro da jaula, para isso precisamos editar o arquivo
/etc/init.d/named. Nas linhas que indicarem o PATH onde os arquivos de configurao
esto, preciso alterar para o novo destino que ficara assim:

2009 Alfamidia Prow LTDA. - 51


DNS e Correio Eletrnico

-f /var/named/jaula/etc/named.conf
....-f /var/named/jaula/etc/named.conf

8. Pronto, agora bastar iniciar o named e seu servio de DNS estar rodando sobre uma
cadeia de chroot, "a salvo" de penetras:

# /etc/init.d/named start

- 52 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

BIND9x - Configurao e Introduo s novas


funes.
BIND (Berkeley Internet Name Domain) o software responsvel pelo servio de
nomes no mundo, quase que em sua total maioria. Atualmente o desenvolvimento desse
software est sob responsabilidade do ISC (Internet Software Consortium), e desde as
ltimas verses do BIND8 at as novas verses do BIND9, o ISC j proveu diversas
melhorias no software. Contudo, o BIND, usado inclusive nos Root Name Servers, em sua
verso 8 mais recente, vem enfrentado diversas exploraes, por parte de grupos de
usurios mal intencionados.

Essas exploraes so sempre rapidamente corrigidas, mas no so to


rapidamente atualizadas pelos administradores de sistemas, visto que a grande maioria no
ligada a Security Advisories, ou em casos mais comuns, esses administradores tem
funes distintas dentro de uma empresa, e no so somente administradores do sistema,
resultando em uma falta de tempo iminente para cuidar de atualizaes e correes de
software.

A forma como o BIND foi escrito at a srie 8, a principal razo dessas


exploraes. Agora o BIND foi reescrito, em sua verso 9, e alm da tendncia a menor
explorao e abuso de seus servios, o BIND9 incorporou diversas novas caractersticas,
tanto relacionadas segurana do servio, quanto eficincia e maiores possibilidades de
configurao no servidor de nomes.

O Desenvolvimento da verso 9 do Servidor de Nomes de Berkeley foi dirigido pelo


Internet Software Consortium (www.ISC.org) e foi feito em conjunto com vrias
organizaes, que tem considervel e reconhecido "technical improvement" (digamos
assim) no ambiente computacional. Essas organizaes so:

- Sun Microsystems, Inc. (http://www.sun.com/);


- Hewlett Packard (http://www.hp.com/);
- Compaq Computer Corporation (http://www.compaq.com/);
- IBM (http://www.ibm.com/);
- Process Software Corporation (http://www.process.com/);
- Silicon Graphics, Inc. (http://www.sgi.com/);
- Network Associates, Inc. (http://www.nai.com/);
- U.S. Defense Information Systems Agency (http://www.disa.mil/);
- USENIX Association (http://www.usenix.org/);
- Stichting NLNet - NLNet Foundation (http://www.nlnet.nl/).

Principais caractersticas do BIND9

O BIND9 uma transcrio, onde todas as principais funes e caractersticas do


BIND foram reescritas, alm de adicionadas novas funes e servios. Toda a declarao
de autoridade sobre nomes, toda a arquitetura hierrquica de domnios e zonas, assim
como formas de cacheamento e transferncia de zonas, presentes e melhoradas em todas

2009 Alfamidia Prow LTDA. - 53


DNS e Correio Eletrnico

as verses anteriores do BIND foram mantidas e reescritas, e esto em constantes


melhorias.

Outras novas caractersticas de servios foram implementadas, incluindo suportes


anteriormente no existentes, novos conceitos e funes de segurana, maior
escalabilidade e outras mudanas, como:

- Segurana no DNS:
DNSSEC (zonas autoritativamente assinadas);
TSIG (transaes DNS assinadas) ;

- IPv6, Protocolo IP verso 6, prxima gerao:


Responde por DNS utilizando unix sockets IPv6;
Resource Records (RRs) para IPv6: A6, DNAME, etc.;
Origens de Bitstring (ip6.arpa) para alocao dos bits;
Bibliotecas Experimentais de Resoluo IPv6;

- Novas Caractersticas no protocolo de DNS:


IXFR, DDNS, Notify, EDNS0;
Conformidade comprovada de padronizao;

- Views
Um processo do servidor pode diferenciar tipos distintos de "vises" (as views) das
informaes de nomes, podendo dividir uma "viso interna" de nomes para alguns clientes,
e outra "viso externa" de nomes para outros clientes.

- Suporte a Multiprocessamento.
- Arquitetura comprovadamente portvel.

Na nova verso 9.2 do BIND, ainda foram includas outras alteraes:


- O tamanho do cache agora, pode ser limitado, usando a opo "max-cache-size";
- O servidor agora converte automaticamente as requisies recursivas do tipo RFC1886
em recursses do tipo RFC2874, o que permite que os resolvers que utilizam as novas
funes IPv6 sejam respondidos por resolvers antigos, que trabalham apenas com entradas
AAAA (IPv4);
- O programa rndc agora tem a opo status, e o mesmo tem sua configurao automtica
agora;
- Outras alteraes de menor importncia, que melhoram o desempenho do servidor de
nomes.

O que necessrio para configurar ou migrar para o BIND9?

A Finalidade desse captulo orientar o administrador durante o processo de


migrao do seu servidor de nomes, ou orientar a configurao a partir do ponto inicial.
Contudo, extremamente importante e recomendada a leitura prvia dos captulos
anteriores dessa documentao. Os conceitos de servio de nomes, tipos de zonas e de
servios, assim como uma configurao mais detalhada das zonas e domnios foram
amplamente explanadas nos dois captulos anteriores, e portanto no sero revistas aqui.

Para utilizar o servidor de nomes BIND9, necessrio uma configurao mnima de


hardware, que pode ser um computador com processor 386/486, e uma quantidade mnima

- 54 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

de memria, para poder cachear as informaes necessrias, ainda que somente as


informaes de zonas autoritativas.

A configurao bsica indicada o suficiente pra responder por zonas estticas de


forma autoritativa, sem um cacheamento grande de informaes de nomes. O BIND9,
contudo, escrito para poder responder por milhares de requisies de nomes por
segundo, cacheadas e/ou autoritativas. O poder de processamento e de memria deve ser
relativo a forma como voc quer usar seu servidor de nomes. De forma geral o BIND9 prov
uma melhor utilizao dos recursos, se comparado srie 8 do mesmo software, e alm
dissso agora arquitetado multithread e suporta multiprocessamento simtrico, ou seja,
ideal para servir nomes em servidores com dois ou mais processadores.

Compilando o servidor de nomes BIND9x

O BIND9 assim como o BIND8 distribudo em forma binria e em cdigo fonte. O


formato binrio, normalmente distribudo de acordo com o fabricante e mantenedor do
sistema operacional, j o cdigo fonte, pronto para ser construdo, pode ser encontrado, via
FTP annimo, no servidor do Internet Service Consortium: ftp.isc.org/isc/bind9/

Esses mesmos arquivos (exceto os binrios), assim como as verses mais recentes
do BIND9 tambm estaro sempre disponveis no mirror brasileiro da ISC, servido pela pop-
mg.com.br no endereo:

ftp://ftp.pop-mg.com.br/pub/isc/bind9/

Os pacotes disponveis nesse endereo, j oferecem todo o conjunto de software


BIND, incluindo o daemon servidor de nomes, o named, todos os programas e os
softwares resolver. Assim como a biblioteca de criptografia openssl .As instrues de
compilao da documentao do BIND9 diz que, para construir o BIND a partir desse fonte,
basta executar o script configure e depois dar um make.

Mas vamos antes fazer uma pequena considerao: As caractersticas de


segurana, DNSSEC e TSIG utilizam as bibliotecas de criptografia OpenSSL. Essas
bibliotecas j esto inclusas junto do pacote disponvel nos endereos citados acima,
contudo, recomendado que essa biblioteca seja instalada separadamente, especialmente
em ambientes que j utilizem a criptografia OpenSSL.

Normalmente, voc j deve ter a OpenSSL instalada e em uso no seu Linux. Para
instal-la, voc pode fazer via pacotes ou pelo fonte, disponvel em www.openssl.org.

A configurao da biblioteca OpenSSL externa, deve ser feita de forma


automatizada pelo BIND9. O script configure da conta dessa tarefa. Para ter acesso a todas
as informaes que voc pode passar para o configure digite ./configure --help.

No nosso caso, s nos interessam duas opes:

./configure --with-openssl=PATH
./configure --sysconfdir=PATH

Essas so as opes para indicar o caminho da biblioteca OpenSSL e para indicar


qual ser o diretrio de configurao do BIND9. O padro para essa ltima opo, se no
alterada, /etc.

2009 Alfamidia Prow LTDA. - 55


DNS e Correio Eletrnico

Agora, comearmos a compilar o servidor de nomes, basta sabermos onde esto os


arquivos das bibliotecas OpenSSL. Se voc instalou recentemente, deve-se lembrar do
caminho, seno basta procurar, com um find / -name "*openssl*"

Normalmente o caminho da OpenSSL /usr/include/openssl. Ento para


configurar o BIND, vamos usar o comando:

# cd bind-9.2xx/
# ./configure --with-openssl=/usr/include/openssl --sysconfdir=/etc/

Agora sim, ao final das verificaes e dos ajustes de configurao, o BIND9 j est
pronto pra ser compilado:

# make

recomendvel que voc tenha sempre um backup consistente e atualizado dos


arquivos mais importantes do seu sistema, e isso sempre inclui todos os seus arquivos do
servidor de nomes. Agora, por segurana, faa uma cpia tambm, alm dos arquivos de
configurao, de zonas e reversos usuais, dos binrios tambm, especialmente os
programas nslookup, named, named-xfer e outros que julgar necessrios.

Agora voc pode acabar a instalao do seu BIND9. Logado como root, digite:
# make install

Pronto, todos os programas j foram compilados e construdos, e esto acima do


diretrio bin/ dentro do seu diretrio de instalao do bind9. Normalmente parecido com
~/bind-9.xxx/bin/. Voc pode copiar os programas ou criar links simblicos, para onde quer
que voc ache necessrio, lembrando sempre que ideal que esses programas estejam no
path do seu interpretador de comandos (shell), assim como as man pages (pginas de
manual online) tambm, criadas no diretrio man/ do BIND9.

Se voc resolver instalar via pacote, geralmente ele faz estes passos para voc.

Configurao do BIND9 NameServer.

Agora vamos tratar de alguns exemplos e indicaes para configurao de um


servidor de nomes, utilizando o BIND9. A maior parte das opes principais so
equivalentes forma como eram aplicadas na verso 8 do BIND, e foram explicadas nos
Captulos anteriores desse manual. As novas opes e/ou diferenas de sintaxe sero
abordadas aqui, sempre que as diretivas a faam necessrias.

J temos ento todos os arquivos e programas do bind9 instalados. Ento hora de


comearmos a configurar o nosso servidor de nomes. O Primeiro arquivo a ser configurado,
exatamente como no bind8 o arquivo named.conf, que deve estar localizado onde ns
mandamos ele ser compilado, com a opo --sysconfdir=PATH do configure. Portanto no
nosso caso, o diretrio o /etc/named.conf

O arquivo named.conf o arquivo que mais ganhou novas opes, exatamente por
ser o arquivo mais importante para o servidor de nomes. Vamos ento dar uma nfase
especial nessas novas mudanas, e entendermos a utilizao de todas as novas opes.

- 56 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

Lembrando que, para os nossos exemplos, vamos manter a configurao-exemplo


adotada no Captulo anterior:

Domnio: eeviac.com.br
Servidor Primrio: eeviacbsd.eeviac.com.br
Servidor Secundrio: xffa.eeviac.com.br
Segundo Secundrio: corduroy.eeviac.com.br
Faixa de IPs da Rede: 200.230.200.0 at 200.230.200.63
Portanto Mscara: 255.255.255.192

named.conf no BIND9

No BIND9, as opes para o arquivo named.conf foram divididas em vrias sries


de instrues distintas, com diferentes funes cada uma. As instrues existes hoje so:

- ACL: Definem uma srie de lista de controles de acesso, baseadas em


endereo IP, para controle de nomes e outras utilizaes.

- Controls: Define canais de controles, que devem ser usados junto ao programa
rndc que faz parte dos softwares contidos no novo BIND.

- Include: Directiva para incluso de um arquivo.

- Key: Especifica uma chave, para ser usada nas Autenticaes e Autorizaes,
quando estivermos usando TSIG

- Logging: Especifica que tipo de informao o servidor de nomes deve logar, e


para onde essas informaes (e de que forma) devem ser logadas.

- Options: Controla todas as informaes que o servidor de nomes vai prover.


Define como essas informaes sero buscadas pelo BIND, e tambm cria informaes
padro para outras opes.

- Server: Permite ajustar uma srie de configuraes, baseadas nas informaes


definidas de servidor por servidor.

- Trusted Keys: Define as chaves de acesso que o DNSSEC vai confiar.

- View: Define uma view, tipos de vises distintas de resoluo de nomes, de


acordo com os clientes.

- Zone: Define uma zona. Zonas so as principais informaes que um servidor


de nomes vai tratar, quando for configurando para ser servidor autoritativo de determinados
domnios (ou zonas).

Instrues ACL

As instrues ACL tem o objetivo de separarmos zonas de endereamento IP


especficas, e fazer referncias a essas zonas, sejam elas quantas forem, utilizando assim

2009 Alfamidia Prow LTDA. - 57


DNS e Correio Eletrnico

um nome que ns definamos, e no mais uma srie de endereos IPs ou de redes. Permite
agrupar definies de endereamento IP por lista de acesso.

Por padro, o BIND9 j traz algumas ACLs built-in, para facilitar o uso. So elas:
-any: Absolutamente todas as mquinas (hosts) de todas as redes;
-none: Nenhuma mquina (hosts) de nenhuma rede (net).
-localhosts: Todos os endereos IPs atribudos s interfaces locais. Por exemplo,
interface de loopback lo0: 127.0.0.1; Interface ethernet eth0(placa de rede): 200.230.200.10
(exemplo).
-localnets: Toda a rede, a qual a mquina faz parte. Definida pelo endereo
atribudo a ela, e pelo endereo de broadcast ou mscara de subrede, no sistema
operacional.
Exemplo de Criao de ACLs:

acl internas {
192.168.0.0/24;
192.168.1.0/24;
192.168.2.0/24;
};

Nesse exemplo, ns criamos a ACL chamada internas, fazendo referncia a nossas


redes internas. Definimos que internas agora quer dizer nossas 3 redes de intranet. Sempre
que o BIND9 se deparar com a palavra de controle 'internas', ele vai saber que estamos
falando dessas 3 redes definidas acima. Mscara /24 indica 24 bits, ou seja, a rede inteira.

acl secundrios {
200.230.200.9/32;
200.230.200.11/32;
};

Agora definimos que, sempre que dissermos secundrios, o BIND deve interpretar
como sendo nossos servidores secundrios, os dois endereos IPs que fazem parte da
nossa ACL. A mscara indica 32 bits, ou seja, um host nico.

acl nonsenseisp {
200.205.2.0/24;
200.205.3.0/24;
};

Essa ACL define que as duas redes (24 bits) nessa definio, devem ser
compreendidas sempre que mencionarmos a expresso nonsenseisp. Caso voc encontre
algum ISP que sempre mantm problemas como lamme delegations ou qualquer outra m
configurao nonsense ;}

Lembre-se que, os nomes para as ACLs e o contedo das mesmas so definidos


exclusivamente por voc, nonsenseisp por exemplos um tipo de expresso que no quer
dizer muita coisa, e deve ser compreendido apelas pelo administrador que criou essa ACL.

- 58 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

Instruo Controls:

Essa srie de instrues tem a funo de declarar canais de controle, a serem


utilizados junto ao programa rndc. O uso do rndc vai ser abordado ao decorrer desse
documento. Essas instrues permitem que se abra um socket TCP/IP comum Internet,
criado na porta 'ip_port' em questo, no endereo 'ip_addr' declarado. Se no for declarada
uma porta em especial, a porta 953 usada por padro. A chave "*" pode ser usada, para
especificar todas as interfaces locais, contudo no pode ser usada para substituir a
declarao de uma porta especfica.

A possibilidade de suprir comandos, utilizando o rndc atravs de um canal de


controle, s pode ser realizada quando as regras de permisso e de chave so
equivalentes, e consequentemente validadas. Os hosts que no tem permisso de acesso
(allow) so posteriormente ignorados, se a chave de identificao (key) for conhecida,
passando a ordem de tratamento de controle apenas para as chaves. Essas chaves so
ento usadas para autenticar todos os comandos e respostas de comandos, durante a
transao, criando assim uma assinatura digital entre os dois lados.

A sintaxe comum para utilizao de um canal de controle :

controls {
inet ( ip_addr | * ) ( port 'ip_port' ) allow endereos_permitidos
keys lista_de_chaves_permitidas;
inet [...];
};

Exemplo de criao de canais de controle:

Nos endereos permitidos, pode ser especificada uma ACL previamente declarada.
Vejamos o exemplo a seguir:

controls {
inet 200.230.200.10
allow {
localhost;
internas;
}

keys {
chaves_rndc;
chaves_privadas;
}
};

Com essa regra, abrimos um canal de controle, na porta padro (953) da interface
externa do servidor (endereo IP 200.230.200.10) e demos permisses para acesso nesse
canal de controle para localhost e para internas onde a segunda uma ACL previamente
declarada no nosso arquivo de configuraes. Definimos tambm duas chaves, as
chaves_rndc e chaves_privadas para serem as nossas atribuies de assinatura digital, pra
segurana das transaes DNS.

2009 Alfamidia Prow LTDA. - 59


DNS e Correio Eletrnico

As chaves usadas foram previamente criadas. Veja Instruo Keys. A sintaxe de


canais de controle no mais compatvel com as implementadas na srie 8 do BIND.

Instruo Keys;

A instruo keys usada para se criar assinaturas digitais durante as transaes


DNS, ou seja, a caracterstica principal da nova funo 'TSIG' do BIND9. A declarao
dessa chave definida por um nome de chave, chamado tambm de key_id, seguido de
um tipo de algoritmo a ser seguido, e finalmente a chave, propriamente dita. Atualmente
apenas o algoritmo hmac-md5 suportado para a autenticao TSIG.

A sintaxe para criao de Keys :


key key_id {
algorithm algoritmo;
secret chave;
};

Exemplo de criao de chaves TSIG:


key servidores-externos {
algorithm hmac-md5;
secret "lZ12asdDfWwqqertTtys";
};

Foi criada ento, uma chave de assinatura digital, com o nome servidores-externos.
A utilizao dessa chave deve ser feita junto da instruo server, no arquivo de
configurao do BIND. Voc vai ver mais detalhes na seo que aborda as Assinaturas de
Transaes (Transaction SIGnatures, TSIGs) a seguir.

Instruo Include;

As instrues include so simples e comumente usadas em arquivos de


configuraes de aplicaes especficas, como aplicaes php, portanto j so conhecidas.
A funo dessa instruo simplesmente chamar um determinado arquivo, no ponto em
que a instruo lida pelo arquivo de configuraes. Por segurana, pode ser usado, por
exemplo, para chamar seqncias de bits de base 64, e interpretadas com keys.

A sintaxe simples:

include arquivo;

Um exemplo: A chave no exemplo acima, servidores-externos. Se ela estivesse dentro de


um arquivo externo, com o nome servidores-externos.key (como exemplo...), poderia ser
chamada com o comando:

include servidores-externos.key;

Dentro do arquivo de configuraes do BIND9.

- 60 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

Instruo Logging;

As instrues logging implementam uma amplas possibilidades de logar os eventos


no servidor de nomes. Essa instruo, assim como a instruo options s pode ser usada
uma nica vez, no arquivo de configuraes do BIND. A funo do logging definir vrias
classes e formas de se logar as atividades no BIND, assim como os nveis de importncia
(severity) dessas informaes. Essas instrues de logging so chamadas de canais de
logs ou logging channels. As formas de se logar tais informaes podem ser, em arquivo
(file) ou utilizando um daemon de logs locais, como o syslogd.

Essa uma das mais importantes e funcionais novidades do BIND9. Nessa nova
verso, as definies de logs apenas passam a funcionar quando o parsing de toda a
declarao das regras de logs so lidas, ou seja, apenas quando o BIND termina de ler as
instrues de logging que o log comea a ser gravado. At isso acontecer, as mensagens
so enviadas normalmente ao daemon de logs do sistema. Em casos extremos, para se
solucionar problemas deve-se usar a opo "-g" para iniciar o BIND. Essa opo inicia o
named em foreground e com o nvel alto de debug para a sada de informaes.

So utilizadas duas especificaes de chamadas junto instruo logging. Elas so


chamadas de "channel" e de "category".

Veja a sintaxe bsica da instruo Logging:

logging {
channel {};
category{};
};

Onde as possibilidades de instrues so definidas da seguinte forma:


logging {
channel "nome_do_canal" {
file "path(caminho)";
versions nmero_especfico OU unlimited};
size tamanho;

syslog opo_syslog;
null;

severity critical | error | warning | notice | info | debug (nvel) | dynamic;

print-category yes|no;
print-severity yes|no;
print-time yes|no;
};
category nome_da_categoria {
nome_do_canal1;
nome_do_canal2;
nome_do_canalX;
...
};
};

2009 Alfamidia Prow LTDA. - 61


DNS e Correio Eletrnico

Especificao channel{};

Todas as especificaes de logs tem sua sada definida em um ou mais canais de


log, chamados de channels. Voc pode criar quantos canais quiser, para separar suas
definies de logs. Voc vai indicar onde os logs sero armazenados, e de que forma, se
em forma de arquivo comum, ou um log criado por um daemon especfico para isso. Ao
usar o Syslog a opo "local3" comumente atribuda para informar o BIND da utilizao
do daemon. Voc vai tambm indicar o nvel de informao que ser logada, utilizando a
opo severity. Quando um nvel no aplicado, o padro a utilizao do nvel info.

A especificao null quando aplicada um canal de logging, indica ao BIND para


destruir aquelas informaes, sem grava-las em lugar algum.

A especificao file indica ao BIND para gravar todas as informaes de acordo


com o nvel definido no severity em um arquivo de texto, especificado no caminho dado. Em
ambientes seguros, utilizando ambiente enjaulado, recomendado uma definio parecida
com file info/tipo_de_log.log como foi tratado no nosso captulo anterior. Esse tipo de
arquivo ainda pode ser controlado, pelo BIND, controlando que tamanho mximo esse
arquivo pode alcanar, e quantas verses do mesmo podero existir. A opo size define o
tamanho mximo que esse arquivo vai ter. E a opo versions define quantos arquivos de
logs podero automaticamente ser criados. Por exemplo, se voc definir versions 2; vo
sempre existir os arquivos arquivo.log e arquivo.log.0 balanceados com o tamanho
especificado em size.

Se voc especificar syslog como destino dos logs, ento o sistema vai usar o
syslogd para prover todos os logs necessrios, conforme especificados por severity.
Contudo, requerido uma opo_do_syslog que define a forma como o syslogd vai logar
essas informaes. A opo normalmente usada a "local3". Para conhecer as outras
opes existentes, leia a man-page do syslogd (comando man syslog) ou os comentrios
no seu arquivo "/etc/syslog.conf".

A opo severity indica um nvel de "prioridade" que definir os tipos de


informaes que sero lanadas como sada de log pelo BIND. Os nveis de prioridade
existentes so: critical | error | warning | notice | info | debug (nvel) | dynamic que s pelo
nome j do uma noo correta do tipo de informaes que so logadas. A prioridade
debug inicia o servidor de nomes com a opo "-d <nmero inteiro>" onde o <nmero
inteiro> em questo o nvel de debug. Essa opo diferente da opo "-g",
especialmente por definir um nvel de informao e por no manter o processo em
foreground. J a opo dynamic utiliza a nvel de syslog as prioridades que j esto sendo
usadas pelo sistema.

As outras possibilidades, por analogia, so facilmente compreendidas. Se


necessrio uma descrio desses nveis de prioridades pode ser obtida na man-page do
BIND ou do NAMED (man bind ; man named).

Especificao category{};

So as categorias de logging do BIND9. A utilizao dessa categoria pode ser feita


de duas formas, a primeira utilizar categorias como agrupamentos de canais de logs.

- 62 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

Dessa forma, voc pode criar um nome para uma categoria, e dizer que aquela categoria
conter as informaes dos vrios canais de logs que voc criou com a funo channel{}; e
usar essa definio posteriormente.

E a outra forma de utilizao, a ideal, utilizar as categorias de logs existentes no


BIND9. As categorias mantm informaes sobre segurana, transferncia de zonas, e
outros tipos de informaes. Por exemplo, se declararmos a categoria category "security" {
"canal_seguranca"; }; vamos estar indicando ao BIND que queremos que ele logue todas as
informaes relativas a segurana no canal canal_seguranca que possivelmente
declaramos com a especificao channel{}.

As categorias existentes so:

- default: a definio de categoria padro, que utilizada quando no so definidas


categorias para um canal de log.

- general: um amontoado 'geralzo' de informaes. A documentao do BIND9 diz


que, onde foi colocada todas as informaes que ainda no foram divididas em categorias
especficas. So informaes genricas.

- database: so informaes referentes as dbs internas, utilizadas pelo named para


controlar a autoridade sobre zonas, reversos e dados de cacheamento.

- security: informaes de Negao ou Permisso de requisies sobre informaes


feitas ao BIND.

- config: loga problemas e sucesso relacionado a leitura do arquivo de configuraes.


onde so armazenados os problemas de erro de sintaxe, por exemplo.

-resolver: resoluo do servio de nomes. So logadas informaes sobre a resoluo


de nomes, solicitadas por determinada requisio de algum cliente, como informaes
recursivas feitas normalmente por servidores de cache (os caching name servers).

- xfer-in: loga informaes sobre a transferncia de zonas que o servidor est


recebendo.

- xfer-out: loga informaes sobre a transferncia de zonas que o servidor est


enviando.

- notify: informaes referentes ao protocolo NOTIFY do BIND.

- client: loga informaes referentes ao processamento de requisies feitas pelos


clientes.
- network: loga atividade de operaes na rede, em relao ao servidor de nomes.

- updates: informaes sobre atualizaes dinmicas do servidor de nomes (dynamic


updates).

- queries: atividades pertinentes a todo tipo de requisio de informaes.

Agora j sabemos como definir nossos canais de logging e quais tipos de categoria
podemos usar para definir os nveis de informaes serem logadas. Veja agora um
exemplo de configurao bsica utilizando a instruo logging:

2009 Alfamidia Prow LTDA. - 63


DNS e Correio Eletrnico

logging {
channel "named_log" {
file "info/named.logs";
severity info;
print-category yes;
print-severity yes;
print-time yes;
};

channel "named_erro" {
syslog local3;
severity error;
print-category yes;
print-severity yes;
print-time yes;
};

category "security" {
"named_log";
"named_erro";
};

category "xfer-out" {
"named_log";
};

category "xfer-in" {
"named_log";
};

};

Foram criados ento, dois canais de logging, um canal de logs gerais, chamado
named_log e um canal de logs especfico para armazenarmos informaes de erros, o
named_erro. No canal de logs mandamos gravar as informaes em um arquivo, localizado
no caminho "info/named.logs" e no canal de erros, mandamos logar com o daemon syslod.
Definimos as prioridades de informaes com severity nos dois canais, de mandamos logar
as informaes definidas pela categoria, pela prioridade e a hora em questo, com as
opes print. Depois definimos as categorias, atribuindo uma a uma ao canal que ns
criamos.

Instruo Options;

a mais importante instruo na configurao do named.conf. Assim como na srie


8 do BIND, as instrues options so as responsveis por definir informaes necessrias
para a inicializao do servidor de nomes, e informaes sobre o comportamento do
mesmo, em vrios casos. Contudo, na srie 9 do BIND essa instruo ganhou algumas
novas funes, como version que permite que voc altere a informao de verso do seu
servidor de nomes. timo para segurana, j que um "curioso" mal intencionado no ter
acesso a verso do bind que voc estar usando, via query.

Outra novidade, a opo named-xfer ainda existe, no BIND9, mas ela se tornou
obsoleta e no usvel, j que o novo bind incorpora essa funo automaticamente em seu
servidor. Portanto o programa named-xfer no mais necessrio para os servidores de

- 64 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

nomes secundrios. A opo notify por exemplo, avisa quando uma zona autoritativa foi
modificada, e est pronta pra transferncia ou atualizao.

So inmeras as opes, e tratam desde informaes primordiais, as quais o BIND


simplesmente no funciona se no existirem, at informaes de nveis tcnicos e de
importncia administrativa, como por exemplo, estatsticas de uso da memria do servidor
pelo servio de nomes, topologias, estatsticas de nmero de queries que no puderam ser
respondidas, etc.

Mas, vamos analisar um arquivo de configurao com as options bsicas para


colocarmos nosso servidor de nomes no ar e funcionando. Inicialmente, indicarmos o
working directory pro nosso BIND, com a opo directory ""; e uma interface para o servidor
ouvir j so informaes o bastante. Contudo vamos ver um conjunto mais ilustrado de
opes:

options {
directory "/";
allow-transfer { 200.230.200.9; };
allow-recursion { 200.230.200.0/24; };
statistics-file "/info/named.stats";
dump-file "/info/dump.db";
pid-file "/info/named.pid";
version "Verso Indisponvel";
listen-on port 53 { 200.230.200.10; };
query-source address 200.230.200.10 port 53;
transfer-source 200.230.200.9 port 53;
auth-nxdomain no;
};

Vamos ento entender essa nossa configurao bsica.

A opo directory define o working directory para o nosso servidor de nomes.


Funciona da mesma forma que na verso 8 do BIND. No exemplo acima fica claro que
nosso servidor de nomes vai estar rodando em ambiente seguro (CHRoot Enviroment), ou
seja, enjaulado, porque definimos a raiz "/" como diretrio de configurao do nosso
servidor de nomes.

Normalmente em ambientes no Enjaulados, o working directory costuma ser


"/var/named", "/etc/namedb" ou "/usr/named".

A seguir, a opo allow-transfer define o endereo dos nossos servidores


secundrios, ou seja, aqueles que tem permisso para efetuar transferncias. Lembrando
que voc pode usar uma ACL criado por voc mesmo, para representar esse tipo de
informao no BIND9.

Por exemplo: allow-transfer { secundarios; };

Onde "secundrios" uma ACL que define quais so nossos servidores slaves.

A opo allow-recursion define quais endereos so autorizados a efetuar buscas


recursivas de nomes, no nosso servidor. No nosso exemplo, ns permitimos toda a nossa
rede: 200.230.200.0/24 Voc poderia ter usado uma ACL pra isso tambm.

dump-file indica o caminho onde o named deve salvar os databases em dump,


quando o comando rndc dumpdb for especificado. O padro named_dump.db.

2009 Alfamidia Prow LTDA. - 65


DNS e Correio Eletrnico

A opo pid-file indica onde o BIND deve criar seu arquivo de texto com o nmero
de Process IDentification.

A opo version substitui a string especificada pela informao de verso do


servidor de nomes.

As outras opes j so conhecidas do BIND8. Indicam a porta e interface onde o


servidor dever rodar, ouvir requisies de nomes e fazer as transferncias de zonas. J a
opo auth-nxdomain faz traduo dos bits AA (IPv4) quando necessrias. Apenas
recomendado em casos extremos. O padro auth-nxdomain no; mesmo se no
especificado.

Com essas opes voc j pode colocar o seu servidor de nomes no ar, rodando
com tranqilidade. Lembre-se de usar ACLs sempre que possvel, porque ajudam na
administrao e consequente segurana do servidor de nomes.

Instruo Server;

As instrues server denotam caractersticas serem atribudas a servidores de


nomes remotos. Definem o comportamento do nosso servidor em relao outros
servidores. So necessrias nas definies de keys ao serem utilizadas junto algumas
novas caractersticas do BIND9, como TSIG, etc...
A sintaxe para utilizao dessa instruo :

server endereo_ip {

provide-ixfer yes|no;

request-xfer yes|no;

transfers nmero;

transfer-format one-answer | many-answers;

keys {strings [strings ...] };

};

A opo provide-ixfer define se o servidor, no caso um servidor primrio (master) vai


delegar informao de atualizao para um servidor secundrio (slave) de forma
incremental. Prover essas informaes de forma incremental significa dizer que o servidor
master vai apenas servir o slave com as informaes que foram modificadas (novas
informaes) em relao s informaes que o servidor slave j possua, ou seja, a
transferncia no ser mais da zona por completo, apenas dos trechos novos. Se essa
opo estiver desligada ("no") ento a transferncia de informaes entre servidor primrio
e secundrio sero sempre no-incrementais, ou seja, sempre a zona inteira. Se no
especificada, essa opo assume o resultado global definido em options{};

A opo request-ixfer define que o servidor local vai estar agindo como servidor de
nomes secundrio, e que vai tratar o servidor especificado na opo server como o
primrio. Ao tentar atualizar suas zonas secundrias, ele sempre tentar que essas

- 66 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

requisies sejam incrementais, caso esteja definida opo yes. Se no especificada, essa
opo tambm assume o resultado global definido em options{};

A opo transfers define um nmero mximo de transferncias concorrentes vindas


do servidor especificado. Se essa opo no for informada, o padro obedecer a clusula
transfers-per-ns definida no options{};

A opo transfer-format define o mtodo de transferncia dos resource records.


Podem ser definidos dois formatos, de resposta nica (one-answer) e vrias respostas
(many-answers). O mtodo de vrias respostas mais eficiente, contudo s so
compatveis com o BIND9, BIND8 e algumas verses atualizadas do BIND.

A opo key usada para definir um nome de chave, o key_id definido por uma
instruo key, para garantir transao segura quando dois servidores estiverem se
comunicando.

Instruo Views;

Essa uma nova e extremamente funcional caracterstica do BIND9. A definio de


views permite diferentes vises e conseqentes respostas distintas de nomes, de acordo
com quem esta fazendo essas requisies. Isso permite que a tcnica de "DNS Spliting"
seja usada, sem a necessidade de rodar mltiplos servidores de nomes.

Cada instruo view permite a diviso das informaes que o servidor de nome ir
responder, diferenciando pelos endereos IPs, que tipo de resposta cada cliente dever ter.
Vale lembrar que a ordem das definies de views importante, j que a resposta ser
dada de acordo com a primeira clusula view onde o endereo IP do cliente for
reconhecido.

A sintaxe para utilizao de uma view :

view nome_da_view {

match-clientes { lista_de_endereos };

conjunto_de_opes_da_view;

opo_de_zona;

};

As zonas definidas dentro de uma view, sero apenas vistas pelos clientes que
tiverem seu endereo reconhecido pela lista de acessos dessa view. As opes de view
(conjunto_de_opes_da_view) podem ser definidas quase em sua maioria, com as
mesmas instrues existentes na opo options{};. Quando no definidas, as opes
globais definidas em options{}; sero utilizadas.

Como uma zona comum de nomes, necessrio ter uma opo HINT para as zonas
definidas dentro de uma view. Se a opo "IN" for assumida como a classe da zona, dentro
da view, ento uma HINT no precisa ser especificada, porque as classes 'IN' as tem pr-
configurada.

Veja um exemplo de configurao de views, que ajudar no entendimento das mesmas:

2009 Alfamidia Prow LTDA. - 67


DNS e Correio Eletrnico

view "internet" IN {

match-clients { any; };

zone-statistics yes;

recursion no;

zone "eeviac.com.br" {

type master;

file "db.eeviac.externo";

};

};

view "intranet" IN {

match-clients { 192.168.1.0/24; };

zone-statistics yes;

recursion no;

zone "eeviac.com.br" {

type master;

file "db.eeviac.interno";

};

};

Agora, nessas duas views ns definimos vises distintas para a mesma rede, de
acordo com os clientes. Fizemos um DNS Spliting com um mesmo servidor de nomes, e
separamos as informaes que apenas a nossa intranet pode ter acesso, das informaes
que toda a internet pode ter.

Usando a opo match-clients definimos quem pode ter acesso a qual zona (zone
file) definida com a instruo zone {}; que ser explanada seguir. Definimos opes de
zona esttica e de recursso. Note que, na primeira view foi usada uma ACL padro, ou
seja, voc pode fazer uso de ACLs que voc criar para definir os acessos s views.

- 68 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

Unidade 2: Correio Eletrnico

Introduo

A infra-estrutura de transporte de e-mail na Internet funciona atravs da interao


entre diferentes agentes, como nos mostra a figura a seguir:

Os principais elementos desse trajeto so:

MUA - Mail User Agent : o programa que o usurio acessa para compor seu e-mail.
Exemplo: Outlook, Netscape, Eudora, Pine, Kmail, etc.

MTA - Mail Transport Agent : recebe o e-mail do MUA e o envia a outros MTA, para
que seja entregue ao destinatrio. O principal MTA em UNIX o sendmail, mas existem
tambm o qmail , postfix e outros.

2009 Alfamidia Prow LTDA. - 69


DNS e Correio Eletrnico

MDA - Mail Delivery Agent : recebe o e-mail do MTA e o deposita na caixa de


correio do usurio. O MDA default do Linux o procmail, mas existem diversos outros.

MAA - Mail Access Agent : permite ao MUA o acesso aos e-mails que esto na
caixa de correio do usurio. Na prtica, esta funo exercida pelos servidores POP3 e/ou
IMAP.

Os principais protocolos em uso so:

SMTP- Simple Mail Transfer Protocol: o protocolo responsvel pelo transporte dos
e-mails entre MTAs, e do MUA ao MTA.

POP3 - Post-Office Protocol v3: usado pelo MUA para acessar as mensagens
armazenadas no servidor.

IMAP - Internet Message Access Protocol: idem, porm mais verstil que o POP3.

Todos os protocolos acima consideram o mail como texto ASCII. Cada e-mail
composto de duas partes: o cabealho, que contm informaes de encaminhamento, e o
corpo, que contm a mensagem propriamente dita:

////Cabealho////

Return-Path: <aos-book-list-admin@cs.yale.edu>
Delivered-To: maziero@ppgia.pucpr.br
Received: from netra.cs.yale.edu (netra.cs.yale.edu
[128.36.229.21])
by hermes.ppgia.pucpr.br (Postfix) with ESMTP id 4CBD42B003E
for <maziero@ppgia.pucpr.br>; Mon, 28 Apr 2003 20:36:03 -
0300 (BRT)
Received: from netra.cs.yale.edu (localhost [127.0.0.1])
by netra.cs.yale.edu (Postfix) with ESMTP id BA2C9D7450
for <maziero@ppgia.pucpr.br>; Mon, 28 Apr 2003 19:36:01 -
0400 (EDT)
Date: Mon, 28 Apr 2003 19:36:01 -0400
Message-ID:
<20030428233601.16174.44387.Mailman@netra.cs.yale.edu>
Subject: Welcome to the "Aos-book-list" mailing list
From: aos-book-list-request@cs.yale.edu
To: maziero@ppgia.pucpr.br
X-No-Archive: yes
X-Ack: no
Sender: aos-book-list-admin@cs.yale.edu
Errors-To: aos-book-list-admin@cs.yale.edu
X-BeenThere: aos-book-list@cs.yale.edu
X-Mailman-Version: 2.0.13
Precedence: bulk

//// Corpo ////

Welcome to the Aos-book-list@cs.yale.edu mailing list!


To post to this list, send your email to
aos-book-list@cs.yale.edu.

General information about the mailing list is at


http://mailman.cs.yale.edu/mailman/listinfo/aos-book-list.

- 70 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

If you ever want to unsubscribe or change your options


(eg, switch to or from digest mode, change your password,
etc.), visit your subscription page at
http://mailman.cs.yale.edu/mailman/options/aos-book-list.

You can also make such adjustments via email by sending a


message to Aos-book-list-request@cs.yale.edu with the word
`help' in the subject or body (don't include the quotes),
and you will get back a message with instructions. You must
know your password to change your options (including changing
the password, itself) or to unsubscribe. It is: xxxxxxxx

If you forget your password, don't worry, you will receive a


monthly reminder telling you what all your cs.yale.edu mailing
list passwords are, and how to unsubscribe or change your
options. There is also a button on your options page that will
email your current password to you.

You may also have your password mailed to you automatically


off of the Web page noted above.

Os MTAs funcionam segundo um princpio "store and forward". Isso significa que o
MTA recebe cada mensagem integralmente e a deposita em um diretrio temporrio, para
somente ento pass-la adiante, seja a um outro MTA ou ao MDA, se o destinatrio for um
usurio local. Esse procedimento garante a entrega da mensagem ao destinatrio, sem
possibilidade de perdas na transmisso.

O daemon sendmail, por exemplo, lanado durante a inicializao (boot) da


mquina, e opera em modo mestre-escravo. O processo mestre ouve a porta 25/TCP; para
cada pedido de conexo, ele cria um novo processo escravo para tratar do pedido.

Os principais arquivos e diretrios de um sistema de e-mail SMTP UNIX tpico so:

/etc/sendmail.cf : arquivo de configurao do MTA sendmail

/etc/aliases : aliases globais de e-mail

/etc/mail/* : arquivos de controle de acesso ao sendmail (spam, relay, etc).

2009 Alfamidia Prow LTDA. - 71


DNS e Correio Eletrnico

/var/spool/mail : diretrio das caixas de entrada (inbox) dos usurios. cada usurio
contm uma caixa de entrada na forma de um arquivo texto com seu nome de login
(por exemplo: /var/spool/mail/maziero).

/var/spool/mqueue : fila de mensagens em trnsito, recebidas de MUAs ou de


MTAs e esperando o envio a outros MTAs. cada mensagem representada por um
arquivo de controle e um arquivo de contedo. A fila pode ser visualizada atravs do
comando mailq.

/var/log/maillog : arquivo de log, contendo os registros das trocas de mensagens


efetuadas.
O MDA o processo que efetua a entrega dos e-mails aos usurios locais. No Linux
normalmente usado o procmail, que permite uma grande flexibilidade na entrega de e-
mail, como:
redireo automtica, atravs do arquivo $HOME/.forward.

separar os e-mails recebidos por folders, de acordo com suas caracteristicas.

filtrar e-mails com virus ou outros problemas.


A configurao do procmail feita atravs do arquivo /etc/procmailrc (sistema) e
$HOME/.procmailrc (usurio). Para mais informaes, man procmail e a
http://www.procmail.org.
Para consultar os e-mails armazenados no servidor, o cliente (MUA) utiliza os
protocolos POP3 e IMAP. Suas principais caractersticas so:

POP3:

o Usa a porta 110/TCP ou 995/TCP (verso segura POP3S).

o Considera apenas uma pasta no servidor (INBOX).

o Por default descarrega as mensagens do servidor no cliente.

IMAP:

o Usa a porta 143/TCP ou 993/TCP (verso segura IMAPS)

o Pode manter diversas pastas no servidor, alm da INBOX.

o Por default mantm as mensagens no servidor.

o Pode movimentar mensagens em ambas as direes (entre pastas no cliente


e no servidor).
Normalmente o uso de POP3 mais indicado quando os usurios so estticos, ou
seja, cada um possui seu computador e s acessa seu e-mail a partir dele. POP3 um
protocolo leve e que no mantm conexo constante com o servidor.
O uso de IMAP indicado quando os usurios so "nmades". Todavia, este
protocolo exige mais recursos de CPU, disco e memria do servidor. A conexo IMAP
normalmente mantida enquanto durar a sesso de trabalho do usurio. Este protocolo
muito usado em ambientes de WebMail, para os acessos do servidor Web ao servidor de e-
mail.

- 72 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

Sendmail

Introduo

H vrias formas de entrega de mail. Um desses programas, amplamente utilizado,


o sendmail. Este programa recebe a mensagem do usurio, interpreta o endereo de
email do destinatrio e envia da forma necessria. Da mesma maneira, ele procede quando
do recebimento da mensagem para o usurio.

Outras caractersticas do sendmail so de que ele recebe e envia SMTP mail;


implementa o mecanismo de aliases, permitindo redirecionamento de mensagens e cria
listas de discusso.

Todas as mensagens recebidas pelo usurio so armazenadas em uma rea do


usurio, geralmente localizada em /var/spool/mail/user. Cada usurio possui sua rea,
definida atravs de seu login.

Usado sem flags, o programa sendmail l a entrada padro at encontrar a EOF ou


uma linha com apenas um ponto, enviando a mensagem escrita para todos os endereos
listados.

Para receber SMTP, executa-se sendmail como daemon durante a inicializao do


sistema. Ele observa a porta 25, checa e processa as mensagens que chegam. Abaixo,
mostrado um exemplo de como disparar o sendmail:

if [ -f /usr/lib/sendmail ]; then
(cd /usr/spool/mqueue; rm -f lf*)
/usr/lib/sendmail -bd -q1h; echo -n "sendmail > /dev/console
No exemplo acima, primeiramente verifica-se a existncia do sendmail. seguir,
so removidos os arquivos de lock da fila de mail e, por final, executa-se sendmail como
daemon (-bd), com a determinao de que a fila de mail deva ser processada a cada hora
(-q1h).

Opes

Abaixo, esto tabelados algumas opes para o sendmail.

-bd: executa sendmail como daemon, aguardando conexes SMTP.


-bi: este comando executa aliases.
-bq: este comando imprime um sumrio da fila.
-bt: este comando executa em modo teste de endereo, l endereos e mostra os
passos para determinao do endereo final, usado como depurao.
-bv: este comando verifica apenas a validade do email, sem enviar a mensagem.
-q[time]: este comando processa a fila de email a cada intervalo de tempo.

2009 Alfamidia Prow LTDA. - 73


DNS e Correio Eletrnico

Aliases

Mail aliasing um mecanismo que possibilita a utilizao de nicknames para


usurios; redirecionamento de e-mails para outros hosts e mailing lists. Desta forma, o
sendmail pode agir como um servidor central de mail.

Geralmente, os aliases so definidos em /etc/aliases. O formato do arquivo pode ser


expresso como:

alias: destinatrio[,destinatrio,...]
O termo alias est relacionado com o nome a quem o mail endereado, enquanto
que destinatrio o endereo de quem deve receb-lo, podendo ser este o login do usurio,
um endereo email completo ou mesmo outro alias.

Existe a possibilidade de um alias possuir inmeros destinatrios, ocorrendo, assim,


a criao de uma lista de discusso. Tambm possvel de se repassar a mensagem para
um programa, atravs do comando:

alias: "| programa"


Outra opo conseguir o destinatrio de um arquivo:

alias: :include:/pathname
O programa sendmail utiliza aliases no formato DBM. Desta forma, deve-se executar
o comando newaliases para transformar o arquivo de aliases para DBM. Este comando
funciona apenas como um link para o prprio sendmail, executado com a opo -bi.

sendmail.cf

O arquivo de configurao do sendmail denominado de sendmail.cf. Nele esto


contidos a maior parte da configurao do sendmail, incluindo informaes importantes
para roteamento de email entre os programas de mail dos usurios e aqueles que
efetivamente iro entregar as mensagens. Basicamente, o arquivo possui trs funes
importantes:

1. Definir ambiente do sendmail;

2. Reescrever endereos na sintaxe apropriada para o programa receptor;

3. Mapeia endereos em instrues necessrias para entregar o mail.

Para que estas funes tenham a perfeita sincronia e que possam atender s
necessidades, existem alguns comandos necessrios para implementar estas funes, ou
seja:

Macro e opes para definir o ambiente;


Regras de reescrita para reescrever endereos de email;
Definio de mailers para indicar as instrues de entrega do mail.
Exemplos de sendmail.cf podem ser obtidos em ftp.uu.net. Uma outra forma de
gerar o sendmail.cf utilizando o programa m4, um processador de linguagem de macro.

- 74 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

Estrutura Geral

O arquivo sendmail.cf dividido em:

Informao Local: Informaes especficas do host. Nome, nome UUCP e conexes,


caso hajam.
Macros Gerais: Informaes relativa rede local. Domnio, host, relay hosts
Classes: Define grupo de hosts ou domnios utilizados para roteamento especial.
Geralmente, modificaes no so necessrias.
Verso: Fornece a verso do sendmail.cf. Deve-se incrementar esse nmero a cada
vez que se modifica o arquivo.
Macros Especiais: Nome que o sendmail utiliza para se identificar quando ocorrem
mensagens de erro, sendo que esta mostrada em login SMTP. Geralmente,
modificaes no so necessrias.
Opes: Opes do sendmail. Geralmente, modificaes no so necessrias.
Procedncia das Mensagens: Valores da procedncia das mensagens.
usurios Confiveis: Usurios que possuem permisso para sobrescrever o
endereo do remetente quando do envio do mail. Adicionar usurios a esta lista
um problema em potencial para a segurana. Geralmente, modificaes no so
necessrias.
Cabealho: Formato do cabealho que sendmail inclui nas mensagens. Geralmente,
modificaes no so necessrias.
Regras de reescrita: Regras gerais para reescrever endereos de mail. Modifica-se
esta seo apenas para corrigir problemas ou adicionar servios.
Mailers: Instrues para sendmail invocar programas para entrega correta do mail.
Regras de reescrita especficas associadas a cada mailer tambm podem ser
inseridas nessa seo. Geralmente, no so necessrias modificaes.
rule set zero: Conjunto especial de regras aplicado ao endereo de entrega.
Geralmente, modificaes no so necessrias.
rule set zero dependente da mquina: So partes especficas configurao do
sistema. Varia de acordo com os mailers configurados. Sistema de entrega SMTP e
UUCP ter diferentes regras que um que apenas entregue UUCP.
Apesar de esta ser a estrutura geral de todos sendmail.cf, algumas instrues especficas
so comuns a todos:

Informao sobre host fica sempre no incio.

Tipos semelhantes de opes, como comandos e cabealhos, permanecem


agrupados.

Na parte central esto os comandos de reescrita.

No final existem as definies de mailers relacionadas com suas regras de escrita.

2009 Alfamidia Prow LTDA. - 75


DNS e Correio Eletrnico

Lista de Comandos

Abaixo, so apresentadas tabelas com os comandos e suas sintaxes. A sintaxe


segue a regra de que o primeiro caractere da linha sempre o comando.

Nome Sintaxe Funo

Define Macro Dxvalor Setup macro x para valor

Define Classe Ccword1[word2...] Setup classe C para word1 word2 ...

Define Classe Fcarquivo Carrega classe C de arquivo

Opo Oovalor Setup opo O para valor

Usurios Tuser1[user2...] Usurios confiveis user1 user2 ...

Precedncia Pnome=nmero Setup nome procedncia nmero

Conjunto de Regras Sn Inicia conjunto de regras n

Definio de Regras Rlhs rhs comentrio Reescreve padro lhs para formato rhs

Comando de Definio de Macro D

um comando que define uma macro e armazena um valor. Uma vez definida, a
macro utilizada para prover seu valor a outros comandos do sendmail.cf e para o prprio
sendmail. Isto permite que suas configuraes sejam reaproveitadas por vrios sistemas,
bastando que sejam modificadas algumas macros especficas.

O nome da macro pode ser qualquer caractere ASCII, sendo que as minsculas so
utilizadas por macros interas do sendmail. Macros definidas por usurios so maisculas.
Para obter o valor guardado numa macro deve-se referenci-la por $x, onde x o nome da
macro. Abaixo, esto as macros internas do sendmail.cf.

a: data de origem no formato RFC 822.


b: data corrente em formato RFC 822.
c: hop count, nmero de hosts que intermediam a mensagem.
d: data em formato UNIX (ctime).
e: mensagem de entrada em SMTP.
f: endereo from do remetente.
g: endereo do remetente relativo ao destinatrio.
h: host destinatrio.
i: id da fila.
j: nome oficial do domnio deste site.
l: formato da linha from do UNIX.
n: nome do daemon, para mensagens de erro.
o: conjunto de operadores em endereo.
p: pid do sendmail.
q: formato default do endereo do remetente.
r: protocolo usado.

- 76 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

s: nome do host do remetente.


t: representao numrica da hora corrente.
u: usurio remetente.
v: nmero da verso do sendmail.
w: nome deste site.
x: nome completo do remetente.
z: diretrio home do destinatrio.
Condicionais: A condicional serve para testar se uma macro est definida e associar um
valor em caso afirmativo, ou outro valor em caso negativo. A sintaxe completa :

$?x text1 $| text2$.


A interpretao que se d expresso acima de que se ($?x) x est definida, ento
utilizar o text1. Caso contrrio ($|), utilizar o text2. Fim ($.).

Veja o exemplo: Dq$g$?x ($x)$. Aqui, associa-se macro q (endereo do remetente) o


endereo do remetente relativo ao destinatrio (g) e mais o nome completo do remetente,
caso esteja definida a macro x, que armazena este valor.

Comando de Definio da Classe C, F

Em primeiro lugar, uma classe um vetor de valores. Utiliza-se quando se manipula


mltiplos valores da mesma forma, como nomes para um host. Como macros, estas
classes utilizam caracteres como nomes, e classes de usurios usam letras maisculas.
Valores podem ser associados em uma ou mais linhas (comando C) ou lidos de um arquivo
(comando F). Exemplos:

Definindo a classe w em apenas uma linha:


Cwvenus inf inf-gw
Definindo a classe w em mltiplas linhas:
Cwvenus
Cwinf
Cwinf-gw
Definindo a classe w a partir do contedo do arquivo sendmail.cw:
Fw/etc/sendmail.cw

Comando para Opo O

Este comando associa valores a opes internas do sendmail, que no so as mesmas


que as opes da linha de comando. O valor pode ser:

uma cadeia de caracteres;

um inteiro;

um booleano;

um intervalo de tempo

2009 Alfamidia Prow LTDA. - 77


DNS e Correio Eletrnico

No existe opes a serem criadas pelo usurio. Todas so opes internas e so


mostradas a seguir:

Afile: define o nome do arquivo de aliases;


aN: espera <EMN< em>minutos por @:@, ento refaz o arquvio de aliases;
Bc: define o caractere de substituio branco;
c: enfileira mail para mailers custosos;
D: refaz a base de dados do aliases;
db: distribui mail em background;
di: distribui interativamente;
dq: distribui durante o prximo processamento da fila;
ee: envia mensagens de erro por email e sempre retorne 0 para exit status;
em: envia mensagem de erro para o remetente;
ep: imprime mensagem de erro;
eq: apenas retorna exit status, sem mensagens de erro;
ew: escreve mensagens de erro para o remetente;
Fn: Setup para permisses n para arquivos temporrios;
f: mantm linhas from ao estilo UNIX;
gn: Setup para gid default n para mailers;
Hfile: define o nome do arquivo de help do SMTP;
I: usa o BIND name server para resolver todos os nomes de hosts;
i: ignora pontos em mensagens que esto chegando;
Ln: Setup nvel de logging para n;
Mxval: Setup macro x para val;
m: envia para o remetente tambm;
Nnet: define o nome da rede;
o: aceita cabealhos no modo antigo;
Qdir: define o nome do diretrio de fila;
qn: define um fator n usado para decidir quando enfileirar trabalhos;
rt: Setup intervalo t para timeout de leitura;
Sfile: define nome do arquivo de registro de estatsticas;
s: sempre cria arquivo de fila antes de tentar distribuir o mail;
Tt: setup timeout da fila para t;
un: setup uid default n para mailers;
v: executa em modo exposio, mostrando o que est fazendo;
Wpass: define senha usada para depurao remota;
Xl: recusa conexes SMTP se a taxa de carga ultrapassar l mensagens na fila no
ltimo minuto;
xl: enfileira mensagens se a taxa de carga ultrapassar l;
Y: envia cada trabalho da fila em processo separado;
yn: reduz a prioridade do trabalho para n para cada destinatrio;
Zn: decrementa em n a prioridade de um trabalho cada vez que ele for processado;
zn: fator usado com a precedncia para determinar a prioridade de uma mensagem

Definindo Usurios Confiveis T

O comando define uma lista de usurios que podem sobrescrever o endereo do


remetente usando a flag -f do mailer. Isto possibilita uma reduo na segurana e
possibilidade de mails adulterados. As definies mais comuns so:

- 78 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

Troot
Tdaemon
Tuucp

Definindo Precedncia de Mail P

Precedncia um fator que associa a prioridade de uma mensagem quando esta


entra na fila. O comando define estes valores de precedncia disponveis para o usurio.
Quanto maior o valor, maior a precedncia da mensagem. Como default, o valor 0. A
seguir, esto apresentados algumas definies:

Pfirst-class=0
Pspecial-delivery=100
Pbuldk=60
Pjunk=100
Para se utilizar deste mecanismo, o usurio deve adicionar uma linha Precedence
em seu mail, como:

Precedence: bulk

Definindo Cabealhos H

Este comando define o cabealho inserido nas mensagens. Seu formato H seguido
de:

flags opcionais do cabealho delimitadas por sinais de interrogao.

nome para o cabealho.

dois pontos e um template de cabealho (combinao de textos e macros)

A funo da flag no cabealho controlar quando o cabealho deve ser inserido na


mensagem associada a um mailer especfico (tal mailer deve possuir uma flag setup de
mesmo nome de sua definio). Caso no haja esta especificao, o cabealho far parte
de toda mensagem para todos os mailers. Exemplo:

H?P?Return-Path: <$ g>


HReceived: $?sfrom$s $.by $j ($v/$Z)
H?D?Resent-Date: $a
H?D?Date: $a

Definindo Mailers M

Estes comandos definem o programa de entrega de mail a ser utilizado pelo


sendmail. Sua sintaxe :

Mnome, {campo=valor}
nome um nome arbitrrio utilizado internamente pelo sendmail para se referir a esse
mailer. Dois mailers devem ser referenciados por nomes especficos:
2009 Alfamidia Prow LTDA. - 79
DNS e Correio Eletrnico

local: entrega de mail local;


prog: entrega de mail a programas.
A parte campo=valor possui as caractersticas do mailer e separada por vrgulas. A
seguir, os campos do mailer.

Campo Significado Comentrio Exemplo

P Path pathname do mailer P=/bin/mail

flags do sendmail para o


F Flags F=lsDFMe
mailer

Regras para endereo do


S Sender S=10
remetente

Regras para o
R Recipient R=20
destinatrio

Vetor de argumentos do
A Argv A=sh -c $u
mailer

String de final de linha par


E Eol E=\r\n
ao mailer

Tamanho mximo da
M Maxsize M=100000
mensagem
Se o campo P tiver a string IPC, ento o sendmail utilizado para entregar o mail
via SMTP. O campo F contm as flags usadas pelos mailers. Abaixo, esto definies das
flags.

C: adicionar @dominio ao endereo que no tenha @.


D: mailer quer uma linha de cabealho Date:
E: adicionar > para as linhas da mensagem que comecem com from:
e: indica que um mailer custoso
F: mailer quer uma linha de cabealho from:
f: mailer aceita flag -f de usurios confiveis
h: mantm maiscula em nomes de hosts
I: mailer ir falar SMTP com outro sendmail
L: limita o comprimento das linhas como especificado na RFC 821
l: mailer local
M: mailer que uma linha de cabealho Message-Id
m: mailer consegue enviar para mltiplos usurios em uma transio
n: no inserir uma linha from: no estilo UNIX na mensagem
P: mailer quer uma linha de cabealho Return-Path:
R: usar MAIL-FROM: return-path ao invs do endereo de retorno
r: mailer aceita flag -r de usurios confiveis
S: No reset userid antes de chamar o mailer
s: retirar aspas do endereo antes de chamar o mailer
U: mailer que linha de cabealho from: no estilo UNIX

- 80 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

u: manter maisculas em nomes de usurios


X: inserir um ponto no incio de linhas que comecem com um ponto
x: mailer quer uma linha de cabealho Full-Name:
Aqui est um exemplo final para isto:

Mlocal, P=/bin/mail, F=rlsDFMmn, S=10, R=20, A=mail -d $u


Regras de Reescrita de Endereos - R: Este a sistema central do sendmail.cf.
Alteraes geralmente no ocorrem neste setor e so definidas por:

Rpadro transformao comentrio


O intuito procurar pelo padro no endereo processado. Quando for encontrado, aplica-se
a transformao neste endereo. A seguir, esto listadas os smbolos para procura de
padres.

$*: combina com zero ou mais tokens.


$+: combina um ou mais tokens.
$-: combina com exatamente um tonken.
$=x: combina com qualquer token na classe x.token que no esteja na classe x.
$x: combina com todos os tokens na classe x.
$%x: combina com qualquer token no mapa NIS nomeado na macro x.
$!x: combina com qualquer token fora do mapa NIS nomeado na macro x.
S%y: combina com qualquer token no mapa NIS hosts.byname.
Abaixo agora est listado as transformaes de endereo.

$n: substituir token indefinido n.


$[nome$]: substituir nome cannico.
$>n: chamar ruleset n.
$@: terminar ruleset.
$: terminar regra de escrita.
A ttulo de ilustrao, suponha que o endereo a ser transformado seja
alguem@todos.sisnet, e que aps algum processamento anterior torne-se
algum<@todos.sisnet>. Desta forma, aplica-se a seguinte regra:

R$+<@$+.net> $1%$2<@$B> use Sisnet relay


O endereo combina com o padro, visto que existe um ou mais tokens antes do
caractere <@, um ou mais tokens aps <@, e por final h a seqncia string.sisnet>. A
procura do padro resulta em dois tokens indefinidos, usados na transformao do
endereo. A transformao contm o token indefinido$1, um caractere %, o token indefinido
$2, a seqncia <@, a macro B e o caractere >. Aps a aplicao do padro, $1 contm
algum e $2 contm todos. Assumindo que a macro B (Sisnet relay) tenha sido definida em
algum lugar do sendmail.cf como minha.com.br, o endereo ser reescrito como:

algum%todos<@minha.com.br>

Comando Ruleset - S

As regras podem ser agrupadas em conjuntos, denominados de ruleset, tendo um


nmero associado, tornando possvel de serem referenciadas nas definies de mailers

2009 Alfamidia Prow LTDA. - 81


DNS e Correio Eletrnico

vistas anteriormente. O comando S marca o incio de um conjunto de regras, identificando-o


com um ndice e representado da seguinte forma: Sn.

H cinco conjuntos com funes especficas chamadas diretamente pelo sendmail.


So elas:

ruleset 3: o maior e o mais complicado, o primeiro aplicado ao


endereo, convertendo para a forma cannica parte-
local@host.dominio.

ruleset 0: aplicado aps o 3, e somente para endereos de


destinatrios usados para entrega de mail. Gera a tripla (mailer, host,
dominio).

ruleset 1 e 2: aplicado a todos endereos de mensagem.

ruleset 4: aplicado a todos endereos de mensagem, traduzindo


endereos internos para externos.

sendmail.cw

Edite o arquivo sendmail.cw, vamos dar um exemplo de um domain e IP, baseando-


se neste exemplo configure com os seus dados:

# sendmail.cw - include all aliases for your machine here.


suaempresa.com.br RELAY ---> Seu Domain Name aqui.
200.200.221 RELAY ---> O IP da sua rede interna aqui
localhost.localhost RELAY
Configurado o sendmail.cw o segundo passo seria criar o arquivo relay-domains
(normalmente em /etc/mail), para cria-lo use o pico ou vi (pico mais fcil):

vi relay-domains
ou

pico relay-domains
E coloque o domain name da sua empresa, mas, no meu caso eu uso o DNS para
cada maquina que eu tenho aqui no meu escritrio, ento eu aqui s utilizo o firewall para
proteger as mquinas internas e no uso IP Masquerade. Se voc usa 192.168.0.x para o
IP da sua rede interna, ento coloque no arquivo relay-domains:

192.168.0 RELAY
Significa que qualquer endereo IP que comece com 192.168.0.0 at 192.168.0.255
vai poder usar o servidor de email para RELAY evitando que outros que no estejam neste
alcance use o seu servidor para SPAM. Voc tambm pode usar nomes de email
[alguem@empresas.com.br], que voc quer bloquear:

192.168.0 RELAY
alguem@empresas.com.br DENY
Lembre-se que os espaos so TABs,depois de tudo configurado,de mais um restart
no sendmail,s para ter certeza de que tudo vai funcionar perfeitamente.No servidor de

- 82 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

email,d o comando,ou se preferir usando o cliente,use telnet para se conectar com o


servidor e ver as mensagens do mesmo lugar que voc esta mandando as
mensagens,lembre-se que voc precisa ser o root para fazer o comando abaixo.Se voc
no tem uma conta no servidor,crie uma conta antes de executar o comando abaixo.Para
criar a conta faa:

VIRTUSERTABLE

Agora partiremos para a configurao do virtusertable. Ele serve para voc ter no
mesmo servidor os e-mails (usuario@alfamidia.com.br e usuario@processor.com.br). Bem
vamos a um exemplo prtico:

# cat /etc/mail/virtusertable
usuario@alfamidia.com.br
@alfamidia.com.br diego
usurio@processor.com.br renato
@meu_dominio.com %1@bol.com.br

Todos os e-mails que chegarem para o domnio alfamidia.com.br iro para o usurio (local
na mquina) chamado "diego" com excesso do e-mail usuario@alfamidia.com.br, que ir
para o usurio "usuario". Os e-mails que chegarem para usurio@processor.com.br iro
para o usurio local na mquina "renato". Qualquer e-mail que chegar no domnio,
meu_dominio.com, ser redirecionado para o domnio bol.com.br mantendo o nome do
usurio. Feito isso digite:

# makemap hash virtusertable < virtusertable

GENERICSTABLE

A funo desta tabela determinar que os endereos da primeira coluna - no caso,


endereos locais - sero convertidos para os endereos direita. Quem eventualmente
responder a um de nossos e-mails, mandar a resposta para a caixa postal do provedor,
que atende 24h por dia e est registrada no DNS.

# cd /etc

# echo "" > genericstable


# echo "epx epx@netville.com.br" >> genericstable
# echo "root epx@netville.com.br" >> genericstable
# makemap -r hash genericstable.db < genericstable

# echo "vnsa.netville.com.br" > genericsdomain

2009 Alfamidia Prow LTDA. - 83


DNS e Correio Eletrnico

PostFix
A idia primaria do Postfix era produzir um substituto para o Sendmail, que fosse rpido, fcil
de administrar e seguro. Trata-se de um projeto Open Source bancado pela IBM, criado e mantido
por Wietse Venema.

Uma instalao padro do Postfix pode substituir facilmente o Sendmail sem alteraes
significativas no sistema, e transparentemente para o usurio final. As bases de usurios e bases de
correio so as mesmas (por default).

Os arquivos de configurao so simples e objetivos, preparados para que as variais e


opes de configuraes sejam bastante intuitivas e fceis de entender.

Autor e colaboradores

O autor deste software e Wietse Venema, Ph.D. em Fsica pela Groningen University na
Holanda. Ha diversos colaboradores que enviam "patches" e outras contribuies para a lista de
discusso. Em especial, Viktor Duchovni e Ralf Hildebrandt se destacam nas contribuies para o
desenvolvimento do Postfix.

Licenciamento

Um dos pontos que talvez mais contribua para a nao-adocao do Postfix como
servidor de email padro a licena um tanto quanto confusa que a IBM usa - "IBM
PUBLIC LICENSE VERSION 1.0 - SECURE MAILER"

Trata-se de uma verso modificada da licena BSD. Para se protegerem de


possveis processos (como a palhaada da SCO; afinal, a IBM tem grana), a IBM adicionou
clausulas quanto a distribuio em forma binria e "patcheada" do Postfix. Ha clausulas que
dizem que quem distribui verses pre-compiladas ou patcheadas (como o Debian, por
exemplo, que aplica patches no Makefile e algumas partes do cdigo) se torna
automaticamente um "parceiro legal" da IBM no caso de um eventual processo. No caso do
Postfix ser uma parte independente ou adicional do sistema, essas clausulas no se
aplicam.

Um exemplo bastante direto disso a nao-inclusao do Postfix no OpenBSD. Uma


vez que h patches no Makefile e adio de alguns scripts de inicializao prprios do
OpenBSD para compilao nos "ports", eles preferem no inclu-lo.

Como funciona

Basicamente, a arquitetura interna do sistema funciona sem um conceito muito rgido sobre
processos "pai-filho", mas com a idia de processos cooperativos. Basicamente, as tarefas que o
Postfix roda so independentes, e provem servios umas as outras (por exemplo, h uma tarefa
que prove reescrita/traduo de endereos para todos os outros processos do Postfix).

H um processo principal (o "master"), que no faz nada a no ser administrar os outros


daemons do Postfix: carregar o "smtpd" quando h necessidade de atender a porta SMTP, manter o
"trivial-rewrite" rodando para fazer a manipulao dos endereos de correio, chamar o "qmgr" para
gerenciar a fila de e-mails ainda no entregues, chamar o "pickup" que pega novas mensagens e as
joga na fila para entrega, etc.
- 84 2009 Alfamidia Prow LTDA.
DNS e Correio Eletrnico

O "master" tambm se encarrega de manter uma espcie de cache dos daemons que j
foram iniciados, reutilizando processos ou removendo-os depois de um tempo especifico em
ociosidade. Isso diminui bastante o tempo e esforo despendido na maneira mais tradicional,
chamando o processo e removendo-o logo que este acabe sua tarefa. H sempre um tempo que
leva pra carrega um processo e todas as suas bibliotecas do disco, alocar memria, etc. Da maneira
como o "master" gerencia isso, esse tempo praticamente nulo, uma vez que o processo j esta no
ar; ao mesmo tempo, o "master" mantm o sistema sob controle, no deixando processos inteis
ocupando recursos da maquina.

O "master" o nico processo que tem privilgios de root, uma vez que apenas o root tem
poderes para mudar de usurio (pra chamar um agente de entrega que roda como o usurio XYZ,
por exemplo), ou para ouvir a porta 25 (na maioria dos sistemas, portas abaixo de 1024 so
privilegiadas, e apenas o root pode ouvi-las).

interessante notar que o processo "master" no tem contato direto com nenhum outro
processo ou com o mundo exterior; seu nico objetivo descartar privilgios e chamar o processo
necessrio, j em um ambiente desprivilegiado.

Permisses / Usurios / Segurana

Todos os subprocessos internos do Postfix rodam sobre as permisses do usurio


"postfix" e grupo "postdrop" (pode ser modificado no arquivo de configurao
/etc/postfix/main.cf).

O grupo "postdrop" existe para fazer a separao de privilgios e permitir que outros
processos alem dos internos do Postfix possam injetar emails na fila. O diretrio
/var/spool/postfix/maildrop permite que o grupo "postdrop" escreva l (mas no permite que
ele leia, garantindo a privacidade dos emails), e o programa que injeta os emails l
(/usr/sbin/postdrop) possui flags setgid para o grupo "postdrop". interessante notar que
Postfix se recusa a funcionar se o usurio privilegiado "postfix" fizer parte do grupo
"postdrop".

Um outro ponto a favor da segurana com Postfix a facilidade de colocar partes


dele (ou o Postfix inteiro) dentro de um ambiente chroot. Basta mudar um flag no arquivo de
configurao, e o processo j ser iniciado fechado dentro do diretrio de spool. (Nota -
"chroot" seria como "enjaular" um processo dentro de um diretrio, impedindo que ele
acesse quaisquer arquivos fora dele)

Note tambm que, a despeito de todas as permisses, os subprocessos do Postfix


no confiam nos dados que recebem ou na estrutura das mensagens na fila; isso quer dizer
que h uma verificao da integridade/correo da mensagem e das informaes internas
que o Postfix usa antes de manusear a mensagem. Isso torna o sistema mais estvel e
previne de forma bastante efetiva contra crashes e buffer overflows por arquivos
corrompidos no disco ou submetidos por usurios maliciosos.

Seguem abaixo as permisses do diretrio de spool e tambm do injetor de emails:

drwx------ 18 postfix root 4096 Jul 4 2003


active/
drwx------ 18 postfix root 4096 Jul 19 2003
bounce/
drwx------ 2 postfix root 4096 Jul 3 2003
corrupt/

2009 Alfamidia Prow LTDA. - 85


DNS e Correio Eletrnico

drwx------ 18 postfix root 4096 Aug 13 2003


defer/
drwx------ 18 postfix root 4096 Aug 13 2003
deferred/
drwx------ 6 postfix root 4096 Nov 11 05:57
flush/
drwx------ 2 postfix root 4096 Jul 3 2003
hold/
drwx------ 18 postfix root 4096 Apr 6 08:23
incoming/
drwx-wx--- 2 postfix postdrop 200704 Apr 6 08:23
maildrop/
drwxr-xr-x 2 root root 4096 Nov 21 16:09
pid/
drwx------ 2 postfix root 4096 Apr 6 17:02
private/
drwx--x--- 2 postfix postdrop 4096 Apr 6 17:02
public/
drwx------ 2 postfix root 4096 Jul 4 2003
saved/

-rwxr-sr-x 1 root postdrop 723708 Sep 22 2003


/usr/sbin/postdrop

Sub-Processos

Como j mencionado, o Postfix composto por uma poro de pequenos daemons,


cada um com um tarefa especifica, controlados pelo processo "master". Aqui esto listados
alguns dos mais importantes sub-processos do Postfix e o que cada um dele faz

smtpd - o responsvel por tratar requisies SMTP e aplicar as primeiras filtragens


no nvel do protocolo SMTP em si (remetentes, destinatrios, relays, blacklists, etc.)

smtp - a parte client que faz a entrega de mensagens via SMTP para outros hosts

qmgr - (queue manager) a parte do Postfix que controla a fila de mensagens,


dizendo quais devem tentar ser entregues, quais domnios tem prioridade na entrega, e
assim por diante. chamado de 5 em 5 minutos para efetuar essas operaes. Emails em
transito "normal", ou seja, que acabaram de ser injetados na fila, no necessariamente
passam pelo qmgr; elas tentam ser entregues assim que so injetados na fila, seja via
"smtpd" ou pelo "postdrop"

pickup - responsvel por pegar mensagens injetadas na fila pelo "postdrop" e


repassa-las para o "cleanup"

trivial-rewrite - cuida das tarefas de resoluo/canonizao/re-escrita de endereos


de correio. Apelidos de email e outros tipos de mapeamentos e transportes so tratados por
esse sub-processo.

cleanup - faz verificaes de integridade na mensagem, e ocasionais


correes/alteraes de cabealhos ou endereos necessrios. este sub-processo

- 86 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

tambm quem aplica regras de cabealho/corpo da mensagem e manchem o ambiente da


fila interna de correio "nos conformes"

pipe

Este sub-processo o verdadeiro "pulo do gato" do Postfix. Ele permite que se


envie uma mensagem da fila do Postfix para um processo externo ao servio. Com ele,
extremamente simples montar filtros de contedo, antivrus, anti-spams, agentes de entrega
de mensagem personalizados, e qualquer coisa que se possa imaginar, permitindo total
controle sobre o processo "pipeado", sem precisar aplicar nenhum patch no Postfix.

atravs do "pipe" que se consegue usar o "maildrop" do Courier, ou o servio de


storage/IMAP do Cyrus, UUCP e outros, incluindo a maioria dos filtros de contedo e
similares operando hoje no Postfix.

Voc vai observar mais abaixo que o "pipe" permite diversas flags na hora de
chamar o comando. Podem haver algumas variaes das opes de verso pra verso do
Postfix; consulte a man-page do pipe pra detalhes atualizados.

Configuraes

Quem j configurou um Sendmail sabe o trabalho que da editar um arquivo de


configurao criptogrfico, e, muitas vezes, confuso. Quem j trabalha h bastante tempo
com ele talvez j se sinta a vontade com os comandos muitas vezes estranhos do
sendmail.cf, ou as macros m4 tambm muitas vezes igualmente criptogrficas.

Alguns outros MTA's talvez no trabalhem com 1 nico arquivo de configurao,


mas com uma dzia de arquivinhos, cada um com um pedacinho da configurao.

O Postfix mostra-se bastante organizado nesse sentido. H basicamente 2 arquivos


de configurao, permitindo tambm que se usem diversos arquivos separados para partes
da configurao.

Um desses arquivos de configurao, o "/etc/postfix/master.cf", controla o


funcionamento do processo "master", dizendo a ele como tratar e gerenciar os outros sub-
processos do Postfix.

O "/etc/postfix/main.cf" controla o funcionamento do sistema de correio, restries,


relays, e etc.

master.cf

O arquivo master.cf basicamente uma tabela que o processo "master" l para


comandar os outros subprocessos. Sua estrutura a seguinte:

#
=============================================================
=============

2009 Alfamidia Prow LTDA. - 87


DNS e Correio Eletrnico

# service type private unpriv chroot wakeup maxproc


command + args
# (yes) (yes) (yes) (never) (50)
#
=============================================================
=============

interessante notarmos a facilidade de fazer chroot em um processo. Basta


mudarmos o flag "chroot" para "y" e j temos o processo preso dentro do diretrio de spool.

A coluna "maxproc" nos permite limitar o numero mximo de instancias simultneas


de um processo que podem estar rodando. Podemos observar a possibilidade de aumentar
ou diminuir o limite de um tipo especifico de subprocesso de acordo com nossas
necessidades. Por padro, ele vem preparado pra no atrapalhar a performance geral da
maquina, ao mesmo tempo que manchem um limite razovel de processos para acomodar
um servidor mediano (50 instancias de cada processo, no mximo). Nota: quando for alterar
esta opo, faca com aumentos progressivos; isso vai lhe permitir ver ate onde o seu
sistema pode aguentar antes de acabarem-se os file descriptors ou descritores de arquivos.
Coisas engraadas podem acontecer quando um inocente "ls" retorna um erro de "Too
many open files" :)

A coluna "unpriv" diz se o processo roda como "postfix" (desprivilegiado) ou "root"


(privilegiado).

A coluna "wakeup" serve para sub-processos que rodam em base regular,


independente de eventos no sistema.

A "private" diz se mais de um processo pode acessar a mesma instancia do servio.


Note que sub-processos "private" no so ativados por eventos do sistema de correio; so
ou agendados com tempo, ou respondem a uma solicitao do usurio (o showq, por
exemplo, responde ao comando "mailq").

Aqui vai o resto do master.cf:

smtp inet n - n - -
smtpd
# -o content_filter=filter:filter
pickup fifo n - n 60 1
pickup
cleanup unix n - n - 0
cleanup
qmgr fifo n - n 300 1
qmgr
rewrite unix - - n - -
trivial-rewrite
bounce unix - - n - 0
bounce
defer unix - - n - 0
bounce
flush unix n - n 1000? 0
flush
smtp unix - - n - -
smtp

- 88 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

showq unix n - n - -
showq
error unix - - n - -
error
local unix - n n - -
local
virtual unix - n n - -
virtual
lmtp unix - - n - -
lmtp
proxymap unix - - n - -
proxymap
#
# Interfaces to non-Postfix software. Be sure to examine
the manual
# pages of the non-Postfix software to find out what
options it wants.
# The Cyrus deliver program has changed incompatibly.
#
#cyrus unix - n n - -
pipe
# flags=R user=cyrus argv=/cyrus/bin/deliver -e -m
${extension} ${user}
#uucp unix - n n - -
pipe
# flags=Fqhu user=uucp argv=uux -r -n -z -a$sender -
$nexthop!rmail ($recipient)
filter unix - n n - -
pipe
flags=Rq user=preproc argv=/opt/blablabla/filter -f
${sender} -- ${recipient}
relay unix - - n - -
smtp

Uma estao de trabalho, por exemplo, no vai necessitar do "smtpd". Podemos


comentar essa linha do master.cf e economizar recursos. Para um servidor de envio de
newsletters ou maillist, por exemplo, podemos subir o limite de processos "smtp" para
agilizar a entrega.

Outro fato interessante a facilidade de "debug" destes processos. Para a maioria


deles, basta acrescentar "-v" ao comando e ele j gerara uma quantidade considervel de
informaes sobre o que acontece internamente com ele (muito til ao debugar problemas
com Cyrus-SASL ou setups complexos de LDAP/MySQL, por exemplo).

main.cf

Quando se instala o servio Postfix, a nica alterao necessria no main.cf a


opo "myhostname". Ela define o hostname que aparecera em requisies, banners do
SMTP, mensagens de erro, alem do domnio usado na autenticao Cyrus-SASL.

2009 Alfamidia Prow LTDA. - 89


DNS e Correio Eletrnico

A sintaxe do arquivo de configurao bastante simples. Alem dos valores


explcitos (como VARIAVEL = VALOR), podemos referenciar arquivos contendo esses
valores. Veja um exemplo:

myhostname = postfix1.algumlugar.com
mydestination = /etc/postfix/mydomains

O arquivo "mydomains" contem uma lista de domnios atendidos pelo servidor. Pode
ser um domnio por linha, ou separados por vrgulas.
Vamos ver mais adiante o significado das principais variveis de configurao do
main.cf.

Macros

Alem da facilidade de podermos referenciar um arquivo contendo dados, podemos


criar macros dentro do main.cf, englobando diversas configuraes de acesso de uma vez
s. Por exemplo:

fecha_relay = permit_mynetworks, permit_sasl_authenticated,


reject_unauth_pipelining, reject_unauth_destination

smtpd_recipient_restrictions = $fecha_relay

Sobreposio de variveis no master.cf

possvel sobrepormos o valor de alguma varivel diretamente na chamada do


servio no "master.cf". Isso mostra-se muito til quando temos mais de uma instancia de
um processo rodando, ou quando queremos mudar uma varivel global de forma que ela s
exista neste processo em particular.

Por exemplo, podemos ter mais de uma instancia do processo "smtp" (no caso, o
"smtp" e o "relay"), e queremos passar uma varivel dizendo ao "relay" para usar apenas a
interface com o IP 192.168.0.200. Ou, num exemplo bastante comum, termos um filtro de
contedo atuando apenas no processo "smtpd"; as outras partes do sistema rodam
normalmente sem utilizar um filtro de contedo.

Para isso, basta adicionarmos "-o varivel=valor" na chamada do processo no


"master.cf" (no exemplo acima, o filtro de contedo esta comentado). Ou poderamos ter 2
instancias do "smtpd", uma utilizando a porta 25 com filtragem de contedo, e outra na
porta 1025 operando sem filtragem de contedo.

Backends/Fontes de Dados/Mapeamentos e Macros

Um dos recursos mais interessantes do Postfix so os mapeamentos, tambm


chamados de backends ou fontes de dados. a habilidade de lidar com uma grande
variedade de tipos de mapeamentos, das mais diversas formas, que confere uma incrvel
flexibilidade ao Postfix. Macros so pequenas partes de programas que manuseiam os
resultados fornecidos pelos mapeamentos.
- 90 2009 Alfamidia Prow LTDA.
DNS e Correio Eletrnico

Macros mais comuns

Algumas macros bastante usadas em configuraes do smtpd:

check_client_access mapeamento:/blabla - verifica o IP/Hostname do MTA


conectado ao smtpd

check_recipient_access mapeamento:/blabla - verifica o acesso ao destinatario

check_sender_access mapeamento:/blabla - verifica se o remetente tem acesso ao


sistema

reject_unknown_sender_domain - rejeita remetentes com domnios desconhecidos

reject_unknown_recipient_domain - idem, para destinatrios com domnios


desconhecidos

permit_sasl_authenticated - permite usurios que se autenticaram no smtpd pelo


mecanismo SASL

permit_mynetworks - permite o acesso por clientes de email nas redes includas na


definio do "mynetworks"

reject_unauth_destination - nega acesso a no ser para os domnios que o Postfix


recebe emails, incluindo rejeio de relays

O que so Mapeamentos

Mapeamentos so, basicamente, macros onde passamos um valor e obtemos uma


resposta. Os valores podem ser endereos de remetentes, destinatrios, IPs, hostnames,
domnios, ids, endereos de Mail eXchangers (MX), ou qualquer outra coisa. As repostas
podem ser uma das macros primitivas OK, REJECT, DISCARD, HOLD ou vazio, um valor
arbitrrio, ou uma outra macro pre-definida, que por sua vez conter mapeamentos que
respondero com uma das macros primitivas, um valor arbitrrio, ou uma outra macro pre-
definida, que por sua vez...

As macros primitivas OK e REJECT tem seu significado bastante obvio; a macro


DISCARD faz com que a mensagem seja silenciosamente descartada da fila sem notificar o
remetente; HOLD coloca-a numa fila de inspeo (visualizada com o comando "postcat"),
onde ela aguarda liberao com o comando "postsuper". Uma resposta vazia faz com que
se passe para a prxima macro na seqncia de verificaes, ou, se for a ultima, encerra
com um OK.

Por exemplo, eu posso usar a macro "check_client_access hash:/etc/postfix/ips-


spammers" dentro do smtpd_client_restrictions; eu estaria perguntando para o backend
hash usando o arquivo /etc/postfix/ips-spammers algo mais ou menos como: "e o IP
200.200.200.200? Deixo passar?" "REJECT com a mensagem Sai fora, spammer" ou "e o
IP 10.10.10.10?" "Pesquise a macro VERIFICA_INTERNO"

2009 Alfamidia Prow LTDA. - 91


DNS e Correio Eletrnico

Backends mais comuns

Quando se compila o Postfix sem nenhuma opo especial, ele j vem com os
backends padres: static, nis, regexp, environ, proxy, btree, unix, hash. Dependendo da
verso da Berkeley DB e do sistema operacional, pode haver o backend dbm ou similares,
sobrepondo o hash. Vale lembrar que mapeamentos baseados na Berkeley DB precisam
ser "compilados" com o comando "postmap /algum/lugar/arquivo"; esse comando gera os
ndices e outras estruturas necessrias dentro do "/algum/lugar/arquivo.db".

H tambm os backends para MySQL e LDAP (bastante estveis e robustos), que


precisam ser explicitamente solicitados no momento da compilao.

Adicionalmente, h patches para os backends Postgre e TCP (estes no so to


estveis e robustos ainda, embora funcionem bem). Falou-se um pouco na lista de
discusso sobre patches que adicionem Oracle na lista de backends; este, no entanto,
parece ser mais uma lenda urbana do que uma realidade slida e palpvel :)

Alguns Exemplos

HASH -
/etc/postfix/remetentes_lixo:
hotmail.com REJECT Keep your junk mail
hahaha@sexyfun.net REJECT No, thanks

LDAP -
dentro do main.cf:
basedn = o=blablabla, c=br
ldaphost = 10.10.0.2
ldapmbox_timeout = 30
ldapmbox_search_base = $basedn
ldapmbox_server_host = $ldaphost
ldapmbox_server_port = 389
ldapmbox_query_filter = (mail=%s)
ldapmbox_result_attribute = maildir
ldapmbox_scope = sub
ldapmbox_dereference = 0

REGEXP -
/etc/postfix/client_dsl_ban:
/.*dsl\..*/ REJECT No DSL allowed

Interoperao de macros

A tarefa "smtpd" especialmente sensvel quanto a interoperacao de macros


quando efetua suas verificaes. Para evitar confuses em ambiente pre/pos-chroot, e
manter suas tabelas internas organizadas, ele se utiliza da configurao

- 92 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

"smtpd_restriction_classes" para saber quais macros nao-padrao serao aceitas dentro das
verificaes.

Assim, se pretendemos usar alguma de nossas macros dentro de verificaes do


smtpd, podemos declara-las como fazendo parte das restriction classes (embora no seja
obrigatoriamente necessrio com verses mais recentes do Postfix, ajuda a manter o smtpd
organizado).

Os outros processos funcionam normalmente com o uso de macros.

Transportes

possvel forar alguns roteamentos de mensagens dentro das filas do Postfix.


Quando se especifica um caminho diferente do que o sistema usaria normalmente, estamos
criando um mapeamento de transporte.

Um transporte no se refere apenas ao destinatrio final da mensagem, a ser


entregue via smtp; podemos criar mapeamentos de transporte para dentro de outros sub-
processos do Postfix.

Por exemplo, podemos querer que o domnio zazazaza.net tenha suas mensagens
entregues para uma base Cyrus, o bliblibli.org ter suas mensagens entregues via
"maildrop" do Courier, mas um usurio fulano@bliblibli.org ser entregue em um mailbox
padro do sistema, no esquema tradicional do Sendmail. J emails para o domnio
nerds.net ser repassado via SMTP para o servidor 10.10.10.10. Nota: Estes servios
precisam estar pre-definidos no master.cf para podermos usa-los.

Basta criarmos um mapeamento de transporte com a estrutura a seguir (exemplo


usando o backend hash:) e referenciarmos dentro da diretiva "transport_maps" no main.cf
(transport_maps = hash:/etc/postfix/transport)

/etc/postfix/transport:
fulano@bliblibli.org local:
zazazaza.net cyrus-deliver:
bliblibli.org courier-maildrop:
nerds.net smtp:[10.10.10.10]

Um fato interessante a respeito do transporte "smtp:" - os colchetes [] dizem ao


SMTP que entregue a mensagem ao destino especificado, sem procurar pelo MX do
hostname/ip passado. Se tivssemos colocar "smtp:smtp.nerds.org", a tarefa "smtp", ao
tentar fazer a entrega, procuraria pelo registro MX do host smtp.nerds.org ao invs de
entregar diretamente ao host smtp.nerds.org.

Agentes

Alguns sub-processos do Postfix podem ser encarados como Agentes; eles sero
responsveis por entregar uma mensagem para algum lugar fora do Postfix.

2009 Alfamidia Prow LTDA. - 93


DNS e Correio Eletrnico

Delivery Agents

Delivery Agents (como o proprio nome j diz) so agentes de entrega de


mensagens. Alguns dos principais Delivery Agents dentro do Postfix so:

local - emula o comportamento do nosso velho amigo Sendmail; entrega as


mensagens no /var/spool/mail/USUARIO, l o /etc/aliases, aceita pipes nos aliases, passa
pelo procmail, etc.

procmail - ele, por default, no um Delivery Agent valido; ele faz parte do local
delivery agent.

maildrop - esse faz parte das extenses do Postfix, que no fazem necessariamente
parte dos comandos default. Voc precisa configura-lo no master.cf (ele usa o comando
"pipe" do Postfix para repassar a mensagem para o maildrop); o Maildrop faz parte dos
utilitrios do Courier.

lmtp - o Local Mail Transfer Protocol uma extenso do protocolo (E)SMTP; tem
basicamente os mesmo comandos, embora seja desenhado para situaes em que o
recebedor no gerencia fila (para funcionar como um Mail Delivery Agent, sem "queue")

virtual - o agente de entrega de correio que entende domnios virtuais. Com o local
delivery agent, apenas o username (e no username@domnio) considerado na hora de
fazer uma entrega local. J com o virtual, podemos ter um mesmo username em domnios
distintos com caixas de correio distintas. Por exemplo, agora podemos ter
webmaster@meudominio1.com e webmaster@meudominio2.com (para quem faz hosting,
isso um recurso indispensvel, uma vez que todo site hospedado quer ter seu prprio
endereo de webmaster).

pipe - j considerado anteriormente; abre as portas para qualquer agente externo de


entrega (como o maildrop, por exemplo)

Maildir/Mailbox

J que estamos falando de Delivery, nada mais justo que comentarmos um pouco
sobre os 2 formatos bsicos de armazenamento de caixas de correio reconhecidos
nativamente pelo Postfix.

O formato Mailbox aquele que guarda todas as suas mensagens num nico
arquivo de spool. O formato Maildir utiliza uma estrutura de diretrios e arquivos
independentes para arquivar mensagens.

O formato Maildir consiste em tratar cada mensagem como um arquivo independente


dentro de um diretrio (por isso MAIL+DIR). Esse formato bastante interessante porque
agrega muitas vantagens:

dispensa o uso de LockFiles para travar a Mailbox para que s um processo escreva
por vez, permitindo ter N programas escrevendo no mesmo Maildir sem problemas;

no h problemas com indexao do mailbox;

desnecessrio abrir e indexar o mailbox inteiro pra extrair uma nica mensagem;

- 94 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

no h corrupo do mailbox, uma vez que um diretrio; o Maximo que pode


ocorrer uma mensagem se corromper;

Voc talvez esteja pensando: se Maildir tem tantas vantagens sobre Mailbox, por que
no se usou Maildir desde o inicio dos tempos?
Uma desvantagem que o Maildir causa quando se tem muitas mensagens pequenas.
Dependendo do seu filesystem, cada arquivo vai ocupar blocos mltiplos de 4k no disco
(isso definido na hora da formatao do filesystem). Isso quer dizer que mensagens com
1k iro ocupar 4k no disco, mensagens com 4.1k iro ocupar 8k, e assim por diante. Se
houver 1000 mensagens com 1k ou 4.1k, por exemplo, teramos um desperdcio de
aproximadamente 3Mbytes.

No inicio da era da computao, cada kbyte de disco rgido era defendido a unhas e
dentes, uma vez que o custo de uma unidade de maior capacidade era bastante alto. O
formato Mailbox promove uma melhor utilizao do espao em disco. Fora isso,
normalmente se esperava que o usurio fizesse o download das mensagens e limpasse a
caixa depois disso; no se imaginava que seriam necessrios esquemas mais poderosos
de indexao de mensagens (para o uso com IMAP, por exemplo), uma vez que isso
aconteceria no cliente de email, e no no server.

Quem tem uma caixa de 100Mbytes arquivada no servidor, e que precisa ser acessada
via IMAP, por exemplo, vai perceber a diferena brutal de velocidade entre os 2 formatos j
na hora de indexao. Num ambiente corporativo, so razoavelmente comuns caixas de
200M, 500M ou mesmo 1Gbyte de emails, todos eles contendo informaes importantes
para a corporao. Imagine agora como seria para apagar uma mensagem do "meio" da
mailbox; todo o contedo teria q ser copiado para um local temporrio, excluindo aquele
registro especifico, e depois copiado de volta do temporrio para o Mailbox.

UCE/SPAM

UCE a abreviao para Unsolicited Commercial Email, ou mensagem comercial


nao-solicitada, tambm conhecido como o SPAM nosso odiado de cada dia. O Postfix conta
com diversas regras e macros para ajudar no combate a SPAM.

Essas restries e macros tem se mostrado bastante efetivas. Note que a maioria
dos grandes provedores brasileiros usa o Postfix em suas estratgias de combate a SPAM.

Vamos considerar algumas dessas restries:

Deteco de clientes/MTAs "mal educados"

A maioria dos softwares de mailing normalmente pula algumas etapas da negociao


SMTP para agilizar o processo de entrega de SPAM. Outras vezes, quem escreveu o
software de mailing possui um conhecimento superficial sobre o protocolo SMTP e no
implementa algumas regras pelo fato de desconhece-las. Essas violaes de
especificaes do protocolo SMTP podem ser usadas na deteco e combate a SPAM.
Algumas das macros disponveis so:

check_helo_access, check_client_access, check_recipient_acccess,


check_sender_access - Verificam a respectiva informacao (identificao de maquina
2009 Alfamidia Prow LTDA. - 95
DNS e Correio Eletrnico

ou HELO, endereo IP ou hostname, destinatrios e remetentes) numa fonte de


dados/mapeamento;

reject_unknown_sender_domain, reject_unknown_recipient_domain - Verificam se o


domnio do remetente ou destinatrio existem (possuem um registro DNS A ou MX);

reject_non_fqdn_sender/recipient - Impede o uso de "Abreviaes" para remetentes


e destinatrios; por padro, o servidor adicionaria seu hostname quando o domnio
do remetente/destinatrio esta em branco;

reject_unknown_client - Impede que clientes sem registro de "reverso" (PTR)


acessem o servidor;

reject_invalid_hostname, reject_non_fqdn_hostname, reject_unknown_hostname -


Foram o uso de comandos HELO/EHLO validos no inicio da sesso SMTP;
mostram-se bastante teis no combate a "mailers", uma vez que a maioria deles usa
hostnames falsos ou nao-completamente-qualificados (non_fqdn) no comando
HELO. No mundo real, o "reject_unknown_hostname" causa mais dano do que
beneficio, pois ele procura o endereo fornecido no DNS. impressionante a
quantidade de servidores (validos) usados nomes internos ou que no podem ser
resolvidos. Por exemplo, o nome DNS do servidor de e-mail pode ser
mail.dominio.com, mas a maquina pode estar configurada para enviar emails como
smtp.dominio.com;

possvel tambm detectar ou forar o uso de sintaxes especificadas em RFCs. As


configuraes possveis no main.cf so:
strict_rfc821_envelopes = yes - Exige que o endereo informado na sesso seja um
endereo de email valido e contido entre <>. Por exemplo, seriam opes invalidas:
MAIL FROM: teste@dominio.com , MAIL FROM: Email Teste
<teste@dominio.com>; Apenas a forma MAIL FROM: <teste@dominio.com> seria
valida.

smtpd_helo_required = yes - Exige que se passe um comando HELO/EHLO antes


de passar os dados da sesso.

RBLs

RBLs (Real-time Black List - criadas em 1997 por Paul Vixie no projeto MAPS)
durante muito tempo foram nossa nica arma contra sistemas mal-configurados (os Open
Relays) ou contra spammers. A tcnica consiste em, de alguma forma, consultar uma lista
que diz se o endereo IP pode ou no acessar o servio.

A forma mais comum de RBL so as DNSRBL (DNS RBL), onde a consulta feita
via DNS. Por exemplo, supondo que estamos usando a RBL "relays.ordb.org" para saber se
o IP 127.0.0.2 esta bloqueado ou no. O endereo IP deve ser invertido para a consulta.
Isso facilita termos no servidor DNS algo do tipo *.0.0.127. Faramos uma consulta assim:

$ host -t A 2.0.0.127.relays.ordb.org
2.0.0.127.relays.ordb.org has address 127.0.0.2

- 96 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

Se o comando retornar um endereo IP, isso significa que o host esta bloqueado.
Adicionalmente, pode haver tambm um registro TXT que informa o motivo do bloqueio.
Por exemplo:

$ host -t txt 2.0.0.127.relays.ordb.org


2.0.0.127.relays.ordb.org text "Listed by ORDB - for
testing purposes only"

Esse tipo de bloqueio tem se deteriorado bastante ultimamente; as RBLs


funcionavam bem quando tnhamos "poucos" servidores de email. A tarefa de enviar email
ficava sempre com o SMTP do provedor, pois as linhas discadas eram lentas e instveis
demais para se fazer o envio direto. Logo, os provedores prezavam seu nome; ter um
servidor numa blacklist era uma desonra e uma desgraa para o SysOp do provedor. No
entanto, com o aumento das conexes "caseiras" de alta velocidade, associado a
"anonimicidade" que os IPs dinmicos provem, tem feito com que qualquer pessoa seja
capaz de mandar toneladas de spam no conforto e segurana de seu lar. Uma vez que seu
IP dinmico atual foi bloqueado, voc simplesmente desconecta e pega outro IP e continua
sua tarefa infame de envio de spam.

Para usar RBLs no Postfix, basta adicionarmos as macros "reject_rbl_client


domnio.da.rbl" na configurao smtpd_client_restrictions.

rhsbl

Uma evoluo das RBLs convencionais so as RHSBL (Right-Hand-Side Blackhole


List). Essas RBLs destinam-se a verificar a "parte da direita" dos endereos. Ate o momento
se usam 2 tipos de RHSBL, para domnios e para hostnames (ao invs de IPs).

As macros usadas pelo Postfix so "reject_rhsbl_sender domnio.da.rbl" e


"reject_rhsbl_client domnio.da.rbl" nas configuraes de smtpd_sender_restrictions e
smtpd_client_restrictions respectivamente.

SPF

SPF (Sender Policy Framework) uma especificao adicional ao SMTP que esta
em fase de publicao em RFCs e apreciao pela IETF. Basicamente, trata-se de uma
maneira de dizer aos outros servidores na Internet de onde emails validos do seu domnio
vem. Voc publica um registro no DNS do seu domnio especificando qual servidores
podem enviar emails @seudominio.com.

Uma especificao dessa impediria, por exemplo, a falsificao de remetentes de


correio, ou a ao de vrus que mandam emails com remetentes randmicos.

O processo de adicionar o registro no DNS bastante simples de ser feito. H ate


um wizard no site oficial do SPF - http://spf.pobox.com/

A partir da verso 2.1 do Postfix j h suporte ao SPF atravs do Policy Daemon. O


Policy Daemon permite que voc chame tenha um servio externo ao Postfix fazendo
verificaes. No prprio site do SPF h uma documentao sobre integrao com Postfix.

2009 Alfamidia Prow LTDA. - 97


DNS e Correio Eletrnico

Listas de palavras por cabealho/corpo/anexos

possvel usar filtros de contedo simples com o Postfix, para efetuar uma filtragem
bsica de cabealhos e corpo da mensagem. Trata-se das opes de configurao
header_checks e body_checks no main.cf. Por exemplo, podemos adicionar a linha
"header_checks = regexp:/etc/postfix/regras_header", para usarmos o mapeamento de
regular expressions para verificar os cabealhos de acordo com regras no arquivo
/etc/postfix/regras_header.

Esse tipo de filtragem permite que se barre mensagens na sesso SMTP, antes
mesmo da mensagem passar para a fila. Embora isso possa ser vantajoso no sentido de
no ser necessrio enviar uma mensagem de bounce ou retorno quando a mensagem no
aceita, pode trazer problemas srios de performance para o servidor, uma vez que a
mensagem toda TEM que ser analisada e filtrada ANTES de se dar o "OK" na sesso
SMTP.

Os filtros mais eficientes so feitos com as opes de filtros de contedo externos.

"Anvil" Service - deteco automtica de DoS/Bulk Mailing

Esta uma feature do Postfix 2.1, ainda em estagio experimental (no includa na
compilao "default"). Trata-se de um servio do Postfix que manchem estatsticas sobre o
numero de conexes/minuto e o numero total de conexes que um determinado host faz ao
servidor SMTP.

O servio "anvil" capaz de bloquear um cliente se este comear a fazer muitas


conexes de uma vez, ou muitas conexes seguidas. Quem j teve algum spammer
tentando fazer bulk mailling no seu servidor sabe como isso pode ser incomodo.

Suas variveis principais de configurao so:

smtpd_client_connection_count_limit - Numero mximo de conexes por host

smtpd_client_connection_rate_limit - Numero Maximo de conexes/minuto que um


host pode fazer

smtpd_client_connection_limit_exceptions - Hosts que podem "escapar" da


restrio; normalmente, os hosts contidos em mynetworks.

LDAP no Postfix

O Postfix permite o uso de mapeamentos LDAP (ele no compilado por default; de


uma lida no LDAP_README - no so necessrios patches).

Com o LDAP, possvel montar uma infinidade de aplicaes diferentes,


interconectando com diferentes hosts ao mesmo tempo. Podemos acessar address books
de servidores Lotus Notes, Microsoft Exchange, e outros.

A estrutura dos dados LDAP tende a ser mais flexvel que qualquer outra, inclusive
bancos de dados MySQL, PostgreSQL e similares. A possibilidade de aplicar filtros nos
resultados (com o _result_filter) abre muitas possibilidades interessantes, como a idia do
- 98 2009 Alfamidia Prow LTDA.
DNS e Correio Eletrnico

Mail Hub a seguir. Alem disso, bases LDAP so facilmente replicveis, permitindo a
montagem de servidores de email com recursos de Fail Over (com Fail Over para os dados
LDAP tambm, conforme mostrado a seguir)

Mail Hubs

Mail hubs so concentradores de correio. Na verdade, o plano fazer com que


vrios Postfix possam entregar correio dentro de um mesmo domnio, mas com usurios
em servidores diferentes. Queremos que o usurio "fulano@meudominio.com" receba
emails no servidor mail1.meudominio.com. J o usurio "beltrano@meudominio.com" deve
recebe-los no servidor "mail2.meudominio.com". O "ciclano@meudominio.com" deve
recebe-los num servidor XYZ. Isso tudo sem re-escrever o endereo do usurio (como
mudar fulano@meudominio.com para fulano@mail1.meudominio.com).

Podemos fazer isso usando mapeamentos LDAP para a opo "transport_maps".


Um mapeamento de email pode ser algo parecido com isso:

transport_maps = ldap:ldaptransport,
hash:/etc/postfix/transport

basedn = o=MinhaEmpresa
ldaphost = localhost
ldaptransport_timeout = 30
ldaptransport_search_base = $basedn
ldaptransport_server_host = $ldaphost
ldaptransport_server_port = 389
ldaptransport_query_filter =
(&(mail=%s)(mailhost=*)(!(mailhost=$myhostname)))
ldaptransport_result_attribute = mailhost
ldaptransport_result_filter = smtp:[%s]
ldaptransport_scope = sub
ldaptransport_dereference = 0

Assim, teramos uma entrada no LDAP similar a esta:

dn: mail=fulano@meudominio.com, o=MinhaEmpresa


objectClass: VirtualMailUser
mail: fulano@meudominio.com
homedirectory: /var/spool/vmail/fulano@meudominio/
mailquota: 50000000
mailhost: mail1.meudominio.com

dn: mail=beltrano@meudominio.com, o=MinhaEmpresa


objectClass: VirtualMailUser
mail: beltrano@meudominio.com
homedirectory: /var/spool/vmail/beltrano@meudominio/
mailquota: 50000000
mailhost: mail2.meudominio.com

dn: mail=ciclano@meudominio.com, o=MinhaEmpresa


objectClass: VirtualMailUser
mail: ciclano@meudominio.com

2009 Alfamidia Prow LTDA. - 99


DNS e Correio Eletrnico

mailhost: xyz.meudominio.com

Nesse esquema, todos os servidores Postfix so capazes de trocar mensagens com


usurios dentro do mesmo domnio, graas as configuraes de transporte de mensagem.
Basta replicarmos os diretrios LDAP entre os mltiplos servidores e j montamos um
esquema de mail hub usando Postfix e LDAP.

Verificando destinatrios em outros LDAPs

Podemos configurar nosso Postfix, por exemplo, como o MX de um domnio para


depois repassar as mensagens para um servidor Exchange ou Notes. Seria interessante j
descartarmos mensagens para usurios desconhecidos j no Postfix, ao invs de repassar
a mensagem para o Exchange ou Notes para que esses depois faam o bounce.

Podemos criar um mapeamento para o AD do Windows ou para o servidor LDAP do


Notes assim:

local_recipient_maps = ldap:ldapNotes

ldapNotes_timeout = 30
ldapNotes_search_base = o=CertificadorDoNotes
ldapNotes_server_host = servidorLotusNotes
ldapNotes_server_port = 389
ldapNotes_query_filter = (mail=%s)
ldapNotes_result_attribute = mail
ldapNotes_scope = sub
ldapNotes_dereference = 0

Da mesma forma poderamos estar usando um Exchange, ou qualquer outra base


LDAP disponivel.

Fail-Over de Fontes de Dados

extremamente simples montar um Fail Over com servidores LDAP ou MySQL.


Basta adicionar mais hosts no campo host da configurao. Por exemplo:

ldaptransport_server_host = servidor_ldap1 servidor_ldap2


servidor_ldap3 ...
hosts = host1.dominio.com host2.dominio.com unix:/file/name

Note que adicionar hosts em um mapeamento LDAP diferente de adicionar mais


mapeamentos LDAP pra hosts redundantes. Por exemplo, a configurao a seguir NAO
implementa mecanismos de Fail Over:

virtual_mailbox_maps = ldap:ldapMailbox1,
ldap:ldapMailbox2, ldap:ldapMailbox3

- 100 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

SPF

Talvez voc j tenha ouvido falar "desse tal de SPF" e se pergunte que novidade
essa que apareceu na Internet.

A sigla significa "Sender Policy Framework", ou "Estrutura de Polticas de


Remetente". Diz a lenda que originalmente a sigla significava "Sender Permitted From",
mas que foi alterada para refletir melhor o tipo de trabalho e ferramentas que a idia do
SPF traria.

Nesse artigo vamos ver pra que serve o SPF, como ele ajuda o controle de email
mundial e como usa-lo, tanto do lado "cliente" como "servidor".

Para que serve

O SPF basicamente serve para dizer aos servidores de email espalhados pela
Internet quais endereos IP/servidores esto autorizados a enviar email (remetente) com o
domnio designado.

Assim, eu, como administrador do domnio xyz.com.br, publicarei um registro SPF


dizendo que os servidores 200.200.200.200 e 200.200.200.201 esto autorizados a enviar
emails com remetentes @xyz.com.br; quaisquer outros servidores tentando enviar emails
como @xyz.com.br so falsos, e tais emails devem ser rejeitados.

De maneira similar, quando eu estiver recebendo um email de um remetente


fulano@qwerty.com.br, verificarei seu registro SPF para saber se o servidor tentando me
passar esse email tem autorizao para isso.

Note que o SPF no se trata necessariamente de uma ferramenta anti-SPAM.


Embora uma quantidade razovel de SPAM possa ser combatido com o SPF, estatsticas
mostram que a maior parte dos spammers "profissionais" j tinham registros SPF
implantados, ao passo que apenas uma pequena parcela dos domnios de emails legtimos
tinham o registro.

Nesse contexto, o SPF ajuda a combater outra forma de lixo "internetico": os Scams
ou Phishing Scams, pessoas enviando emails como se fossem de bancos ou similares
pedindo para que voc acesse uma pagina e "atualize seus dados". Nem precisa dizer que
o email no do banco e seus dados no vo para o banco...

Voc talvez esteja pensando: "Mas se esse negocio no a arma final contra o SPAM vou
implementar pra que?". O SPF ajuda a impedir emails falsificados, dizendo ser voc. Isso
ajuda a prevenir fraudes e similares. Tambm dificulta a ao de alguns vrus, que sorteiam
um nome na lista de contatos da vitima para usar como remetente.

Como funciona

Registros SPF so simples registros texto na tabela de DNS de seu domnio. Esses
registros possuem sintaxe prpria, que pode ser consultada direto no site oficial do SPF -
http://spf.pobox.com/ . H inclusive um "Wizard" para gerar o registro SPF para voc, e
recomendado que voc use esse wizard qdo for implementar o registro em seu domnio.
2009 Alfamidia Prow LTDA. - 101
DNS e Correio Eletrnico

Se voc usa o BIND como DNS, o registro ficaria mais ou menos assim na zona de
DNS:

. IN TXT "v=spf1 mx -all"

Se quiser saber qual o registro SPF de um domnio, basta rodar essa consulta:

thefallen@KlingonRealm:~$ host -t txt dominio.com.br


dominio.com.br text "v=spf1 mx -all"

A sintaxe mencionada acima diz que apenas os servidores listados como MX do


domnio esto autorizados a mandar email em nome do domnio, e que o registro a
"autoridade final" (-all), quer dizer, pode-se rejeitar a mensagem se no sair de algum MX
do domnio. Se a palavra-chave fosse "?all" quer dizer que o registro "neutro", ou esta em
periodo de implantao, e ainda podem haver servidores fora dessa lista; portanto NAO se
deve rejeitar a mensagem. Uma lidinha na especificao do site do SPF ajuda a esclarecer
esse ponto.

Quando a verificao de SPF funciona

Uma duvida que voc talvez tenha "Se eu ativar SPF, vou parar de receber email
de quem no tem SPF?". A verificao de SPF s acontece quando o domnio do remente
j publicou o registro SPF. Assim, se o site do remetente no tiver aderido ao SPF, os
emails vo passar normalmente (podero ser forjados, visto que no h o registro SPF).

Se voc no quiser ativar a verificao do SPF em seu MTA agora, pode fazer
apenas o primeiro passo da implantao, que adicionar o registro no DNS. Isso tambm
no vai comprometer emails chegando ou saindo de/para sites que no faam a verificao
SPF.

Implementaes de verificao SPF

Existem varias implementaes de verificao de SPF. Alem da implementao


inicial em Perl (Mail::SPF::Query), h bibliotecas especializadas (libspf e libspf2), modulos
em Python, mdulos para SpamAssassin, mdulos pro Milter do Sendmail, patches para
verificao nativa em Postfix, Exim e Qmail, e inclusive esta listado no site uma
implementao para Exchange.

No Howto a seguir usaremos a implementao via Policy Daemon do Postfix (a


policyd listada no site). No precisa de patches no Postfix e o daemon adicional bastante
leve para permitir que o sistema escale bem para ambientes maiores.

Para os mais apressados

Para os que no quiseram ler a teoria acima, a implementao do SPF ocorre em 2


partes:

Publicar um registro SPF em seu DNS

- 102 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

Implementar a verificao do registro SPF no MTA

Gerando o registro SPF

V at o site do Wizard do SPF (http://spf.pobox.com/wizard.html) e responda as


perguntas. Na maioria dos casos, o registro fica como "v=spf1 mx -all"

Edite a zona DNS de seu domnio no BIND/named e adicione a seguinte linha no


final do arquivo:

. IN TXT "v=spf1 mx -all"

Implementando a verificao no MTA

Primeiro de tudo, tenha em mente que o Policy Daemon Delegation


(check_policy_service) s esta disponvel a partir da verso 2.1 do Postfix. Para saber qual
verso voc esta rodando, digite o comando:

root@KlingonRealm:~# /usr/sbin/postconf mail_version


mail_version = 2.1.5

Para implantar o policyd para verificar os registros de servidores conectando ao seu


MTA, vai precisar da libspf2 e do policyd (http://www.libspf2.org/). Note que usaremos a
verso do site www.libspf2.org, que a verso em C que usa a libspf2. O policyd disponvel
no site http://spf.pobox.com/ a verso em Perl, consideravelmente mais pesada e no to
bem escalavel.

A instalao da biblioteca libspf2 bastante simples:

./configure --prefix=/usr
make
su -c "make install"

Se quiser j instalar o policyd direto no /usr/libexec/postfix, rode o seguinte comando:

./configure --prefix=/usr --sbindir=/usr/libexec/postfix


make
su -c "make install"

Precisamos agora referenciar o servio no master.cf:

# /etc/postfix/master.cf:
policy unix - n n - -
spawn
user=nobody argv=/usr/libexec/postfix/policyd

Basta adicionar a seguinte linha no main.cf para que ele j faa a verificao:

# /etc/postfix/main.cf:
smtpd_sender_restrictions = suas_restricoes_vao_aqui,

2009 Alfamidia Prow LTDA. - 103


DNS e Correio Eletrnico

permit_mynetworks,
check_policy_service unix:private/policy

Note que necessrio o permit_mynetworks para que o SPF no tente verificar o


prprio domnio. Se quiser mover a verificao de SPF pra "frente" das regras, no se
esquea de mover tambm o permit_mynetworks.

Tente agora enviar um email de algum IP externo com a seguinte sintaxe:

thefallen@KlingonRealm:~$ telnet mail.seudominio.com.br 25


220 mail.seudominio.com.br SMTP Postfix
MAIL FROM: <seuemail@seudominio.com.br>
250 Ok
RCPT TO: <seuemail@seudominio.com.br>
554 <seuemail@seudominio.com.br>: Sender address rejected:
Please see
http://spf.pobox.com/why.html?sender=seuemail%40seudominio.co
m.br&ip=201.x.y.x&receiver=mail.seudominio.com.br
QUIT

O que fazer quando as coisas no do certo

Primeiro, verifique o log de email (normalmente /var/log/maillog). Ele seu melhor


amigo nessa hora :)

Se no houver nenhuma mensagem de erro l, verifique as configuraes que vc


acabou de fazer, e certifique-se que rodou o comando "postfix reload" ou "postfix
stop; postfix start".

Verifique se o SPF foi corretamente instalado com o comando spfquery:


thefallen@Ragnarok:~$ /usr/bin/spfquery -ip 200.200.200.200 -sender
fulano@uol.com.br -helo fulano
fail
Please see
http://spf.pobox.com/why.html?sender=fulano%40uol.com.br&ip=200.200.200.200&r
eceiver=spfquery
spfquery: domain of uol.com.br does not designate 200.200.200.200 as permitted
sender
Received-SPF: fail (spfquery: domain of uol.com.br does not designate
200.200.200.200 as permitted sender) client-ip=200.200.200.200; envelope-
from=fulano@uol.com.br; helo=fulano;

- 104 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

Tutorial:

Configurando Postfix com MySQL e domnios virtuais

Intoduo

Voc j reparou que algumas empresas possuem vrio domnios registrados,


certo ? Quando todos os domnios pertencem a mesma empresa e as caixas
postais so comuns a todos os domnios no h problema, basta dizer ao servidor
de e-mail para aceitar mensagens de todos os domnios e pronto. Dessa forma
mensagens para fulano@dominio1.tld e fulano@dominio2.tld cairo na mesma
caixa.
Mas e quando domnios diferentes hospedados no mesmo servidor devem
ser mantidos estanques para que as caixas de fulano@dominio1.tld e
fulano@dominio2.tld sejam diferentes, cada um com sua senha e, as vezes, sem
que um saiba do outro ?
Esta a situao em que se encontram grandes provedores de
hospedagem, onde as vezes um nico servidor pode hospedar literalmente
centenas de domnios.
Como fazer isso ? Bom, a que entram os domnios virtuais. Postfix, Qmail
e Sendmail, s pra citar 3 dos mais utilizados, possuem suporte a domnios virtuais,
cada um a seu modo, cada um com suas ferramentas. Neste tutorial faremos isto
com o MTA Postfix e o Debian

Planejando e preparando

Vamos estabelecer as necessidades de nosso servidor de domnios virtuais.


Estas requisies so de um caso real, onde cerca de 250 domnios sero
hospedados em um servidor. Alguns tero apenas uma caixa de e-mail, outros
dezenas. Alguns tero direito a anti-vrus e anti-spam, outros no. O servidor
possuir suporte a revendas de hospedagem, uma prtica comum em grandes
hospedeiros, sendo que cada revendedor ter controle sobre os domnios de seus
respectivos clientes.
Complicado ? Sim. Trabalhoso ? Com certeza. Mas eu espero que no final
voc tenha um conhecimento razovel a respeito de algumas ferramentas muito
teis para qualquer administrador.

2009 Alfamidia Prow LTDA. - 105


DNS e Correio Eletrnico

Hardware

A escolha do servidor correto fundamental aqui. Pouca mquina criar um


gargalo, com filas imensas no servidor e a inevitvel lentido na entrega das
mensagens.
Os fatores a considerar so:
Capacidade da CPU
leve em considerao que este servidor no apenas rotear e-mail, ele tambm
executar verificao contra vrus em praticamente todas as mensagens recebidas.
Isso aumenta consideravelmente o uso de memria e CPU, sem contar os acessos
adicionais ao disco para descompactar arquivos, criao de arquivos temporrios,
etc.
Uma mquina razovel para esta tarefa, seria, no mnimo:
Pentium III ou Athlon 1GHz (evite as respectivas verses mais baratas Celeron e
Duron)

Acima de 1 GB de memria (em mquinas Athlon ou Pentium IV prefira memrias


DDR mais rpidas)

Placa me de qualidade (Intel, Asus, Tyan, etc) de prefrencia homologadas para


uso em servidor

o Nota: Evite placas com vdeo on-board. Vdeo on-board compete com o
processador no uso da memria e reduz o desempenho global do servidor,
use uma placa de vdeo off-board "genrica".

Disco de... Bom, teremos que fazer um pequeno clculo aqui. Responda as
seguintes perguntas:

o Quantos domnios sero hospedados ?

o Em mdia quantos usurios por domnio ?

o Qual a quota (em megabytes) voc atribuir a cada domnio/usurio ?

o Qual o tamanho mximo dos logs voc pretende manter (recomendo quebrar
os logs a cada 100 MB aproximadamente) e quanto tempo de registros vec
pretende manter ? Um ms ? Dois ? Um ano ?

o Acrescente 20% ao valor calculado como margem de segurana. Nunca se


sabe quando o ataque de um Spammer causar um pico de uso, gerando
vrios gigabytes de log.
O clculo pode ser:
domnios * contas * quota usurio

ou
domnios * quota domnio

- 106 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

Se os logs forem compartilhar o mesmo espao que as caixas postais, adicione aos
clculos acima:
tamanho dos logs * no de quebras dirias * no de dias a manter

Assumindo que hospedaremos 300 domnios com uma mdia de 10 contas por
domnio e uma quota de 20 MB por conta teramos:
300 * 10 * 20 MB = 60.000 MB (60 GB)

Para o espao de logs, vamos assumir que haja uma mdia de 100 mensagens por
domnio ao dia, com cerca de 2.500 bytes de log por transao em mdia, mais o
log de cerca de 24.000 verificaes via POP3 ao dia, com 100 bytes de log cada.
Isso resulta em cerca de 100 MB por dia de log no sistema, assim podemos
rotacionar o log apenas uma vez ao dia. Se compactarmos o log aps quebr-lo, o
tamanho ser reduzido a algo entre 10 e 20 MB, assim se quisermos manter um
ms de log (30 dias), teremos:
20 MB * 30 = 600 MB (0,6 GB)
Lembra dos 20% extras ? 60,6 GB mais 20% so 72,8 GB, com isso um disco de 80
GB suficiente. Temos 6 GB para instalao do sistema, incluindo rea de swap e o
restante para caixas postais e logs.
Opcionais

o Um segundo disco para raid 1 (espelhamento)

o Controladora SCSI para usar discos DESTE TIPO. Isto lhe dar mais
desempenho e maior confiabilidade, sem contar que algumas controladoras
mais caras permitem usar os discos em configurao RAID sem sacrificar a
CPU (RAID por hardware).

o Unidade de fita. Vai depender de voc se haver backup das caixas postais
para caso de acidente ou no. Se backup for desejvel, a nica maneira para
armazenar 70 GB de dados em tempo hbil sem muito incmodo com fita.
Neste caso controladora SCSI quase obrigatrio.

o Storage. Se voc puder arcar com um storage de 512 GB ou 1 TB (1 tb = 1


terabyte = 1024 GB) voc poder hospedar alguns milhares de domnios
sem se preocupar com espao. A maioria das unidades de storage podem
inclusive ser conectados a mais de uma contrloladora SCSI, podendo assim
ser usado por dois servidores ao mesmo tempo.

o Um hardware mais potente prevendo futuras ampliaes. Pentium IV 2GHz


ou Xeon, Athlon XP2000+, FX ou Opteron (este ltimos so de 64 bits) ou
equivalentes. Uma mquina dual pode ser uma boa escolha.

o Se este servidor estiver conectado a uma rede com mais servidores ou a um


storage via rede (via NFS talvez) uma placa de rede gigabit Ethernet
recomendvel.

2009 Alfamidia Prow LTDA. - 107


DNS e Correio Eletrnico

Software

Vamos ver quais ferramentas sero necessrias, sendo que de todas elas
apenas uma, o Postfix Admin, no existe em repositrios oficiais do Debian:
Debian woody/sarge
Este o sistema operacional propriamente dito. O Debian sempre possui
trs verses simultneas, stable (estvel), testing (teste) e unstable (instvel). A
distribuio estvel geralmente tem um nmero tambm (atualmente 3.0r3), e todas
possuem um nome (geralmente mais fcil obter suporte na rede perguntando pelo
nome da verso do que pelo nmero). Para entender melhor o que cada uma
representa, de onde vm os nomes, quando uma verso "testing" se torna "stable",
etc. recomendo consultar o site do projeto (http://www.debian.org.br/releases/). No
momento em que este "rau-tu" foi escrito, os codinomes para stable, testing e
unstable eram respectivamente Woody, Sarge e Sid. Aqui trabalherei apenas com
Woody e Sarge, os pacotes da verso unstable so novos (e no testados) demais
para um servidor de produo.
A princpio a distribuio Testing tambm no adequada para produo
pela demora involvida nas correes de segurana, mas como alguns pacotes
necessrios para a tarefa esto irremediavelmente obsoletos no Woody (incluindo o
prprio Postfix), isso ou baixar e compilar tudo na mo, o que deixaria a
manuteno contra bugs de segurana na nossa instalao um tanto quanto
trabalhosa. Para evitarmos o trabalho de configurao manual, e termos pelo menos
alguma garantia de correes rpidas de bugs, usaremos algo chamado Pinning.
Entraremos nisso quando formos instalar o Postfix e MailScanner.
Apache webserver
A funo do webserver ser suporte ao Postfix Admin, uma interface PHP
para configurao de dominios virtuais no Postfix. Como a nica funo aqui ser
dar suporte ao PHP, a verso 1.3.26 do "Woody" servir bem. Sem Pinning aqui.
PHP
Rodar os scripts do Postfix Admin. A recomendao da documentao
oficial usar PHP 4.x (no mnimo 4.1). PHP 5.x no suportado no momento. No
Woody temos o PHP 4.1.2, sem Pinning aqui tambm. Aps a instalao faremos a
configurao do PHP para trabalhar em "safemode". Isto no deve interferir com o
Postfix Admin, mas bom ficar atento.
MySQL
A recomendao aqui usar MySQL entre 3.23.xx e 4.0.xx, MySQL acima
de 4.1 no suportado pelo Postfix Admin. No Debian podemos escolher entre
3.23.49 ou 4.0.21. Vamos ficar com o 3.23.49 que acompanha o Woody.
Courier IMAP/POP3
De que adianta um servidor de e-mail se seus clientes/usurios no podem
baixar as prprias mensagens? aqui que entra o Courier. Porqu Courier? Fcil de
administrar, trabalha com sistema Maildir e tem suporte nativo a MySQL. Usaremos
a verso que acompanha o Woody novamente.

- 108 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

Postfix
Finalmente, a estrela do show. Postfix , um dos melhores, seno o melhor
MTA disponvel como open source. rpido, estvel, seguro, flexvel, fcil de
adminstrar e configurar, suporta banco de dados, LDAP, expresses regulares... A
lista de qualidades imensa. Este o primeiro pacote que ser baixado da verso
Sarge (testing). A verso que acompanha o Woody ainda da srie 1.x do Postfix.
Apesar de j suportar banco de dados MySQL, algumas caractersticas do Postfix
1.x fazem com que ele no seja mais adequado para se integrar com o MailScanner,
isso tornaria mais complicado monitorar os e-mails contra virus/SPAM.
Cyrus SASL
SASL (Simple Authentication and Security Layer) obrigatrio se quisermos
SMTP autenticado. No h outro jeito, pois a outra alternativa POP antes de
SMTP (POP before SMTP). Nesta tcnica, um daemon monitora o log de e-mail,
detecta autenticaes POP3/IMAP bem-sucedidas e cria um regra temporria
autorizando o relay de e-mail para o endereo IP do usurio. Esta tcnica seria ideal
se todo o mundo usasse um cliente de e-mail (de agora em diante chamarei de MUA
- Mail User Agent) minimamente decente, mas isso no verdade. A maioria usa
MUAs Microsoft (Outlook alguma-coisa), que tm um bug irritante. Esses MUAs
tentam enviar as mensagens armazenadas para envio posterior ("Caixa de Sada")
antes de checar por novas mensagens no servidor. Percebeu o erro ? A primeira
tentativa de envio na maioria das vezes falhar se o usurio possuir mensagens
aguardando envio, e como os Outlooks da vida param o processo aps o primeiro
erro (seja de SMTP ou POP).
PAM MySQL
PAM (Plugable Authentication Modules) um sistema modular de
autenticao que permite o uso de vrias "fontes" de dados para reconhecer
usurio, dizer se ele tem autorizao, entre outras coisas. Esta flexibilidade vem do
uso de "plug-ins" de autenticao e pode ser to trabalhosa quanto o Cyrus SASL
se no for dada a devida ateno a detalhes.
O mdulo que usaremos o "pam_mysql" que nos permitir obter usurios e
senhas direto do MySQL. Isso abre a possibilidade de autenticar no s usurios de
e-mail pela base de dados mas tambm usurios interativos do GNU/Linux.
Mailscanner/Clamav/SpamAssassin
Para usurios Microsoft, vrus certamente a pior das pragas que infestam a
internet (para mim SPAM, mas s porque no existe vrus pra GNU/Linux) e como
eles certamente sero a maioria dos usurio de nosso servidor, vamos incluir algum
tipo de proteo. O MailScanner (http://www.mailscanner.info) no um anti-virus,
ele um envelope (wrapper) que vai agir como intermedirio entre o MTA, o anti-
virus (neste caso o livre ClamAV (http://www.clamav.net)) e um sistema anti-spam
(SpamAssassin (http://spamassassin.apache.org/)). Por si s o MailScanner possui
proteo apenas contra tipos de arquivo/extenses banidas (pode inclusive busc-
las dentro de arquivos compactados) e a "black lists" como SpamCOP
(http://www.spamcop.net).
Alm dessas poucas protees internas, o MailScanner pode desmembrar
as mensagens, expandir arquivos (zip, TNEF, arj, etc.) e submeter os componentes
individuais a uma bateria de teste, que pode incluir no s vrios anti-virus de linha
de comando (Clam, McAfee, etc.) mas tambm chec-las via SpamAssassin atravs
de um mdulo Perl apropriado.

2009 Alfamidia Prow LTDA. - 109


DNS e Correio Eletrnico

Os trs pacotes deste conjunto esto disponveis no Sarge em verses


razoavelmente atualizadas e sero obtidos por Pinning. No vale a pena usar as
verses do Woody neste caso , MailScanner e SpamAssassin esto obsoletos e
ClamAV nem existe no Woody.
Squirrel Mail
Escolhi o Squirrel (http://www.squirrelmail.org/) por ser um webmail bastante
completo e razovel de se trabalhar. Voc no obrigado a us-lo se no quiser.
Este servio apenas uma convenincia, e como o acesso as caixas ser feito via
IMAP, o webmail no precisa nem estar no mesmo servidor. Um "apt-cache shearch
webmail" volta 19 resultados, incluindo IMP e Sqwebmail (este ltimo faz parte do
projeto Courier. mas pode ser instalado independentemente. Pode ser uma opo
interessante).
Postfix Admin
Esta a interface que permitir criar e administrar domnios e usurios,
inclusive delegando poderes de administrador para outros (til se voc tiver
revendas). No existe pacote oficial para ele, ento baixe do site
http://www.high5.net/postfixadmin/ . L voc tambm encontra um guia de
instalao, que peca um pouco na parte da configurao do SASL. Basicamente h
um link para um tutorial de instalao de SASL em FreeBSD com MySQL, mas no
fui capaz de fazer o SASL funcionar diretamente com MySQL.

- 110 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

Instalao

Em primeiro lugar devemos instalar o sistema operacional. A instalao do Debian


GNU/Linux j foi vista, aqui vou descrever apenas o que for relevante para este artigo. O
mesmo vale para instalao de todos os outros softwares relacionados bem como detalhes
de suas configuraes.

Debian GNU/Linux

Vejamos o que ser necessrio para o sistema operacional. Muito nesta seo so
apenas sugestes baseadas em experincia. Dependendo de sua familiaridade com
GNU/Linux e/ou Unix voc poder adaptar o que digo aqui. Use o bom senso.

Particionamento e formatao

Durante a preparao, foi calculado que um disco de 80 GBytes seria o ideal para este
servidor. Para melhor distribuir o espao, possvel particionar o disco da seguinte forma:

72 GB - caixas postais e logs

4 GB - instalao do sistema

varivel - memria virtual (vulgo swap)

3 GB - arquivos temporrios

No h nada que o obrigue a usar este esquema de particionamento, voc livre para
criar o seu. Veja os motivos pelos quais foram escolhidos estes valores:

72 GB - Para logs e caixas postais.


Esta partio ser montada sob o diretrio /var, encare isso como uma "rea
de trabalho e estoque" de sistemas GNU/Linux. Muita coisa vai aqui, logs, filas de
entrada e sada de e-mail e impresso, bases de dados de MySQL, Postgre a apt-
get, etc. em um diretrio abaixo de /var que costumo colocar as caixas postais de
usurios para ser coerente com o padro atual, que colocar as caixas de entrada
em /var/mail
4 GB - Partiao do sistema.

Aqui vo todos os executveis. Esta partio ser montada como / (raz) e


abrigar diretrios importantes como /etc, /bin, /boot e outros. Voc pode subdividir
este espao, pode por exemplo criar uma partio s para /usr e mont-la read-only
(somente leitura) como forma de se proteger contra RootKits. 4 GB suficiente para
instalar at uma interface grfica. Como dispensaremos o XFree, este espao 3
GB a mais do que o necessrio.

Memria virtual.

O famoso "swap". Sistemas GNU/Linux preferem usar uma partio


dedicada a esse fim, mas nada impede que a instalao seja feita sem uma partio
2009 Alfamidia Prow LTDA. - 111
DNS e Correio Eletrnico

de swap. Voc pode posteriormente criar um arquivo em outro lugar e us-lo como
swap. Antigamente era hbito criar um swap com o dobro da quantidade de
memria. No uso mais esse parmetro para servidores, sou da opinio que um
servidor no deve usar o swap em operao normal, mas se algum processo
comear a usar memria demais um bom swap pode evitar que a mquina comece
a gerar erros por falta de memria. Se o disco permitir use 3 a 4 vezes o tamanho
de sua memria.

3 GB - Arquivos temporrios.

Esta partio deve ser montada sob o diretrio /tmp e ser usada como
"rea de rascunho" para o MailScanner, ClamAV e outros criarem arquivos
temporrios necessrios a seu funcionamento. Ter bastante espao para para isso
fundamental. Voc no precisa criar uma partio prpria para /tmp. Opcionalmente
voc pode criar apenas uma partio / com 7 GB.

Opcionalmente possvel o uso de LVM. Isso permitiria adicionar espao onde for
necessrio, espelhar e distribuir dados por vrios discos, criar snapshots, etc.. A instalao
do Debian Woody no possui suporte a LVM, assim ao menos a partio / obrigatoriamente
ser uma partio normal, mas possvel configur-lo aps a instalao. Se optar por LVM,
deixe os 72 GB destinados ao /var livres durante a instalao para us-los posteriormente
na criao de volumes lgicos. O instalador do Debian Sarge (verso "testing") j possui
suporte a LVM, se optar por instalar diretamente o Sarge ao invs de usar o Woddy com
"pinning", voc j pode configurar LVM desde o comeo e us-lo para todas as parties.
Neste caso dedique o disco todo a LVM e sub-divida o espao usando volumes lgicos.

Pacotes necessrios

Num primeiro momento, instale apenas o sistema bsico. O sistema bsico do


Debian ocupa poucos MBytes, a logo aps ele ser copiado para o disco durante a instao,
o instalador torna o sistema inicializvel e reinicia o sistema.

Aps esta etapa, o Debian executar automaticamente um programa chamado


base-config. A funo do base-config solicitar algumas informae bsicas para o
funcionamento do sistemas, como senha do do usurio root, criar um usurio comum, etc..
Duas das etapas finais so selecionar as tarefas ou tasks, conjuntos pr-definidos de
pacotes para vrias funes, atravs do tasksel e depois rodar o gerenciador de pacotes
dselect para um ajuste fino na lista de pacotes a ser instalada.

Pule tanto o tasksel quanto o dselect. Lembre que faremos "pinning" nesta
instalao, e pra isso necessrio alterar certas configuraes do apt-get antes. Instalar
centenas de pacotes via tasksel apenas para ter que instalar as respectivas atualizaes
mais tarde e bobagem.

- 112 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

Configurao do apt-get
Para configurar o apt-get para baixar os pacotes corretos, inclusive com Pinning,
devemos editar trs arquivos, todos no diratrio /etc/apt:

apt.conf

sources.list

preferences

O contedo recomendado para cada arquivo :

apt.conf

APT::Cache-Limit "25165824";

sources.list

deb ftp://ftp.br.debian.org/debian/ stable main non-free contrib


deb-src ftp://ftp.br.debian.org/debian/ stable main non-free contrib
deb http://non-us.debian.org/debian-non-US stable/non-US main contrib non-
free
deb-src http://non-us.debian.org/debian-non-US stable/non-US main contrib
non-free

deb http://security.debian.org/ stable/updates main contrib non-free


deb ftp://ftp.br.debian.org/debian/ testing main non-free contrib
deb-src ftp://ftp.br.debian.org/debian/ testing main non-free contrib
deb http://non-us.debian.org/debian-non-US testing/non-US main contrib non-
free
deb-src http://non-us.debian.org/debian-non-US testing/non-US main contrib
non-free
deb http://security.debian.org/ stable/updates main contrib non-free

preferences

Package: *postfix*
Pin: release a=testing
Pin-Priority: 1001

Package: mailscanner
Pin: release a=testing
Pin-Priority: 1001

Package: *perl*
Pin: release a=testing
Pin-Priority: 1001

Package: *sasl*
Pin: release a=testing
Pin-Priority: 1001

2009 Alfamidia Prow LTDA. - 113


DNS e Correio Eletrnico

Package: *
Pin: release a=stable
Pin-Priority: 700

Isso nos permitir baixar os pacotes do postfix, SASL e MailScanner do repositrio


Testing, enquanto os demais sero baixados por default do repsitrio Stable.

Instalao dos pacotes


Feito isso, mande o apt-get atualizar a lista de pacotes para em seguida instalar os
pacotes que viro do Stable:

apt-get update
apt-get install apache apache-common courier-authdaemon courier-authmysql
courier-base courier-imap courier-maildrop courier-pop mysql-client
mysql-common mysql-server libpam-mysql php4 php4-imap php4-mcrypt php4-
mysql
php4-pear bzip2 lha unrar unzip

Repare que vrios descompactadores foram selecionados. Eles so importantes


para o MailScanner.

Agora vamos instalar os pacotes do Testing. Alguns pacotes posuem dependncias


que s podem ser satisfeitas por outros pacotes Testing. Ento vamos forar o apt-get a
usar s o repositrio Testing durante este processo. Aviso: devido ao cascateamento de
dependncias do MailScanner sero atualizados entre outras coisas o Perl e a glibc. A
atualizao da glibc solicita uma confirmao antes de descompactar o pacote, apenas
aceite.

O comando para instalar os pacotes Testing :

apt-get -u -t testing install mailscanner postfix postfix-mysql postfix-pcre


postfix-tls mailscanner spamassassin spamc squirrelmail libsasl-modules-plain
sasl-bin libsasl2-modules libsasl2-modules-sql libsasl7 sasl2-bin clamav
clamav-freshclam arj

Os pacotes que podemos baixar de repositrios Debian j devem estar instalados.


Logo passaremos a configurao, mas antes temos que baixar o Postfix Admin.

Postfix Admin

Faa o download do Postfix Admin do site http://high5.net/postfixadmin/. Como o


software pode sofrer atualizaes, no vou apontar um link direto para o tar.gz. Acesse o
site a partir de um browser modo texto (links ou lynx so boas pedidas) e pegue a verso
mais atual.

Em seguida descompacte o arquivo em um diretrio acessvel pelo Apache, no caso


/var/www com o comando

tar -xzvf postfixadmin-xxxx.tgz -C /var/www

- 114 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

Isso deve criar um diretrio /var/www/postfixadmin-xxx onde xxx a verso do software.

Ajuste as permisses e propriedades deste diretrio para que o Apache possa ler os
arquivos:

cd /var/www
chown -R www-data:www-data postfixadmin-xxx

Com isso todo o software deve estar instalado. Vamos a configurao.

2009 Alfamidia Prow LTDA. - 115


DNS e Correio Eletrnico

Configurao

Vamos fazer a configurao comeando pelo Apache, depois MySQL, Postfixadmin,


Postfix, Courier, SASL e por fim MailScanner. Escolhi esta ordem para que possamos ter
pelo menos um domnio no banco de dados quando formos configurar o Postfix.

Apache

O que precisamos fazer aqui ativar o suporte a PHP. Mude o diretrio para
/etc/apache e abra o arquivo de configurao httpd.conf:

cd /etc/apache
vi httpd.conf

Localize as trs linhas a seguir e remova o comentrio (o smbolo de sustenido - #):

LoadModule php4_module /usr/lib/apache/1.3/libphp4.so

AddType application/x-httpd-php .php


AddType application/x-httpd-php-source .phps

Em seguida localize a linha DirectoryIndex e acrescente o nome de arquivo index.php a


ela. A linha deve ficar:

DirectoryIndex index.html index.htm index.php index.shtml index.cgi

Salve o arquivo e reinicie o Apache com o comando:

invoke-rc.d apache restart

Para testar, acesse por um browser o endereo de seu servidor acrescentando


/postfixadmin-xxx ao final. Da prpria mquina a URL ficaria http://127.0.0.1/postfixadmin-
xxx. Se o PHP estiver funcionado corretamente e o Apache configurado voc deve ver a
pgina do PostfixAdmin dando as boas vindas. Se voc obter somente uma listagem de
diretrio veja se o PHP realmente est instalado e o Apache bem configurado. Lembre-se
que no vou me aprofundar muito em configuraes de Apache nem PHP aqui, isso fica pra
outros tutoriais, ou voc mesmo pode criar um.

MySQL

Para que o MySQL funcione corretamente com o Postfix Admin certifique-se que o
daemon do MySQL atende a requisies por rede, no s via socket. Para isso edite o
arquivo /etc/mysql/my.cnf e na seo [mysqld] remova (ou comente) a opo skip-
networking.

Se quiser mais segurana, adicione a opo bind-address = 127.0.0.1 para que o


MySQL receba conexes apenas da prpria mquina.

- 116 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

Reinicie o MySQL com o comando

invoke-rc.d mysql restart

Para verificar se MySQL ouve requisies de rede, use o comando

netstat -nlpAinet

Esse comando mostrar todas as conexes "listening", ou seja, que aceitam


requisies em uma porta TCP ou UDP, e o nome do processo correspondente. Se o
MySQL estiver ouvindo haver uma linha terminada em "mysqld" ou com um endereo do
tipo "127.0.0.1:3306" na coluna "Local Address".

O ltimo passo criar uma senha para o usurio root do MySQL se ainda no tiver
feito. O comando fcil:

mysqladmin -u root password "novasenha"


history -c

O segundo comando opcional, ele limpa o histrico de comandos do shell para


evitar que algum descubra a senha de root do MySQL.

Base de Dados

A base para este trecho a seo 4 do tutorial oficial da High5.net em


http://high5.net/howto/. Algumas mudanas e esclarecimentos foram acrescentadas,
principalmente para levar em conta o Postfix rodando em gaiola chroot.

Uma coisa que voc deve reparar, nosso Postfix dever conectar base de dados
por TCP/IP, j que a gaiola chroot o impede de acessar o arquivo especial pipe. Sempre
que o Postfix fizer alguma conexo TCP/IP, ele informar o IP da primeira placa de rede
que ele encontrar, este IP dificilmente ser 127.0.0.1 (vulgo "localhost"), a no ser que voc
tenha somente este IP na mquina.

O MySQL pode controlar acesso baseado no IP de origem da conexo. Se o Postfix


usar um IP diferente de 127.0.0.1 como origem (o que provvel), voc deve incluir
permisso para esse IP (Ou "hostname". O hostname deve existir no DNS ou no arquivo
/etc/hosts do servidor) ou o Postfix simplesmente no funcionar. Caso isso ocorra havero
erros de conexo no log do Postfix, basta listar o arquivo /var/log/mail.log para v-los.

Para exemplificar isso, incluirei permisses tanto para "localhost" (127.0.0.1) quanto
para "servidor" (voc deve utilizar o "hostname" que configurou durante a instalao do
Debian).

Vamos l:

2009 Alfamidia Prow LTDA. - 117


DNS e Correio Eletrnico

Crie a base de dados

Acesse o monitor do MySQL com:

mysql -p

e digite a senha de "root.

Assim que estiver no prompt "mysql>" digite os comandos abaixo para criar os
usurios e a base para o Postfix Admin. Apenas mude a palavra postfix na terceira linha
para algo melhor. Essa ser a senha para o usurio postfix acessar a base de dados (este
campo da tabela ser preenchido por por um valor encriptado pela funo password() do
MySQL). Repare que criaremos dois usurios idnticos, variando apenas o contedo do
campo "Host".

Uma permisso dar ao usurio "postfix" permisso para conectar a base de dados
tendo como origem o "localhost", a outra permitir ao usurio conectar via TCP/IP tendo o
endereo de origem o IP correspondente ao hostname "servidor".

Anote a senha, pois precisaremos configur-la no Postfix Admin mais a frente:

USE mysql;
INSERT INTO user (Host, User, Password) VALUES
('localhost','postfix',password('postfix'));
INSERT INTO db (Host, Db, User, Select_priv) VALUES
('localhost','postfix','postfix','Y');
FLUSH PRIVILEGES;
GRANT USAGE ON postfix.* TO postfix@localhost;
GRANT SELECT, INSERT, DELETE, UPDATE
ON postfix.* TO postfix@localhost;
INSERT INTO user (Host, User, Password) VALUES
('servidor','postfix',password('postfix'));
INSERT INTO db (Host, Db, User, Select_priv) VALUES
('servidor','postfix','postfix','Y');
FLUSH PRIVILEGES;
GRANT USAGE ON postfix.* TO postfix@servidor;
GRANT SELECT, INSERT, DELETE, UPDATE
ON postfix.* TO postfix@servidor;
CREATE DATABASE postfix;

No se preocupe com os comandos que continuam em outra linha, o MySQL s


considera o comando terminado aps receber um ; (ponto-e-vrgula), assim voc pode
copiar e colar uma linha por vez. Veja se aps cada ponto-e-vrgula existe uma linha
comeada por "Query OK". Isso indica que o comando foi bem sucedido.

Agora voc deve ter um usurio e uma base criados, ambos chamados postfix.
Anote, pois isso ser usado mais a frente.

- 118 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

Teste a conexo
Para testar se tudo correu bem e se o Postfix ser bem sucedido em suas tentativas
de conexo, saia do monitor do MySQL e digite o seguinte no prompt:

mysql -upostfix -ppostfix -h127.0.0.1

Isso significa:

-Conecte ao MySQL com o usurio (-u) postfix, com a senha (-p) postfix, no endereo
TCP/IP (-h) 127.0.0.1.

Isso forar o monitor a conectar da mesma forma que o Postfix faria. Se voc for
bem sucedido na conexo tente:

use postfix;

O resultado deve ser "Database changed".

Se tudo isso funcionar, o Postfix no ter problema nenhum. Pule pro tem Crie as tabelas.

Se algo der errado


Se algo errado acontecer, voc dever remover (ou corrigir) manualmente o que
saiu errado. Nesse caso uma leitura no Manual do MySQL
(http://dev.mysql.com/doc/mysql/pt/index.html) recomendvel. Se voc estiver com
pressa, use os comandos abaixo para recomear do zero:

REVOKE USAGE ON postfix.* FROM postfix@servidor;


REVOKE USAGE ON postfix.* FROM postfix@localhost;
REVOKE SELECT, INSERT, DELETE, UPDATE ON postfix.* FROM
postfix@localhost;
REVOKE SELECT, INSERT, DELETE, UPDATE ON postfix.* FROM
postfix@servidor;
DELETE FROM user WHERE User='postfix';
DELETE FROM db WHERE User='postfix';
DROP DATABASE postfix;

Crie as tabelas

Agora vamos criar as tabelas propriamente ditas. Sero criadas 3 tabelas para uso
pelo Postfix e pelo Courier. Nem todas as colunas ou tabelas sero usadas por ambos.
Algumas colunas so usadas apenas pelo Postfix, outras s pelo Courier, algumas por
ambos. As tabelas so:

2009 Alfamidia Prow LTDA. - 119


DNS e Correio Eletrnico

Tabela de Alias
Crie a tabela com os comandos:

USE postfix;
CREATE TABLE alias (
address varchar(255) NOT NULL default '',
goto text NOT NULL default '',
domain varchar(255) NOT NULL default '',
created datetime NOT NULL default '0000-00-00 00:00:00',
modified datetime NOT NULL default '0000-00-00 00:00:00',
active tinyint(1) NOT NULL default '1',
PRIMARY KEY (address),
KEY address (address)
) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Aliases';

O Postfix usa as colunas "address" e "goto" desta tabela, o Courier no a utiliza. A


funo desta criar os chamados "apelidos" de e-mail, ou seja, fazer com que as
mensagens para o "alias" fulano@dominio.tld sejam endereadas para a caixa do usurio
sicrano@dominio.tld. possvel informar multiplos destinos na linha "goto" separando-os
com vrgula. Se voc conhece um pouco sobre MTAs ver que esta tabela tem funo
anloga aos arquivos "aliases" que tanto Postfix quanto Sendmail usam. Segundo a
High5.net esta tabela tambm pode exercer funo semelhante aos arquivos .forward de
sistemas Unix, ou seja, repassar as mensagens para endereos em outros domnios ou via
pipe para um programa.

Tabela de Domnios
Crie a tabela:

USE postfix;
CREATE TABLE domain (
domain varchar(255) NOT NULL default '',
description varchar(255) NOT NULL default '',
aliases int(10) NOT NULL default '0',
mailboxes int(10) NOT NULL default '0',
maxquota int(10) NOT NULL default '0',
transport varchar(255) default NULL,
backupmx tinyint(1) NOT NULL default '0',
created datetime NOT NULL default '0000-00-00 00:00:00',
modified datetime NOT NULL default '0000-00-00 00:00:00',
active tinyint(1) NOT NULL default '1',
PRIMARY KEY (domain),
KEY domain (domain)
) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Domains';

O Postfix usa as colunas "domain" e "description" desta tabela, o Courier no a utiliza.

A funo desta tabela listar os domnios virtuais que o Postfix aceitar como sendo
"locais". Mensagens para domnios que no estiverem aqui sero entregues a um dos
servidores listados em uma consulta DNS MX ou retornaro com erro caso no possam ser
entregues.

- 120 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

Tabela Mailbox
Crie a tabela com:

USE postfix;
CREATE TABLE mailbox (
username varchar(255) NOT NULL default '',
password varchar(255) NOT NULL default '',
name varchar(255) NOT NULL default '',
maildir varchar(255) NOT NULL default '',
quota int(10) NOT NULL default '0',
domain varchar(255) NOT NULL default '',
created datetime NOT NULL default '0000-00-00 00:00:00',
modified datetime NOT NULL default '0000-00-00 00:00:00',
active tinyint(1) NOT NULL default '1',
PRIMARY KEY (username),
KEY username (username)
) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Mailboxes';

O Postfix usa as colunas "username" e "maildir", o Courier usa "username, "password",


"name" e "maildir".

Esta tabela indicar ao postfix quais caixas postais so vlidas em cada domnio e o
diretrio onde as caixas sero armazenadas. Para o Courier ela indica os usurios vlidos,
a senha, o nome prprio e o diretrio onde as mensagens se encontram.

Popular as tabelas

Em linguagem de banco de dados "popular uma tabela" significa incluir dados.


Neste caso vamos criar alguns domnios de exemplo para que j tenhamos algo com que
trabalhar quando formos configurar o Postfix Admin.

Rode os comandos:

USE postfix;
INSERT INTO domain (domain,description) VALUES ('domain.tld','Test
Domain');
INSERT INTO alias (address,goto) VALUES ('alias@domain.tld',
'user@domain.tld');
INSERT INTO mailbox (username,password,name,maildir) \
VALUES
('user@domain.tld','$1$caea3837$gPafod/Do/8Jj5M9HehhM.','Mailbox User',
'user@domain.tld/');

Estas linhas criam um domnio "domain.tld", um alias apontando o endereo virtual


"alias@domain.tld" para "user@domain.tld" e acrescentam o usurio "user@domain.tld" ao
domnio. A senha do usurio "secret" e est pr-encriptada com o algoritmo MD5. Isso
servir para testes por enquanto.

Voc tambm pode usar senhas em claro (no recomendo) ou encriptadas pelo
algoritmo Crypt (tambm no recomendo, mas teremos que us-lo. Com uma mquina
razovel - acima de 1,8 GHz - possvel quebrar praticamente qualquer senha que use o

2009 Alfamidia Prow LTDA. - 121


DNS e Correio Eletrnico

mtodo Crypt em tempo bem curto. Hoje em dia essa encriptao pode ser considerada to
frgil quanto senha em claro).

Segundo a documentao do Postfix Admin, no se deve usar a funo de


encriptao MD5 nativa do MySQL, o Courier no reconhece essa encriptao, porm
reconhece Crypt. O problema que, infelizmente, o mdulo pam-mysql reconhece apenas
Crypt, assim teremos que usar este que o mnimo denominador comum. um mtodo
frgil para nossos dias, mas ainda melhor que senhas em claro.

Bom, terminamos de criar tudo no MySQL, saia do monitor com um

exit

e digite no prompt do shell

mysqladmin -p reload

para recarregar as permisses do MySQL e garantir que o usurio "postfix" ser


reconhecido.

Postfix

Em primeiro lugar, vamos criar o diretrio onde o postfix dever criar as caixas
postais. Abaixo deste diretrio haver um subdiretrio para cada domnio, e abaixo dos
subdiretrios dos domnios haver mais um nvel com os subdiretrios correspondentes as
caixas dos usurios.

Tinhamos combinado que as caixas ficariam abaixo do diretrio /var, portanto


criaremos um local adequado l e faremos com que o Postfix possa escrever nesse
diretrio com os comandos:

mkdir /var/virtualmail
chown -R postfix:postfix /var/virtualmail
chmod -R 771 /var/virtualmail

Editando o main.cf

O arquivo /etc/postfix/main.cf o principal arquivo de configurao do Postfix. Para


ter uma noo de tudo que pode ser configurado neste arquivo consulte a pgina man
postconf(5). bastante coisa, e nem tudo ser abordado aqui. Acesse o site do Postfix
(http://www.postfix.org) para mais informaes sobre as capacidades do software e
exemplos de configurao. Com certeza no ser tempo perdido.

No momento para ns o que interessa so as seguintes linhas que devemos acrescentar:

virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf

#virtual_gid o "group id" que o postfix usara para criar arquivos

- 122 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

#deve ser o mesmo do grupo "postfix" em /etc/group


virtual_gid_maps = static:102

virtual_mailbox_base = /var/virtualmail
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_limit = 51200000
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf

#virtual_minimum_uid o menor "user id" que o postfix poder usar


#deve ser o igual ou menor que o do usuario "postfix" em /etc/passwd
virtual_minimum_uid = 100

virtual_transport = virtual

#virtual_uid o "user id" que o postfix usara para criar arquivos


#deve ser o mesmo do usurio "postfix" em /etc/passwd
virtual_uid_maps = static:101

# Adicional para suporte a quota


virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
virtual_mailbox_limit_maps =
mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = Desculpe. O usurio excedeu o espao em
disco!
virtual_overquota_bounce = yes

Se quiser que o Postfix armazene mensagens tambm como servidor MX de backup,


acrescente a linha:

relay_domains = proxy:mysql:/etc/postfix/mysql_relay_domains_maps.cf

Sobre UIDs e GIDs


Uma nota sobre os tens "virtual_uid" e "virtual_gid". Em sistemas Unix ou
GNU/Linux, cada arquivo est associado a um dono (usurio) e um grupo. Voc pode
conceder permisses de leitura/escrita/execuo de forma independente para usurio,
grupo e todos os outros (outros so usurios que no fazem parte do grupo).

Cada usurio possui um nmero que o identifica no sistema, este o UID (User ID),
e deve obrigatoriamente ser membro de pelo menos um grupo. Grupos, claro, tambm
so identificados por um nmero, este chama-se GID (Group ID).

Qual a importncia disto pro Postfix ? Simples, quando o processo "virtual" do


Postfix for chamado para entregar as mensagens, ele ser executado como o usurio/grupo
cujos nmeros so especificados em virtual_uid_maps e virtual_gid_maps. Estes nmeros
podem ser definidos estticos (este o nosso caso) ou consultados da base de dados. Aqui
usamos o UID 101 e GID 102 correspondentes ao usurio "postfix" e ao grupo de mesmo
nome (se voc usou usurio/grupo diferente na linha "chown" acima deve usar os mesmos
aqui). Estes nmeros so vlidos para o Debian. Se estiver adaptando estas instrues

2009 Alfamidia Prow LTDA. - 123


DNS e Correio Eletrnico

para outra distro, adapte estes nmeros tambm. Dica: procure os nmeros nos arquivos
/etc/passwd e/ou /etc/group

Outros arquivos de configurao

Os arquivos abaixo descrevem os detalhes de conexo com a base de dados e


quais colunas das respectivas tabelas o Postfix deve usar. Crie-os no diretrio /etc/postfix
com sua verso favorita de 'vi' (vi, nvi, vim, etc.).

Arquivo mysql_virtual_alias_maps.cf
Este o arquivo com as configuraes de banco de dados para a tabela de "alias"
do Postfix. Coloque-o no diretrio de configurao do Postfix (geralmente /etc/postfix):

user = postfix
password = postfix
hosts = 127.0.0.1
dbname = postfix
table = alias
select_field = goto
where_field = address

Lembra quando criamos o usurio "postfix" no MySQL ? Lembra (ou anotou) da


senha que criou pra ele ? coloque-a na linha "password" acima substituindo a palavra em
negrito, se no o fizer o Postfix no conseguir conectar base de dados. Esse conselho
vale para os prximos arquivos tambm.

Use sempre "127.0.0.1" na linha "hosts", no use "localhost" como voc encontra
na documentao da High5.net. O motivo est explicado na pgina man mysql_table(5) do
Postfix:

"Se voc especificar localhost como hostname, mesmo que prefixado por inet:, o
Postfix tentar conectar com o socket local"

Isso pode nos causar problemas, uma vez que o Postfix geralmente roda dentro de
uma gaiola chroot, sendo incapaz de acessar o socket.

Arquivo mysql_virtual_domains_maps.cf
Este arquivo configura o acesso do Postfix tabela de domnios. Tambm vai em
/etc/postfix e os mesmos conselhos vlidos pro arquivo "mysql_virtual_alias_maps.cf" se
aplicam aqui.

user = postfix
password = postfix
hosts = 127.0.0.1
dbname = postfix
table = domain
select_field = description
where_field = domain
#additional_conditions = and backupmx = '0' and active = '1'

- 124 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

Arquivo mysql_virtual_mailbox_maps.cf
Configuramos agora o acesso tabela de caixas postais. Mesma coisa dos arquivos
anteriores.

user = postfix
password = postfix
hosts = 127.0.0.1
dbname = postfix
table = mailbox
select_field = maildir
where_field = username
#additional_conditions = and active = '1'

Arquivo mysql_virtual_mailbox_limit_maps.cf
Agora para a configurao de quota.

user = postfix
password = postfix
hosts = 127.0.0.1
dbname = postfix
table = mailbox
select_field = quota
where_field = username
#additional_conditions = and active = '1'

Calma, s falta mais um...

Arquivo mysql_relay_domains_maps.cf
Este arquivo ser necessrio se voc estiver operando um servidor de backup para
algum domnio. Um MX backup no armazena localmente as mensagens, ele apenas as
armazena at que possa repass-las ao verdadeiro destino.

user = postfix
password = postfix
hosts = 127.0.0.1
dbname = postfix
table = domain
select_field = domain
where_field = domain
additional_conditions = and backupmx = '1'

Com isso o Postfix j deve ser capaz de acessar a base sem problemas, e ns
podemos passar a prxima fase. Qualquer outra configurao de Postfix (contra spam,
virus, etc.) sero feitas mais tarde em sees prprias.

2009 Alfamidia Prow LTDA. - 125


DNS e Correio Eletrnico

Um breve teste do postfix com telnet deve mostrar algo assim:

servidor:/etc/postfix# telnet 127.0.0.1 25


trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
220 servidor ESMTP Postfix (Debian/GNU)
ehlo teste.com
250-servidor
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250 8BITMIME
mail from: eu@teste.net.br
250 Ok
rcpt to: user@domain.tld
250 Ok
data
354 End data with <CR><LF>.<CR><LF>
teste
.
250 Ok: queued as E00FC463F5

O teste foi bem sucedido se todos os comandos terminarem com status "250". Se
aps algum comando houver muita demora ou terminar com um status "4xx" ou "5xx" h
algo errado, ai teremos que analisar os logs do postfix.

Cyrus SASL 2

Simple Authentication and Security Layer, ou Camada Simples de Autenticao e


Segurana. A camada pode ser simples, mas a configurao, os problemas e as
idiosincrasias so bem complexas. Se voc se interessa por esse assunto, acesse o
endereo do Projeto Cyrus (http://asg.web.cmu.edu/cyrus/) da Universidade Carnegie
Mellon.

O mtodo que descobri ser menos problemtico para ter SASL 2 funcionando usar
o daemon de autenticao do Cyrus SASL (saslauthd) em combinao com PAM (Plugable
Authentication Modules (http://www.kernel.org/pub/linux/libs/pam/) no site kernel.org). Foi
mais fcil fazer PAM acessar o MySQL do que o Cyrus SASL 2. Outra alternativa forar o
Cyrus a autenticar via IMAP pelo Courier, mas esta tcnica se mostrou instvel em meus
testes.

PAM

Para cada servio que se queira autenticar com PAM necessria uma
configurao para ele. Apenas crie no diretrio /etc/pam.d um aquivo com o nome do
servio e entre com as opes de configurao. No nosso caso o servio a autenticar
chama-se "smtp".

- 126 2009 Alfamidia Prow LTDA.


DNS e Correio Eletrnico

Abra o arquivo /etc/pam.d/smtp em seu editor favorito e copie as linhas a seguir.

auth required pam_mysql.so user=postfix passwd=postfix host=localhost


\
db=postfix table=mailbox usercolumn=username passwdcolumn=password
crypt=1

account required pam_mysql.so user=postfix passwd=postfix


host=localhost \
db=postfix table=mailbox usercolumn=username passwdcolumn=password
crypt=1

Este arquivo contm linhas para os servios "account" (diz se a conta est
habilitadam se o usurio tem acesso so servio, etc.) e "auth" (autenticao. Diz se o
usurio se identificou corretamente).

A segunda coluna indica que sucesso no respectivo servio obrigatrio (required)


ou PAM retornar erro para a aplicao.

A terceira diz qual mdulo far o trabalho, no caso o mdulo pam_mysql.so.

Finalmente temos os parmetros para pam_mysql.so acessar a base de dados. As


informaes necessrias so o usurio, a senha, o host onde o o MySQL roda, a base de
dados, a tabela, as colunas da tabela que correspondem ao nome de usurio e senha e
finalmente se a senha est encriptada ou no.

E neste momento seu "sentido de administrador" j deve estar vibrando a toda...


"SENHA" ???

Isso mesmo, senha. Em um arquivo de texto com permisso de leitura global. Onde
qualquer um com acesso ao servidor pode ler.

Sim, isso um problema de segurana ! Infelizmente no tem jeito. Se o arquivo


no tiver permisso de leitura global nossas aplicaes (saslauthd, courier, etc.) que rodam
sob a identificao de usurios comuns no conseguiro acesso base de dados. Assim
sendo, certifique-se de que pessoas no autorizadas ficaro bem longe de seu servidor.

2009 Alfamidia Prow LTDA. - 127