Post

Instalação e Configuração Básica do BIND no Oracle Linux 9

Instalação e Configuração Básica do BIND no Oracle Linux 9

Este é o segundo artigo de nossa série sobre implementação e configuração do DNS BIND no Oracle Linux 9. No primeiro artigo, abordamos os conceitos fundamentais do DNS e a preparação do ambiente. Agora, vamos avançar para a instalação e configuração básica do servidor DNS.

Introdução

O BIND (Berkeley Internet Name Domain) é a implementação de servidor DNS mais utilizada na Internet, mantida pelo Internet Systems Consortium (ISC). Sua robustez, flexibilidade e conjunto completo de recursos o tornam a escolha preferida para administradores de sistemas em todo o mundo.

Neste artigo, vamos guiá-lo através do processo de instalação do BIND no Oracle Linux 9, explicar a estrutura de diretórios e arquivos, e configurar os componentes básicos necessários para um servidor DNS funcional. Ao final deste tutorial, você terá um servidor DNS básico em funcionamento, pronto para ser expandido com zonas e configurações avançadas nos próximos artigos da série.

Instalação do BIND no Oracle Linux 9

O BIND está disponível nos repositórios padrão do Oracle Linux 9, o que torna sua instalação bastante direta. Vamos começar com a instalação dos pacotes necessários.

Pacotes Necessários

Para uma instalação completa do servidor DNS, precisamos instalar dois pacotes principais:

  1. bind: O pacote principal do servidor DNS
  2. bind-utils: Ferramentas utilitárias como dig, host, nslookup e outras que são essenciais para testes e troubleshooting

Processo de Instalação

Abra um terminal e execute o seguinte comando com privilégios de superusuário:

1
sudo dnf install bind bind-utils -y

Este comando instala o BIND e suas ferramentas utilitárias, além de todas as dependências necessárias.

Verificação da Instalação

Após a instalação, podemos verificar a versão do BIND instalada:

1
named -v

Isso deve retornar algo como:

1
BIND 9.16.23 (Extended Support Version)

A versão exata pode variar dependendo das atualizações disponíveis no momento da instalação.

Pacotes Adicionais Opcionais

Dependendo das suas necessidades, você pode considerar a instalação destes pacotes adicionais:

  • bind-chroot: Para executar o BIND em um ambiente chroot, aumentando a segurança
  • bind-dnssec-utils: Ferramentas adicionais para gerenciamento de DNSSEC
  • bind-devel: Bibliotecas e arquivos de cabeçalho para desenvolvimento

Para instalar qualquer um desses pacotes adicionais:

1
sudo dnf install bind-chroot bind-dnssec-utils -y

Estrutura de Diretórios e Arquivos do BIND

Antes de começar a configuração, é importante entender a estrutura de diretórios e arquivos utilizados pelo BIND no Oracle Linux 9. Isso nos ajudará a navegar e modificar os arquivos corretos durante a configuração.

Diretórios Principais

  • /etc/named.conf: Arquivo principal de configuração
  • /etc/named/: Diretório para arquivos de configuração adicionais
  • /var/named/: Diretório para arquivos de zona
  • /var/run/named/: Diretório para arquivos de runtime, como o PID do processo
  • /var/log/: Diretório onde os logs serão armazenados (precisaremos criar um subdiretório específico)

Arquivos de Configuração Padrão

  • /etc/named.conf: Arquivo principal de configuração
  • /etc/named.rfc1912.zones: Definições de zonas padrão (localhost, etc.)
  • /etc/named.root.key: Chave raiz para DNSSEC
  • /etc/rndc.key: Chave para o utilitário rndc (Remote Name Daemon Control)

Arquivos de Zona Padrão

  • /var/named/named.ca: Arquivo de dicas (hints) para servidores raiz
  • /var/named/named.localhost: Zona para localhost
  • /var/named/named.loopback: Zona reversa para 127.0.0.1
  • /var/named/named.empty: Zona vazia para configurações específicas

Diretórios para Nossa Configuração

Vamos criar uma estrutura organizada para nossos arquivos de zona:

1
2
3
4
5
6
7
8
9
10
11
12
# Criar diretório para zonas
sudo mkdir -p /var/named/zones

