Nascondi i tuoi segreti – Steganografia

Steganografia - Trova il Codice

Steganografia – Trova il Codice

La steganografia è l’arte e la scienza di scrivere messaggi nascosti in modo che nessuno, a parte il mittente e il destinatario, sospettino l’esistenza del messaggio, una forma di sicurezza attraverso l’occultamento in bella vista di cio’ che vogliamo non venga letto.

Il principio della steganografia

Nascondere dati all’interno di altri in modo che risultino nascosti è il principio della steganografia, una tecnica molto antica che si prefigge l’obiettivo di nascondere dati nella comunicazione tra due o più interlocutori.

Differenza tra steganografia e crittografia

La differenza tra queste due tecniche di sicurezza è importante. Usato per un messaggio, la crittografia si occupa di nasconderne il contenuto; la steganografia invece si occupa di nasconderne l’esistenza ed è quindi considerata una misura ulteriore soprattutto nei casi in cui la sola crittografia possa essere considerata non sufficiente.

Qualche ulteriore dettaglio lo si trova su wikipedia:
http://it.wikipedia.org/wiki/Steganografia

invece, per un approfondimento molto tecnico sulla steganografia si veda il seguente link:
http://www.dia.unisa.it/~ads/corso-security/www/CORSO-0001/Steganografia.htm

 

A cosa mi serve la steganografia

La steganografia consente di tenere lontano da occhi indiscreti contenuti importanti o dati sensibili ed è utilizzabile da coloro che pretendono un grado più elevato di privacy dei dati scambiati o condivisi con terzi.

Ad esempio, se ci pensate, inviare un file criptografato potrebbe mettere subito in allarme un malintenzionato perchè è comunque un file visibile cosi come è visibile che si tratta di un file cifrato quindi fa subito pensare che contenga segreti da rubare.
Nascondere invece un insieme di files dentro una sola immagine non fa scattare nessun allarme perchè ad occhio nudo non si vede che una banale normalissima immagine.

In una ipotetica discussione con scambio di files importanti, solo gli autorizzati e coloro che sono al corrente dell’occultamento operato nonchè solo coloro che dispongono della opportuna password potranno visualizzare i contenuti protetti.

Il concetto su cui si basa la steganografia dunque è racchiuso nel suo stesso nome che deriva dai termini greci stèganos (“nascosto”) e gràfein (“scrittura”): questa tecnica si pone di fornire un certo livello di sicurezza mediante segretezza.
I software steganografici più validi pero’ non si limitano semplicte a nascondere il messaggio da proteggere all’interno di una certa tipologia di file ma aggiungono una difesa in più, data dall’uso della crittografia sul testo in chiaro.

E ora diamo uno sguardo a tre programmi open source per Linux , ed uno specifico per Windows, che è possibile utilizzare per giocare con questa metodologia di scambio informazioni: Steghide & Outguess che sono completamente open ed uno con sorgenti chiusi Steg, mentre il tool per sistemi Windows si chiama OpenPuff.

Steghide
Steghide è un programma di steganografia che è in grado di nascondere i dati in vari tipi di immagine e file audio. I colori campione e le frequenze non vengono modificate rendendo così il file resistente in caso di test statistici.

Caratteristiche :

  • compressione di dati incorporati
  • crittografia dei dati incorporati
  • incorporamento di un checksum per verificare l’integrità dei dati estratti
  • supporto per JPEG, BMP, WAV e AU file
  • L’ultima versione di questo software è 10 anni, quindi non è esattamente somethign nuovo, ma le notizie teh buona è che si dovrebbe trovare nella repositoy di qualsiasi distribuzione, in modo da installare con il vostro gestore di pacchetti come yum, apt o emerge.

Uso base
Prima di iniziare assicuratevi di avere un immagine adatta per nascondere le informazioni in essa e le informazioni che si desidera nascondere in un file .txt. In questo esempio io ho i file di esempio, di nome myimage.jpg e mysecret.txt nella mia cartella home. Dopo che avro’ installato Steghide posso aprire un terminale e digitare:

Nascondere testo in immagini:

steghide embed -ef mysecret.txt -cf myimage.jpg

Questo chiederà di inserire una passphrase due volte.
Oppure, nel caso in cui non si desideri modificare l’immagine originale è possibile utilizzare:

steghide embed -ef mysecret.txt -cf myimage.jpg -sf myNEWimage.jpg

E per estrarre le informazioni dall’immagine è possibile utilizzare:

steghide extract -sf myimage.jpg

Questo comando estrarrà il file txt nella directory in cui è stato eseguito il programma.

Come ultima cosa è importante notare che le immagini o i file audio possono contenere un numero massimo determinato di kb di informazioni nascoste e per capire di quanti kb dispone una determinata immagine o file audio basta dare il comando:

steghide info myimage.jpg

e si riceverà un output simile a questo:

steghide info myimage.jpg

“myimage.jpg”:
format: jpeg
capacity: 3.5 KB
Try to get information about embedded data? (y/n)

Outguess
OutGuess è uno strumento steganografico universale che consente l’inserimento di informazioni nascoste nei bit ridondanti di sorgenti di dati. La natura della sorgente dei dati è irrilevante per OutGuess. Il programma si basa sui gestori di dati specifici che estraggono i bit ridondanti e li scrivono di nuovo dopo la modifica.

Outguess utilizza un oggetto generico iteratore per selezionare quali bit nei dati devono essere modificati. Un seme può essere usato per modificare il comportamento del iteratore e viene incorporato nei dati insieme con il resto del messaggio. Alterando il seme, outguess tenta di trovare una sequenza di bit che minimizza il numero di variazioni dei dati che devono essere effettuate.

Inoltre, permette di indovinare il nascondiglio di due messaggi distinti nei dati, fornendo così un plausibile livello di sicurezza. Si registra i bit che sono stati modificati in precedenza e li blocca.

Nascondere testo in immagini:
Per nascondere:
outguess -k "miapassword" -d testo.txt immagine.jpg output.jpg
Per leggere:
outguess -k "miapassword" -r output.jpg decifrato.txt

Recupero dei dati

È possibile recuperare i dati da un’immagine nel seguente modo:

outguess -k "miapassword" -r myoutput.jpg mysecret.txt

Reading out.jpg….
Extracting usable bits: 43283 bits
Steg retrieve: seed: 198, len: 141

Steg
Vuoi un software facile da usare, ma che non consente di sapere che cosa sta facendo esattamente? Allora vi consiglio di provare ad usare Steg ,un ottimo programma anche se closed source !

Steg è un software cross-platform e portatile, scritto in C ++. Utilizza tecniche di steganografia e crittografia per nascondere le informazioni all’interno di immagini compressi e non compressi. I formati di immagine supportati sono JPEG (JPG), TIFF, PNG, BMP . Con la sua semplice interfaccia grafica è possibile regolare i parametri della steganografia, valutare le immagini artefatte e usare sia la crittografia a chiave simmetrica che a chiave asimmetrica. Dati arbitrari possono essere nascosti in un file archivio compresso ed è anche possibile aggiungere un commento di testo.

Steg gira su GNU/Linux, Microsoft Windows e Apple Mac OS X, e si può scaricare direttamente dal sito ufficiale .

Il fatto di avere una interfaccia grafica e di poter supportare molti più formati dei programmi precedenti rende questo software molto più user friendly degli altri, che lavorano solo a riga di comando.

OpenPuff
OpenPuff è un software freeware sviluppato e distribuito da un programmatore italiano che, tra l’altro, ne fornisce anche il codice sorgente. L’autore Cosimo Oliboni presenta la sua applicazione utilizzando lo slogan “yet not another steganography software“, a rimarcare il fatto che OpenPuff contiene una serie di funzionalità “esclusive” che lo distinguono dai tanti programmi steganografici disponibili in Rete.

OpenPuff, innanzi tutto, è compatibile con tutte le versioni di Windows, non necessita di un account dotato di diritti amministrativi per essere avviato (non provoca neppure la comparsa degli avvisi di UAC) ed è portabile. A tal proposito, va sottolineato che dopo aver estratto il contenuto dell’archivio compresso di OpenPuff e fatto doppio clic sul suo eseguibile, il programma si avvierà immediatamente senza aggiungere alcun tipo di informazione nel registro di Windows ed astenendosi dal creare o modificare qualunque file sul disco fisso. Il software provvede ad acquisire i file indicati dall’utente, li cifra utilizzando uno degli algoritmi supportati quindi ne salva una o più porzioni in più file di vario genere (BMP, JPG, PNG, MP3, WAV, MP4, MPG, FLV, SWF, PDF,…). Questi ultimi vengono definiti “carrier files” dal momento che sono utilizzati come “contenitori” per il trasporto delle informazioni sensibili.

Anche l’uso di OpenPuff, come per Steg, e’ completamente grafico quindi sara’ di sicuro conforto per chi non e’ pratico di terminali e righe di comando. Il tool e’ sicuramente da provare quindi fateci un giro.

Torino sempre piu’ Linux style

comune_torinoQuesta volta, dopo l’articolo apparso su “Repubblica” lo scorso Agosto, tocca al quotidiano di Torino “La Stampa” dire la sua riguardo un tema molto importante per il comune Piemontese .

Da “La STampa” del 15/09/2014

Torino taglia i ponti con Microsoft e risparmierà 6 milioni di euro

Rivoluzione informatica: i computer comunali funzioneranno con sistemi operativi liberi.

Torino taglia i ponti con la Silicon Valley e risparmia 6 milioni di euro in cinque anni passando a Linux. A liberare gli 8300 computer comunali dai sistemi operativi e dalle licenze Microsoft è il Csi ma a vigilare sulla rivoluzione informatica sarà la «community». La campagna dei torinesi promotori dell’open source è diventata pubblica ieri ai Murazzi nel primo «Cyberia Day» con un padrino d’eccezione: Richard Stallman, il guru americano del software libero.

Primi in Italia

«Con questa rivoluzione Torino diventerà il primo grande Comune italiano libero dai costi delle licenze informatiche. Questo si tradurrà non solo in un grande ritorno economico, stimato in 6 milioni di euro, ma anche in un vantaggio nella gestione dei servizi», afferma Enzo Lavolta, assessore alle Politiche per l’innovazione e lo sviluppo, ospite dell’evento organizzato ieri da Arci sulle sponde del Po. «La migrazione è stata affidata al Csi e prevede, entro 18 mesi, la virtualizzazione delle macchine, ovvero il salvataggio di tutti i dati in una memoria comune ed, entro il 2019, il cambio definitivo di sistema operativo, da Windows a Ubuntu».

Secondo l’assessore «i dipendenti comunali hanno reagito bene alla notizia. Molti conoscono già e utilizzano regolarmente programmi come Open Office e non mancheremo di organizzare corsi. La piattaforma che gestisce il wi-fi gratuito in città e quella del sistema elettorale sono già software libero». Passi importanti in vista della Città Metropolitana, sotto l’egida della Regione che «attraverso il Csi cercherà di creare un ruolo di accompagnamento su tutto il territorio, coordinando le iniziative anche di altre città» dichiara l’assessore ai Diritti civili Monica Cerutti.


Cittadini controllori

Ma chi controllerà sull’attuazione? A non credere nelle forze del Csi è il collettivo cittadino Cyberia, fondato dall’informatico torinese Stefano Cannillo, che si propone «non solo di vigilare sulla rivoluzione informatica di Palazzo Civico, ma anche si sostenerla attivamente. Noi non siamo certificati per essere dei formatori ma ci offriamo volontariamente come informatori verso i Comuni e i loro dipendenti per far capire loro che non si tratta solo di un risparmio economico».

A dare la sua benedizione è Richard Stallman, l’anti Steve Jobs profeta del Free Software, che ha definito Microsoft e Apple «mostruosi motori di sorveglianza e dipendenza». «Nessuno di noi è libero – sostiene Stallman – finché usa software e servizi creati da aziende private che sottostanno al controllo dei governi».

…come tutti i progetti di questa importanza molto dipendera’ da chi e da come verra’ gestito il progetto nel tempo, quindi non ci resta che aspettare e tifare per Torino che da in mano al CSI Piemonte  (l’ente strumentale della Pubblica Amministrazione Regionale in campo informatico e telematico), il futuro della propria gestione amministrativo/informatica.
Good LUCK !

DB fate largo ai No-SQL

nosql_logoI Database NoSQL

NO-SQL è un movimento che negli ultimi anni si è molto affermato, producendo dei risultati soddisfacenti con la creazione di progetti e iniziative utilizzate anche su larga scala. Tale movimento vuole “rompere” la storica linea dei database relazionali e definire delle nuove linee guida per l’implementazione di database che non utilizzano il linguaggio di interrogazione SQL e non siano strettamente legati ad una definizione “rigida” dello schema dati.
La filosofia del NO-SQL si può riassumere nei seguenti punti, partendo dalla domanda “Perchè avere altri DBMS se esistono quelli relazionali?”:

  1. I database relazionali sono troppo costosi e spesso, quelli che svolgono bene il loro lavoro, sono solo commerciali. NO-SQL abbraccia totalmente la filosofia open-source;
  2. NO-SQL è semplice da usare e non occorre uno specialista di DBMS. Il paradigma di programmazione è, infatti, ad oggetti;
  3. I dati sono altamente portabili su sistemi differenti, da Macintosh a DOS;
  4. Non definisce uno schema “rigido” (schemaless) e non occorre prototipare i campi, per cui non esistono limiti o restrizioni ai dati memorizzati nei database NO-SQL;
  5. Velocità di esecuzione, di interrogazione di grosse quantità di dati e possibilità di distribuirli su più sistemi eterogenei (replicazione dei dati), con un meccanismo totalmente trasparente all’utilizzatore;
  6. I DBMS NO-SQL si focalizzano su una scalabilità orizzontale e non verticale come quelli relazionali.

A questo punto passiamo a fare una comparazione tra quelli che attualmente sono tra i piu’ utilizzati , quali :

Cassandra, MongoDB, CouchDB, Redis, Riak, HBase, Membase e Neo4j :

** (vedi anche precedente articolo Not Only Sql)
– CouchDB

Scritto in: Erlang
Punto principale: Consistenza DB consistency, facilità d’uso
Licenza: Apache
Protocolli: HTTP/REST
Replicazione bidirezionale continua o ad-hoc con individuazione dei conflitti, replicazione master-master
MVCC – le operazioni di scrittura non bloccano le letture
Sono disponibili le versioni precedenti dei documenti
Progettazione crash-only (reliable)
Necessità di compattazioni nel tempo
Viste: embedded map/reduce
Viste formattate: lists & shows
Possibilità di validazione server-side dei documenti
Possibile autenticazione
Aggiornamenti real-time attraverso _changes (!)
Gestione degli allegati e, CouchApps (standalone js apps)
libreria jQuery inclusa
Utilizzo ideale: Per accumulazione dei dati con cambi occasionali sui quali vengono eseguite query predefinite. Situazioni in cui la gestione delle versioni è importante.
Per esempio: CRM, sistemi CMS. Situazioni in cui la replicazione master-master è una caratteristica interessante (ad esempio multisito).

– Redis

Scritto in: C/C++
Punto principale: Velocità
Licenza: BSD
Protocolli: Telnet-like
Disk-backed in-memory database,
In questo momento non include il disk-swap (VM e Diskstore sono stati abbandonati)
Replicazione master-slave
Recupero di valori semplici o intere tables a partire da una chiave
suppporto ad operazioni complesse come ZREVRANGEBYSCORE.
INCR (incremento) e  simili (molto utili per gestire limitazioni di valore e statistiche)
permette l’uso di insiemi (sets) e operazioni su essi (unione/differenza/intersezione)
permette l’uso di liste (lists) e  operazioni su esse (queue; blocking pop)
permette l’uso di hashes (oggetti dotati di campi)
permette l’uso di insiemi ordinati (utili per classifiche, e ricerche su range di valori)
Redis implementa correttamente le transazioni (!)
I valori memorizzati possono avere una scadenza temporale (sistemi di cache)
Implementa facilmente il messaging Publisher/Subscriber (!)
Utilizzo ideale: Adatto a moli di dati (residenti in memoria) di dimensione nota che cambiano frequentemente .
Per esempio: Quotazioni azionistiche. Analisi. Gestione dati in Real-time. Comunicazioni in Real-time.

– MongoDB

Scritto in: C++
Punto principale: Mantiene alcune proprietà utili del modello SQL (Query, index) molto facili da usare.
Licenza: AGPL (Drivers: Apache)
Protocollo: Specifico, binario (BSON)
Replica Master/slave (munita di  failover quando si usano i  “replica sets”)
Lo Sharding è parte integrante del sistema
Le intterrogazioni a db (queries) sono espressioni javascript
Permette l’uso di funzion i javascript lato server
Update-in-place migliore rispetto a CouchDB
Usa “memory mapped files” per la persistenza dei dati
Favorisce la velocità rispetto alle funzionalità implementate
Journaling (opzione –journal) fortemente consigliato
Sui sistemi a 32bit risente di una  limitazione sulla quantità di dati a circa 2.5Gb
Un database vuoto occupa comunque 192Mb
GridFS per la memorizzazione di “big data + metadata” (effettivamente non è un  FS)
Indicizzazione geospaziale Geospatial indexing
Utilizzo ideale: se si necessita di query dinamiche. Se si preferisce lavorare con gli indici rispetto ad usare algoritmi map/reduce. Buono se si ha bisogno di velocità quando si lavora con grandi moli di dati.  Adatto a tutti gli scenari in cui si usa CouchDB e non si può scegliere quest’ultimo perchè i dati cambiano troppo riempiendo la memoria fisica.
Per esempio: tutte le situazioni in cui si vorrebbe usare MySQL o PostgreSQL senza avere colonne definite a priori.

– Riak

Scritto in: Erlang & C, some Javascript
Punto principale: Fault tolerance
Licenza: Apache
Protocollo: HTTP/REST o custom binary
Trade-offs modulabili per replica e distribuzione (N, R, W)
Hooks di pre- e post-commit in JavaScript o Erlang, per la validazione e la sicurezza.
Map/reduce in JavaScript o Erlang
Links & link walking per utilizzarlo come database a grafi
Indici secondari: ricerca nei metadati
Supporto per oggetti di grandi dimensioni (Luwak)
Edizioni sia “open source” che “enterprise”
Ricerca full-text, indexing e querying con il Riak Search server (beta)
Sta migrando lo storing di backend da “Bitcask” al “LevelDB” di Google
La multi-site replication replication senza alcun master e il monitoring SNMP necessitano di una licenza commerciale
Utilizzo ideale: se si vuole qualcosa di simile a Cassandra (Dynamo), ma non si ha nessuna intenzione di avere a che fare con la realtiva inerente complessità. Se si ha bisogno di un’ottima scalabilità, disponibilità e fault-tolerance per un solo sito ma si è disposti a pagare per la replica multi-sito.
Per esempio: Raccolta dei dati di point-of-sales. Sistemi di controllo aziendali. Situazioni in cui anche il downtime di alcuni secondi può essere rilevante. Potrebbe essere anche utilizzato come un web server estremamente aggiornabile.

– Membase

Scritto in: Erlang & C
Punto principale: Compatibile con memcache ma con persistenza e clustering
Licenza: Apache 2.0
Protocollo: memcached con estensioni
Accesso molto veloce ai dati mediante chiave (200k+/sec)
Persistenza su disco
Tutti i nodi sono identici (replicazione master-master)
Fornisce un sistema a buckets simile a memcached
De-duplicazione delle scritture per ridurre IO
Interfaccia GUI per la gestione dei cluster molto interessante
Aggiornamento software senza mettere offline il database
Proxy di connessione per il pooling e il multiplexing (Moxi)
Utilizzo ideale: Qualsiasi applicazione dove un bassa latenza dell’accesso ai dati, un’alta concorrenzialità e un’alta disponibilità degli stessi sono requisiti chiave.
Per esempio: Casi in cui c’è necessità di bassa latenza come l’erogazione di servizi di pubblicità mirata (ad targeting)  o alta concorrenza come il giochi online (per esempio Zynga).

– Neo4j

Scritto in: Java
Punto principale: Database a grafi o dati connessi
Licenza: GPL, salcune caratterstiche con AGPL/commerciale
Protocollo: HTTP/REST (o incluso in  Java)
Standalone, o includibile nelle applicazioni Java
Piena conformità ACID (incluso i dati durable)
Sia i nodi che le releazioni possono avere dei metadati
Linquaggio di query basato su pattern-matching (“Cypher”)
Può anche essere usato il linguaggio di attraversamento dei gravi “Gremlin”
Indicizzazione dei nodi, delle chiavi e delle relazioni
Piacevole interfaccia di amministrazione web
Sono disponibili diversi algoritmi di ricerca dei percorsi
Ottimizzato per le letture
Ha le transazioni (nelle API Java)
Si può usare il linguaggio di scripting Groovy
Backup online, monitoraggio avanzato e alta disponibilità con licenza AGPL/commerciale
Utilizzo ideale: Per dati interconnessi, semplici o complessi, con struttura a grafo. In questo senso Neo4j is è un po’ diverso dagli altri database noSQL.
Per esempio: Relazioni sociali, collegamenti nei trasposti pubblici, mappe di strade, topologie di rete.

– Cassandra

Scritto in: Java
Punto principale: Migliore di BigTable e Dynamo
Licenza: Apache
Protocollo: Proprietario, binario (Thrift)
Distribuzione e replicazione attivabile (N, R, W)
Query possibili mediante colonne e insiemi di chiavi
Carattersitiche simili a BigTable: colonne, famiglie di colonne
Indici secondati
La scrittura è molto più veloce della lettura(!)
Mappatura e riduzione possibile mediante Apache Hadoop
I admit being a bit biased against it, because of the bloat and complexity it has partly because of Java (configuration, seeing exceptions, etc)
Utilizzo ideale: Quando si scrive più che leggere (logging). Se ogni componente del sistema deve essere in Java.
Per esempio: Sistemi bancari e industria finanziaria.
Inoltre, siccome le scritture sono più veloci delle letture, una nicchia naturale è l’analisi dei dati in tempo reale.

– HBase

Scritto in: Java
Punto principale: miliardi di righe con milioni di colonne
Licenza: Apache
Protocollo: HTTP/REST (anche Thrift)
Modellato dopo BigTable
Mappatura e riduzione con Hadoop
Costrutti query push down attraverso scansione lato server e con filtri per il get
ottimizzazione per le query in tempo reale
E’ un gateway Thrift con alte performance
HTTP supports XML, Protobuf, and binary
Cascading, hive, and pig source and sink modules
Shell basata su Jruby (JIRB)
Punti di ripristino multipli
Rolling restart for configuration changes and minor upgrades
L’accesso random ai dati è paragonabile a quello di MySQL
Utilizzo ideale: Se siete innamorati di BigTable.   e quando c’è la necessità di un accesso in lettura e scrittura, random e in tempo reale alla grande quantità di dati.
Per esempio: il database dei messaggi in Facebook.

 

La scelta e’ davvero varia a seconda del compito che vi serve maggiormente venga svolto dal DB che avrete prescelto, quindi perche’ non provarli ?

Catturare il traffico di rete

redirectRedirect fai da te

Molte volte vi capitera’ (ed a me e’ capitato piu’ volte) di aver bisogno di gestire il traffico di rete ottimizzandolo, filtrandolo e redirezionandolo.
Si pensi, ad esempio, ai test di sviluppo effettuati sulle molte VM in cui si deve tenere conto della quantita’ di Server interessati e del carico di rete da gestire bilanciando quest’ultimo e gestendo le porte interessate.

In questo articolo illustrero’ alcuni dei migliori tra quelli da me usati in ambito OpenSource sono, Rinetd, LVS e Pound, ma l’elenco potrebbe ancora allungarsi, magari per un seguito.

PARTIAMO

rinetd

E’ il piu’ semplice dei tre, dunque partiremo da questo; esso permette di ridirigere una destinazione TCP, definita attraverso una coppia <indirizzo-ip>:<numero-di-porta>, presso un’altra coppia di questi valori. Lo scopo di questo può essere semplicemente quello di dirigere una porta locale verso un’altra porta locale, oppure si può arrivare a intercettare il traffico IP che attraversa un router in modo da ridirigere alcune coppie di indirizzi e porte presso altre destinazioni.

Tutto è composto semplicemente da un daemon, rinetd, che si avvale di un file di configurazione, /etc/rinetd.conf, nel quale si indicano semplicemente le ridirezioni da applicare.

La presenza in funzione di rinetd è incompatibile con altri daemon che stanno in ascolto delle stesse porte che devono essere ridirette, anche se queste sono intese appartenere a host differenti.

Il programma rinetd è il demone che si occupa di ridirigere il traffico TCP in base a quanto contenuto nel file di configurazione /etc/rinetd.conf
E' sufficiente avviarlo e, se il file di configurazione risultera'corretto, iniziare subito a lavorarci. All'avvio, dopo aver letto la configurazione, rinetd deve poter stare in ascolto dell'indirizzo da ridirigere e della porta relativa; qualunque sia l'indirizzo in questione, è necessario che non ci sia già un programma locale che fa la stessa cosa su quella stessa porta; per esempio, non si può tentare di ridirigere il servizio HTTP di un indirizzo qualunque, se questo è presente localmente.

Un esempio di configurazione del file rinetd.conf dovrebbe essere sufficiente a chiarire le idee su questo file. Supponiamo di voler dirottare il traffico diretto verso l’indirizzo IP 10.11.12.13 alla porta 80, in modo che questo vada verso l’indirizzo IP 192.168.1.7, alla porta 80.

120.121.122.123 80 192.168.1.7 80

L’indirizzo da ridirigere, può appartenere a un’interfaccia del nodo presso cui si trova in funzione il demone rinetd,
oppure no, purché i pacchetti diretti a tale indirizzo transitino attraverso il nodo che attua la ridirezione.
Se si vuole apprendere il funzionamento di rinetd senza disporre di una rete vera e propria, basta una direttiva di configurazione simile a quella seguente:

localhost 8888 localhost html

In questo modo, la porta locale 8888 viene ridiretta sulla porta del servizio HTTP (80). Se il servizio HTTP è attivo, si può verificare la ridirezione con un programma di navigazione qualunque, puntando all’URL

http://localhost:8888

Rispetto ai prossimi due tool rinetd non e’ in grado di fungere anche come LoadBalancer.


ipvsadm

