mainSlogopaceclick Blog  · informatica · elettronica · astronomia..

Usare un RaspberryPi come server DNS locale per tradurre indirizzi locali in IP locali tramite DnsMasq

Il server DNS consente di convertire la stringa dell'URL cercato sul browser, nell'indirizzo IP del server remoto.

Di norma ogni ISP ha i propri server DNS autoritativi (che vengono interpellati per ogni richiesta dal router), molte volte tuttavia si opta per l'uso di quelli di Google o degli OpenDNS, andando a modificare manualmente il proprio Sistema Operativo o il router stesso.
E' infatti risaputo che i server DNS di Google siano molto più veloci nelle risposte, e abbiano molti più indirizzi in cache rispetto a quelli degli ISP sparsi per il mondo.

undefined

Un server DNS locale può servire a due utilizzi:

  1. velocizzare la navigazione, tenendo in cache gli indirizzi che vengono maggiormente richiesti dalla rete casalinga (o aziendale), e inoltrando la richiesta verso un server DNS esterno solo in caso di necessità (esempio un indirizzo non i cache)
  2. consentire la traduzione di DOMINI locali in IP locali, funzione interessantissima in ambito aziendale ma anche casalingo

Consideriamo per esempio l'uso di un NAS locale, sull'indirizzo 192.168.1.8:

ogni volta che ci dovremmo connettere, avremmo da inserire tale (scomodo) IP.

Avendo un server DNS autoritativo locale:

potremmo invece decidere di assegnare un NOME A DOMINIO a tale IP, come ad esempio nas.myhome, e fare si che venga risolto sull'indirizzo IP del NAS stesso.

In questo modo nel browser (quando siamo in rete locale, ma anche tramite VPN) non ci resterà che digitare nas.myhome, come se fosse un normalissimo sito web pubblico.

In aggiunta, usando questo metodo, sarà possibile anche incrementare la sicurezza, andando ad impostare una blacklist globale sui nomi a dominio che non vogliamo vengano risolti.

Ovviamente perché tutto funzioni dobbiamo fare in modo che TUTTE le richieste DNS locali vengano risolte dal nostro server DNS autoritativo locale, e che questo non vada mai offline, per evitare impossibilità di risolvere indirizzi.

Una comoda soluzione a basso costo può essere l'uso di un RaspberryPi, vediamo come configurarlo.

Mini guida per il setup di RaspberryPi

Preparare il Raspberry con una distro Debian come Raspbian, e connettersi tramite SSH (o aprire il terminale se connessi con tastiera e schermo).
Per connettersi tramite SSH usare Putty (su Windows) o il comando (da Linux):

ssh pi@192.168.x.x

dove al posto di x dovrete inserire il vero ip del raspberry; la password di default di raspbian per l'utente 'pi' è 'raspberry'.

Una volta connessi, eseguite un update dei packages con

sudo apt-get update

Adesso assegnate un IP statico al raspberry:

sudo nano /etc/network/interfaces

il file deve sembrare così

auto lo

iface lo inet loopback

allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf

auto wlan0
iface wlan0 inet static
address 192.168.1.190
gateway 192.168.1.1
netmask 255.255.255.0

auto eth0
iface eth0 inet static
address 192.168.1.190
gateway 192.168.1.1
netmask 255.255.255.0

(ovviamente al posto di .1.190 e .1.1 inserite gli indirizzi che vi competono)

salvare con Ctrl+X, e premendo Y, confermando con Invio, 
poi riavviare con

sudo reboot

e controllare che l'indirizzo sia corretto con il comando

ifconfig 

 

Configurare il server DNS Locale

Installare DNSMASQ:

sudo apt-get install -y dnsmasq

adesso il servizio DNS sarà già attivo, andiamo ad interromperlo per poterne modificare la configurazione

sudo service dnsmasq stop

configuriamo adesso il server DNS con il comando

sudo nano /etc/dnsmasq.conf

si aprirà l'editor di testo sul terminale, 
il file di configurazione mostrato sarà tutto commentato (con '#' all'inizio di ogni frase),
potete anche lasciare tutto intatto per consultazioni future, l'importante è inserire all'inizio le stringhe di configurazione che seguono:

# DOMAIN CONFIG
domain=raspberry.myhome
resolv-file=/etc/resolv.dnsmasq
min-port=4096

# FORWARDING DNS SERVERS
server=8.8.8.8
server=8.8.4.4
server=208.67.222.222
server=208.67.220.220

# LOCAL CACHE SIZE
cache-size=10000

# LOCAL ADDRESSLIST
address=/nas.myhome/192.168.1.8

# BLACKLIST
address=/double-click.net/127.0.0.1

# qui di seguito tutto il file originale..

NOTE

  • i 4 server di forwarding sono rispettivamente 2 Google e 2 OpenDns
  • il dominio .myhome può essere cambiato a piacere, ma NON deve essere un dominio usato pubblicamente (esempio .net), evitare anche il famoso .local
  • potete inserire nella Local-AddressList, tutti gli indirizzi locali che volete risolvere in IP (locali o anche pubblici)
    -ovviamente è anche possibile eseguire override di indirizzi comuni (DNS Spoofing)
    -nel mio caso ho inserito la risoluzione dell'IP del mio NAS su un dominio personalizzato (.myhome)
    -potete aggiungere una nuova riga per ogni altra mappatura
  • tutti i domini inseriti nella blacklist non risulteranno più raggiungibili dalla rete locale (perchè mappati sul loopback)

salvare con Ctrl+X, e premendo Y, confermando con Invio.

Riavviare il servizio dnsmasq

service dnsmasq start

NOTA: DnsMasq è in grado di fungere anche da server DHCP, ma nel nostro caso lo useremo solamente come server DNS.

Adesso il nostro server DNS locale è pronto per poter essere usato

Per poter usare il nostro server DNS locale, andiamo sul PC o sul router nella sezione di configurazione DNS, ed inseriamo come server DNS primario l'indirizzo IP statico precedentemente assegnato al nostro Raspberry.

E' buona norma inserire anche un server DNS secondario, usato in caso di malfunzionamento o irraggiungibilità del nostro server DNS locale, possiamo ad esempio inserire quello di Google (secondario: 8.8.4.4).

Facciamo un test da un computer in LAN con i comandi:

nslookup google.it
nslookup nas.myhome

la risposta sarà corretta se proveniente dal server DNS locale, ovvero del tipo:

Server: 192.168.1.190
Non-authoritative answer:
Name: google.it
Address: 216.58.205.67

oppure

Server: 192.168.1.190
Non-authoritative answer:
Name: nas.myhome
Address: 192.168.1.8

in ogni caso avendo impostato un DNS secondario, in caso di disconnessione del raspberry, sarà comunque possibile navigare tranquillamente.

Indirizzo IP pubblico: cosa è, come individuarlo da terminale o da prompt, e come funziona il DDNS per raggiungere un dispositivo dall'esterno

Un computer o un qualsiasi dispositivo, quando connesso ad una rete (LAN), viene identificato tramite un indirizzo IP assegnato dal router.

L'indirizzo, di solito nella forma 192.168.X.Y viene rilasciato dal DHCP del router per identificare i vari dispositivi ad esso connessi.

Tuttavia essendo il router stesso connesso alla rete internet (WAN), e fungendo da gateway per l'instradamento delle richieste locali verso l'esterno (NAT), anch'esso avrà un indirizzo IP rilasciato dal proprio gestore di telefonia (ISP).

undefined

Questo indirizzo IP viene comunemente chiamato IP Pubblico (o External IP), perché identifica il primo dispositivo connesso alla rete locale (quindi il primo da contattare per raggiungere la propria LAN dall'esterno).

A seconda dei gestori, tale IP può essere in forma statica o dinamica, ovvero può essere fisso ad ogni connessione del router, o cambiare.
In genere gli ISP rilasciano IP pubblici dinamici, per evitare identificazioni degli utenti che potrebbero portare ad attacchi.

In questo modo, ogni volta che accendiamo il router, esso richiederà un nuovo IP pubblico al gestore (che come detto sarà ogni volta diverso).

Come identificare facilmente l'IP pubblico?

1. tramite router, nella pagina di status principale vedremo tutte le impostazioni correnti, compreso l'IP pubblico del provider

2. tramite browser, attraverso uno dei tanti siti web appositi, come ad esempio: whatismyipaddress.com

3. tramite bash linux, con il comando:

 curl ifconfig.me

che mi sembra il più facile da ricordare, in alternativa comunque esistono anche altri (in ogni caso avremo bisogno di curl installato)

 curl ipecho.net/plain ; echo
 curl -s checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//'

4. tramite prompt di windows, con il comando:

 nslookup myip.opendns.com. resolver1.opendns.com

oppure tramite powershell:

 Invoke-WebRequest ifconfig.me/ip


A cosa mi serve conoscere il mio IP pubblico

Può servire nei casi in cui abbiamo bisogno di raggiungere un dispositivo connesso alla nostra LAN (esempio: a casa) dall'esterno (esempio: da lavoro).

Per fare questo bisognerà impostare nel router un port-forwarding, ovvero 'aprire' una determinata porta sull'IP interno del dispositivo.

In tal modo basterà digitare (da qualsiasi parte del mondo), IPPubblico:PortaAperta per inoltrare la richiesta di connessione attraverso il nostro router, verso il dispositivo locale.

Dynamic DNS come funziona

Poichè come detto prima, l'IP pubblico nella quasi totalità delle volte cambia ad ogni accensione del router, come faccio a sapere ogni volta che IP è stato assegnato se sono fuori casa?

Esistono dei servizi di DDNS, ovvero dynamic DNS, che consentono di ovviare a tale problema.
Consentono inoltre di evitare di doversi ricordare l'indirizzo IP stesso (una scomoda sequenza di numeri), in favore di una parola a piacere.

Ce ne sono diversi, come ad esempio noip.com (che di solito è supportato dalla quasi totalità dei router; in ogni caso prima di scegliere un servizio in favore di un altro, verificate se supportato dal vostro router).
Dopo essersi registrati al sito, occorrerà scegliere un indirizzo DNS personalizzato (ovvero un nome a dominio usato per reindirizzarvi al vostro IP).
Esempio: provaaccesso.noip.com

A questo punto basterà configurare nella apposita sezione del router questo DDNS.
Il router stesso provvederà ad aggiornare il DDNS ad ogni cambio di IP Pubblico!

In questo modo, da qualsiasi parte del mondo voi siate, potrete accedere alla vostra rete domestica (LAN) semplicemente digitando:

provaaccesso.noip.com:PortaAperta

dove PortaAperta è la porta precedentemente aperta sul router, con destinazione l'IP del dispositivo che vogliamo raggiungere

 

ATTENZIONE ALLA SICUREZZA:

come tutti sappiamo esporre i dispositivi alla rete senza alcun firewall non è mai consigliabile.
I router di solito applicano il firewall di default proprio per evitare che qualcuno acceda ai vostri dispositivi locali dall'esterno.

Tuttavia molte, moltissime volte gli utenti non cambiano la password di accesso al router stesso, rendendo disponibile ad un eventuale attaccante l'accesso a tutte le impostazioni di rete dall'esterno.
Per questo motivo, se configurate un DDNS, assicuratevi che la vostra rete sia ben protetta (argomento per il quale non basterebbe un solo post per descrivere tutti i passaggi).

Assicuratevi che il router abbia una password sicura, che abbia il firewall attivo, e, magari, che sia bloccato l'accesso alle impostazioni di rete dall'esterno (dalla WAN).

 

Phishing portato a livelli estremi sfruttando Punycode: come funziona, come prevenire ed essere sicuri dei siti web aperti tramite SSL

Punycode è un sistema di codifica che serve a rappresentare una sequenza di caratteri unicode tramite una sequenza di caratteri ASCII, per rendere possibile l'uso di tali sequenze nei nomi di dominio, senza dover modificare infrastrutture e standard esistenti.

In questo modo si possono gestire nomi di dominio internazionalizzati (IDNA) aggiungendo all'inizio della stringa punycode i caratteri 'xn--'.

Ad esempio, inserendo come indirizzo xn--google.com, vedremo il browser mostrare la stringa convertita in caratteri cinesi:

undefined

La traduzione di sequenze Punycode nella codifica originaria è a carico dello user agent (applicazione installata sul computer dell'utente che si connette al server) nel browser .

Il problema è che come tutti i nomi a dominio internet registrati, è possibile creare delle sequenze punycode ad-hoc per mostrare all'utente una stringa convertita totalmente a piacere.

Ad esempio, se inseriamo nel browser la stringa (procedete solo a vostro rischio e pericolo) punycode "xn--80ak6aa92e.com", la vedremo istantaneamente venire convertita in "apple.com".

Ovviamente il sito aperto non sarà quello ufficiale Apple, ma in realtà sarà sempre il sito "xn--80ak6aa92e.com", solo che il nostro browser ci visualizzerà il testo transcodificato in ASCII.

In breve il browser viene tratto in inganno, e con lui l'utente, vediamo l'esempio:

se inseriamo:

undefined

e premiamo invio, avremo in risposta:

undefined

da notare la presenza di un certificato SSL (DV) sul sito fasullo, che crea un FALSO senso di sicurezza

 

LA DIFFERENZA CON QUELLO VERO

undefined

in questo caso il certificato SSL (OV o EV) certifica l'effettiva corrispondenza dell'azienda.

 

Il fenomeno del 'phishing' (tipo di truffa effettuata su internet, specialmente a mezzo e-mail) cerca sempre nuove strategie per trarre in inganno gli utenti, spingendoli a cliccare su link che SEMBRANO essere affidabili ma che in realtà REINDIRIZZANO verso pagine web spesso dannose.

Si tratta di attacchi di social-engineering nei quali un malintenzionato cerca di ingannare la vittima convincendola a fornire informazioni personali, dati finanziari o codici di accesso, fingendosi un ente affidabile in una comunicazione digitale.

PRIMA REGOLA: PREVENZIONE

Quando ricevete email di dubbia provenienza, diffidate dal cliccare sui link proposti, specialmente se legati in qualche modo ad istituti bancari o di credito.
Fare specialmente attenzione all'indirizzo di provenienza, e prima di cliccare su un link, controllare quale sia la sua effettiva destinazione.

Esempio:

un link visualizzato come "apple.com", potrebbe in realtà essere destinato al precedente "xn--80ak6aa92e.com" (questo potrebbe derivare da una formattazione HTML costruita apposta per l'occasione)

in questo caso tuttavia, basterà posizionarsi con il mouse sopra al link e controllare il vero collegamento leggendo il popup che appare (di solito) in basso a sinistra del programma di posta

 

SECONDA REGOLA: CONTROLLO

Una volta cliccato su un link, come fare a sapere che il sito aperto è effettivamente quello sicuro?

L'unica arma di difesa in questo caso è il certificato SSL, che può essere di 3 tipi:

  • DV Domain Validation: garantiscono una connessione cifrata con il server, ma non garantiscono sulla corrispondenza aziendale al nome visualizzato.
  • OV Organization Validation & EV Extended Validation: oltre alla cifratura con il server, garantiscono verifica sull'effettività dell'azienda.

 riguardando le immagini precedenti potrete notare la differenza.

 

Come visualizzare in chiaro le password immesse dai browser o nascoste da pallini o asterischi

Tutti i browser di ultima generazione consentono di memorizzare le password immesse dall'utente, in modo da auto inserirle nei moduli alla successiva visita del sito.

Lo faceva Internet Explorer, ma adesso anche Firefox, Edge, e Chrome.

undefined

Per IE ed Edge, le password sono cifrate nel Vault di Windows, per Firefox e Chrome invece no:
in quest'ultimo per esempio non è possibile impostare una 'master password' per cifrare i dati memorizzati.

Ma la questione è, serve veramente? No.

Perchè in ogni caso, il browser, quando andrà a riempire il modulo web, dovrà comunque inserire la password in chiaro, come se la stessimo inserendo noi da tastiera.

Quindi anche cifrando il database delle password salvate si potrebbe facilmente risalire alle originali usando un semplice browser.

Come risalire alla password immessa se compare come serie di pallini o asterischi?

Basta aprire il browser in cui abbiamo memorizzato la password, ed aprire il sito.

A questo punto lasciare auto completare i campi dal browser, la password apparirà come una serie di pallini:

undefined

Adesso, basta cliccare con il destro sul campo della password, e selezionare 'ispeziona elemento'.
NOTA: a seconda del browser in uso è possibile che non compaia tale voce, in ogni caso si può sempre aprire il pannello 'strumenti di sviluppo' con F12; da qui selezionare il pulsante che ha come icona un puntatore, ed in seguito andare a selezionare il campo della password.

Si aprirà il pannello con il codice DOM della pagina (in modo estremamente semplificato è il sorgente con anche le modifiche dell'utente) con già selezionata la riga del codice in cui viene immessa la password.

Avrà uno stile come questo:

undefined

 

Non dobbiamo fare altro che doppio clic sul parametro type="password" e modificarlo semplicemente in type="text" (premere poi il tasto Invio).

undefined

In questo modo vedremo istantaneamente nella pagina web i pallini scomparire e convertirsi in testo: la nostra password. 

Home