segunda-feira, 21 de setembro de 2009

Recurso de Views no Bind

Introdução

Aplicando o sistema de Views no Servidor Dns, ajuda a proporcionar mais segurança e performance, dividindo o sistema de resolução de nomes do sistema de autoridade sobre domínio, permitindo o controle maior sobre os serviços do mesmo, evitando que ip's não autorizados utilizem seu Servidor Dns sem autorização, as Views podem ser usadas sem problemas tanto internamente quanto externamente, oque ocorre aqui é, seu uso interno para resoluções de nomes na rede e na internet (também conhecido como resolução de cache e recursividade), seu uso externo como Dns autoritativo sobre algum domínio ou também liberar para algumas faixas de ip externo para resolução de cache.
Oque estou apresentando aqui é o cenário testado por mim, usado na empresa onde trabalho, porem, o domínio e ip's são fictícios. Por ter 2 placas de rede o Servidor Dns não tem NAT, nenhuma liberação de transporte autorizado pelas placas de rede dele, sendo assim, não é necessário a habilitação do ip_forward, coloquei um script com regras com iptables para aumentar a segurança do mesmo, pois ainda não terminei de montar a DMZ da empresa ;)
Não será abordado o processo de instalação do Bind, pois isso varia de distro para distro e preferencia de cada um, no decorrer do mesmo é considerado que já tenha o Bind instalado


Cenário:

A descrição abaixo é do Servidor Dns primário (Máster).

Distro:
Slackware 12.1

2 Placas-de-rede:
eth0 - 200.200.200.1
eth1 - 192.168.1.2

Dns secundário:
ip externo: 200.200.200.2
ip interno: 192.168.1.3

Bind:
Bind 9.4.3-p1 *

Domínio interno e externo:

adrianobalani.com.br **



Notas:
* Não esquecer de atualizar a sua versão para essa ou maior quem tiver versão do Bind inferior a que está disposta nesse artigo, pois foi descoberta uma vulnerabilidade grave na versão anterior, a falha é acontece quando o servidor recebe repetidamente mensagens de atualização dinâmica, gerando um ataque do tipo negação de serviço.

** No meu caso tenho um controlador de domínio interno com Active Directory com o mesmo nome do site.

Configurando


Seguindo o padrão do Slackware, acho que a maioria das distros tambem, o arquivo named.conf fica dentro de /etc/, é nesse arquivo que faremos a alteração, abaixo segue um exemplo do named.conf, suas diretrizes serão comentadas.

# vim /etc/named.conf

/* PRIMEIRO CRIAMOS AS ACL'S ONDE SERÃO DEFINIDOS OS VALORES COMO REDE INTERNA E DNS'S SECUNDARIOS
*/
// AQUI SEGUE O ENDEREÇO DA REDE INTERNA, SE POSSUIR MAIS QUE UM COLOQUE AQUI
acl "internos" {
192.168.1.0/24;
127.0.0.1;
};

// COLOQUE AQUI OS IP'S DE SEUS DNS'S SECUNDARIOS SE POSSUIR MAIS QUE UM, COLOQUE AQUI ASSIM AJUDA A MANTE-LOS ATUALIZADOS COM O DNS PRIMARIO
acl "dns_interno" {
192.168.1.3;
192.168.1.4;
};
acl "dns_externo" {
200.200.200.2;
200.200.200.3;
};
options {
directory "/var/named";
// AJUDA DIFICULTAR O TRABALHO DE IDENTIFICAR QUAL A VERSÃO DO BIND
version "Microsoft/DNS 7.0b";
// query-source address * port 53;
// NECESSARIO PARA O NOSSO REVERSO FUNCIONAR DE ACORDO COM OS DNS'S DA OPERADORA QUE FORNECEU OS IP'S E LIBERAMOS A OPÇÃO DE ATUALIZAR AS ZONAS DOS SECUNDARIOS
Allow-transfer {201.201.201.1; 201.201.201.2; 200.200.200.2; 200.200.200.3; };
// LIBERA OS IP'S ONDE SERÃO ENTREGUES AS CONSULTAS
listen-on { 200.200.200.1; 192.168.1.2;127.0.0.1; };
// DESABILITA O PROTOCOLO IPV6
listen-on-v6 { none; };
// UM POUCO DE SEGURANÇA NÃO FAZ MAU
dnssec-enable yes;
};

