Neste artigo temos uma apresentação do servidor de DNS que veio para substituir o já cansado BIND. MaraDNS é o que temos de mais seguro e robusto em servidores de DNS. Mas o que irá lhe surpreender é a facilidade de uso. Aqui mostro como configurar um servidor de DNS recursivo para que nunca mais usemos os DNS das teles e dos provedores.
Uma vez com o MaraDNS instalado, o arquivo mararc precisa ser configurado antes do MaraDNS funcionar como um servidor recursivo. Este arquivo precisa somente destas três linhas:
Este arquivo de três linhas precisa ser chamado de /etc/mararc. As três linhas significam:
A primeira linha é o endereço IP que MaraDNS usará. Aqui, tem o endereço 127.0.0.1, e significa que somente a máquina que executa o MaraDNS poderá ter acesso ao servidor MaraDNS -- outras máquinas não poderão vê-lo.
Se a máquina que executar MaraDNS for acessada por outras máquinas, este IP necessita ser mudado para um IP que as outras enxerguem. É possível ter o MaraDNS rodando em múltiplos endereços IP:
A secunda linha, chroot_dir é o diretório da onde MaraDNS será executado. Quando MaraDNS está sendo usado como um servidor recursivo, este apenas precisa ser um diretório vazio, idealmente com permissões do usuário root. Ou seja, por padrão o MaraDNS já é executado via chroot, o que nos dá uma segurança tremenda.
A terceira linha, recursive_acl, determina a faixa de IPs que podem acessar o servidor recursivo. Este é um formato IP/netmask. Por exemplo, se alguem tem um escritório no qual utiliza os IPs na forma 192.168.1.1, 192.168.1.2, etc., e deseja ter somente qualquer 192.168.1. em ser permitido fazer consultas recursivas, usa-se o seguinte:
recursive_acl = "192.168.1.0/24"
Aqui o "/24" indica que vamos ignorar o quarto número do IP quando determinamos quem contata o MaraDNS.
Uma vez feito isso, outras máquinas podem contatar o servidor MaraDNS para realizar consultas DNS. Por exemplo, MaraDNS é agora o servidor de DNS que o Windows 98 pode usar no "painel controle - > rede - > TCP/IP - > Configuração DNS", ou um sistema UNIX podem apontar em /etc/resolv.conf.
Não é simples?
O MaraDNS tem essa filosofia de simplicidade, robustez e segurança. Para conhecer mais desse programa, acesse o site www.maradns.org.
[1] Comentário enviado por segment em 04/07/2006 - 09:50h
Parabéns pelo artigo, sinceramente não escutei falar do MaraDNS, concerteza irei testar ele, pelo que deu a entender é muito simples sua configuração, resta saber se realmente é seguro, e se vale a pena usar, vlw brother...
[3] Comentário enviado por feraf em 04/07/2006 - 12:59h
DNS é um serviço fácil de se implementar. Alguns recursos como busca recursiva já dão um pouco mais de trabalho. O DNS que eu implementei fazia buscas não-recursivas, com suporte a várias zonas e vários forwarders, e era multithreading. Tirei 9 no projeto :-)
[6] Comentário enviado por zilli em 04/07/2006 - 15:56h
Respondendo agk
O MaraDNS é muito bem documentado com vários tutoriais e man-pages. Eu praticamente traduzi tudo, além de outras contribuições, como o pacote do MaraDNS para o slackware que se encontra no site.
O sistema é poderoso, pois além de servidor recursivo, você tem também a opção de trabalhar com ele como autoritativo ou cache. Posso lhe garantir que configurar um DNS para um domínio, nunca foi tão facil.
Estarei nos próximos meses lançado um livro sobre o MaraDNS, esse artigo é apenas um aperitivo. :-)
É com certeza o software de DNS mais seguro no momento. Testem, experimentem, que com certeza irão adorar.
[7] Comentário enviado por lacierdias em 05/07/2006 - 10:42h
Amigo Daniel Zilli,
Seria possivel um artigo sobre o MaraDNS com cache e recursivo.
Porque isso sim deixaria o DNS extremamente rápido.
Poderia disponibilizar o material que vc traduziu..
Abraço.
[8] Comentário enviado por zilli em 05/07/2006 - 14:53h
Respondendo lcrdias,
Caro colega,
Todo o material que traduzi encontra-se inserido no pacote do programa. É só baixar o programa, descompactar e procurar no diretório doc/pt_br . Lá você encontrará os tutoriais traduzidos, inclusive como fazer o MaraDNS funcionar como cache.
Obs: Pessoalmente não utilizo o MaraDNS como cache, por três motivos: a) o ganho de velocidade é insignificante e as vezes fica mais lento, pois você irá depender de um outro servidor para fazer a resolução. b) se o provedor no qual ele se utiliza para fazer as resoluções estiver fora do ar ou mau configurado, você terá problemas. c) porque depender de terceiros, se o MaraDNS sozinho da conta do recado?
[9] Comentário enviado por agk em 22/08/2006 - 09:49h
Finalmente sobrou um tempinho e comecei a testar o mara, depois de instalado e configurado me deparei com esse erro:
Aug 22 09:47:59 mcr-lnx-99 maradns.etc_maradns_mararc: Fatal error: root_servers["."] or upstream_servers["."] must be set in the
Aug 22 09:47:59 mcr-lnx-99 maradns.etc_maradns_mararc: mararc file
Aug 22 09:47:59 mcr-lnx-99 maradns.etc_maradns_mararc: e.g. root_servers["."] = "198.41.0.4"
Aug 22 09:47:59 mcr-lnx-99 maradns.etc_maradns_mararc: In addition, root_servers = {} (or upstream_servers = {}) must preceed this
[10] Comentário enviado por zilli em 22/08/2006 - 10:29h
Olá agk!
Você poderia postar aqui o arquivo mararc para ver como ele ficou?
Pelo erro parece que as variáveis upstream_servers = {} ou ipv4_alias = {} estão mau configuradas.
[11] Comentário enviado por agk em 23/08/2006 - 14:54h
Consegui fazer o maradns funcionar, fazendo do jeito que explica o artigo, ou seja, instalando a partir do fontes.
Antes eu tinha instalado pelo apt-get do Debian e ele gera o mararc com um monte de coisas diferentes nele, removi tudo e coloquei as 3 linhas que diz no artigo, daí que deram esses erros que reportei no comentário acima.
Bem pelo menos agora funciona, vou fazer algumas tentativas ainda pra colocar pra funcionar a instalação pelo apt-get.
Se não der certo vou usar os fontes mesmo, mas eu preciso criar um script para poder dar start/stop no serviço e colocar ele para rodar na inicialização do sistema.
Grato pela ajuda, [ ]'s.
[13] Comentário enviado por zilli em 25/01/2007 - 11:03h
Olá amigo,
Você compilou os fontes ou usou um pacote .deb. Eu sei que em algum lugar existe esse pacote em algum repositório, só não sei aonde. :-)
Se compilou os fontes veja se não existe problema de permissão.
Abaixo segue meu script que usou no slackware:
-------------------
#!/bin/bash
# Copyright 2005 Sam Trenholme
# TERMS
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# This software is provided 'as is' with no guarantees of correctness or
# fitness for purpose.
# This is a script which stops and starts the MaraDNS process
# The first line points to bash because I don't have a true Solaris /bin/sh
# to test this against.
# The following is a pointer to the MaraDNS program
if [ -x "/usr/sbin/maradns" ] ; then
MARADNS="/usr/sbin/maradns"
elif [ -x "/usr/sbin/maradns.authonly" ] ; then
MARADNS="/usr/sbin/maradns.authonly"
elif [ -x "/usr/local/sbin/maradns" ] ; then
MARADNS="/usr/local/sbin/maradns"
elif [ -x "/usr/local/sbin/maradns.authonly" ] ; then
MARADNS="/usr/local/sbin/maradns.authonly"
else
echo unable to find maradns
exit 1
fi
# The following is a pointer to the duende daemonizer
if [ -x "/usr/sbin/duende" ] ; then
DUENDE="/usr/sbin/duende"
elif [ -x "/usr/local/sbin/duende" ] ; then
DUENDE="/usr/local/sbin/duende"
elif [ -x "/usr/local/bin/duende" ] ; then
DUENDE="/usr/local/bin/duende"
elif [ -x "/usr/bin/duende" ] ; then
DUENDE="/usr/bin/duende"
else
echo unable to find duende
exit 1
fi
# The following is the directory we place MaraDNS log entries in
LOGDIR="/var/log"
# The following is a list of all mararc files which we will load or
# unload;
# Simple case: Only one MaraDNS process, using the /etc/mararc file
MARARCS="/etc/mararc"
# Case two: Three MaraDNS processes, one using /etc/mararc.1, the second one
# using /etc/mararc.2, and the third one using /etc/mararc.3
# (this is not as essential as it was in the 1.0 days; MaraDNS can now bind
# to multiple IPs)
#MARARCS="/etc/mararc.1 /etc/mararc.2 /etc/mararc.3"
# Show usage information if this script is invoked with no arguments
if [ $# -lt 1 ] ; then
echo Usage: $0 \(start\|stop\|restart\)
exit 1
fi
# If invoked as stop or restart, kill *all* MaraDNS processes
if [ $1 = "stop" -o $1 = "restart" ] ; then
echo Sending all MaraDNS processes the TERM signal
ps -ef | awk '{print $2":"$8}' | grep maradns | grep -v $$ | \
cut -f1 -d: | xargs kill > /dev/null 2>&1
echo waiting 1 second
sleep 1
echo Sending all MaraDNS processes the KILL signal
ps -e | awk '{print $1":"$NF}' | grep maradns | grep -v $$ | \
cut -f1 -d: | xargs kill -9 > /dev/null 2>&1
echo MaraDNS should have been stopped
fi
# If invoked as start or restart, start the MaraDNS processes
if [ $1 = "start" -o $1 = "restart" ] ; then
echo Starting all maradns processes
for a in $MARARCS ; do
echo Starting maradns process which uses Mararc file $a
# Duende syslogs MaraDNS' output messages and daemonizes MaraDNS
$DUENDE $MARADNS -f $a
done
fi
---------------------
[14] Comentário enviado por agk em 01/02/2007 - 08:57h
Se você instalou a partir dos fontes tem um script tem um script pronto para funcionar com Debian dentro de /build chamado mara.startup.
Para funcionar basta copiar ele para /etc/init.d e depois fazer os links para os Runlevels que você quiser que ele inicie.
Se instalou a partir do repositório ou a partir de um .deb este script já deve estar em /etc/init.d, então basta adicionar os links para ele inicializar com o runlevel que você quiser.