DNS (Domain Name System)

Indice

Introduzione

Chiunque usi internet, senza saperlo, usa i DNS (Domain Name System), essi sono fondamentali per poter usufruire dei servizi offerti dalla rete, senza di essi non potremmo navigare, usare la posta e qualsiasi servizio per cui accedereste con un "nome", se i DNS oggi smettessero di funzionare la rete collasserebbe e non per un errore di connettività ma per un errore di servizio..
Me ne sono accorto molto bene, Aprile 2019 per un problema di DNS tutti i servizi legati al dominio occhoinformatico.it (siti web , posta elettronica e certificata) non hanno funzionato per 2 giorni interi ed il server era vivo, vegeto e funzionate! Il problema è stato che dall'oggi al domani il provider del dominio ha applicato le regole del NIC (Network Information Center) o più conosciuto come "Il Registro" l'anagrafe dei domini Internet .it, e la confidurazione di un CNAME non permessa dal NIC ed utilizzata nel MX per la posta PEC (Posta Elettronica Certificata) ha reso non valida tutta la configurazione del DNS !

I Domain Name System sono quindi il collegamento tra il nome del servizio (fornito dal dominio internet, es. dominio.com ):
Esempio:

Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.
http://www.dominio.com

ed il server che offre il servizio che in rete si raggiunge attraverso il suo IP
Esempio:

1a01:c205:2004:2161::1
89.143.177.199

Di seguito una spiegazione ed alcuni consigli su come configurarne uno fornito dopo l'acquisto di un dominio internet.

Le basi

Acquistato un dominio internet, si ha a disposizione la gestione del DNS che può essere visto come un dizionario (chiave/valore) il cui valore può essere di diversi tipi, in gergo si chiama "record DNS". Di seguito i principali tipi di records:

  • A (Address): la chiave è il nome del "sottodominio" ed il suo valore l'indizzo IP versione 4, dove risponde il servizio
    Esempio:
    "www.occhioinformatico.it" / "79.143.177.143"
    
  • MX (Mail Exchange): definisce il server dove inviare la posta elettronica, il nome è il "dominio" o "sottodominio" mentre il valore ha una specifica sintassi per diefinire il server ed una priorità in caso di più servers.
    Esempio:
    "occhioinformatico.it" / "10 server.occhioinformatico.it"
    "server.occhioinformatico.it" / "20 server.occhioinformatico.it"
    
  • CNAME (Canonical NAME): permette di definire nomi sinonimi (alias) per servizi diversi che risiedono sullo stesso server. Esempio:
    "server" / "www"
    

    Se per esempio tutti i servizi di un dominio risiedono nello stesso server, si potrebbe definire un record con l'IP di tipo A e tutti gli altri CNAME in modo che se migriamo il server su un altro IP si dovrà soltanto aggiornare un record invece che tutti. Una unica osservazione va fatta per i domini ".it" perchè il NIC non permette l'uso dei record CNAME nei record MX o SOA come menzinato nel documento "Gestione delle operazioni sui nomi a dominio nel ccTLD .it" - Par. 3.1.2.6 "Controllo della funzionalità dei nameserver" , il loro utilizzo in maniera impropria corrompe l'utilizzo di tutto il dominio (come nell'esempio fatto).
    Il NIC stesso mette a disposizione uno strumento https://dns-check.nic.it/ per verificare se il DNS di un dominio è configurato correttamemte oppure no.

  • PTR (PoinTeR): puntatore all'IP del servizio o risoluzione inversa. Questo record è normalmente gestito da chi ci ha "venduto" il server e che ha comprato l'IP del servizio che utlizziamo.
    Esempio:
    "79.143.177.143" / "server.occhioinformatico.it"
    
  • SRV (SeRVer): identificano il server per un dato servizio all’interno del dominio. Personalmente mai utilizzato.
    Esempio:
    "http.tcp.occhioinformatico.it" / "web1.occhioinformatico.it"
    
  • TXT (TeXT): sono stringhe libere di testo associate a domini o protocolli utilizzati dai servizi del dominio.
    Esempio:
    "_domainkey" / "o=-"
    
  • SOA (State Of Authority): contiene l'informazione sul dove è registrato il dominio, sul chi è l'autorità che lo gestisce. Quando viene richiesto l'accesso ad un servizio, per esempio si vuole accedere ad un sito web ( https://www.mynickname.org ) l'applicazione chiede al DNS della rete a cui è collegato (che potrebbe essere il router), la risoluzione del nome richiesto (www.mynickname.org), il record restituito potrebbe essere scaduto in quanto il protocollo impone l'utilizzo di un tempo di scadenza o TTL (Time To Live) per ogni record DNS, pertanto è necessario che il DNS locale si aggiorni e chieda il record all'Autority del dominio interessato . Esempio:
    "occhioinformatico.it" / "ns2.dominiofaidate.com. hostmaster.occhioinformatico.it. (
    2019081512 ; serial
    10800      ; refresh (3 hours)
    7200       ; retry (2 hours)
    604800     ; expire (1 week)
    10800      ; minimum (3 hours)
    )"
    
  • NS (Name Server): Attraverso questo record si possono definire più server DNS autorevoli di un dominio, records gestiti dal provider dove si è comprato il dominio.
    Esempio:
    "occhioinformatico.it" / "ns1.dominiofaidate.com"
    

