Ricerca nel sito web

Installa e configura un server DNS crittografato utilizzando DNSCrypt


DNS è l'abbreviazione di Risoluzione dei nomi di dominio. Viene utilizzato per risolvere gli indirizzi IP in nomi di dominio e viceversa. Ciò aiuta a eliminare la complessità di memorizzare indirizzi IP specifici per i vari siti Internet e quindi gli esseri umani sono in grado di accedere alle pagine utilizzando nomi di dominio come google.com,  computingforgeeks.com ecc. Esistono diverse soluzioni per impostare un DNS server, i più popolari sono BIND DNS, Knot DNS, NSD, MaraDNS, YADIFA, PowerDNS e.t.c

DNSCrypt è un protocollo utilizzato per migliorare la sicurezza DNS crittografando le comunicazioni tra un client DNS e un risolutore DNS. Aiuta gli utenti a comunicare online in privato, senza problemi di sicurezza, prevenendo lo spoofing DNS con l'autenticazione. DNSCrypt utilizza firme crittografiche per verificare che le risposte provengano dal risolutore DNS scelto e garantire che non siano state manomesse durante la trasmissione. DNSCrypt è disponibile per diverse piattaforme come macOS, Android, Linux e Windows, nonché per router.

Le principali caratteristiche e vantaggi associati a DNSCrypt sono:

  • Riduce la latenza memorizzando nella cache le risposte ed evitando di richiedere indirizzi IPv6 su reti solo IPv4.
  • Costringe il traffico a utilizzare TCP, per instradarlo attraverso tunnel solo TCP o Tor.
  • Blocca localmente annunci pubblicitari, tracker, malware, spam e qualsiasi sito web i cui nomi di dominio o indirizzi IP corrispondano a una serie di regole da te definite.
  • Consente agli utenti di esaminare il traffico DNS proveniente dalla rete in tempo reale e di rilevare host e applicazioni compromessi che telefonano a casa.
  • Impedisce la perdita di query per le zone locali.
  • Supporta i protocolli di inoltro DNSCrypt v2, DNSCrypt anonimo e DNS-over-HTTP (DoH) che possono essere serviti sulla stessa porta, solitamente la porta 443.

Oggi impareremo come installare e configurare un server DNS crittografato (DNSCrypt)

1. Installazione del server DNS crittografato (DNSCrypt)

Esistono diversi modi per installare il server DNS crittografato (DNSCrypt). Questi includono:

  • Utilizzo di binari precompilati
  • Compilazione dal sorgente
  • Utilizzando Docker

In questa guida impareremo come installare un server DNS crittografato (DNSCrypt) utilizzando un binario x86_64 precompilato. Sfortunatamente, ci sono binari per i sistemi Linux e Windows

Per Linux è necessario un sistema Debian/Ubuntu a 64 bit, quindi procedere come mostrato.

Innanzitutto, crea una directory per DNSCrypt.

sudo mkdir -p /opt/encrypted-dns

Nella directory scaricare l'ultimo pacchetto precompilato. Al momento della stesura di questa documentazione, l'ultima versione era la 0.9.9.

Scarica il binario con il comando:

VER=$(curl -s https://api.github.com/repos/DNSCrypt/encrypted-dns-server/releases/latest|grep tag_name|cut -d '"' -f 4)
wget https://github.com/DNSCrypt/encrypted-dns-server/releases/download/$VER/encrypted-dns_${VER}_amd64.deb

Una volta scaricato, installa il pacchetto:

sudo apt install -f ./encrypted-dns_*_amd64.deb

Output di esempio:

Selecting previously unselected package encrypted-dns.
(Reading database ... 187584 files and directories currently installed.)
Preparing to unpack encrypted-dns_0.9.13_amd64.deb ...
Unpacking encrypted-dns (0.9.13) ...
Setting up encrypted-dns (0.9.13) ...

2. Configurare il server DNS crittografato (DNSCrypt)

Una volta installato, il server DNS crittografato (DNSCrypt) ha un file di configurazione di esempio archiviato in /usr/share/doc/encrypted-dns/. Copiamo questo file di configurazione nella nostra directory creata:

sudo cp /usr/share/doc/encrypted-dns/example-encrypted-dns.toml /opt/encrypted-dns/encrypted-dns.toml

Ora possiamo modificare questo file di configurazione di conseguenza.

sudo vim /opt/encrypted-dns/encrypted-dns.toml

Qui, modifica il parametro listen_addrs sul tuo indirizzo IP raggiungibile dai client (può essere un IP pubblico se stai eseguendo il server sul cloud)

listen_addrs = [
   { local = "0.0.0.0:443", external = "Your_ipv4_address:443" },
##   { local = "[::]:443", external = "[Your_ipv6_address]:443" }
]

Potrebbe anche essere necessario modificare upstream_addr in modo che punti al tuo server DNS ricorsivo interno o lasciarlo così com'è. Imposta il nome_provider

## Upstream DNS server and port
upstream_addr = "1.1.1.1:53"

dnscrypt]
## Provider name (with or without the `2.dnscrypt-cert.` prefix)
provider_name = "example.com"

## Does the server support DNSSEC?
dnssec = true

## Does the server always returns correct answers (no filtering, including ad-blocking)?
no_filters = true

## Set to `true` if the server doesn't keep any information that can be used to identify users
no_logs = true

3. Eseguire DNSCrypt come servizio di sistema

Una volta effettuate le configurazioni, dobbiamo creare un file di servizio systemd per DNSCrypt. Questo può essere fatto usando il comando:

sudo bash -c 'cat << EOF > /etc/systemd/system/encrypted-dns.service
# /etc/systemd/system/dnscrypt-server.service
[Unit]
Description=DNSCrypt v2 server
ConditionFileIsExecutable=/usr/bin/encrypted-dns
After=syslog.target network-online.target

[Service]
StartLimitInterval=5
StartLimitBurst=10
ExecStart=/usr/bin/encrypted-dns -c /opt/encrypted-dns/encrypted-dns.toml
WorkingDirectory=/opt/encrypted-dns/
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
EOF'

Avvia e abilita il servizio:

sudo systemctl daemon-reload
sudo systemctl enable --now encrypted-dns

Verifica se il servizio è in esecuzione:

$ systemctl status encrypted-dns
● encrypted-dns.service - DNSCrypt v2 server
     Loaded: loaded (/etc/systemd/system/encrypted-dns.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2022-11-27 13:34:33 EAT; 5s ago
   Main PID: 376198 (encrypted-dns)
      Tasks: 6 (limit: 4575)
     Memory: 16.6M
     CGroup: /system.slice/encrypted-dns.service
             └─376198 /usr/bin/encrypted-dns -c /opt/encrypted-dns/encrypted-dns.toml

Sad 27 13:34:33 dnscrypt.computingforgeeks.com systemd[1]: Started DNSCrypt v2 server.
Sad 27 13:34:33 dnscrypt.computingforgeeks.com encrypted-dns[376198]: [WARN  encrypted_dns] No state file found... creating a new provider key
....
Sad 27 13:34:33 dnscrypt.computingforgeeks.com encrypted-dns[376198]: [INFO  encrypted_dns] DNS Stamp: sdns://AQcAAAAAAAAADzg4Ljk5LjkyLjgxOjQ0MyBvFka8viUkAT9gkYMioJ5XjB>

Dall'output sopra, possiamo concordare che il server DNSCrypt è impostato. Alla fine dello stato del servizio, vediamo il timbro DNS del server DNSCrypt. Questo codifica tutti i parametri richiesti per connettersi a un server DNS sicuro come un'unica stringa.

Ora consenti alle porte richieste attraverso il firewall:

sudo ufw allow 443
sudo ufw allow 53

4. Abilita il DNS sicuro sul tuo dispositivo locale

Una volta che il server DNSCrypt è in esecuzione, dobbiamo utilizzarlo per interrogare le richieste DNS. In tal caso, dobbiamo installare un client DNSCrypt. Esiste un lungo elenco di implementazioni del client DNSCrypt. In questa guida installeremo il proxy DNSCrypt che può trovarsi sul sistema locale o remoto.

Scarica l'ultima versione per il Client:

VER=$(curl -s https://api.github.com/repos/DNSCrypt/dnscrypt-proxy/releases/latest|grep tag_name|cut -d '"' -f 4)
wget https://github.com/DNSCrypt/dnscrypt-proxy/releases/download/$VER/dnscrypt-proxy-linux_x86_64-${VER}.tar.gz

Una volta completato, estrai l'archivio:

tar xvf dnscrypt-proxy-linux_x86_64-${VER}.tar.gz
cd linux-x86_64

Crea un file di configurazione e aprilo per la modifica:

cp example-dnscrypt-proxy.toml dnscrypt-proxy.toml
vim dnscrypt-proxy.toml

Nel file, apporta le modifiche seguenti e imposta i nomi dei server.

server_names = ['myserver']

Esistono diversi provider abilitati nell'elenco dei risolutori pubblici. In questo caso li ignoreremo e utilizzeremo quello personalizzato.

Successivamente, rimuovi il "#" all'inizio delle righe seguenti e fornisci il timbro DNS del tuo server DNSCrypt

[static]

   [static.'myserver']
   stamp = 'sdns://AQcAAAAAAAAAAAAQMi5kbnNjcnlwdC1jZXJ0Lg'

Non preoccuparti del timbro DNS poiché può essere recuperato utilizzando il comando sudo systemctl status cifrato-dnssul tuo server DNSCrypt.

Puoi anche impostare un elenco di domini da bloccare:

[blocked_names]

## Path to the file of blocking rules (absolute, or relative to the same directory as the config file)

blocked_names_file = 'blocked-names.txt'
....

Nella directory si trova un file di esempio che può essere copiato e modificato a piacere:

sudo cp example-blocked-names.txt blocked-names.txt

Una volta apportate le modifiche, salva la configurazione quindi avvia il servizio proxy DNSCrypt:

sudo ./dnscrypt-proxy --config dnscrypt-proxy.toml

Output di esempio:

[2023-10-31 14:16:36] [NOTICE] dnscrypt-proxy 2.1.5
[2023-10-31 14:16:36] [NOTICE] Network connectivity detected
[2023-10-31 14:16:36] [NOTICE] Now listening to 127.0.0.1:53 [UDP]
[2023-10-31 14:16:36] [NOTICE] Now listening to 127.0.0.1:53 [TCP]
[2023-10-31 14:16:36] [NOTICE] Service is not usable yet
[2023-10-31 14:16:36] [NOTICE] Resolving server host [raw.githubusercontent.com] using bootstrap resolvers over udp
[2023-10-31 14:16:36] [NOTICE] Source [public-resolvers] loaded
[2023-10-31 14:16:36] [NOTICE] Service is not usable yet
[2023-10-31 14:16:36] [NOTICE] Resolving server host [download.dnscrypt.info] using bootstrap resolvers over udp
[2023-10-31 14:16:36] [NOTICE] Source [relays] loaded
[2023-10-31 14:16:36] [NOTICE] Firefox workaround initialized
[2023-10-31 14:16:36] [NOTICE] [myserver] OK (DNSCrypt) - rtt: 0ms
[2023-10-31 14:16:36] [NOTICE] Server with the lowest initial latency: myserver (rtt: 0ms)
[2023-10-31 14:16:36] [NOTICE] dnscrypt-proxy is ready - live servers: 1

Ora sei pronto per inviare query DNS sicure dal tuo client al server DNSCrypt. Per verificare se tutte le query DNS passano attraverso 127.0.0.1:53, devi aprire un terminale separato e modificare /etc/resolv.conf come mostrato:

$ sudo vim /etc/resolv.conf
nameserver 127.0.0.1
#options edns0 trust-ad
search .

Esegui il comando seguente per vedere se le query DNS vengono gestite come previsto con DNSCrypt

$ nslookup example.com
Server:		127.0.0.1
Address:	127.0.0.1#53

Non-authoritative answer:
Name:	example.com
Address: 93.184.216.34
Name:	example.com
Address: 2606:2800:220:1:248:1893:25c8:1946

Ciò dimostra che il traffico viene gestito in modo sicuro con il server DNSCrypt.

Esegui dnscrypt-proxy Client come servizio systemd

Possiamo anche configurare questo servizio per essere eseguito come servizio di sistema:

sudo bash -c 'cat << EOF > /etc/systemd/system/dnscrypt-proxy.service
# /etc/systemd/system/dnscrypt-server.service
[Unit]
Description=DNSCrypt v2 server
ConditionFileIsExecutable=/usr/local/bin/dnscrypt-proxy
After=syslog.target network-online.target

[Service]
StartLimitInterval=5
StartLimitBurst=10
ExecStart=/usr/local/bin/dnscrypt-proxy --config /opt/dnscrypt-proxy/dnscrypt-proxy.toml
WorkingDirectory=/opt/dnscrypt-proxy/
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
EOF'

Copia i file nelle directory richieste:

sudo mkdir /opt/dnscrypt-proxy
sudo cp ~/linux-x86_64/* /opt/dnscrypt-proxy/
sudo cp ~/linux-x86_64/dnscrypt-proxy /usr/local/bin

Arresta il servizio in esecuzione:

sudo killall -9 dnscrypt-proxy

Avvia il servizio proxy dnscrypt:

sudo systemctl enable --now dnscrypt-proxy

Controlla se il servizio è in esecuzione:

$ systemctl status dnscrypt-proxy
● dnscrypt-proxy.service - DNSCrypt v2 server
     Loaded: loaded (/etc/systemd/system/dnscrypt-proxy.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2023-10-31 16:30:16 EAT; 5s ago
   Main PID: 868360 (dnscrypt-proxy)
      Tasks: 6 (limit: 4617)
     Memory: 7.8M
        CPU: 22ms
     CGroup: /system.slice/dnscrypt-proxy.service
             └─868360 /usr/local/bin/dnscrypt-proxy --config /opt/dnscrypt-proxy/dnscrypt-proxy.toml

Okt 31 16:30:16 computingforgeeks dnscrypt-proxy[868360]: [2023-10-31 16:30:16] [NOTICE] Network connectivity detected
Okt 31 16:30:16 computingforgeeks dnscrypt-proxy[868360]: [2023-10-31 16:30:16] [NOTICE] Now listening to 127.0.0.1:53 [UDP]
Okt 31 16:30:16 computingforgeeks dnscrypt-proxy[868360]: [2023-10-31 16:30:16] [NOTICE] Now listening to 127.0.0.1:53 [TCP]
Okt 31 16:30:16 computingforgeeks dnscrypt-proxy[868360]: [2023-10-31 16:30:16] [NOTICE] Source [relays] loaded
....

Verifica se sta gestendo le query DNS:

$ nslookup example.com
Server:		127.0.0.1
Address:	127.0.0.1#53

Non-authoritative answer:
Name:	example.com
Address: 93.184.216.34
Name:	example.com
Address: 2606:2800:220:1:248:1893:25c8:1946

Puoi anche vedere se è in grado di bloccare il traffico sui domini impostati. Ad esempio, nel mio caso, ho bloccato il traffico verso computingforgeeks.com

Verdetto

Questo segna la fine di questa guida dettagliata su come installare e configurare un server DNS crittografato (DNSCrypt). Spero che questo abbia funzionato anche per te.

Vedi di più in questa pagina:

  • Come proteggere il server DNS BIND con le chiavi DNSSec
  • Installa e configura il server DNS su Windows Server
  • Configura PowerDNS e PowerDNS Admin su Rocky Linux

Articoli correlati: