Come criptare traffico DNS con DNSCrypt Proxy

DnsCrypt-Proxy

DnsCrypt-Proxy

Ogni giorno moltissimi PC subiscono, durante la normale navigazione, una modifica delle richieste DNS, tecnica che rientra nel pericoloso campo del phishing : questo tipo di minaccia è subdola e molto pericolosa, perché permette ad un malintenzionato di reindirizzare le vere pagine web (digitate nel browser) verso siti civetta, trappole per rubare piu’ dati sensibili possibili, come utenze di banca password ecc, e spesso pieni di malware.

La minaccia è assolutamente concreta su qualunque sistema quindi anche su sistemi GNU/Linux, perché i DNS vengono utilizzati per risolvere gli indirizzi su qualsiasi PC con qualsiasi sistema operativo.

In questo articolo vedremo come criptare il traffico DNS su Ubuntu 14.04 per renderlo immune a questo tipo di minaccia, così da proteggerci in un’unica soluzione da spionaggio, spoofing e attacchi “man-in-the-middle”.

Criptare traffico DNS su Ubuntu con DNSCrypt
Sergey “Shnatsel” Davidoff, uno degli sviluppatori elementaryOS, mantiene un PPA per dnscrypt-proxy: possiamo quindi facilmente installare questo pacchetto sul nostro sistema Ubuntu.

Installiamo digitando da terminale:

sudo add-apt-repository ppa:shnatsel/dnscrypt
sudo apt-get update
sudo apt-get install dnscrypt-proxy

Se questa procedura non dovesse funzionare si puo’ comunque decidere di scaricare il pacchetto .tar.bz2 e procedere all’installazione nel seguente modod :

URL repository per il download del package : dnscrypt-proxy package

Una volta scaricato il pacchetto, prima di passare all’installazione sara’ bene effettuare una verifica della sua integrita nel seguente modo :

# openssl dgst -sha256 dnscrypt-proxy-1.4.2.tar.bz2
SHA256(dnscrypt-proxy-1.4.2.tar.bz2)= 766bcd8874cd6cbfeeeb7246c75c39ddc14317ad81ad713bd6cfc9529b2f0c0d

# drill -D TXT dnscrypt-proxy-1.4.2.tar.bz2.download.dnscrypt.org

Nel caso in cui il comando drill ritornasse un errore dovrete installare il seguente pacchetto sulla vostra macchina :

apt-get install ldnsutils

a questo punto dovreste avere nella risposta una riga come questa

;; ANSWER SECTION:
dnscrypt-proxy-1.4.2.tar.bz2.download.dnscrypt.org. 10000 IN TXT “766bcd8874cd6cbfeeeb7246c75c39ddc14317ad81ad713bd6cfc9529b2f0c0d”

in cui poter verificare che il codice numerico sia uguale al vostro e poter cosi’ procedere con l’installazione sicura del pacchetto.

bunzip2 dnscrypt-proxy-1.4.2.tar.bz2; tar xvf dnscrypt-proxy-1.4.2.tar -C /opt/
cd /opt/dnscrypt-proxy
./configure && make -j2
make install

se si dovesse presentare un errore di questo tipo: configure: error: libsodium >= 0.5.0 not found
il consiglio e’ quello di scaricare ed installare il pacchetto richiesto al seguente sito ” libsodium

cd /opt/llibsodium-0.5.0#
./configure --prefix=/opt/dnscrypt-proxy-1.4.2/
make && make check
make install

Per una maggiore sicurezza, il pacchetto utilizza un utente di sistema dedicato, senza privilegi – DNSCrypt configurera’ in modalita’ chroot la directory home dell’utente dedicato senza applicare privilegi di root.

NB: per Ubuntu 14.04 e derivate il pacchetto potrebbe interferire con la procedura di spegnimento, bloccando il PC. Possiamo risolvere digitando da terminale.

sudo ln -s /etc/apparmor.d/usr.sbin.dnscrypt-proxy /etc/apparmor.d/disable/
sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.dnscrypt-proxy

Una volta installato DNSCrypt, bisogna fare in modo che la nostra connessione attuale (sia Ethernet che WiFi) utilizzi DNSCrypt per risolvere gli indirizzi DNS.

D’ora in avanti il nostro server DNS sarà 127.0.0.1

Configuriamo questo indirizzo aprendo il file /etc/resolv.conf ed inseriamo come voce

nameserver 127.0.0.1

tutte le altre impostazioni di DNSCrypt  possono essere modificate con estrema facilità editando il file /etc/default/dnscrypt-proxy.

