DNS è sicuramente uno dei protocolli più utilizzati su Internet, permette la risoluzione dei domini di siti web, il funzionamento delle email, la prevenzione dello spam email, fino a tecniche di bilanciamento del carico. Quando un utente vuole visitare un sito web e digita l’URL nell'apposita barra, il browser, prima di collegarsi al web server che ospita il sito, effettua una richiesta al server DNS il quale risponde con l’IP pubblico associato al dominio richiesto: solo a questo punto il browser si collega al server web e richiede la visualizzazione di una risorsa usando il protocollo HTTP.
Figura 1. Il browser chiede l'IP di mail.google.com al server DNS, il server risponde con l'IP 1.2.3.4.
Quando si parla di bloccare siti web pericolosi sia per questioni di sicurezza che legali o per implementare servizi di parental control, il filtraggio di richieste DNS potrebbe essere una soluzione.
Implementazione Web Filtering
In questo articolo vogliamo parlare di una possibile implementazione di web filtering usando il filtraggio DNS configurabile su apparati MikroTik. Prima di mostrare la configurazione però bisogna fare qualche premessa su ciò che verrà mostrato di seguito: innanzitutto questa soluzione non è utilizzabile se si vuole usare DNS over TLS o DNS over HTTPS siccome questi protocolli cifrano le richieste e le risposte; in generale i filtri DNS si possono aggirare con varie tecniche come ad esempio l’uso di VPN. Inoltre, filtrare il traffico DNS per bloccare lunghe liste di siti web richiede molto effort computazionale, di conseguenza mostreremo uno scenario adatto per reti domestiche.
Il primo step che bisogna fare su MikroTik è creare una regola che identifichi tutti i siti che si vogliono bloccare, quindi creare un espressione regolare in cui elencare i siti separandoli con una barra verticale:
^.+(ethin.it|example.com).*$
Il simbolo ^
e $
indicano l’inizio e la fine dell’espressione regolare, nelle parentesi tonde sono presenti i siti da bloccare separati da una barra verticale, la coppia .+
indica
che ci deve essere almeno un carattere prima del dominio, la coppia .*
seleziona tutto ciò che viene dopo il dominio.
Per inserire l’espressione regolare si può utilizzare il comando:
ip firewall layer7-protocol add name=web_filter regexp="^.+(ethin.it|example.com).*$"
oppure da winbox:
Successivamente basta creare la regola per bloccare le richieste DNS che rispettano l'espressione regolare, per farlo è possibile usare il comando:
ip firewall filter add action=drop chain=forward layer7-protocol=web_filter dst-port=53 protocol=udp src-address=192.168.10.0/24
Le specifiche:
action=drop
echain=forward
indicano che bisogna scartare tutti i pacchetti in transito che rispettano le regole descritte;layer7-protocol=web_filter
permette di usare l’espressione regolare chiamataweb_filter
che contiene i siti web da bloccare;dst-port=53
eprotocol=udp
identificano il protocollo DNS;src-address=192.168.10.0/24
è la rete su cui vi vuole attivare il filtro.
Da winbox basta settare i campi come in figura:
Quando l'utente cerchera di aprire il sito ethin.it otterà “Impossibile raggiungere il sito”