Dopo questa breve panoramica, si evince che la scelta del provider per l'acquisto di un dominio non deve essere solo sul prezzo ma anche sul livello di configurazione che un gestore permette di fare, alcuni permettono il cambio del TTL (che può essere utile abbassarlo al minimo nel momento di una migrazione di server ed aumentarlo al massimo dopo per far meno query possibili verso i DNS per ridurre e velocizzare la comunicazione) mentre altri limitano l'uso delle tipologie di records che si possono utilizzare, io personalmente ne uso due ma presto uno lo cambierò soprattutto per l'imprevisto avuto e non limitato dal provider in qualche modo.

Approfondimento sui record DNS utilizzati per il controllo della posta elettronica

Chiunque gestisca un dominio sa che il record di tipo MX va impostato per ricevere l'email ma non tutti sanno che negli ultimi anni con la diffusione delle email malevoli, che conosciamo come SPAM (marchio di carne in scatola sinonimo di spazzatura), sono nati protocolli per identificare in modo certo (o quasi) che l'email inviata dal mittente "Y" sia realmente stata inviata dal server di posta del dominio di "Y" ed eventualmente notificare al gestore del dominio l'eventuale violazione. Di seguito una breve spiegazione di cosa sono e come poterli utilizzare.

DKIM, SPF e DMARC

La loro implementazione avviene su due livelli:

  • nel DNS vanno impostati records particolari di tipo TXT che definiscono le configurazioni sul dominio in oggetto
  • sul server di posta è necessario abilitarne l'utilizzo

Di seguito il loro significato ed un esempio di configurazione lato DNS

DKIM (DomainKeys Identified Mail) [ http://www.dkim.org ]

Serve ad associare l’identità di un nome di dominio a un messaggio in uscita attraverso la convalida del messaggio utilizzando la crittografia. Il server invia il messaggio con una parte dell'intestazione criptata (firma l'intestazione). Il ricevente legge sul DNS del dominio della casella di posta la chiave pubblica per decriptare e leggere l'intestazione e se la considera valida l'email è valida.
Abilitando la configurazione lato server sarà disponibile la chiave pubblica e si dovranno configurare due particolari records TXT.
Esempio:

"_domainkey" / "o=-"
"default._domainkey" / "v=DKIM1;k=rsa;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCtQjY8YzvHl9Bk4NDMQtcALFtpKNn92wyAlTF3l9L5OWJW78+Bh9XJpZy0c6wN6ecC8FCAosZc8s9+cH9bgfp97OmBZJzogD48KtJQ8MycZR+tfDWJm2uQvmrGzTUNdhVaCTCDpnWe9/WEl4jkE+RWhB/u92s54qsRvCq0FQYOMwIDAQAB;"

dove :

  • "_domainkey": definisce se "firmare" tutte le email o solo alcune, nell'esempio si indica che "tutte le email da questo dominio saranno firmate"
  • "default._domainkey": è composto dalla "sezione" (default) definita lato installazione del server e la sua configurazione con le indicazioni dell'algoritmo (RSA - Ronald rivest, adi Shamir e leonard Adleman) utilizzato per la cifratura e chiave pubblica.

Per completezza se si ha un sottodominio ad esempio se esistesse l'email Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo. sarà necessario definire i records "_domainkey.server" e rispettivo "default._domainkey.server" .