sudo gedit /etc/default/dnscrypt-proxy

Un elenco di resolver DNS pubblici di DNSCrypt possono essere trovati nel link successivo.

Lista DNS Server pubblici

Per avviare il servizio facilmente ci bastera' digitare:

# dnscrypt-proxy --local-address=127.0.0.1 --daemonize

oppure

# dnscrypt-proxy --local-address=127.0.0.1:40 --daemonize

ps: 40 e’ la porta di utilizzo alternativo per filtrare il traffico, ma potete decidere voi se e quale usare.

Raspberry Pi B+

Raspberry Pi B+E’ da poco uscito il nuovo modello, il Raspberry Pi B+ , per chi non sapesse di cosa stiamo parlando consiglio di leggere il primo articolo “Raspberry Pi – Prima installazione” per farsi un’idea del prodotto di cui stiamo parlando.

Il modello B+ e’ l’ultima versione della serie basata sul modello B, per coloro che preferiscono il modello A, sappiate che anche per questa scheda e’ appena uscita la versione A+ di cui parleremo in uno dei prossimi articoli; a livello hardware nulla e’ cambiato, il B+ usa il modulo GPU Broadcom BCM2835 abbinato alla, seppur forse datata, CPU ARMv6 a 700MHz e 512 MB di ram. La vera novita’ e’ che la scheda ha subito una vera e propria “rinfrescata” progettuale, migliorando la disposizione dei componenti.

Le porte in dotazione ora non sono piu’ sparpagliate come prima, infatti adesso  solo due lati della scheda sono dedicati alle connessioni ed alla cavetteria e sono presenti anche due porte USB in piu’ (4 in totale).

Le uscite dell’audio analogico e la porta per il video composito sono state accorpate in un unico jack, cosa che ha permesso di recuperare prezioso spazio senza dover eliminare tali uscite, ed anche le carenze, esistenti sulla precedente versione, riguardo alla qualita’ non perfetta dell’audio analogico, ora sono state perfezionate,

La revisione progettuale ha anche portato ad un minore assorbimento di energia elettrica di circa 500mW, ed anche il precedente slot per la scheda SD (che non era proprio ottimale nell’utilizzo) e’ stato sostituito, sul lato B, da uno slot per uSD.

Lo stesso bus GPIO e’ adesso piu’ ambpio in virtu’ dei 14 pin aggiuntivi (per un totale di 40) che da al Raspberry nuovi impieghi che fino ad oggi gli erano impossibili, aumentando cosi’ per noi utilizzatori le quasi infinite possibilita’ di utilizzo in progetti di ogni tipo.

 

SCHEDA Raspberry Pi B+

Produttore : RPi Foundation
Sito Web     : www.raspberrypi.org
Prezzo         : € 40
Giudizio      : il nuovo restyling ha portato benefici in ogni aspetto del prodotto che ha cosi aumentato e migliorato le sue possibilita’ d’impiego, non che’ di facilita’ d’uso, ed il suo rapporto qualita’ prezzo rimane imbattibile. Per me e’ un bel 9.

Puppet: automatizziamo e gestiamo ogni task

Puppet Labs

Puppet Labs

Introduzione a Puppet

Puppet è un software open source, scritto in linguaggio Ruby, che permette la gestione automatizzata e centralizzata di un’infrastruttura di sistemi Linux e Unix, essendo disponibile per tutte le principali distribuzioni Linux, ma anche per le diverse varianti di BSD oltre che Solaris e AIX.

Con Puppet è possibile gestire praticamente ogni risorsa di un sistema: programmi da insallare, servizi da avviare, file di configurazione con contenuti diversi a seconda di diverse logiche, utenti, cron jobs, mount point, esecuzione di comandi specifici ecc.
Praticamente permette di automatizzare ogni attività sistemistica cambiando di fatto il modo con sui si opera su sun server.

La logica di Puppet è di definire lo stato di un sistema e fare in modo che questo sia tale ogni volta che il client Puppet viene eseguito.
La prima volta che lo si esegue, vengono installati pacchetti, avviati servizi, modificati file di configurazione secondo quanto definito sul PuppetMaster, le volte successive, se non sono intervenute modifiche manuali sul sistema, o cambiamenti delle configurazioni sul master, non dovrebbe cambiare nulla, altrimenti verranno upgradati eventuali file di configurazione o servizi, cosi come indicato sul PuppetMaster.
Questo è un concetto importante per il sistemista, e’ un vero e proprio cambio di paradigma sul suo modo di operare, poiche’ in un sistema gestito con Puppet non si devono modificare a mano i file che Puppet gestisce, perchè questi vengono aggiornati al successivo collegamento/verifica con il Master e, visto che nelle condizioni ideali, Puppet gestisce tutte le risorse di un sistema (non è obbligatorio che sia così, ma è comunque consigliabile), di fatto, salvo in casi di emergenza, un sistemista non dovrà mai intervenire a mano sui suoi server.