# Criar diretórios para zonas internas e externas (para views)
sudo mkdir -p /var/named/zones/internal
sudo mkdir -p /var/named/zones/external

# Criar diretório para logs
sudo mkdir -p /var/log/named

# Criar diretório para dados dinâmicos
sudo mkdir -p /var/named/dynamic
/
|-- etc/
|   |-- named.conf          (Arquivo principal de configuração)
|   |-- named/              (Arquivos de configuração adicionais)
|   |   |-- named.rfc1912.zones
|   |   `-- named.root.key
|   `-- rndc.key            (Chave RNDC)
|
|-- var/
|   |-- named/              (Diretório de dados BIND)
|   |   |-- named.ca
|   |   |-- named.localhost
|   |   |-- named.loopback
|   |   |-- named.empty
|   |   |-- zones/            (Nossas zonas)
|   |   |   |-- internal/
|   |   |   `-- external/
|   |   |-- data/             (Arquivos de estatísticas, etc.)
|   |   `-- dynamic/          (Chaves dinâmicas, etc.)
|   |
|   |-- run/
|   |   `-- named/            (Arquivos de runtime)
|   |       |-- named.pid
|   |       `-- session.key
|   |
|   `-- log/
|       `-- named/            (Nossos logs)
|           |-- general.log
|           |-- security.log
|           `-- query.log

Figura 1: Estrutura de diretórios e arquivos do BIND

Permissões e Propriedade

É importante definir as permissões e propriedades corretas para esses diretórios:

1
2
3
4
5
6
7
8
9
10
11
# Definir propriedade para diretórios de zona
sudo chown -R root:named /var/named/zones
sudo chmod -R 750 /var/named/zones

# Definir propriedade para diretório de logs
sudo chown -R named:named /var/log/named
sudo chmod 770 /var/log/named

# Definir propriedade para diretório dinâmico
sudo chown -R named:named /var/named/dynamic
sudo chmod 770 /var/named/dynamic

Contextos SELinux

Como mencionamos no artigo anterior, o SELinux é uma parte importante da segurança no Oracle Linux 9. Precisamos configurar os contextos SELinux corretos para nossos diretórios:

1
2
3
4
5
6
7
8
9
10
11
# Configurar contexto SELinux para diretórios de zona
sudo semanage fcontext -a -t named_zone_t "/var/named/zones(/.*)?"
sudo restorecon -Rv /var/named/zones

# Configurar contexto SELinux para diretório de logs
sudo semanage fcontext -a -t named_log_t "/var/log/named(/.*)?"
sudo restorecon -Rv /var/log/named

# Configurar contexto SELinux para diretório dinâmico
sudo semanage fcontext -a -t named_cache_t "/var/named/dynamic(/.*)?"
sudo restorecon -Rv /var/named/dynamic

Backup da Configuração Padrão

Antes de realizar qualquer alteração, é uma boa prática fazer backup do arquivo de configuração original. Isso permite reverter facilmente caso algo dê errado:

1
sudo cp /etc/named.conf{,"_$(date +%Y-%m-%d)"}

Este comando cria uma cópia do arquivo /etc/named.conf com um sufixo contendo a data atual, por exemplo: /etc/named.conf_2025-05-18.

Configuração Básica do named.conf

O arquivo /etc/named.conf é o coração da configuração do BIND. Vamos criar uma configuração básica que servirá como fundação para as configurações mais avançadas nos próximos artigos.

Estrutura do Arquivo de Configuração

O arquivo de configuração do BIND utiliza uma sintaxe específica com blocos delimitados por chaves {} e instruções terminadas por ponto e vírgula ;. A estrutura básica inclui:

  1. Definições de ACLs: Agrupamentos de endereços IP ou redes
  2. Bloco options: Configurações globais do servidor
  3. Configuração de logging: Definição de canais e categorias de log
  4. Definições de zonas: Configuração das zonas DNS gerenciadas pelo servidor

Configuração Inicial

Vamos criar uma configuração básica que inclui:

  • ACLs para controle de acesso
  • Opções globais
  • Configuração de logging
  • Zonas básicas

Abra o arquivo de configuração:

1
sudo vi /etc/named.conf

E substitua seu conteúdo pelo seguinte:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
// named.conf for BIND DNS Server on Oracle Linux 9
// Basic configuration

// ================================================================================
// ACLs - Access Control Lists
// ================================================================================
acl "trusted" {
    localhost;
    192.168.200.0/24;    // Substitua pela sua rede local
};

// ================================================================================
// Options
// ================================================================================
options {
    // Directory for relative paths
    directory "/var/named";
    
    // Listen on specific interfaces and ports
    listen-on port 53 { 
        127.0.0.1;
        192.168.200.49;    // Substitua pelo IP do seu servidor
    };
    listen-on-v6 port 53 { ::1; };
    
    // Files for statistics, dump and dynamic managed keys
    statistics-file "/var/named/data/named_stats.txt";
    memstatistics-file "/var/named/data/named_mem_stats.txt";
    secroots-file "/var/named/data/named.secroots";
    recursing-file "/var/named/data/named.recursing";
    
    // Hide version to prevent reconnaissance
    version none;
    hostname none;
    server-id none;
    
    // DNSSEC configuration
    dnssec-validation auto;
    
    // Directory for dynamic managed keys
    managed-keys-directory "/var/named/dynamic";
    
    // PID and session key files
    pid-file "/run/named/named.pid";
    session-keyfile "/run/named/session.key";
    
    // Access control
    allow-query { trusted; };
    allow-transfer { none; };
    allow-update { none; };
    
    // Recursion control
    recursion yes;
    allow-recursion { trusted; };
    
    // Include crypto policies
    include "/etc/crypto-policies/back-ends/bind.config";
};

// ================================================================================
// Logging Configuration
// ================================================================================
logging {
    channel default_debug {
        file "data/named.run";
        severity dynamic;
    };
    
    channel general_log {
        file "/var/log/named/general.log" versions 3 size 5m;
        severity info;
        print-time yes;
        print-severity yes;
        print-category yes;
    };
    
    channel security_log {
        file "/var/log/named/security.log" versions 3 size 5m;
        severity info;
        print-time yes;
        print-severity yes;
        print-category yes;
    };
    
    channel query_log {
        file "/var/log/named/query.log" versions 3 size 10m;
        severity info;
        print-time yes;
    };
    
    category default { general_log; };
    category general { general_log; };
    category security { security_log; };
    category queries { query_log; };
};

// ================================================================================
// Basic Zones
// ================================================================================

// Root hints zone
zone "." IN {
    type hint;
    file "named.ca";
};

// Include standard zones
include "/etc/named.rfc1912.zones";

// Include DNSSEC root key
include "/etc/named.root.key";

Explicação da Configuração

Vamos analisar cada seção da configuração:

ACLs (Access Control Lists)

1
2
3
4
acl "trusted" {
    localhost;
    192.168.200.0/24;    // Substitua pela sua rede local
};

Esta ACL define quais redes são consideradas confiáveis. Neste caso, incluímos o localhost e a rede 192.168.200.0/24. Você deve substituir este endereço pela sua rede local.

Bloco Options

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
options {
    directory "/var/named";
    
    listen-on port 53 { 
        127.0.0.1;
        192.168.200.49;    // Substitua pelo IP do seu servidor
    };
    listen-on-v6 port 53 { ::1; };
    
    // ... outras opções ...
    
    allow-query { trusted; };
    allow-transfer { none; };
    allow-update { none; };
    
    recursion yes;
    allow-recursion { trusted; };
    
    // ... outras opções ...
};

As principais opções configuradas são:

  • directory: Define o diretório base para arquivos relativos
  • listen-on e listen-on-v6: Definem as interfaces e portas em que o servidor escutará
  • allow-query: Define quem pode fazer consultas ao servidor (usando a ACL “trusted”)
  • allow-transfer: Define quem pode solicitar transferências de zona (neste caso, ninguém)
  • allow-update: Define quem pode atualizar zonas dinamicamente (neste caso, ninguém)
  • recursion e allow-recursion: Habilitam recursão apenas para clientes confiáveis

Configuração de Logging

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
logging {
    channel default_debug {
        file "data/named.run";
        severity dynamic;
    };
    
    channel general_log {
        file "/var/log/named/general.log" versions 3 size 5m;
        severity info;
        print-time yes;
        print-severity yes;
        print-category yes;
    };
    
    // ... outros canais ...
    
    category default { general_log; };
    category general { general_log; };
    category security { security_log; };
    category queries { query_log; };
};

Esta configuração define vários canais de log e associa categorias de eventos a esses canais:

  • general_log: Para mensagens gerais
  • security_log: Para eventos relacionados à segurança
  • query_log: Para registrar consultas DNS

Zonas Básicas

1
2
3
4
5
6
7
8
9
10
11
// Root hints zone
zone "." IN {
    type hint;
    file "named.ca";
};

// Include standard zones
include "/etc/named.rfc1912.zones";

// Include DNSSEC root key
include "/etc/named.root.key";

Esta seção define:

  • A zona de dicas (hints) para os servidores raiz
  • Inclui as zonas padrão definidas em /etc/named.rfc1912.zones (localhost, etc.)
  • Inclui a chave raiz para DNSSEC

Verificação da Sintaxe da Configuração

Antes de iniciar o serviço, é crucial verificar a sintaxe da configuração para evitar problemas:

1
sudo named-checkconf

Se não houver saída, a sintaxe está correta. Caso contrário, o comando mostrará erros que precisam ser corrigidos.

Para uma verificação mais detalhada, que também carrega e verifica os arquivos de zona:

1
sudo named-checkconf -z

Configuração do Firewall

Para que o servidor DNS seja acessível pela rede, precisamos configurar o firewall para permitir o tráfego DNS:

1
2
sudo firewall-cmd --permanent --add-service=dns
sudo firewall-cmd --reload

Verifique se a regra foi adicionada corretamente:

1
sudo firewall-cmd --list-all

Você deve ver “dns” listado nos serviços permitidos.

Inicialização e Gerenciamento do Serviço

Agora que temos uma configuração básica, podemos iniciar o serviço BIND.

Habilitando o Serviço

Para garantir que o serviço BIND inicie automaticamente na inicialização do sistema:

1
sudo systemctl enable named

Iniciando o Serviço

Para iniciar o serviço BIND:

1
sudo systemctl start named

Verificando o Status do Serviço

Para verificar se o serviço está em execução:

1
sudo systemctl status named

Isso mostrará o status atual do serviço, incluindo quaisquer erros recentes. A saída deve indicar que o serviço está ativo (running).

Verificando Logs

Verifique os logs para garantir que o serviço iniciou corretamente:

1
sudo tail -f /var/log/named/general.log

Verificando Portas

Verifique se o BIND está escutando nas portas e interfaces corretas:

1
sudo ss -tulpn | grep named

Você deve ver o processo named escutando na porta 53 (TCP e UDP) nos endereços IP configurados.

+-----------------------------+
| Início                      |
+-------------+---------------+
              | 
              V
+-------------+---------------+
| Editar /etc/named.conf     |
+-------------+---------------+
              | 
              V
+-------------+---------------+
| Executar named-checkconf    | ----> [Erro?] --(Sim)--> Corrigir named.conf
+-------------+---------------+
              | (Não)
              V
+-------------+---------------+
| Configurar Firewall (dns)   |
| (firewall-cmd --add-service)|
+-------------+---------------+
              | 
              V
+-------------+---------------+
| Habilitar Serviço           |
| (systemctl enable named)    |
+-------------+---------------+
              | 
              V
+-------------+---------------+
| Iniciar Serviço             |
| (systemctl start named)     |
+-------------+---------------+
              | 
              V
+-------------+---------------+
| Verificar Status            |
| (systemctl status named)    | ----> [Erro?] --(Sim)--> Analisar Logs/Erros
+-------------+---------------+
              | (Não - Ativo)
              V
+-------------+---------------+
| Verificar Logs              |
| (tail /var/log/named/...)   |
+-------------+---------------+
              | 
              V
+-------------+---------------+
| Verificar Portas (ss)       |
+-------------+---------------+
              | 
              V
+-----------------------------+
| Configuração Básica OK      |
+-----------------------------+

Figura 2: Fluxograma de Verificação de Configuração e Inicialização do BIND

Configuração do Resolver Local

Para testar o servidor DNS localmente, configure o resolver para usar o servidor local:

1
echo "nameserver 127.0.0.1" | sudo tee /etc/resolv.conf

Para tornar esta configuração persistente (evitando que seja sobrescrita por NetworkManager):

1
sudo chattr +i /etc/resolv.conf

Nota: Em um ambiente de produção, você pode preferir configurar o NetworkManager para usar seu servidor DNS local de forma persistente, em vez de usar o comando chattr.

Testes Básicos

Vamos realizar alguns testes básicos para verificar se o servidor DNS está funcionando corretamente.

Teste de Resolução de Localhost

1
dig localhost

Você deve ver uma resposta como:

1
2
;; ANSWER SECTION:
localhost.		86400	IN	A	127.0.0.1

Teste de Resolução Reversa

1
dig -x 127.0.0.1

Isso deve retornar:

1
2
;; ANSWER SECTION:
1.0.0.127.in-addr.arpa. 86400	IN	PTR	localhost.

Teste de Resolução Externa

1
dig google.com

Se a recursão estiver funcionando corretamente, você deve receber os endereços IP do Google.

Configuração de ACLs Avançadas

As ACLs (Access Control Lists) são uma ferramenta poderosa no BIND para controlar o acesso a diferentes funcionalidades. Vamos expandir nossa configuração de ACLs para um cenário mais realista.

Exemplo de ACLs Expandidas

Edite o arquivo /etc/named.conf e substitua a seção de ACLs por:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// ================================================================================
// ACLs - Access Control Lists
// ================================================================================
acl "internal_networks" {
    localhost;
    192.168.200.0/24;    // Rede principal
    10.10.0.0/16;        // Rede VPN
};

acl "dmz_networks" {
    172.16.0.0/24;       // Rede DMZ
};

acl "dns_servers" {
    192.168.200.49;      // Este servidor (primário)
    192.168.200.50;      // Servidor secundário
};

Aplicando ACLs na Configuração

Agora, atualize o bloco options para usar estas ACLs:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
options {
    // ... outras opções ...
    
    // Access control
    allow-query { internal_networks; dmz_networks; };
    allow-transfer { dns_servers; };
    allow-update { none; };
    
    // Recursion control
    recursion yes;
    allow-recursion { internal_networks; };
    
    // ... outras opções ...
};

Esta configuração:

  • Permite consultas de redes internas e DMZ
  • Permite transferências de zona apenas para servidores DNS específicos
  • Restringe recursão apenas para redes internas

Configuração de Rate Limiting

O rate limiting é uma funcionalidade importante para proteger seu servidor DNS contra ataques de amplificação e outros tipos de abuso. Vamos adicionar configuração de rate limiting ao bloco options:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
options {
    // ... outras opções ...
    
    // Rate limiting configuration
    rate-limit {
        responses-per-second 10;
        window 5;
        qps-scale 250;
        errors-per-second 5;
        nxdomains-per-second 5;
        slip 2;
    };
    
    // ... outras opções ...
};

Esta configuração:

  • Limita o servidor a 10 respostas por segundo por cliente
  • Define uma janela de 5 segundos para cálculo da média
  • Escala o limite baseado na carga do servidor
  • Limita respostas de erro e NXDOMAIN a 5 por segundo
  • Define o valor “slip” para 2, o que significa que a cada 2 consultas acima do limite, 1 será respondida

Configuração de Estatísticas

O BIND pode gerar estatísticas detalhadas que são úteis para monitoramento e troubleshooting. Vamos habilitar esta funcionalidade:

1
2
3
4
5
6
7
8
9
options {
    // ... outras opções ...
    
    // Statistics configuration
    statistics-file "/var/named/data/named_stats.txt";
    zone-statistics yes;
    
    // ... outras opções ...
};

Para gerar estatísticas a qualquer momento:

1
sudo rndc stats

As estatísticas serão escritas no arquivo /var/named/data/named_stats.txt.

Configuração de RNDC (Remote Name Daemon Control)

O RNDC é uma ferramenta poderosa para controlar o servidor BIND remotamente. Vamos configurá-lo adequadamente:

1
2
3
4
5
6
7
8
9
10
11
12
// ================================================================================
// RNDC Configuration
// ================================================================================
controls {
    inet 127.0.0.1 port 953
        allow { localhost; } keys { "rndc-key"; };
};

key "rndc-key" {
    algorithm hmac-sha256;
    secret "base64-encoded-secret";
};

Para gerar uma chave RNDC segura:

1
sudo rndc-confgen -a -c /etc/rndc.key

Este comando gera uma chave aleatória e a salva em /etc/rndc.key. Você pode então incluir este arquivo na sua configuração:

1
include "/etc/rndc.key";

Troubleshooting Comum

Mesmo com uma configuração cuidadosa, problemas podem surgir. Aqui estão algumas situações comuns e como resolvê-las:

Problema: O Serviço Não Inicia

Verificação:

1
sudo systemctl status named

Possíveis soluções:

  1. Verifique erros de sintaxe: sudo named-checkconf
  2. Verifique permissões: ls -la /var/named/
  3. Verifique logs: sudo journalctl -xe

Problema: Erros de Permissão

Verificação:

1
sudo grep "permission denied" /var/log/named/general.log

Possíveis soluções:

  1. Corrigir permissões: sudo chown -R named:named /var/log/named
  2. Verificar contextos SELinux: sudo ls -Z /var/named/
  3. Ajustar boolean SELinux: sudo setsebool -P named_write_master_zones 1

Problema: Servidor Não Responde a Consultas

Verificação:

1
dig @127.0.0.1 localhost

Possíveis soluções:

  1. Verificar configuração de firewall: sudo firewall-cmd --list-all
  2. Verificar interfaces de escuta: sudo ss -tulpn | grep named
  3. Verificar ACLs na configuração

Problema: Recursão Não Funciona

Verificação:

1
dig @127.0.0.1 google.com

Possíveis soluções:

  1. Verificar se recursão está habilitada: grep recursion /etc/named.conf
  2. Verificar ACLs de recursão: grep allow-recursion /etc/named.conf
  3. Verificar conectividade com a Internet: ping 8.8.8.8

Monitoramento Básico

Para um servidor DNS em produção, é essencial configurar monitoramento básico:

Monitoramento de Logs

Configure rotação de logs para evitar que cresçam indefinidamente:

1
sudo vi /etc/logrotate.d/named

Adicione:

1
2
3
4
5
6
7
8
9
10
11
12
13
/var/log/named/*.log {
    daily
    missingok
    rotate 30
    compress
    delaycompress
    notifempty
    create 0640 named named
    sharedscripts
    postrotate
        /usr/bin/systemctl reload named.service > /dev/null 2>&1 || true
    endscript
}

Monitoramento de Serviço

Configure verificações básicas de saúde:

1
2
3
4
5
# Verificar se o serviço está em execução
systemctl is-active named

# Verificar se o processo está respondendo
dig @127.0.0.1 localhost +short

Estas verificações podem ser incorporadas a sistemas de monitoramento como Nagios, Zabbix ou Prometheus.

Conclusão e Próximos Passos

Neste segundo artigo da série, instalamos o BIND no Oracle Linux 9, configuramos sua estrutura básica, definimos ACLs para controle de acesso, configuramos logging e realizamos testes iniciais. Agora temos um servidor DNS funcional, embora ainda sem zonas personalizadas.

A configuração que criamos serve como uma base sólida para as configurações mais avançadas que abordaremos nos próximos artigos da série.

O que vem a seguir?

No próximo artigo, “Configuração de Zonas DNS no BIND”, abordaremos:

  • Criação de zonas diretas (forward zones)
  • Configuração de zonas reversas (reverse zones)
  • Sintaxe e estrutura de arquivos de zona
  • Registros SOA, NS, A, AAAA, MX, CNAME, TXT
  • Verificação e testes de zonas

Não perca! Nossa jornada para dominar o DNS BIND no Oracle Linux 9 continua.

Referências e Recursos Adicionais

This post is licensed under CC BY 4.0 by the author.