// VAMOS AS VIEWS
view "interna" {
// AQUI DEFINIMOS QUAIS OS CLIENTES QUE FAZEM PARTE DESSA VIEW, QUE FORAM DEFINIDOS NAS ACL'S ACIMA
match-clients { internos; };
// AQUI ESTÁ HABILITADO A OPÇÃO DE RECURSÃO (A BUSCA DE SITES NA NET)
recursion yes;

//AQUI COMEÇA A CONFIGURAÇÃO DE DNS CACHE E RECURSIVO
zone "." IN {
type hint;
file "caching-example/named.root";
};

zone "localhost" IN {
type master;
file "caching-example/localhost.zone";
allow-update { none; };
};

zone "0.0.127.in-addr.arpa" IN {
type master;
file "caching-example/named.local";
allow-update { none; };
};
// AQUI TERMINA A OPÇÃO ANTERIOR E COMEÇA A CONFIGURAÇÃO DO MEU DOMINIO INTERNO AS ZONAS DIRETAS E REVERSA
zone "adrianobalani.com.br" IN {
type master;
file "interno/adrianobalani.int.zone";
allow-update { dns_interno; };
};
zone "1.168.192.in-addr.arpa" IN {
type master;
file "interno/adrianobalani.int.rev";
allow-update { dns_interno; };
};

};
// AQUI COMEÇA A VIEW EXTERNA SEGUE A MESMA SISTEMATICA DA VIEW ANTERIOR, POREM COM ALGUMAS DIFERENÇAS
view "externa" {
// TIPO DE CLIENTE QUE TERÁ ACESSO, NESSE CASO QUALQUER UM
match-clients { any; };
// SEM RECURSÃO, OU MELHOR RESOLUÇÃO DE NOMES
recursion no;
zone "adrianobalani.com.br" IN {
type master;
file "adrianobalani/adriano.zone";
allow-update { 200.200.200.2; 200.200.200.3; };
};
zone "8-1.200.200.200.in-addr.arpa" IN {
type master;
file "adrianobalani/adriano.rev";
allow-update { 200.200.200.2; 200.200.200.3; };
};
};
Pronto, está criado as Views, para uma melhor organização foi criado dentro do diretorio dos arquivos de zona dois subdiretorios /var/named/interno e /var/named/adrianobalani, sendo um responsavel por armazenar os arquivos de zona interno e outro as externas.
Essa foi uma das maneiras em que eu consegui diminuir o uso externo dos Dns's da empresa, sendo assim tivemos um excelente ganho de desempenho, diminuindo quase a zero as respostas negativas e ganhando muita velocidade, porem, abaixo seguem algumas regras do iptables para diminuir as tentativas de DOS e Envenenamento de Cache.

1.iptables -A INPUT -p udp -i eth0 -m state --state NEW --dport 53 -m recent --update --seconds 10 --hitcount 3 -j DROP
2.iptables -A INPUT -p udp -i eth0 -m state --state NEW --dport 53 -m recent --set -j ACCEPT
fonte: http://petryx.blogrs.com.br/2009/03/05/bloqueando-ataque-dns-query-cache-nsin-denied/
Essas regras exigem um tempo minimo de conexão de 10 as conexões que não respeitaram seram bloqueadas.

Espero poder contribuir, estou trabalhando uma maneira de integra-lo com dhcpd e Active Directory, para fazer buscas mais conclusivas na rede interna, e com o dhcpd para adicionar os micros direto na zona direta e reversa.

Nenhum comentário: