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.

NGINX ecco le ragioni per cui dovreste usarlo

nginx fast web servernginx (pronunciato come “engine-x”) è un web server/reverse proxy leggero ad alte prestazioni; è anche un server proxy di posta elettronica (IMAP / POP3), rilasciato sotto licenza BSD-like. Funziona su sistemi Unix, Linux, varianti di BSD, Mac OS X, Solaris e Microsoft Windows.

 

nginx fornisce rapidamente i contenuti statici con un utilizzo efficiente delle risorse di sistema. È possibile distribuire contenuti dinamici HTTP su una rete che utilizza i gestori FastCGI (ad esempio php5-fpm, php-fastcgi) per gli script, e può servire anche come un bilanciatore di carico software molto capace.

nginx utilizza un approccio asincrono basato su eventi nella gestione delle richieste in modo da ottenere prestazioni più prevedibili sotto stress, in contrasto con il modello del server HTTP Apache che usa un approccio orientato ai thread o ai processi nella gestione delle richieste.

nginx è più leggero e meno dispendioso di memoria rispetto ad Apache e già questo è un punto a favore del web server russo. Poi, nonostante sia più compatto, garantisce prestazioni migliori rispetto al concorrente, infatti con un bassissimo utilizzo di risorse, nginx garantisce tempi di risposta eccellenti anche in presenza di un numero molto elevato di connessioni concomitanti e, con un’occupazione di memoria pari a un quarto di quella pretesa da Apache, nginx è capace di garantire fino a quattro volte il numero di connessioni contemporanee gestite dal concorrente. Di fronte a questa verità, siti ad alto traffico come WordPress.com, YouTube e tanti altri non potevano non effettuare il cambio e spostarsi su nginx.

Secondo il Web Server Survey Netcraft di febbraio 2014, nginx è risultato essere il terzo server web più utilizzato in tutti i domini (15,00% dei siti esaminati) e il secondo server web più utilizzato per tutti i siti “attivi” (13,46% dei siti esaminati).

Una cosa importante da capire, comunque, è che nginx possiede un’architettura event-based ovvero, detta in modo semplice, non necessita di effettuare la creazione di tanti processi per quante richieste siano in esecuzione, ottimizzando l’uso di memoria al contrario di Apache che, in certi casi, può provocare problemi di memoria su WordPress o altri CMS. Apache usa infatti un thread per connessione, mentre nginx lavora in modo asincrono con thread non bloccanti, il che riduce l’uso di RAM ed ottimizza l’esecuzione dei processi.

Una delle caratteristiche che più colpisce di nginx è la capacità di supportare nativamente il load balancing, per cui possiamo utilizzare questa tecnica per scalare velocemente i server HTTP. Con il load balancing di nginx possiamo distribuire il traffico fra differenti server, definiti in un gruppo nel file “nginx.conf”, in questo modo, ad esempio, se in un particolare momento operativo dobbiamo aggiungere un nuovo webserver al nostro stack LAMP, possiamo semplicemente inserirlo nel gruppo di server gestito dal file nginx.conf. In seguito al reload della configurazione (nginx -s reload), nginx effettuerà le operazioni di load balancing fra tutti i server indicati nel file di configurazione, compreso l’ultimo appena inserito.

Anche l’installazione di nginx è semplicissima e si può effettuare da qualsiasi shell-bash con una sola riga di comando. Nello specifico sulle distribuzioni Ubuntu e Debian scriveremo:

apt-get install nginx

mentre per CentOS, Red Hat Linux Enterprise e Fedora digiteremo:

yum install nginx

Caratteristiche HTTP di base

  • Gestione dei file statici, file di indice, e auto-indicizzazione
  • Reverse proxy con caching
  • Bilanciamento del carico
  • Tolleranza agli errori
  • Supporto SSL
  • Supporto FastCGI con il caching
  • Server virtuali basati su nome ed IP
  • Streaming FLV
  • Streaming MP4, utilizzando il modulo streaming MP4
  • Autenticazione di accesso nelle pagine web
  • Compressione gzip
  • Capacità di gestire più di 10000 connessioni simultanee
  • Riscrittura degli URL
  • Log personalizzato
  • include server-side
  • resistente agli attacchi di Slowloris
  • WebDAV

Nel prossimo articolo inizieremo a vedere in modo dettagliato quali siano le migliori configurazioni.

Rimuovere un pacchetto appeso

apt-getOk, oramai avete acquisito una certa confidenza con la vostra distribuzione Linux preferita, avete imparato ad utilizzare i tanti tool di gestione dei pacchetti compresa l’installazione dei nuove chiavi e source list ma, improvvisamente succede l’imprevisto ed un pacchetto che volevate disinstallre od anche solo aggiornare vi ritorna un messaggio di errore dal tipo :

” E: <nome pacchetto>: il sottoprocesso installato script di post-installation ha restituito lo stato di errore 1 ”

e, nonostante ogni tentativo provato, tra comandi di ogni sorta (apt-get purge ecc…) e pacchetti di gestione (es. synaptic) , nulla funziona.

che cosa fare adesso ??? come togliersi da questo impiccio ???

Bene, una soluzione esiste ed anche piuttosto semplice, bastera’ seguire questi pochi passi :

  • spostarsi nella directory /var/lib/dpkg/info/   # e’ qui che trovate tutti ipacchetti installati
  • cercate il nome del vostro pacchetto con estensione .postrm (es. <nome_pacchetto.postrm>
  • editatelo e, scrivete exit 0 nella seconda riga del file dopo #!/bin/sh
  • ultima operazione # apt-get remove <nome_pacchetto>

….. salvo strani inconvenienti dovreste aver cancellato il pacchetto incriminato.

Buon lavoro !

Postgrey e le Greylist alleati per la lotta allo spam

postgreyLa posta indesiderata è un vero flagello per tutti, peggio ancora lo e’ per le aziende. Adesso, però esiste una nuova arma.

Nonostante la raffinatezza e l’efficacia raggiunte da numerosi sistemi antispam, sempre più spesso questi strumenti si rivelano insufficienti per risolvere il problema della posta indesiderata. I disagi provocati dall’attacco di uno “spammer” riguardano tutti, senza alcuna differenza di sorta, ma assumono proporzioni esagerate in ambito aziendale. Per provare a risolvere il problema ci viene incontro un nuovo strumento, le cosiddette Grey-List. Vediamo di cosa si tratta e come usarle per arginare il fenomeno spam.

Il concetto delle Greylist

Le greylist basano il loro funzionamento sul fatto che la maggior parte degli spammer provano l’invio di un messaggio una volta sola e, in caso di errore, non eseguono le richieste di rinvio del messaggio previste dal protocollo SMTP, in quanto, così facendo, le code di invio delle e-mail crescerebbero a dismisura. Sfruttando questo comportamento, quando un server dotato di greylist riceve un messaggio, per prima cosa controlla se in passato ha già ricevuto dall’indirizzo IP del server corrispondente e dal mittente indicato un’e-mail per il destinatario richiesto. Se il controllo riscontra uno dei valori appena indicati  il server interrompe il collegamento e genera un errore che causa la richiesta di ritrasmissione del messaggio, mentre in caso negativo l’e-mail viene inoltrata normalmente al destinatario. In caso di collegamento interrotto, i server “mittente” correttamente configurati, ritentano l’invio del messaggio (in genere dopo un’attesa di 10 minuti). Questo comporta un ritardo nella consegna del messaggio dell’ordine di qualche decina di minuti solo per il primo messaggio proveniente da un determinato mittente, esclusi quelli in arrivo da alcuni domini di uso abituale che sono già approvati all’interno delle greylist, mentre i messaggi successivi non subiranno alcun ritardo.

Postgrey

In questa piccola guida parleremo di postgrey, un’ implementazione delle greylist per postfix (ma può essere usata con un qualsiasi altro server di posta).

Per installarlo è sufficiente eseguire il comando

# apt-get install postgrey

una volta terminata l’installazione, il demone postgrey sarà in ascolto sulla porta 60000.

Postfix

Per integrare il servizio in Postfix è sufficiente modificare il file /etc/postfix/main.cf. All’interno del file è necessario cercare la direttiva smtpd_recipient_restrictions ed aggiungere, alla fine, la seguente stringa:

check_policy_service inet:127.0.0.1:60000

Nota:
le varie voci relative a smtpd_recipient_restrictions dovranno essere separate da una virgola, e se smtpd_recipient_restrictions non dovesse esistere, sarà necessario aggiungerla nel seguente modo:

smtpd_recipient_restrictions = check_policy_service inet:127.0.0.1:60000

Una volta terminato sara’ sufficiente riavviare Postfix:

# /etc/init.d/postfix restart

e controllare nel file di log /var/log/mail.log le email in arrivo. Si vedrà che alcune verranno rifiutate con un messaggio di postgrey.

Postgrey configurazione

La configurazione di postgrey è modificabile tramite tre file:

1) /etc/defaults/postgrey # che permette la modifica delle opzioni di avvio del demone:

--inet 
permette di specificare l’indirizzo e la porta su cui sarà in ascolto il demone;
--delay 
l’intervallo, in secondi, di durata del rigetto;
--max-age 
dopo quanto tempo rimuovere gli indirizzi che sono stati visti (memoria storica del programma).

Le opzioni vanno inserite nella variabile POSTGREY_OPTS, separate da uno spazio.

2) whitelist_clients

Contiene una lista dei domini da cui greylist non bloccherà la posta.

3) whitelist_recipients 

Contiene una lista di destinatari verso cui non bloccare la posta (ad esempio il postmaster oppure abuse). Normalmente non richiede modifiche.

Conclusione

Sebbene questo sistema sia veramente molto semplice, è in grado di bloccare una buona quantità di spam.

Inoltre, cosa da tenere molto in considerazione, questo è un metodo che difficilmente genera dei falsi positivi (in quanto la risposta del server mail corrisponde ad un “ripassa più tardi”) e non aumenta di molto il carico del sistema.

 

Sovraccarico di rete

sovraccarico_reteCome visto nel precedente articolo “ottimizzare la connessione ad internet” spesso ci si deve destreggiare, con l’aiuto di alcuni tool ad hoc, per poter far funzionare al massimo la nostra connessione di rete. Ma come possiamo capire se tutto sta funzionando per il meglio, o meglio ancora poter capire quale applicazione stia effettivamente consumando piu’ banda.

Tuttavia conosco due utili applicazioni che possono fare al nostro caso, nethogs ed iftop.

 

La prima è Nethogs utile applicazione che monitora ogni tentativo di connessione da parte di qualsiasi software, ed è disponibile nei repository, quindi per installarla ci basterà dare il comando:

sudo apt-get install nethogs

E successivamente digitare da terminale il comando:

sudo nethogs <INTERFACCIA>

Dove al posto di INTERFACCIA inserirete  la vostra interfaccia di rete. Ad esempio la mia è la  wlan0,quindi digiterò :

sudo nethogs wlan0

Con questa applicazione dovreste cosi riuscire a capire quale applicazione si “frega” per così dire, la vostra banda; per completezza si puo’ anche usare, sempre da terminale, un comando quale :

netstat -tanupv

che elenca le connessioni tcp/udp in ascolto o stabilite nel sistema.

Per vedere invece le connessioni attive sul pc utilizzeremo il software iftop, installabile anch’esso tramite repository, e successivamente utilizzabile tramite il comando :

sudo iftop -i <INTERFACCIA>

quindi ….

sudo iftop -i wlan0

Monitorare le connessioni ed il loro utilizzo di banda non sara’ piu’ un problema…!