GNU/Linux >> Linux Esercitazione >  >> Linux

Procedura:server DNS BIND9 autorevole su CentOS 7:installazione e configurazione

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

  1. Preparazione di base del server.
  2. Installazione dei pacchetti software BIND.
  3. Configurazione dei pacchetti software BIND.
  4. Aggiunta di una zona di prova (dominio)
  5. 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.


Linux
  1. Come installare il server DNS su RHEL 8 / CentOS 8 Linux

  2. Come controllare i file di configurazione di bind9 (server DNS).

  3. Come installare DenyHost su CentOS 6.7

  4. Come installare PostgreSQL Server su CentOS 8

  5. Come installare Redis su CentOS 7

Come installare Nginx su CentOS 7

Come installare Webmin su CentOS 7

Come installare ownCloud su CentOS 7

Come installare MyWebSQL su CentOS 8

Come installare Relic Server Monitoring su CentOS 8

Come installare WordPress su un server CentOS 8