Introduzione
In questo articolo, ti guideremo attraverso l'installazione di un server DNS autorevole BIND9 sicuro su CentOS 7
Cos'è BIND?
BIND è un software open source che implementa i protocolli DNS (Domain Name System) per Internet. È un'implementazione di riferimento di tali protocolli, ma è anche un software di livello produttivo, adatto per l'uso in applicazioni ad alto volume e ad alta affidabilità.
– ISC (Internet Systems Consortium)
Schema delle fasi di configurazione
- Preparazione di base del server.
- Installazione dei pacchetti software BIND.
- Configurazione dei pacchetti software BIND.
- Aggiunta di una zona di prova (dominio)
- Test del tuo server DNS
Prerequisiti
Prima di iniziare questo articolo di istruzioni, devi prima assicurarti di aver completato questi prerequisiti.
– Server CentOS 7 – Se non hai un server disponibile, puoi avviarne uno tramite la nostra pagina dei servizi di hosting VPS.
– Il tuo editor di testo preferito installato – Useremo nano in questo tutorial.
.
1 – Preparazione di base del server
Innanzitutto, assicurati di aver effettuato l'accesso come account utente root.
sudo su -
Successivamente, ci assicureremo che il sistema operativo principale sia completamente aggiornato.
yum update -y
Ora che il tuo sistema è completamente aggiornato, aggiorneremo il firewall (abilitato per impostazione predefinita ) per consentire al DNS (TCP Port 53 / UDP Port 53) di accedere al tuo server.
firewall-cmd --permanent --zone public --add-port 53/tcp firewall-cmd --permanent --zone public --add-port 53/udp firewall-cmd --reload
2 – Installazione dei pacchetti software BIND DNS
Ora siamo pronti per installare i pacchetti software BIND sul tuo server.
yum install -y bind bind-utils bind-chroot
- vincola : Il server DNS (Domain Name System) di Berkeley Internet Name Domain (BIND)
- utilità di collegamento : Utilità per eseguire query sui server dei nomi DNS
- bind-chroot : Un ambiente di runtime chroot per il server DNS ISC BIND
Ora che hai installato i pacchetti software BIND richiesti, siamo pronti per avviare i servizi BIND e impostarli per l'avvio automatico al riavvio del server.
systemctl start named systemctl enable named
.
3 – Configurazione del server DNS BIND
All'avvio del server BIND DNS, il pacchetto chroot monta automaticamente tutti i file di configurazione nel /var/named/chroot
directory del tuo server. Quando esegui BIND (o qualsiasi altro processo) in una jail chroot, il processo semplicemente non è in grado di vedere nessuna parte del filesystem al di fuori della jail.
Per riferimento, la directory di base in cui lavorerai per qualsiasi configurazione di BIND è /var/named/chroot
Per prima cosa, passiamo a quella directory per il resto di questi passaggi.
cd /var/named/chroot
Ora creiamo alcune directory e un file di impostazione di configurazione per il tuo nuovo server e impostiamo la proprietà. Queste directory verranno utilizzate per archiviare file di zona forward e reverse per il tuo server DNS.
mkdir var/named/fwd-zones mkdir var/named/rev-zones chown -R named:named var/named/fwd-zones chown -R named:named var/named/rev-zones touch etc/zones.conf chown root:named etc/zones.conf
Successivamente, modificheremo il etc/named.conf
file di configurazione. Ti guideremo attraverso l'intera configurazione in modo che tu possa capire cosa sta facendo ciascuna opzione per il tuo server.
nano etc/named.conf
Al momento dell'installazione iniziale, il file di configurazione predefinito sarà il seguente (se desideri passare al etc/named.conf
finale , lo trovi qui sotto):
// // named.conf // // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS // server as a caching only nameserver (as a localhost DNS resolver only). // // See /usr/share/doc/bind*/sample/ for example named configuration files. // options { listen-on port 53 { 127.0.0.1; }; listen-on-v6 port 53 { ::1; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; allow-query { localhost; }; recursion yes; dnssec-enable yes; dnssec-validation yes; dnssec-lookaside auto; /* Path to ISC DLV key */ bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic"; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN { type hint; file "named.ca"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key";
Le impostazioni e le opzioni di configurazione disponibili in BIND sono molto ampie. In questo articolo tratteremo solo le opzioni per configurare il tuo server in modo che sia un server DNS autorevole e proteggere il tuo server da attacchi di amplificazione DNS ricorsivi.
Per una spiegazione più approfondita di tutte queste opzioni, consigliamo le persone di Zytrax.com.
Opzioni di ascolto
La prima opzione di configurazione che cambieremo sono le opzioni di ascolto per il tuo server. Per impostazione predefinita, il server è configurato per essere in ascolto solo sull'indirizzo di loopback locale (127.0.0.1). Lo cambieremo per ascoltare su tutte le interfacce sul tuo server. Sostituisci le seguenti righe all'interno delle options { }
clausola del file di configurazione.
listen-on port 53 { any; }; listen-on-v6 port 53 { any; };
ACL (Liste di controllo degli accessi)
Ora aggiungeremo alcune regole ACL (Access Control List) alla configurazione. Questi ACL verranno utilizzati per estendere le impostazioni di sicurezza per le opzioni di ricerca della query e per le opzioni di query ricorsive. La prima regola, che chiameremo "query consentite", verrà utilizzata per consentire a qualsiasi indirizzo di origine di interrogare il server DNS. La seconda regola, che chiameremo "ricorsione consentita", verrà utilizzata per limitare la ricerca ricorsiva solo all'indirizzo localhost.
Aggiungi le seguenti regole dei criteri ACL appena sopra le options { }
clausola.
// ACL - Allow queries from ANY source address acl "allowed-queries" { any; }; // ACL - Allow recursion from LOCALHOST only. acl "allowed-recursion" { 127.0.0.1; ::1; }; options { ... };
Successivamente, modificheremo il valore di configurazione di allow-query
istruzione variabile per utilizzare il nuovo ACL che abbiamo appena creato. La allow-query
l'istruzione definisce chi (cioè le reti di origine) è autorizzato a interrogare il tuo server DNS. Sostituisci la riga seguente all'interno delle options { }
clausola del file di configurazione.
allow-query { "allowed-queries"; };
Limitazione della ricorsione
Ora dobbiamo proteggere l'autorizzazione di ricerca per ricorsione sul tuo server. La ricorsione è una tecnica in cui un server DNS interroga altri server DNS per conto del client richiedente per risolvere completamente il nome, quindi invia una risposta al client. Gli aggressori possono utilizzare questa tecnica per far sì che i server DNS con la ricorsione aperta abilitata partecipino involontariamente a un attacco DDoS (Distributed Denial of Service). Pertanto, se un server DNS nella tua rete non è destinato a ricevere query ricorsive, la ricorsione dovrebbe essere disabilitata su quel server o protetta per non consentire a fonti non autorizzate di utilizzare questa tecnica.
recursion yes; allow-recursion { "allowed-recursion"; };
Ora aggiungeremo un'istruzione include al file di configurazione. Questa istruzione verrà utilizzata per includere i dati della zona autorevole (domini) a cui il server sarà configurato per rispondere. Aggiungi la riga seguente sotto la chiusura dell'option { }
clausola, subito dopo l'ultima istruzione include.
include "/etc/zones.conf";
Abbiamo ora completato le modifiche alla configurazione in etc/named.conf
file di configurazione. Ora puoi salvare e uscire dalle modifiche.
.
Nuovo file named.conf
Per la revisione, il tuo etc/named.conf
il file di configurazione ora dovrebbe apparire come il seguente:
// // named.conf // // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS // server as a caching only nameserver (as a localhost DNS resolver only). // // See /usr/share/doc/bind*/sample/ for example named configuration files. // // ACL - Allow queries from ANY source address acl "allowed-queries" { any; }; // ACL - Allow recursion from LOCALHOST only. acl "allowed-recursion" { 127.0.0.1; ::1; }; options { listen-on port 53 { any; }; listen-on-v6 port 53 { any; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; allow-query { "allowed-queries"; }; recursion yes; allow-recursion { "allowed-recursion"; }; dnssec-enable yes; dnssec-validation yes; dnssec-lookaside auto; /* Path to ISC DLV key */ bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic"; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN { type hint; file "named.ca"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key"; include "/etc/zones.conf";
.
4 – Aggiunta della tua prima zona (dominio)
Ora aggiungeremo la tua prima zona per la quale il tuo server DNS sarà autorevole. Utilizzeremo un dominio di prova (example.tld ) per questo passaggio come esempio.
Innanzitutto, creeremo un nuovo file nella directory var/named/fwd-zones
che abbiamo creato in precedenza.
touch var/named/fwd-zones/example.tld.zone; chown named:named var/named/fwd-zones/example.tld.zone;
Successivamente, aggiungeremo i dati del record di zona di esempio per questo dominio. Modifica il nuovo file che abbiamo appena creato e aggiungi i dati della zona al file di configurazione.
nano var/named/fwd-zones/example.tld.zone
Dati zona
; zone file for example.tld $TTL 14400 ; 4 hours - default TTL for zone $ORIGIN example.tld. ;; SOA Resource Record @ IN SOA ns1.example.tld. hostmaster.example.tld. ( 2015010100 ; se = serial number 12h ; ref = refresh 15m ; ret = update retry 3w ; ex = expiry 3h ; min = minimum ) ;; Name Servers IN NS ns1.example.com. ns1 IN A 192.0.2.3 ;; Mail Exchange Resource Records @ IN MX 10 mail.example.tld. ;; Web Server Resource Records @ IN A 192.0.2.3 www IN CNAME @ ;; FTP Server Resource Records ftp IN A 192.0.2.3
Dopo aver apportato tutte le modifiche necessarie, salva ed esci.
Ora modifichiamo etc/zones.conf
file di configurazione per includere il nuovo dominio che abbiamo appena creato.
nano etc/zones.conf
Ora aggiungi i seguenti parametri al file di configurazione.
zone "example.tld" in { type master; file "fwd-zones/example.tld.zone"; allow-transfer { none; }; };
Al termine, salva ed esci da questo file.
Ora siamo pronti per riavviare i tuoi servizi DNS in modo che tutte le nuove configurazioni vengano caricate.
systemctl restart named
Se tutto è stato riavviato correttamente, senza errori, dovresti ricevere la seguente risposta:
Stopping named: . [ OK ] Starting named: [ OK ]
.
5 – Test del tuo server DNS
Ora siamo pronti per testare la funzionalità del tuo nuovo server DNS. Innanzitutto, confermeremo che il tuo server DNS sta rispondendo per la zona (dominio) che abbiamo appena creato. Esegui il seguente comando:
dig example.tld -t ANY @localhost
Dovresti vedere l'output di risposta simile di seguito dal tuo server. I valori di risposta chiave da cercare sono ;; ANSWER SECTION:
i valori. Questo output ti informa che il server ha risposto alla tua richiesta con i dati del record che hai inserito nei passaggi precedenti.
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.2 <<>> example.tld -t ANY @localhost ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61421 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1 ;; QUESTION SECTION: ;example.tld. IN ANY ;; ANSWER SECTION: example.tld. 14400 IN SOA ns1.example.tld. hostmaster.example.tld. 2015010100 43200 900 1814400 10800 example.tld. 14400 IN NS ns1.example.tld. example.tld. 14400 IN MX 10 mail.example.tld. example.tld. 14400 IN A 192.0.2.3 ;; ADDITIONAL SECTION: ns1.example.tld. 14400 IN A 192.0.2.3 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: ;; MSG SIZE rcvd: 147
Il secondo test che faremo è verificare che il tuo server risponda alle ricerche ricorsive dal localhost. Esegui il comando seguente per iniziare il test:
dig google.com -t ANY @localhost
Se il server è configurato come previsto, dovresti ricevere un ;; ANSWER SECTION:
risposta.
;; ANSWER SECTION: google.com. 86400 IN SOA ns1.google.com. dns-admin.google.com. 4294967295 7200 1800 1209600 300 google.com. 600 IN MX 50 alt4.aspmx.l.google.com. google.com. 600 IN MX 40 alt3.aspmx.l.google.com. google.com. 600 IN MX 10 aspmx.l.google.com. google.com. 600 IN MX 20 alt1.aspmx.l.google.com. google.com. 600 IN MX 30 alt2.aspmx.l.google.com. google.com. 3600 IN TXT "v=spf1 include:_spf.google.com ~all" google.com. 86400 IN TYPE257 \# 19 0005697373756573796D616E7465632E636F6D google.com. 300 IN AAAA 2607:f8b0:4008:804::200e google.com. 300 IN A 216.58.219.78 google.com. 172800 IN NS ns1.google.com. google.com. 172800 IN NS ns3.google.com. google.com. 172800 IN NS ns4.google.com. google.com. 172800 IN NS ns2.google.com. ;; AUTHORITY SECTION: google.com. 172800 IN NS ns4.google.com. google.com. 172800 IN NS ns1.google.com. google.com. 172800 IN NS ns3.google.com. google.com. 172800 IN NS ns2.google.com. ;; ADDITIONAL SECTION: ns2.google.com. 172800 IN A 216.239.34.10 ns1.google.com. 172800 IN A 216.239.32.10 ns4.google.com. 172800 IN A 216.239.38.10 ns3.google.com. 172800 IN A 216.239.36.10
L'ultimo test che faremo è convalidare che il tuo server NON aperto a un attacco di amplificazione DNS. La gente di openresolver.com ha impostato un semplice test che puoi usare con dig
:
dig +short test.openresolver.com TXT @1.2.3.4 (replace 1.2.3.4 with the IP address or domain name of the DNS server you are testing)
Una risposta di "open-resolver-detected"
indica che hai la ricorsione abilitata. Nessuna risposta, in questo caso, è una buona cosa .
Il sito openresolver.com ha anche uno strumento basato su browser disponibile per testare questa vulnerabilità.
Dopo aver eseguito il test con il tuo indirizzo IP pubblico, dovresti ricevere la seguente risposta simile:
Test del risolutore DNS ricorsivo aperto riuscito
Congratulazioni!
Ora hai un server DNS autorevole configurato e funzionante. Grazie per aver letto! Dai un'occhiata ad alcuni degli articoli correlati di seguito e grazie per aver provato le nostre affidabili soluzioni di hosting VPS su Atlantic.Net.