Questo servizio aggiorna la tabella d’instradamento IPVS nel kernel. Il demone lvs imposta e gestisce Load Balancer Add-On richiamando ipvsadm per aggiungere, modificare e cancellare le voci all’interno della tabella d’instradamento IPVS. Inoltre ipvsadm fa parte del paccheto LVS  che è una soluzione di bilanciamento del carico avanzato per sistemi Linux.
Si tratta di un progetto open source avviato da Wensong Zhang nel lontano 1998. La missione del progetto è di costruire un server ad alte prestazioni e ad alta disponibilità per Linux utilizzando tecnologie di clustering, offrendo una buona scalabilità, affidabilità e facilità di manutenzione. L’opera principale del progetto LVS è ora quello di sviluppare un software avanzato di bilanciamento del carico IP (IPVS), ed un software di bilanciamento a livello dell’applicazione (KTCPVS), ed i componenti di gestione dei cluster.

Ipvs in pratica

IPVS (IP Virtual Server) implementa un bilanciatore di carico a livello Layer 4 della rete. IPVS in esecuzione su un host si comporta come un sistema di bilanciamento del carico di fronte ad un insieme di server reali in cluster, può indirizzare le richieste per servizi basati si TCP/UDP ai veri server, e fa apparire i servizi dei server reali come un unico servizio virtuale su un unico indirizzo IP.

La componente IPVS è presente in tutti i recenti Kernel, per installare la componente in user-space utilizzate il vostro gestore di pacchetti, ad esempio in Ubuntu:

aptitude install ipvsadm

a questo punto si può creare uno script da far avviare al boot. Io di solito inserisco i comandi all’interno del file
/etc/rc.local.

Prima di tutto dobbiamo resettare l’attuale configurazione con il comando:
ipvsadm -C
Dopodiché iniziamo a dare le regole con i comandi come nell’esempio qui sotto in cui diciamo che le chiamate TCP (parametro -t) all’indirizzo 192.168.10.100 sulla porta 5060 (quella per il protocollo SIP) debbano essere inoltrate alla stessa porta dell’indirizzo 192.168.10.250.  Per reindirizzare una chiamata UDP sostituire il -t con -u.
ipvsadm -A -t 192.168.10.100:5060 -s rr

ipvsadm -a -t 192.168.10.100:5060 -r 192.168.10.250:5060 -m

Naturalmente è possibile catturare il traffico su una porta e inoltrarla ad un’altra con un comando tipo questo:
ipvsadm -A -t 192.168.10.100:88 -s rr
ipvsadm -a -t 192.168.10.100:88 -r 192.168.10.250:80 -m
In questo caso non abbiamo fatto altro che prendere le chiamate alla porta 88 dell’indirizzo 192.168.10.100 e rinviarle al server web dell’IP 192.168.10.250 sulla normale porta 80

Metodi di bilanciamento utilizzati da LVS

In caso si desideri testare il funzionamento di LVS senza la necessita’ di monitorare i servizi e possibile aggiungere e rimuovere nodi con il comando ipvsadm:

ipvsadm -C
ipvsadm -A -t 10.2.1.164:8080 -s lc
ipvsadm -a -t 10.2.1.164:8080 -r 10.2.1.166 -g
ipvsadm -a -t 10.2.1.164:8080 -r 10.2.1.165 -g

Le opzioni utilizzate nelle linee di comando di ipvsadm per l’esempio riportato sono le seguenti:

-C, –clear: cancella la tabella del virtual server.
-A, –add-service: crea un servizio virtuale.
-a, –add-server: aggiunge un nodo ad un servizio virtuale.
-t, –tcp-service: specifica indirizzo ip e numero di porta tcp del servizio virtuale.
-s, –scheduler: specifica l’algoritmo di bilanciamento
-r, –real-server: specifica l’indirizzo ip del nodo reale
-g, –gatewaying: indica il metodo di forwarding direct routing (LVS-DR)

** algoritmi per il bilanciamento che possiamo usare con LVS.

Statici:

– Round Robin

– Weighted Round Robin

– Destination Hashing

– Source Hashing

Dinamici:

– Least-Connection

– Weighted least-connection

– Never queue

– Locality-based least-connection

– Locality-based least-connection with replication scheduling

– Shortest expected delay


pound

Pound è un proxy server di bilanciamento del carico inverso. Accetta richieste da HTTP / HTTPS clienti e li distribuisce a uno o più server web. Le richieste HTTPS vengono decifrati e passati al back-end come semplice protocollo HTTP.

Se più di un server back-end è definita, Pound sceglie uno di loro a caso, sulla base delle priorità definite. Per impostazione predefinita, Pound tiene traccia di associazioni tra client e server back-end (sessioni).

General Principles

In generale, Pound ha bisogno di tre tipi di oggetti definiti, al fine di funzione: ascoltatori , i servizi e back-end .