SPF (Sender Policy Framework) [ https://tools.ietf.org/html/rfc7208 ]

E' un metodo utilizzato per prevenire la contraffazione dell’indirizzo del mittente, ovvero l’uso di falsi indirizzi del mittente. Consente al server di posta di verificare che le e-mail in ingresso da un dominio provengano da un host autorizzato dall'amministratore di tale dominio. Esistono inoltre ulteriori tecniche di controllo basate su SPF come quella utilizzata dal famoso Plesk, chiamata SRS (Sender Rewriting Scheme), che controlla anche i messaggi inoltrati i quali devono superare la verifica SPF. Abilitato il controllo lato server, sarà necessario creare un particolare record TXT.
Esempio:

"occhioinformatico.it" / "v=spf1 include:_spf.google.com mx -all"

dove:

  • "occhioinformatico.it" è il dominio dell'email da controllare
  • "v" sta per la versione e "spf1" il suo numero
  • "include:_spf.google.com mx" si rendono autorizzati gli smtp "_spf.google.com" ed "mx" , notare che si usa il record MX e non il nome
  • "-all" si escludono tutti gli altri records DNS

DMARC (Domain-based Message Authentication, Reporting and Conformance) [ https://dmarc.org/ ]

E' una tecnica di monitoraggio che estende le capacità dei metodi precedenti SPF e DKIM definendo la possibilità di notificare a uno o più destinatari emails sugli esiti dei controlli effettuaticon DKIM ed SPF. Nel particolare con un record TXT si definiscono le regole che gli SMTP dovranno interpretare ed implementare.
Esempio:

"_dmarc.server" / "v=DMARC1; p=reject;ruf=mailto:Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.; fo=1"

dove:

  • "_dmarc.server" : è il nome del record che normalmente deve essere "_dmarc" ma se si usano dei sottodomini del dominio gestito, bisogna aggiungere ".sottodominio"
  • "v" definisce la versione esempio la "DMARC1"
  • "p" definisce la policy da adottare in caso di violazione di uno dei due controlli precedentemente spiegati (SPF e DKIM). Per esempio col "reject" le email che non passano il contrllo non vengono inviate mentre, con "quarantine", vengono inviate come SPAM
  • "ruf" definisce a chi inviare il report di violazione
  • "fo" definisce se inviarlo quando è violata una sola regola (SPF o DKIM) (come nell'esempio "1") o solo se entrambe vengono violate

Verifiche dei metodi di controllo

Attivati i controlli, sarà possibile verificare se il server email li sta implementando, guardando il sorgente e le intestazioni (header) delle email inviate.
Esempio:

Received-SPF: pass (google.com: domain of Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo. designates 79.143.177.143 as permitted sender) client-ip=79.143.177.143;
Authentication-Results: mx.google.com;
       spf=pass (google.com: domain of Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo. designates 79.143.177.143 as permitted sender) smtp.mailfrom=Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.;
       dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=occhioinformatico.it

Implementazione lato server con la piattaforma di gestione Plesk

Chi è del settore sa che Plesk è un "caro" ma ottimo strumento per la gestione/amministrazione di servizi Internet, seguendo la guida dedicata non sarà difficile abilitare i metodi di controllo citati, vorrei quindi focalizzarmi sui problemi più noti.

  • Se il DNS principale usato è esterno a Plesk (sul provider dove si è acquistato il dominio) la prima cosa da fare è disabilitare la funzionalità del DNS sul dominio interessato in modo da non far cercare a Plesk i records in un DNS non usato
  • Se si è passati da versioni vecchie di Plesk (9,10, 12) fino all'ultima Onyx , potreste trovare nel file di log del mail server ( /var/log/maillog ) il seguente errore DKIM

    dk_sign[12638]: DKIM error: DKIM (null)
    /usr/lib64/plesk-9.0/psa-pc-remote[27645]: Error during 'dd51-domainkeys' handler
    

    in quanto in passato la chiave pubblica veniva creata con un numero minore di caratteri e se tale configurazione era già attiva con la nuova versione di Plesk essa non funziona ed è necessario rigenerare una chiave di almeno 1024 caratteri.
    Per farlo:

    1. Nelle configurazioni di posta del dominio interessato disabilitare la configurazione
    2. Nelle configurazioni di posta del dominio interessato abilitare nuovamente la configurazione
    3. Accertarsi che la chiave sia cambiata, con il seguente comando
      openssl rsa -in /etc/domainkeys/occhioinformatico.it/default -pubout
      
      l'occasione è buona per spiegare che Plesk crea le chiavi nella cartella del dominio sopra indicata (su piattaforma Linux) ed attraverso openssl è possibile visualizzarla
    4. Aggiornare il record TXT relativo nel DNS con la nuova chiave

Strumenti di controllo dei DNS

Per controllare le configurazioni dei records DNS, esistono svariati tools online o programmi a linea di comando, di seguito alcuni esempi.

Comandi a linea di comando

  • nslookup: diventato ormai "obsoleto" ma ancora esistente fa interrogazioni ai DNS
    Esempio:
    C:\Users\pianfettim>nslookup   occhioinformatico.it
    Server:  srv-dc2
    Address:  172.16.0.14
    
    Risposta da un server non autorevole:
    Nome:    occhioinformatico.it
    Address:  79.143.177.143
    
  • dig: il sostituto di "nslookup"
    Esempio per vedere tutti i records usando uno specifico DNS:
    -bash-4.2$ dig @ns0.leaseweb.nl mynickname.info any
    ;; Truncated, retrying in TCP mode.
    
    ; DiG 9.9.4-RedHat-9.9.4-74.el7_6.2 @ns0.leaseweb.nl mynickname.info a                                                                                                                                                  ny
    ; (2 servers found)
    ;; global options: +cmd
    ;; Got answer:
    ;; HEADER opcode: QUERY, status: NOERROR, id: 7241
    ;; flags: qr aa rd; QUERY: 1, ANSWER: 7, AUTHORITY: 0, ADDITIONAL: 7
    ;; WARNING: recursion requested but not available
    
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 1680
    ;; QUESTION SECTION:
    ;mynickname.info.               IN      ANY
    
    ;; ANSWER SECTION:
    mynickname.info.        28800   IN      A       79.143.177.143
    mynickname.info.        28800   IN      MX      10 mail.mynickname.info.
    mynickname.info.        86400   IN      NS      ns1.leaseweb.nl.
    mynickname.info.        86400   IN      NS      ns4.leaseweb.net.
    mynickname.info.        86400   IN      NS      ns5.leaseweb.nl.
    mynickname.info.        28800   IN      TXT     "v=spf1 include:_spf.google.com mx -all"
    mynickname.info.        86400   IN      SOA     ns0.leaseweb.nl. Postmaster.leaseweb.nl. 2015080801 14400 7200 604800 86400
    
    ;; ADDITIONAL SECTION:
    ns1.leaseweb.nl.        28800   IN      A       62.212.64.121
    ns1.leaseweb.nl.        28800   IN      AAAA    2001:1af8:4100:a064::53
    ns4.leaseweb.net.       3600    IN      A       85.17.96.106
    ns4.leaseweb.net.       3600    IN      AAAA    2001:1af8:2100:1::53
    ns5.leaseweb.nl.        28800   IN      A       83.149.64.123
    ns5.leaseweb.nl.        28800   IN      AAAA    2001:1af8:3100:a006:3::53
    
    ;; Query time: 28 msec
    ;; SERVER: 2001:1af8:4100:2::100#53(2001:1af8:4100:2::100)
    ;; WHEN: Thu Sep 12 16:01:48 CEST 2019
    ;; MSG SIZE  rcvd: 392
    
    Esempio per fare la risoluzione inversa (PTR)
    bash-4.2$ dig -x 79.143.177.143
    
    ; DiG 9.9.4-RedHat-9.9.4-74.el7_6.2 -x 79.143.177.143
    ;; global options: +cmd
    ;; Got answer:
    ;; HEADER opcode: QUERY, status: NOERROR, id: 65266
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
    
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4096
    ;; QUESTION SECTION:
    ;143.177.143.79.in-addr.arpa.   IN      PTR
    
    ;; ANSWER SECTION:
    143.177.143.79.in-addr.arpa. 3600 IN    PTR     server.occhioinformatico.it.
    
    ;; Query time: 71 msec
    ;; SERVER: 79.143.183.251#53(79.143.183.251)
    ;; WHEN: Thu Sep 12 16:05:43 CEST 2019
    ;; MSG SIZE  rcvd: 97
    

Strumenti Online

Guide - Letture consigliate