Se da un lato tutto questo può risultare laborioso e in qualche modo “innaturale” nella gestione dall’altro comporta una serie di vantaggi clamorosi:
– Si può configurare il profilo di un server ed applicarlo a decine o centinaia di host, tutti uguali, tutti allineati, tutti configurati con la stessa logica.
– La procedura di setup e configurazione di un sistema è riproducibile, evitando cosi’ di trovarsi a gestire dei sistemi che poi non si sanno più reinstallare.
– E’ facile e quasi intrinseco prevedere per ogni host il suo corrispettivo di sviluppo, collaudo e produzione, non avendo limiti nel numero di ambienti previsti e avendo la certezza di avere i sistemi fra di loro allineati.
– I manifest di puppet sono generalmente gestiti con un sistema di versioning (git, subversion, cvs vanno tutti bene), questo comporta automaticamente una gestione formale, reversibile, documentata e tracciata delle modifiche fatte sui sistemi.

Il risultato è che, già in infrastrutture di qualche decine di host, Puppet diventa uno strumento unico e insostituibile per una gestione rapida ed efficace del parco macchine, lo sforzo inizlae di definizione delle sue configurazioni viene ampiamente ripagato nel tempo con tempi di gestione e setup dei sistemi enormemente ridotti.
Insomma, con Puppet ci si può dedicare al miglioramento e l’affinamento della propria infrastruttura risparmiando il tempo speso in attività ordinarie ripetitive e noiose.

Per chi volesse provare le potenzialita’ di Puppet oggi e’ possibile scaricare una versione Free Trial direttamente dal sito del produttore [To try Puppet Enterprise for free on up to 10 nodes].
Vi verranno richieste soltanto alcune informazioni formali, prima di poter ottenere il file installabile per la versione della nostra distro (sia 32 che 64 bit).
Potrete cosi’ scaricare il pacchetto puppet-<vostra versione>.tar.gz sul vostro Puppet Server; una volta estratto il contenuto del file, ad esempio sotto /opt , per lanciare l’installazione del pacchetto vi bastera’ lanciare lo script :

cd /opt/puppet

# sudo ./puppet-enterprise-installer

L’installazione procedera’ sostanzialmente da sola, all’inizio ci verra’ soltanto chiesta la conferma (premendo Y ) per avviare il processo d’installazione e copia dei file necessari, dopodiche’ bastera’ avere un po’ di pazienza.

Altrimenti e’ possibile questa ulteriore strada (ad esempio per un sistema Ubuntu 14.x)

wget https://apt.puppetlabs.com/puppetlabs-release-trusty.deb
sudo gdebi puppetlabs-release-trusty.deb 
sudo apt-get update 
sudo aptitude install puppet-common=3.7.3-1puppetlabs1 puppet=3.7.3-1puppetlabs1
sudo apt-get install puppetmaster-passenger

Nel caso in cui invece dobbiate solo fare un upgrade all’ultima versione vi bastera’ eseguire :

$ sudo apt-get update
$ sudo puppet resource package puppetmaster ensure=latest

Se poi non avete il tempo da impiegare nell’installazione, ma non volete perdere l’occasione di testare un prodotto cosi interessante potete anche scaricare una VM gia pronta al seguente link puppetlabs_VM

Configurazione

– Il puppet master
Raggiungete la macchina prescelta come puppet master che chiameremo, senza troppa fantasia, master e installate i programmi necessari:

root@master:

~# apt-get install puppetmaster

Questa operazione installerà anche le dipendenze, compreso il pacchetto per l’agent puppet.
L’installazione terminerà con uno sconfortante errore: niente paura! semplicemente il master non è ancora stato configurato a dovere e gli script di init non sono in grado di avviarlo correttamente.
Preoccupiamoci innanzitutto di permettere l’accesso ai file che verranno serviti dal nostro master, editate il file /etc/puppet/fileserver.conf e aggiungete una riga per permettere l’accesso alla sottorete 192.168.0.0/24 (per esempio).

 

Prepariamo un piccolo laboratorio con 3 macchine

Name                 IP                     OS                    Descrizione
puppet01        192.168.1.10            CentOS 6.5               puppet master
puppet02        192.168.1.20            CentOS 6.5               puppet client
puppet03        192.168.1.30            CentOS 5.10              puppet client

** configuriamo il file /etc/hosts

# vim /etc/hosts

192.168.1.10    puppet01
192.168.1.20    puppet02
192.168.1.30    puppet03

– Inseriamo queste due righe nel [main] edl file /etc/puppet/puppet.conf

certname = puppet
dns_alt_names = puppet,puppet01.localdomain

– Configuriamo il certificato
Con questo comando si creerà il certificato CA e il certificato per il puppetmaster

puppet01 # puppet master –verbose –no-daemonize

notice: Starting Puppet master version 2.7.25
(una volta apparsa la riga qui sopra potete chiudere con un Ctrl-C)

* verifichiamo: # puppet cert list –all
+ “srv-c6.localdomain” (10:BD:EB:92:CE:98:A7:37:FE:4B:D8:20:5E:C2:44:D5) (alt names: “DNS:puppet”, “DNS:puppet.localdomain”, “DNS:puppet01.localdomain”)

* riavviamo il servizio :

#  /etc/init.d/puppetmaster restart

Installazione dei client

sulle macchine puppet02 e puppet03 installare soltanto il client “puppet” nei seguenti modi :

Ubuntu/Debian : # sudo apt-get install puppet

RHEL/Centos   : # sudo yum install puppet -y

** sulle macchine client andremo a modificare il file puppet.conf indicando il nome della macchina Server, il puppetmaster

# vim /etc/puppet/puppet.conf

[agent]
server = puppet01

su puppet02 e puppet03

# puppet agent –test # si dovrebbe vedere l’agente creare una richiesta di certificato al master

ora su puppet01 eseguite

# puppet cert list –all # dovreste vedere le richieste effettuate dai client 01 e 02

La prima fase e’ cosi terminata, nel prossimo articolo vedremo come installare e configurare la Dashboard di Puppet per avere una gestione centralizzata tramite Browser

Machine e Deep Learning

Machine & Deep Learning

Machine & Deep Learning

Machine Learning

Che cos’è il machine learning?
Letteralmente può essere tradotto come “apprendimento delle macchine” o per meglio dire come “apprendimento automatico”. Per apprendimento si intende quel processo attraverso cui si diventa più abili, precisi e veloci a compiere un certo compito, in modo tale che chi ha appreso a fare qualcosa la possa fare meglio e più velocemente di prima. Per machine si intendono i computer, più precisamente i software e ancora più nello specifico gli algoritmi che sono alla base del funzionamento.

Si tratta quindi di scrivere dei programmi software che siano capaci di analizzare dei dati e, sempre più spesso si tratta di analizzare grandissime quantità di dati, rintracciando al loro interno dei pattern ricorrenti in modo da estrarre automaticamente l’algoritmo necessario per completare il compito assegnato.

Più semplicemente un programma per machine learning apprende dall’esperienza a realizzare un compito e le sue prestazioni migliorano con il tempo per ogni volta in piu’ in cui ripete quel compito.

Un esempio di machine learning 

Nel 2012 gli ingegneri di Google hanno creato un software (in particolare si trattava di una rete neurale che funzionava grazie a 16.000 processori collegati tra loro). Successivamente a questo software sono sono stati mostrati dei video presi da Youtube per tre giorni, ma senza dar loro alcuna indicazione a proposito di cosa fosse contenuto nei video.

Bene, l’esperimento ha dimostrato che il software è stato capace di riconoscere il ripetersi di volti umani e gatti nei frame dei video di Youtube. Se volete saperne di più qui trovate tutti i dettagli di questo esperimento, google_machine_learning.

Deep Learning

Esiste anche una nuova tendenza che si sta sviluppando nel campo dei Big data , risponde al nome di deep learning (traducibile come apprendimento approfondito).

Dietro il nome di deep learning si nascondono una serie di tecniche e tecnologie informatiche, nella fattispecie degli algoritmi di calcolo statistico attinenti alla branca dell’intelligenza artificiale e dell’apprendimento automatico, per l’appunto il machine learning. Questi algoritmi, strutturati in diversi livelli di astrazione, hanno lo scopo di permettere al sistema informatico di comprendere, più o meno, come funziona il cervello umano e come quest’ultimo analizzi e interpreti, ad esempio, il linguaggio o le immagini che gli arrivano dal nervo ottico.
Per fare ciò, i sistemi informatici in grado di portare avanti analisi del tipo deep learning sono basati su vaste reti neurali artificiali in grado di funzionare come i neuroni presenti nel cervello dell’uomo.