Ascoltatori
Un ascoltatore è una definizione di come Pound riceve le richieste dai client (browser). Due tipi di ascoltatori può essere definito: normale connessione HTTP ascoltatori e HTTPS (HTTP su SSL / TLS) ascoltatori . Per lo meno un ascoltatore deve definire l’indirizzo e la porta per l’ascolto su, con ulteriori requisiti per HTTPS ascoltatori .

Servizi
Un servizio è la definizione di come le domande trovano risposta. Il servizio può essere definito all’interno di un ascoltatore o al livello superiore (globale). Quando viene ricevuta una richiesta Pound tenta di far corrispondere a ciascun servizio , a sua volta, a partire dai servizi definiti nel ascoltatore stesso e, se necessario, di proseguire con l’ servizi definiti a livello globale. I servizi possono definire le proprie condizioni al quale le domande si può rispondere: in genere si tratta certo URL (solo foto, o un certo percorso) o intestazioni specifiche (come ad esempio l’intestazione Host). Un servizio può anche definire una sessione meccanismo: se definito le richieste future da un determinato cliente sarà sempre la stessa risposta da parte di back-end .

Back-end
Il back-end sono i server reale per il contenuto richiesto. Di per sé, Pound fornisce nessuna risposta – tutti i contenuti devono essere ricevuti da un vero e proprio “web server”. Il back-end definisce come il server dovrebbe essere contattato.

Tre tipi di back-end può essere definito: un “regolare” back-end che riceve le richieste e le risposte restituisce, un “redirect” back-end in questo caso, Pound risponde con una risposta redirect, senza l’accesso a qualsiasi back-end a tutti , o una “emergenza” back-end che sarà usato solo se tutti gli altri backend sono “morti”.

Multiple back-end può essere definito all’interno di un servizio , nel qual caso Pound sarà bilanciamento del carico tra i disponibili back-end .

Se un back-end non riesce a rispondere, sarà considerato “morto”, nel qual caso Pound si ferma l’invio di richieste ad esso. Dead indietro _ e NDS sono periodicamente controllate per la disponibilità, e una volta che rispondono ancora sono “resurected” e le richieste sono inviati di nuovo la loro strada. Se non back-end sono disponibili (nessuno è stato definito, o sono tutti “morti”), allora Pound risponderà con “503 Servizio non disponibile”, senza verificare ulteriori servizi .

Il collegamento tra Pound e il back end- è sempre via HTTP, a prescindere dal protocollo utilizzato tra Pound e il cliente.

Installazione

sudo apt-get install pound

La gestione completa del servizio avviene tramite la configurazione del file /etc/pound/pound.cfg
Esempio 1:

Semplice configurazione HTTP Proxy
Supponiamo di forwardare le richieste http che arrivano dall”IP pubblico 202.54.10.5 all’IP sulla LAN 192.168.1.5 su cui è configurato un web server Apache sulla porta 8080.
Editiamo il file di configurazione di pound di una distro Debian/Ubuntu:

vim /etc/pound/pound.cfg

Questo è l’aspetto del file:

ListenHTTP
Address  202.54.10.5
Port          80
Service
BackEnd
Address  192.168.1.5
Port           8080
End
End
End

Salvare e chiudere il file e restartare Pound:

/etc/init.d/pound restart

Esempio 2
Semplice configurazione HTTP & HTTPS Proxy
In questo esempio vediamo come “proxare” una richiesta http e https dallo stesso IP pubblico 202.54.10.5 a due web server 192.168.1.5 e 192.168.1.6, entrambi sulla porta 80:

ListenHTTP
Address  202.54.10.5
Port          80
End

ListenHTTPs
Address   202.54.10.5
Port           443
Cert           “/etc/ssl/local.server.pem” -–>percorso certificato ssl
End

Service
BackEnd
Address     192.168.1.5
Port              80
Priority       1
Backend
Address     192.168.1.6
Port              80
Priority       3
End
End

Salviamo il file di configurazione e restartiamo pound.

In questo esempio le richieste alla porta 80 all’ ip 202.54.10.5  vengono inoltrate alla porta 80 del webserver 192.168.1.5, mentre le richieste alla porta 443 dall’ ip 202.54.10.5 vengono inoltrate alla porta 80 del web server 192.168.1.6  e in questo caso pound gestisce il certificato ssl, che è possibile generarsi senza alcuna modifica nel backend del web server, che continua a gestire chiamate in http.

PS: e’ possibile inoltre impostare una priorità di inoltro del traffico differente, nel caso si disponga di più server web, cosi’ come indicato dalla voce “Priority” presente nella configurazione del secondo esempio; minore è la cifra, maggiore sarà la priorità assegnata al server.

Buon divertimento !