Baixe o app para aproveitar ainda mais
Prévia do material em texto
Sistemas Operacionais Open Source V Prof. Ricardo Mercês ricardo.merces@prof.infnet.edu.br Aula 6-8 DNS Objetivo • Compreender a resolução de nomes e seu impacto na organização de sistemas em rede • Ferramentas para resolução de nomes • BIND essencial • DHCP DNS Domain Name Service • O DNS (Domain Name System - Servidor de Nomes de Domínios) é um sistema de gerenciamento de nomes hierárquico e distribuído operando segundo duas definições: ü Examinar e atualizar seu banco de dados. ü Resolver nomes de domínios em endereços de rede (Ips). • O servidor DNS traduz nomes para os endereços IP e endereços IP para os respectivos nomes • É muito mais prático digitar www.vivaolinux.com.br do que 76.74.248.57 no seu navegador. Root Estrutura TLDs O resolvedor “stub” (1) • Biblioteca de resolução disponível para todas as aplicações • Chamada através da função gethostbyname() e de outras, providas pela glibc • Não é capaz de controle de acesso sofisticado, como assinatura de pacotes e criptografia • Pode consultar qualquer serviço de nomes suportado pela glibc O resolvedor “stub” (2) • Lê o arquivo /etc/nssswitch.conf para determinar a ordem na qual os serviços de nomes serão consultados, conforme exibido aqui (default): hosts: files dns • O nome de domínio NIS e o domínio DNS geralmente devem ser diferentes, para evitar conflitos Resolvers • host ü Nunca lê o arquivo /etc/nsswitch.conf ü Por default, olha para as linhas nameserver e search no arquivo /etc/resolv.conf ü Saída mínima por default • dig ü Nunca lê o arquivo /etc/nsswitch.conf ü Por padrão, olha apenas para a linha nameserver no arquivo /etc/resolv.conf ü A saída é feita em um formato de arquivo de zona estipulado por uma RFC, tornando o dig uma ferramenta muito útil DNS Query dig +trace redhat.com l Lê o arquivo /etc/resolv.conf para determinar o servidor DNS l Procura pelos servidores raízes (root servers) l Segue as referências para obter as respostas Observações (1) • No teste que fizemos, as respostas seguem o formato resource records • Cada RR tem cinco campos: • domínio – o domínio ou subdomínio perguntado • ttl – por quantos segundos o registro deve ficar em cache • classe – a classificação do registro (IN) • tipo – o tipo de registro, como A ou NS • rdata – dados de recursos para o qual o domínio aponta Observações (2) • Conceitualmente, você faz perguntas por um domínio (nome), e recebe um campo mapeado rdata como resposta • No exemplo de trace • Os registros NS (name server) são referências • O registro A (address) é a resposta final e o tipo de consulta default do programa dig Pesquisa reversa dig -x 209.132.177.50 Observações • Na saída da tela, a seção de perguntas mostra que o DNS inverte os octetos de um endereço e acrescenta in-addr.arpa. para qualificar completamente o registro • A seção de resposta mostra que o DNS usa registros do tipo PTR para consulta reversa • O campo rdata de um registro PTR é um nome de domínio plenamente qualificado Consulta por servidores de e-mail • Um registro MX mapeia um domínio para o hostname de um servidor de e-mail • É assim que o e-mail funciona na Internet! dig -t mx.redhat.com Consultas de e-mail: observações • O campo rdata é estendido para incluir um pedaço a mais de informação chamado prioridade • A prioridade pode ser vista como distância: redes preferem distâncias mais curtas • Para evitar consultas desnecessárias, os servidores tipicamente já fornecem uma resposta adicional a esta consulta, com o registro A do servidor de e-mail apontado • Juntos, o registro MX e o registro A permitem a entrega de e-mails para aquele domínio Consultas SOA • Um registro SOA marca um servidor como possuidor de autoridade “master” sobre um domínio dig -t soa redhat.com Observações iniciais • O domínio é chamado de origin • O campo rdata é estendido para suportar dados adicionais, explicados a seguir • Há tipicamente apenas um master em um domínio; ele armazena a cópia “oficial” dos dados • Outros servidores que possuem autoridade para o domínio ou zona são listados como slaves: eles sincronizam seus dados a partir do master Dados rdata em um registro SOA • FQDN do servidor de nomes master • E-mail do contato • Número serial • Intervalo entre checagens do número serial • Intervalo entre tentativas para servidores slave • Expiração dos registros quando um slave não consegue acessar seu(s) mestre(s) • TTL mínimo para respostas negativas (host não encontrado) Possuindo autoridade • O registro SOA meramente indica o servidor master para a origem (domínio) • O servidor possui autoridade se tem: • Delegação do domínio pai: registro NS e registro A • Uma cópia local dos dados do domínio, incluindo o registro SOA • Um servidor de nomes que tem a delegação correta mas não possui os dados de um domínio é chamado lame server Consultando TUDO dig -t axfr example.com. @10.0.0.1 Observações l Todos os registros da zona são transferidos l Os registros informam muito sobre a rede em si l A resposta é muito grande para UDP; usa-se TCP A maioria dos servidores de nomes restringe este tipo de transferência para apenas alguns hosts selecionados (normalmente os slaves) Explorando o DNS com host Para quaisquer das consultas abaixo, use a opção -v para obter o resultado no formato de zona l Trace: não disponível l Delegação: host -rt ns redhat.com l Forçar iterativo: host -r redhat.com l Consulta reversa: host 209.132.177.50 l Consulta MX: host -t mx redhat.com l Consulta SOA: host -t soa redhat.com l Transferências de zona: host -t axfr redhat.com \ 192.168.0.254 ou host -t ixfr=<serial> example.com. \ 192.168.0.254 Compreendendo o servidor • O Red Hat Enterprise Linux usa o BIND, o Berkeley Internet Name Domain • O servidor DNS mais usado na Internet! • Uma infraestrutura estável e confiável na qual basear um nome de domínio e associações de IP • A implementação de referência para as RFCs de DNS • Roda em um ambiente chroot Perfil de serviço: DNS • Tipo: serviço gerenciado System-V • Pacotes: bind, bind-utils, bind-chroot • Daemons: /usr/sbin/named, /usr/sbin/rndc • Script: /etc/init.d/named • Portas: 53 (domínio), 953 (rndc) • Configuração: (sob /var/named/chroot/) /etc/ named.conf, /var/named/*, /etc/rndc.key • Relacionados: caching-nameserver, openssl Perfil de controle de acesso: BIND • Netfilter: porta 53 e 953, TCP e UDP, entrando; portas cliente TCP e UDP saindo • TCP Wrappers: N/A • Xinetd: N/A (é um daemon standalone) • SELinux: sim • Controles específicos da aplicação: sim Começando a trabalhar com BIND • Instale os pacotes ü bind para os binários essenciais ü bind-chroot para segurança ü caching-nameserver para uma configuração inicial • Configure o carregamento ü service named configtest ü service named start ü chkconfig named on • Prossiga com a configuração do named Configuração named essencial Defina controles de acesso em /etc/named.conf l Declare as listas de acesso l Especifique as interfaces de servidor: listen-on e listen-on-v6 l Que consultas devem ser permitidas? Interativas: allow-query { lista-acesso; }; Recursivas: allow-recursion { lista-acesso; }; Transferências: allow-transfer { list-acess; }; Pra finalizar... • Adicione dados através dos arquivos de zona • Teste! Configurando o resolvedor stub • No servidor de nomes: • Edite /etc/resolv.conf para especificar nameserver 127.0.0.1 • Edite /etc/sysconfig/network-scripts/ ifcfg-* para especificar PEERDNS=no • Vantagens: • Garante consultas consistentes para todos • Simplificaos controles de acesso e troubleshooting O pacote bind-chroot • Instala um ambiente chroot sob /var/named/ chroot • Move os arquivos de configuração existentes para o chroot, substituindo os originais com links simbólicos • Atualiza o arquivo /etc/sysconfig/named com a opção: ROOTDIR=/var/named/chroot O pacote caching-nameserver • Provê • named.caching-nameserver.conf • named.ca contendo as “referências” dos servidores raiz • Arquivos de zona de pesquisa direta e reversa para os nomes e IPs locais da máquina • Dicas • Copie named.caching-nameserver.conf para named.conf • Mude o dono para root:named • Edite o arquivo named.conf Listas de acesso • Listas de IPs e sub-redes separados por “;” e usados em configurações de segurança do BIND • Formato: • Endereço IP: 192.168.0.1 • Ponto final: 192.168.0. • CIDR: 192.168.0.0/24 • Use “!” para denotar inversão • A lista é checada na ordem, parando na primeira coincidência Exemplo de lista de acesso { 192.168.0.1; 192.168.0.; 192.168.1.0/24; }; Fazendo de suas listas ACLs • Podemos dar “nomes” para uma lista de acesso que definimos no arquivo /etc/ named.conf • Geralmente usamos esses nomes, em vez de repetir toda uma lista várias vezes. • A melhor prática é defini-las logo no início da configuração Exemplos de ACLs acl “trusted” { 192.168.1.21; }; acl “classroom” { 192.168.0.0/24; trusted; }; acl “cracker” { 192.168.1.0/24; }; acl “mymasters” { 192.168.0.254; } acl “myaddresses” { 127.0.0.1; 192.168.0.1; }; ACLs predefinidas • O BIND predefine quatro ACLs none - nenhum endereço casa any - qualquer endereço casa localhost - qualquer ip do próprio servidor localnets - redes diretamente conectadas Interfaces do servidor • Opção : listen-on port 53 { lista- acesso; }; • Liga o named a interfaces específicas • Exemplo: listen-on port 53 { myaddresses; }; listen-on-v6 port 53 { ::1; }; • Reinicie e verifique com: netstat –tulpn | grep named Permitindo consultas • Opção: allow-query { lista- acesso; }; • O servidor fornece tanto respostas com autoridade quanto baseadas em cache para os clientes especificados • Exemplo: allow-query { classroom; cracker; }; • Se ausente, todos podem fazer consultas Permitindo recursão • Opção: allow-recursion { lista-acesso; }; • O servidor busca as respostas em nome dos clientes especificados • Exemplo: allow-recursion { classroom; !cracker; }; Permitindo transferências • Opção: allow-transfer { lista-acesso; }; • Clientes listados podem atuar como servidores slave • Exemplo: allow-transfer { !cracker; classroom; }; Outros ajustes com BIND • Opção: forwarders { lista-acesso; }; • Modificador: forward first | only ; • Leva o named a fazer perguntas recursivas aos servidores especificados antes - ou em vez - de atender às consultas solicitadas a ele próprio Declaração de uma zona master zone “example.com” { type master; file “example.com.zone”; }; Declaração de zonas slaves zone “example.com” { type slave; masters { mymasters; }; file “slaves/example.com.zone”; }; Criação de arquivos de zona Conteúdo de um arquivo de zona: • Uma coleção de registros, começando com SOA • O símbolo @ é uma variável que representa o valor da origem • Comentários seguem o estilo assembly (;) Cuidados: l BIND acrescenta o valor de origem a todos os hostnames que não terminarem com “.” l Se o campo domínio estiver faltando em um registro, BIND usa o valor do registro anterior l Lembre-se de incrementar seu serial!!! Dicas para arquivos de zona • Não comece do zero – copie um arquivo já instalado através do pacote caching- nameserver • Para poupar trabalho, coloque $TTL 86400 no início do arquivo de zona, e omita esta informação nos registros individuais • BIND permite que você divida dados multivalorados em várias linhas, se eles estiverem entre parênteses $ORIGIN example.com $TTL 86400 @ IN SOA dns1.example.com. hostmaster.example.com. ( 2001062501 ; serial 21600 ; refresh after 6 hours 3600 ; retry after 1 hour 604800 ; expire after 1 week 86400 ) ; minimum TTL of 1 day IN NS dns1.example.com. IN NS dns2.example.com. IN MX 10 mail.example.com. IN MX 20 mail2.example.com. IN A 10.0.1.5 dns1 IN A 10.0.1.2 dns2 IN A 10.0.1.3 ftp IN CNAME server1 mail IN CNAME server1 mail2 IN CNAME server2 www IN CNAME server2 Exemplo Testando Operação • Selecione dig, host ou nslookup e use-os bem para verificar a operação de seu servidor de nomes • Rode tail -f /var/log/messages em um shell separado quando reiniciar um serviço Configuração l O BIND se recusa a iniciar se houverem erros de sintaxe. l Use service named configtest l configtest executa dois utilitários de sintaxe, que também podem ser usados separadamente Utilitários de sintaxe BIND • named-checkconf -t CHROOT <arq.conf> • Verifica o arquivo named.conf por default • named-checkconf -t /var/named/ chroot • named-checkzone ORIGIN <arquivo_zona> • Inspeciona uma configuração de zona específica • Exemplo named-checkzone redhat.com \ /var/named/chroot/var/named/redhat.com.zone rndc • Provê gerenciamento local e remoto do named • O pacote bind-chroot o configura! • Ouve apenas nas interfaces loopback (v4 e v6) • Lê a chave a partir de /etc/rndc.key • Se a chave não casa, não pode parar ou carregar o serviço named • Nenhuma configuração adicional é necessária para uma instalação default local • Ex.: rndc flush (zera o cache do servidor) DHCP: Visão geral • DHCP: Dynamic Host Configuration Protocol, implementado pelo dhcpd • O dhcpd provê serviços para clientes DHCP e BOOTP via IPv4 Perfil de serviço: DHCP • Tipo: serviço gerenciado System-V • Pacote: dhcp • Daemon: /usr/sbin/dhcpd • Script: /etc/init.d/dhcpd • Portas: 67 (bootps), 68 (bootpc) • Configuração: /etc/dhcpd.conf, /var/lib/ dhcpd/dhcp.leases • Relacionados: dhclient, dhcpv6_client, dhcpv6 Configurando um DHCP IPv4 • Configurado em /etc/dhcpd.conf • Configuração de exemplo fornecida em /usr/ share/doc/dhcp-versão/dhcpd.conf.sample • Deve haver ao menos um bloco subnet, e ele tem que corresponder às interfaces configuradas • Execute service dhcpd configtest para testar a sintaxe usada
Compartilhar