Perché Facebook (e gli altri)
Oggi giorno pare che tutti i grandi dell’hi-tech, a partire da Facebook sino a Google, passando per Yahoo! e Microsoft, stiano guardando con parecchia attenzione agli sviluppi che si registrano in questo settore. Investendo parecchi soldi negli istituti di ricerca più avanzati, e il perché è presto detto.
Il deep learning potrebbe (o per meglio dire dovrebbe) migliorare il modo in cui i dispositivi informatici analizzano il linguaggio naturale. Di conseguenza, ne dovrebbe migliorare sensibilmente la comprensione.

Se la strada intrapresa porterà ai risultati sperati, il deep learning dovrebbe permettere alle reti neurali che formano i sistemi informatici di processare i linguaggi naturali così come avviene nel cervello umano. I computer, insomma, potranno capire cosa gli utenti umani scrivano sulla loro bacheca o cosa vogliano cercare realmente; se siano tristi o felici; se l’immagine che hanno appena visualizzato gli sia piaciuta oppure no.
Facebook, Google, Microsoft e Yahoo!, quindi, potrebbero realizzare dei servizi commerciali sempre più approfonditi e precisi, rivendendo questi dati alle agenzie di comunicazione e marketing di tutto il mondo per campagne pubblicitarie sempre più mirate e cucite su misura dei bisogni degli utenti.

Chi vivra’ vedra’ !!!

IPCop il tuo prossimo Firewall

IPCop Firewall

IPCop Firewall

IPCop è una mini-distribuzione GNU/Linux open source adatta a realizzare un firewall hardware/software. Garantisce un’efficiente sicurezza della rete impedendo intrusioni esterne non autorizzate.

È un’ottima soluzione per piccole reti, reti aziendali e SOHO (Small Office-Home Office), ma può essere adattata ad ogni esigenza e può essere usata anche su hardware piuttosto datato, o dedicato, permettendo cosi anche un buon risparmio riguardo alla dotazione hardware necessaria. Può essere usata da amministratori di rete che non conoscono Linux per creare un firewall Linux-based, oppure può essere utilizzata da chi ne capisce di più (di Linux ovviamente!) ma non ha il tempo per configurare manualmente un un intero set di regole su iptables ecc…

IpCop offre un’ampia gamma di caratteristiche tecniche: si va dal Linux netfilter standard con capacità di NAT al supporto per DMZ via DNAT, dal supporto DHCP (sia server che client) al supporto NTP per sincronizzare e servire la data e l’ora, dalla possibilità di attivare un proxy a quella di attivare un IDS. Inoltre supporta quattro schede di rete e un numero illimitato di connessioni VPN, oltre ad offrire la possibilità di backup e restore della configurazione. È inoltre facilmente estendibile grazie a numerosi moduli presenti in Internet.

IpCop non richiede molta potenza di calcolo per poter funzionare: basta un 386 con poca RAM e MB di HD; ma per ottenere maggiori risultati è richiesto come minima configurazione un Pentium MMX con 64 Mb di ram e qualche GB di hard disk (prevalentemente per i log e le configurazioni). Se si intende utilizzare le funzioni di proxy sono consigliati 256 MB di ram e qualche GB in più libero. Le possibilità d’ installazione variano a seconda delle esigenze: via CD, chiavetta USB, o direttamente su Scheda Compct Flash (Occorre un hardware appropriato).

IPCop e’ rilasciato sotto la licenza GPL ed e’ sviluppata con il tradizionale stile dell’Open Source. Il progetto viene sviluppato grazie alla collaborazione di diversi sviluppatori sparsi per l’intero globo. L’interfaccia grafica e’ disponibile in 17 lingue diverse e la distribuzione include anche un raffinato e semplice sistema di aggiornamento.

La configurazione minima, prevede due interfacce di rete: Red (Internet) e Green(Lan); tuttavia si puo’ estendere la configurazione fino a 4 interfacce di rete, per aggiungere una DMZ e una scheda di rete dedicata al Wi-Fi.

La personalizzazione manuale delle regole e’ possibile attaverso la configurazione del file nel PATH: /etc/rc.d/rc,firewall.local e precisamente su /etc/rc.d/rc.firewall ed il comando e’:

$ /etc/rc.d/rc.firewall.local {start | stop | reload}

Particolarita’ davvero interessante di IPCop e’ quella di offrire la possibilita’ di espansioni aggiuntive di funzioni tramite un gran numero di addons .